From e9c4bc1eb1908829322337def9bbe9f7d5c4beba Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Tue, 21 Sep 2021 18:14:12 -0700 Subject: [PATCH 01/52] Add benchmarking for parachain runtime paras pallet (#3888) * Crate basic barebones benchmarking infrastructure for paras * Fill in benchmarking contents * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_paras.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs * Use autogenerated WeightInfos for kusama and westend * cargo fmt * Use saturating_sub * Add missing import * Try and hit the worst possible time complexity as much as possible * cargo fmt * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_paras.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs * Add a MAX_HEAD_DATA_SIZE constant * Prefill vectors with sample data for worst case complexity * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_paras.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::paras --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs * Improve comment on SAMPLE_SIZE constant Co-authored-by: Parity Bot --- primitives/src/v1/mod.rs | 7 + runtime/common/src/integration_tests.rs | 1 + runtime/common/src/paras_registrar.rs | 1 + runtime/kusama/src/lib.rs | 3 + runtime/kusama/src/weights/mod.rs | 1 + .../src/weights/runtime_parachains_paras.rs | 106 ++++++++++++++ runtime/parachains/src/configuration.rs | 10 +- runtime/parachains/src/mock.rs | 1 + runtime/parachains/src/paras.rs | 25 +++- runtime/parachains/src/paras/benchmarking.rs | 135 ++++++++++++++++++ runtime/parachains/src/paras/weights.rs | 97 +++++++++++++ runtime/rococo/src/lib.rs | 1 + runtime/test-runtime/src/lib.rs | 1 + runtime/westend/src/lib.rs | 3 + runtime/westend/src/weights/mod.rs | 1 + .../src/weights/runtime_parachains_paras.rs | 106 ++++++++++++++ 16 files changed, 493 insertions(+), 6 deletions(-) create mode 100644 runtime/kusama/src/weights/runtime_parachains_paras.rs create mode 100644 runtime/parachains/src/paras/benchmarking.rs create mode 100644 runtime/parachains/src/paras/weights.rs create mode 100644 runtime/westend/src/weights/runtime_parachains_paras.rs diff --git a/primitives/src/v1/mod.rs b/primitives/src/v1/mod.rs index e32fb68f79db..40ca368fc6e9 100644 --- a/primitives/src/v1/mod.rs +++ b/primitives/src/v1/mod.rs @@ -237,6 +237,13 @@ pub const ASSIGNMENT_KEY_TYPE_ID: KeyTypeId = KeyTypeId(*b"asgn"); /// * when detecting a code decompression bomb in the client pub const MAX_CODE_SIZE: u32 = 3 * 1024 * 1024; +/// Maximum head data size we support right now. +/// +/// Used for: +/// * initial genesis for the Parachains configuration +/// * checking updates to this stored runtime configuration do not exceed this limit +pub const MAX_HEAD_DATA_SIZE: u32 = 1 * 1024 * 1024; + /// Maximum PoV size we support right now. /// /// Used for: diff --git a/runtime/common/src/integration_tests.rs b/runtime/common/src/integration_tests.rs index c0e1615599e7..03d457b5c00b 100644 --- a/runtime/common/src/integration_tests.rs +++ b/runtime/common/src/integration_tests.rs @@ -165,6 +165,7 @@ impl shared::Config for Test {} impl paras::Config for Test { type Origin = Origin; type Event = Event; + type WeightInfo = paras::weights::WeightInfo; } parameter_types! { diff --git a/runtime/common/src/paras_registrar.rs b/runtime/common/src/paras_registrar.rs index ee595cd0df05..448bc5092403 100644 --- a/runtime/common/src/paras_registrar.rs +++ b/runtime/common/src/paras_registrar.rs @@ -657,6 +657,7 @@ mod tests { impl paras::Config for Test { type Origin = Origin; type Event = Event; + type WeightInfo = paras::weights::WeightInfo; } impl configuration::Config for Test { diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 86ef70dc9838..8c7b8e094904 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1149,6 +1149,7 @@ impl parachains_inclusion::Config for Runtime { impl parachains_paras::Config for Runtime { type Origin = Origin; type Event = Event; + type WeightInfo = weights::runtime_parachains_paras::WeightInfo; } parameter_types! { @@ -2050,6 +2051,7 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, runtime_common::slots, Slots); list_benchmark!(list, extra, runtime_common::paras_registrar, Registrar); list_benchmark!(list, extra, runtime_parachains::configuration, Configuration); + list_benchmark!(list, extra, runtime_parachains::paras, Paras); // Substrate list_benchmark!(list, extra, pallet_bags_list, BagsList); list_benchmark!(list, extra, pallet_balances, Balances); @@ -2125,6 +2127,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, runtime_common::slots, Slots); add_benchmark!(params, batches, runtime_common::paras_registrar, Registrar); add_benchmark!(params, batches, runtime_parachains::configuration, Configuration); + add_benchmark!(params, batches, runtime_parachains::paras, Paras); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); add_benchmark!(params, batches, pallet_bags_list, BagsList); diff --git a/runtime/kusama/src/weights/mod.rs b/runtime/kusama/src/weights/mod.rs index adb103ad4eee..0b944e458a90 100644 --- a/runtime/kusama/src/weights/mod.rs +++ b/runtime/kusama/src/weights/mod.rs @@ -45,3 +45,4 @@ pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; +pub mod runtime_parachains_paras; diff --git a/runtime/kusama/src/weights/runtime_parachains_paras.rs b/runtime/kusama/src/weights/runtime_parachains_paras.rs new file mode 100644 index 000000000000..728d95561bfc --- /dev/null +++ b/runtime/kusama/src/weights/runtime_parachains_paras.rs @@ -0,0 +1,106 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::paras` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::paras +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs + + +#![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 `runtime_parachains::paras`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::paras::WeightInfo for WeightInfo { + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + fn force_set_current_code(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Paras Heads (r:0 w:1) + fn force_set_current_head(s: u32, ) -> Weight { + (16_088_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras UpcomingUpgrades (r:1 w:1) + // Storage: Paras UpgradeCooldowns (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + // Storage: Paras FutureCodeHash (r:0 w:1) + // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + fn force_schedule_code_upgrade(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras FutureCodeHash (r:1 w:1) + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras Heads (r:0 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + fn force_note_new_head(s: u32, ) -> Weight { + (69_114_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(9 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + fn force_queue_action() -> Weight { + (26_752_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index bcfc05e1a6c5..f2c94ef91532 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -22,7 +22,7 @@ use crate::shared; use frame_support::{pallet_prelude::*, weights::constants::WEIGHT_PER_MILLIS}; use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; -use primitives::v1::{Balance, SessionIndex, MAX_CODE_SIZE, MAX_POV_SIZE}; +use primitives::v1::{Balance, SessionIndex, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE, MAX_POV_SIZE}; use sp_runtime::traits::Zero; use sp_std::prelude::*; @@ -256,6 +256,13 @@ impl HostConfiguration { ) } + if self.max_head_data_size > MAX_HEAD_DATA_SIZE { + panic!( + "`max_head_data_size` ({}) is bigger than allowed by the client ({})", + self.max_head_data_size, MAX_HEAD_DATA_SIZE + ) + } + if self.max_pov_size > MAX_POV_SIZE { panic!("`max_pov_size` is bigger than allowed by the client") } @@ -390,6 +397,7 @@ pub mod pallet { #[pallet::weight(T::WeightInfo::set_config_with_u32())] pub fn set_max_head_data_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; + ensure!(new <= MAX_HEAD_DATA_SIZE, Error::::InvalidNewValue); Self::update_config_member(|config| { sp_std::mem::replace(&mut config.max_head_data_size, new) != new }); diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index c4da0991de18..387e0a7bf5e8 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -123,6 +123,7 @@ impl crate::shared::Config for Test {} impl crate::paras::Config for Test { type Origin = Origin; type Event = Event; + type WeightInfo = crate::paras::weights::WeightInfo; } impl crate::dmp::Config for Test {} diff --git a/runtime/parachains/src/paras.rs b/runtime/parachains/src/paras.rs index 9a840837ae94..666012a3b4e3 100644 --- a/runtime/parachains/src/paras.rs +++ b/runtime/parachains/src/paras.rs @@ -41,6 +41,10 @@ use serde::{Deserialize, Serialize}; pub use crate::Origin as ParachainOrigin; +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; +pub mod weights; + pub use pallet::*; // the two key times necessary to track for every code replacement. @@ -267,6 +271,14 @@ pub struct ParaGenesisArgs { pub parachain: bool, } +pub trait WeightInfo { + fn force_set_current_code(c: u32) -> Weight; + fn force_set_current_head(s: u32) -> Weight; + fn force_schedule_code_upgrade(c: u32) -> Weight; + fn force_note_new_head(s: u32) -> Weight; + fn force_queue_action() -> Weight; +} + #[frame_support::pallet] pub mod pallet { use super::*; @@ -283,6 +295,9 @@ pub mod pallet { + Into::Origin>>; type Event: From + IsType<::Event>; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; } #[pallet::event] @@ -490,7 +505,7 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Set the storage for the parachain validation code immediately. - #[pallet::weight(0)] + #[pallet::weight(::WeightInfo::force_set_current_code(new_code.0.len() as u32))] pub fn force_set_current_code( origin: OriginFor, para: ParaId, @@ -509,7 +524,7 @@ pub mod pallet { } /// Set the storage for the current parachain head data immediately. - #[pallet::weight(0)] + #[pallet::weight(::WeightInfo::force_set_current_head(new_head.0.len() as u32))] pub fn force_set_current_head( origin: OriginFor, para: ParaId, @@ -522,7 +537,7 @@ pub mod pallet { } /// Schedule an upgrade as if it was scheduled in the given relay parent block. - #[pallet::weight(0)] + #[pallet::weight(::WeightInfo::force_schedule_code_upgrade(new_code.0.len() as u32))] pub fn force_schedule_code_upgrade( origin: OriginFor, para: ParaId, @@ -537,7 +552,7 @@ pub mod pallet { } /// Note a new block head for para within the context of the current block. - #[pallet::weight(0)] + #[pallet::weight(::WeightInfo::force_note_new_head(new_head.0.len() as u32))] pub fn force_note_new_head( origin: OriginFor, para: ParaId, @@ -553,7 +568,7 @@ pub mod pallet { /// Put a parachain directly into the next session's action queue. /// We can't queue it any sooner than this without going into the /// initializer... - #[pallet::weight(0)] + #[pallet::weight(::WeightInfo::force_queue_action())] pub fn force_queue_action(origin: OriginFor, para: ParaId) -> DispatchResult { ensure_root(origin)?; let next_session = shared::Pallet::::session_index().saturating_add(One::one()); diff --git a/runtime/parachains/src/paras/benchmarking.rs b/runtime/parachains/src/paras/benchmarking.rs new file mode 100644 index 000000000000..2e9a26c260a3 --- /dev/null +++ b/runtime/parachains/src/paras/benchmarking.rs @@ -0,0 +1,135 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use super::*; +use crate::{configuration::HostConfiguration, shared}; +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; +use frame_system::RawOrigin; +use primitives::v1::{HeadData, Id as ParaId, ValidationCode, MAX_CODE_SIZE, MAX_HEAD_DATA_SIZE}; +use sp_runtime::traits::{One, Saturating}; + +// 2 ^ 10, because binary search time complexity is O(log(2, n)) and n = 1024 gives us a big and +// round number. +// Due to the limited number of parachains, the number of pruning, upcoming upgrades and cooldowns +// shouldn't exceed this number. +const SAMPLE_SIZE: u32 = 1024; + +fn assert_last_event(generic_event: ::Event) { + let events = frame_system::Pallet::::events(); + let system_event: ::Event = generic_event.into(); + // compare to the last event record + let frame_system::EventRecord { event, .. } = &events[events.len() - 1]; + assert_eq!(event, &system_event); +} + +fn generate_disordered_pruning() { + let mut needs_pruning = Vec::new(); + + for i in 0..SAMPLE_SIZE { + let id = ParaId::from(i); + let block_number = T::BlockNumber::from(1000u32); + needs_pruning.push((id, block_number)); + } + + as Store>::PastCodePruning::put(needs_pruning); +} + +fn generate_disordered_upgrades() { + let mut upgrades = Vec::new(); + let mut cooldowns = Vec::new(); + + for i in 0..SAMPLE_SIZE { + let id = ParaId::from(i); + let block_number = T::BlockNumber::from(1000u32); + upgrades.push((id, block_number)); + cooldowns.push((id, block_number)); + } + + as Store>::UpcomingUpgrades::put(upgrades); + as Store>::UpgradeCooldowns::put(cooldowns); +} + +fn generate_disordered_actions_queue() { + let mut queue = Vec::new(); + let next_session = shared::Pallet::::session_index().saturating_add(One::one()); + + for _ in 0..SAMPLE_SIZE { + let id = ParaId::from(1000); + queue.push(id); + } + + as Store>::ActionsQueue::mutate(next_session, |v| { + *v = queue; + }); +} + +benchmarks! { + force_set_current_code { + let c in 1 .. MAX_CODE_SIZE; + let new_code = ValidationCode(vec![0; c as usize]); + let para_id = ParaId::from(c as u32); + generate_disordered_pruning::(); + }: _(RawOrigin::Root, para_id, new_code) + verify { + assert_last_event::(Event::CurrentCodeUpdated(para_id).into()); + } + force_set_current_head { + let s in 1 .. MAX_HEAD_DATA_SIZE; + let new_head = HeadData(vec![0; s as usize]); + let para_id = ParaId::from(1000); + }: _(RawOrigin::Root, para_id, new_head) + verify { + assert_last_event::(Event::CurrentHeadUpdated(para_id).into()); + } + force_schedule_code_upgrade { + let c in 1 .. MAX_CODE_SIZE; + let new_code = ValidationCode(vec![0; c as usize]); + let para_id = ParaId::from(c as u32); + let block = T::BlockNumber::from(c); + generate_disordered_upgrades::(); + }: _(RawOrigin::Root, para_id, new_code, block) + verify { + assert_last_event::(Event::CodeUpgradeScheduled(para_id).into()); + } + force_note_new_head { + let s in 1 .. MAX_HEAD_DATA_SIZE; + let para_id = ParaId::from(1000); + let new_head = HeadData(vec![0; s as usize]); + // schedule an expired code upgrade for this para_id so that force_note_new_head would use + // the worst possible code path + let expired = frame_system::Pallet::::block_number().saturating_sub(One::one()); + let config = HostConfiguration::::default(); + generate_disordered_pruning::(); + Pallet::::schedule_code_upgrade(para_id, ValidationCode(vec![0]), expired, &config); + }: _(RawOrigin::Root, para_id, new_head) + verify { + assert_last_event::(Event::NewHeadNoted(para_id).into()); + } + force_queue_action { + let para_id = ParaId::from(1000); + generate_disordered_actions_queue::(); + }: _(RawOrigin::Root, para_id) + verify { + let next_session = crate::shared::Pallet::::session_index().saturating_add(One::one()); + assert_last_event::(Event::ActionQueued(para_id, next_session).into()); + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext(Default::default()), + crate::mock::Test +); diff --git a/runtime/parachains/src/paras/weights.rs b/runtime/parachains/src/paras/weights.rs new file mode 100644 index 000000000000..d02acf4bc687 --- /dev/null +++ b/runtime/parachains/src/paras/weights.rs @@ -0,0 +1,97 @@ + +//! Autogenerated weights for `runtime_parachains::paras` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 + +// Executed Command: +// ./target/release/polkadot +// benchmark +// --chain +// westend-dev +// --execution=wasm +// --wasm-execution=compiled +// --pallet +// runtime_parachains::paras +// --steps +// 50 +// --repeat +// 20 +// --raw +// --extrinsic +// * +// --output +// runtime/parachains/src/paras/weights.rs + + +#![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 `runtime_parachains::paras`. +pub struct WeightInfo(PhantomData); +impl super::WeightInfo for WeightInfo { + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + fn force_set_current_code(c: u32, ) -> Weight { + (14_669_000 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Paras Heads (r:0 w:1) + fn force_set_current_head(s: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((2_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras UpcomingUpgrades (r:1 w:1) + // Storage: Paras UpgradeCooldowns (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + // Storage: Paras FutureCodeHash (r:0 w:1) + // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + fn force_schedule_code_upgrade(c: u32, ) -> Weight { + (37_383_000 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras FutureCodeHash (r:1 w:1) + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras Heads (r:0 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + fn force_note_new_head(s: u32, ) -> Weight { + (60_855_000 as Weight) + // Standard Error: 0 + .saturating_add((2_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(9 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + fn force_queue_action() -> Weight { + (32_014_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index b86314c50b9f..d9e42a75ec16 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -588,6 +588,7 @@ impl parachains_inclusion::Config for Runtime { impl parachains_paras::Config for Runtime { type Origin = Origin; type Event = Event; + type WeightInfo = parachains_paras::weights::WeightInfo; } parameter_types! { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 58ccea45c249..9ead46d3cf81 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -484,6 +484,7 @@ impl parachains_session_info::Config for Runtime {} impl parachains_paras::Config for Runtime { type Origin = Origin; type Event = Event; + type WeightInfo = parachains_paras::weights::WeightInfo; } impl parachains_dmp::Config for Runtime {} diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 31b9342dc66b..a583d5618135 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -818,6 +818,7 @@ impl parachains_inclusion::Config for Runtime { impl parachains_paras::Config for Runtime { type Origin = Origin; type Event = Event; + type WeightInfo = weights::runtime_parachains_paras::WeightInfo; } parameter_types! { @@ -1474,6 +1475,7 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, runtime_common::paras_registrar, Registrar); list_benchmark!(list, extra, runtime_common::slots, Slots); list_benchmark!(list, extra, runtime_parachains::configuration, Configuration); + list_benchmark!(list, extra, runtime_parachains::paras, Paras); // Substrate list_benchmark!(list, extra, pallet_bags_list, BagsList); list_benchmark!(list, extra, pallet_balances, Balances); @@ -1540,6 +1542,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, runtime_common::paras_registrar, Registrar); add_benchmark!(params, batches, runtime_common::slots, Slots); add_benchmark!(params, batches, runtime_parachains::configuration, Configuration); + add_benchmark!(params, batches, runtime_parachains::paras, Paras); // Substrate add_benchmark!(params, batches, pallet_bags_list, BagsList); add_benchmark!(params, batches, pallet_balances, Balances); diff --git a/runtime/westend/src/weights/mod.rs b/runtime/westend/src/weights/mod.rs index 76e23ae5fb49..c7dba930ed49 100644 --- a/runtime/westend/src/weights/mod.rs +++ b/runtime/westend/src/weights/mod.rs @@ -35,3 +35,4 @@ pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; +pub mod runtime_parachains_paras; diff --git a/runtime/westend/src/weights/runtime_parachains_paras.rs b/runtime/westend/src/weights/runtime_parachains_paras.rs new file mode 100644 index 000000000000..f04f3162a263 --- /dev/null +++ b/runtime/westend/src/weights/runtime_parachains_paras.rs @@ -0,0 +1,106 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::paras` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=westend-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::paras +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/westend/src/weights/runtime_parachains_paras.rs + + +#![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 `runtime_parachains::paras`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::paras::WeightInfo for WeightInfo { + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + fn force_set_current_code(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Paras Heads (r:0 w:1) + fn force_set_current_head(s: u32, ) -> Weight { + (17_522_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras UpcomingUpgrades (r:1 w:1) + // Storage: Paras UpgradeCooldowns (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + // Storage: Paras FutureCodeHash (r:0 w:1) + // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + fn force_schedule_code_upgrade(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras FutureCodeHash (r:1 w:1) + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras Heads (r:0 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + fn force_note_new_head(s: u32, ) -> Weight { + (71_155_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(9 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + fn force_queue_action() -> Weight { + (27_230_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} From 90e892919b5105a001d85c5be4a0fcc3faa63262 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 22 Sep 2021 04:23:42 -0500 Subject: [PATCH 02/52] add tracing to assignment criteria (#3886) * add tracing to assignment criteria * fmt --- node/core/approval-voting/src/criteria.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/node/core/approval-voting/src/criteria.rs b/node/core/approval-voting/src/criteria.rs index ea88c30e3bc3..21c4bd9f9d0c 100644 --- a/node/core/approval-voting/src/criteria.rs +++ b/node/core/approval-voting/src/criteria.rs @@ -236,6 +236,14 @@ pub(crate) fn compute_assignments( config.assignment_keys.is_empty() || config.validator_groups.is_empty() { + tracing::trace!( + target: LOG_TARGET, + n_cores = config.n_cores, + has_assignment_keys = !config.assignment_keys.is_empty(), + has_validator_groups = !config.validator_groups.is_empty(), + "Not producing assignments because config is degenerate", + ); + return HashMap::new() } @@ -254,7 +262,10 @@ pub(crate) fn compute_assignments( }); match key { - None => return Default::default(), + None => { + tracing::trace!(target: LOG_TARGET, "No assignment key"); + return Default::default() + }, Some(k) => k, } }; @@ -266,6 +277,12 @@ pub(crate) fn compute_assignments( .map(|(c_hash, core, _)| (c_hash, core)) .collect::>(); + tracing::trace!( + target: LOG_TARGET, + assignable_cores = leaving_cores.len(), + "Assigning to candidates from different backing groups" + ); + let assignments_key: &sp_application_crypto::sr25519::Pair = assignments_key.as_ref(); let assignments_key: &schnorrkel::Keypair = assignments_key.as_ref(); From 6ce805b311070b4cb3fdccbe1b61ab619d6c0777 Mon Sep 17 00:00:00 2001 From: Georges Date: Wed, 22 Sep 2021 11:28:59 +0100 Subject: [PATCH 03/52] Companion for Generate storage info for pallet grandpa #9817 (#3892) * Adding `MaxAuthorities` to pallet grandpa This is neede after changes to substrate * Adding `MaxAuthorities` to granda in test-runtime * Missed one `MaxAuthorities` * update Substrate Co-authored-by: parity-processbot <> --- Cargo.lock | 308 +++++++++++++------------- bridges/bin/rialto/runtime/src/lib.rs | 1 + runtime/kusama/src/lib.rs | 1 + runtime/polkadot/src/lib.rs | 1 + runtime/rococo/src/lib.rs | 1 + runtime/test-runtime/src/lib.rs | 1 + runtime/westend/src/lib.rs | 1 + 7 files changed, 160 insertions(+), 154 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0e9ea60c000..d4747de22882 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1928,7 +1928,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", ] @@ -1946,7 +1946,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -1966,7 +1966,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "Inflector", "chrono", @@ -1992,7 +1992,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -2006,7 +2006,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -2034,7 +2034,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "bitflags", "frame-metadata", @@ -2061,7 +2061,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2073,7 +2073,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro2", "quote", @@ -2095,7 +2095,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "log", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -2161,7 +2161,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "sp-api", @@ -2170,7 +2170,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "sp-api", @@ -2383,7 +2383,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "chrono", "frame-election-provider-support", @@ -4563,7 +4563,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -4579,7 +4579,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4618,7 +4618,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4638,7 +4638,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4694,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4779,7 +4779,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4796,7 +4796,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4812,7 +4812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4854,7 +4854,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4869,7 +4869,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4892,7 +4892,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4908,7 +4908,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,7 +4928,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -4962,7 +4962,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4980,7 +4980,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -4996,7 +4996,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5013,7 +5013,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5028,7 +5028,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5059,7 +5059,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5082,7 +5082,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5127,7 +5127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5148,7 +5148,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5164,7 +5164,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5178,7 +5178,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5201,7 +5201,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -5212,7 +5212,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "sp-arithmetic", @@ -5221,7 +5221,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5235,7 +5235,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5272,7 +5272,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-support", "frame-system", @@ -5289,7 +5289,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5306,7 +5306,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5317,7 +5317,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5334,7 +5334,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-benchmarking", "frame-support", @@ -7726,7 +7726,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -7986,7 +7986,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "sp-core", @@ -7997,7 +7997,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "derive_more", @@ -8024,7 +8024,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8047,7 +8047,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8063,7 +8063,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8079,7 +8079,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8090,7 +8090,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "chrono", "fdlimit", @@ -8128,7 +8128,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "fnv", "futures 0.3.17", @@ -8156,7 +8156,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "hash-db", "kvdb", @@ -8181,7 +8181,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "futures 0.3.17", @@ -8205,7 +8205,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "derive_more", @@ -8248,7 +8248,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "derive_more", "futures 0.3.17", @@ -8272,7 +8272,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8285,7 +8285,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "assert_matches", "async-trait", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "futures 0.3.17", @@ -8345,7 +8345,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "sc-client-api", "sp-authorship", @@ -8356,7 +8356,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "derive_more", "environmental", @@ -8400,7 +8400,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "parity-scale-codec", @@ -8416,7 +8416,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8435,7 +8435,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "derive_more", @@ -8472,7 +8472,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "derive_more", "finality-grandpa", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8513,7 +8513,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "derive_more", @@ -8528,7 +8528,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "hash-db", "parity-scale-codec", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-std", "async-trait", @@ -8597,7 +8597,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8613,7 +8613,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "bytes 1.0.1", "fnv", @@ -8640,7 +8640,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "libp2p", @@ -8653,7 +8653,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8662,7 +8662,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "hash-db", @@ -8693,7 +8693,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8718,7 +8718,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8735,7 +8735,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "directories", @@ -8800,7 +8800,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "parity-scale-codec", @@ -8814,7 +8814,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8836,7 +8836,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "chrono", "futures 0.3.17", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8883,7 +8883,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8894,7 +8894,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "intervalier", @@ -8921,7 +8921,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "derive_more", "futures 0.3.17", @@ -8935,7 +8935,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9367,7 +9367,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "hash-db", "log", @@ -9384,7 +9384,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "blake2-rfc", "proc-macro-crate 1.0.0", @@ -9396,7 +9396,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9409,7 +9409,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "integer-sqrt", "num-traits", @@ -9424,7 +9424,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "parity-scale-codec", @@ -9449,7 +9449,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "sp-api", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "log", @@ -9479,7 +9479,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "futures 0.3.17", @@ -9498,7 +9498,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "merlin", @@ -9521,7 +9521,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9532,7 +9532,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9544,7 +9544,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "base58", "blake2-rfc", @@ -9589,7 +9589,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9598,7 +9598,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro2", "quote", @@ -9608,7 +9608,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "environmental", "parity-scale-codec", @@ -9619,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "finality-grandpa", "log", @@ -9637,7 +9637,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9651,7 +9651,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "hash-db", @@ -9676,7 +9676,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "lazy_static", "sp-core", @@ -9687,7 +9687,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "derive_more", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "zstd", ] @@ -9712,7 +9712,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9727,7 +9727,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -9738,7 +9738,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "sp-api", "sp-core", @@ -9748,7 +9748,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "backtrace", ] @@ -9756,7 +9756,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "rustc-hash", "serde", @@ -9766,7 +9766,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "either", "hash256-std-hasher", @@ -9788,7 +9788,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9805,7 +9805,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "Inflector", "proc-macro-crate 1.0.0", @@ -9817,7 +9817,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "serde", "serde_json", @@ -9826,7 +9826,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "scale-info", @@ -9851,7 +9851,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "hash-db", "log", @@ -9874,12 +9874,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "log", "sp-core", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9921,7 +9921,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "erased-serde", "log", @@ -9939,7 +9939,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "sp-api", "sp-runtime", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "log", @@ -9964,7 +9964,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "hash-db", "memory-db", @@ -9979,7 +9979,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9995,7 +9995,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10006,7 +10006,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10202,7 +10202,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "platforms", ] @@ -10210,7 +10210,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10232,7 +10232,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-std", "derive_more", @@ -10246,7 +10246,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "async-trait", "futures 0.3.17", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10283,7 +10283,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -10294,7 +10294,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10447,7 +10447,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "frame-system", "futures 0.3.17", @@ -10886,7 +10886,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#04bb4e02137f7aba9c20be071bcf9ba6bceaf8da" +source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" dependencies = [ "jsonrpsee-ws-client", "log", diff --git a/bridges/bin/rialto/runtime/src/lib.rs b/bridges/bin/rialto/runtime/src/lib.rs index bc7a4d8f7073..e0a1e176c3ae 100644 --- a/bridges/bin/rialto/runtime/src/lib.rs +++ b/bridges/bin/rialto/runtime/src/lib.rs @@ -353,6 +353,7 @@ impl pallet_grandpa::Config for Runtime { type HandleEquivocation = (); // TODO: update me (https://github.com/paritytech/parity-bridges-common/issues/78) type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } parameter_types! { diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 8c7b8e094904..43d49791588c 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -803,6 +803,7 @@ impl pallet_grandpa::Config for Runtime { >; type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } /// Submits transaction with the node's public and signature type. Adheres to the signed extension diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index ca9747c957ee..0c22485e94b5 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -789,6 +789,7 @@ impl pallet_grandpa::Config for Runtime { >; type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } /// Submits a transaction with the node's public and signature type. Adheres to the signed extension diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index d9e42a75ec16..fc7c026c4dc5 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -551,6 +551,7 @@ impl pallet_grandpa::Config for Runtime { >; type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } parameter_types! { diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 9ead46d3cf81..5d23007ac8d6 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -363,6 +363,7 @@ impl pallet_grandpa::Config for Runtime { type HandleEquivocation = (); type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } impl frame_system::offchain::CreateSignedTransaction for Runtime diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index a583d5618135..82fde047ff84 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -522,6 +522,7 @@ impl pallet_grandpa::Config for Runtime { >; type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } /// Submits a transaction with the node's public and signature type. Adheres to the signed extension From a19b9ef8477b3696ec9ef5c0155f0be6db0e9d00 Mon Sep 17 00:00:00 2001 From: Kian Paimani <5588131+kianenigma@users.noreply.github.com> Date: Wed, 22 Sep 2021 16:21:42 +0100 Subject: [PATCH 04/52] Companion for substrate PR#9766 (#3900) * fix weights * reduce time * update Substrate Co-authored-by: parity-processbot <> --- Cargo.lock | 308 +++++++++--------- runtime/common/src/elections.rs | 19 +- .../pallet_election_provider_multi_phase.rs | 2 +- .../pallet_election_provider_multi_phase.rs | 2 +- .../pallet_election_provider_multi_phase.rs | 2 +- 5 files changed, 167 insertions(+), 166 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d4747de22882..3a79ce8ff74f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1928,7 +1928,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", ] @@ -1946,7 +1946,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -1966,7 +1966,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "Inflector", "chrono", @@ -1992,7 +1992,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -2006,7 +2006,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -2034,7 +2034,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "bitflags", "frame-metadata", @@ -2061,7 +2061,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2073,7 +2073,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro2", "quote", @@ -2095,7 +2095,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "log", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -2161,7 +2161,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "sp-api", @@ -2170,7 +2170,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "sp-api", @@ -2383,7 +2383,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "chrono", "frame-election-provider-support", @@ -4563,7 +4563,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -4579,7 +4579,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4618,7 +4618,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4638,7 +4638,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4694,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4779,7 +4779,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4796,7 +4796,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4812,7 +4812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4854,7 +4854,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4869,7 +4869,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4892,7 +4892,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4908,7 +4908,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,7 +4928,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -4962,7 +4962,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4980,7 +4980,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -4996,7 +4996,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5013,7 +5013,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5028,7 +5028,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5059,7 +5059,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5082,7 +5082,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5127,7 +5127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5148,7 +5148,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5164,7 +5164,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5178,7 +5178,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5201,7 +5201,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -5212,7 +5212,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "sp-arithmetic", @@ -5221,7 +5221,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5235,7 +5235,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5272,7 +5272,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-support", "frame-system", @@ -5289,7 +5289,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5306,7 +5306,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5317,7 +5317,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5334,7 +5334,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-benchmarking", "frame-support", @@ -7726,7 +7726,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -7986,7 +7986,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "sp-core", @@ -7997,7 +7997,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "derive_more", @@ -8024,7 +8024,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8047,7 +8047,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8063,7 +8063,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8079,7 +8079,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8090,7 +8090,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "chrono", "fdlimit", @@ -8128,7 +8128,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "fnv", "futures 0.3.17", @@ -8156,7 +8156,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "hash-db", "kvdb", @@ -8181,7 +8181,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "futures 0.3.17", @@ -8205,7 +8205,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "derive_more", @@ -8248,7 +8248,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "derive_more", "futures 0.3.17", @@ -8272,7 +8272,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8285,7 +8285,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "assert_matches", "async-trait", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "futures 0.3.17", @@ -8345,7 +8345,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "sc-client-api", "sp-authorship", @@ -8356,7 +8356,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "derive_more", "environmental", @@ -8400,7 +8400,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "parity-scale-codec", @@ -8416,7 +8416,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8435,7 +8435,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "derive_more", @@ -8472,7 +8472,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "derive_more", "finality-grandpa", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8513,7 +8513,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "derive_more", @@ -8528,7 +8528,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "hash-db", "parity-scale-codec", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-std", "async-trait", @@ -8597,7 +8597,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8613,7 +8613,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "bytes 1.0.1", "fnv", @@ -8640,7 +8640,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "libp2p", @@ -8653,7 +8653,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8662,7 +8662,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "hash-db", @@ -8693,7 +8693,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8718,7 +8718,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8735,7 +8735,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "directories", @@ -8800,7 +8800,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "parity-scale-codec", @@ -8814,7 +8814,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8836,7 +8836,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "chrono", "futures 0.3.17", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8883,7 +8883,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8894,7 +8894,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "intervalier", @@ -8921,7 +8921,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "derive_more", "futures 0.3.17", @@ -8935,7 +8935,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9367,7 +9367,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "hash-db", "log", @@ -9384,7 +9384,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "blake2-rfc", "proc-macro-crate 1.0.0", @@ -9396,7 +9396,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9409,7 +9409,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "integer-sqrt", "num-traits", @@ -9424,7 +9424,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "parity-scale-codec", @@ -9449,7 +9449,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "sp-api", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "log", @@ -9479,7 +9479,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "futures 0.3.17", @@ -9498,7 +9498,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "merlin", @@ -9521,7 +9521,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9532,7 +9532,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9544,7 +9544,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "base58", "blake2-rfc", @@ -9589,7 +9589,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9598,7 +9598,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro2", "quote", @@ -9608,7 +9608,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "environmental", "parity-scale-codec", @@ -9619,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "finality-grandpa", "log", @@ -9637,7 +9637,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9651,7 +9651,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "hash-db", @@ -9676,7 +9676,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "lazy_static", "sp-core", @@ -9687,7 +9687,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "derive_more", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "zstd", ] @@ -9712,7 +9712,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9727,7 +9727,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -9738,7 +9738,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "sp-api", "sp-core", @@ -9748,7 +9748,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "backtrace", ] @@ -9756,7 +9756,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "rustc-hash", "serde", @@ -9766,7 +9766,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "either", "hash256-std-hasher", @@ -9788,7 +9788,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9805,7 +9805,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "Inflector", "proc-macro-crate 1.0.0", @@ -9817,7 +9817,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "serde", "serde_json", @@ -9826,7 +9826,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "scale-info", @@ -9851,7 +9851,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "hash-db", "log", @@ -9874,12 +9874,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "log", "sp-core", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9921,7 +9921,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "erased-serde", "log", @@ -9939,7 +9939,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "sp-api", "sp-runtime", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "log", @@ -9964,7 +9964,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "hash-db", "memory-db", @@ -9979,7 +9979,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9995,7 +9995,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10006,7 +10006,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10202,7 +10202,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "platforms", ] @@ -10210,7 +10210,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10232,7 +10232,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-std", "derive_more", @@ -10246,7 +10246,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "async-trait", "futures 0.3.17", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10283,7 +10283,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -10294,7 +10294,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10447,7 +10447,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "frame-system", "futures 0.3.17", @@ -10886,7 +10886,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#49e91e2f2390fda92e41726c2fb728cd778e7631" +source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" dependencies = [ "jsonrpsee-ws-client", "log", diff --git a/runtime/common/src/elections.rs b/runtime/common/src/elections.rs index f26b2f014451..03989a64b439 100644 --- a/runtime/common/src/elections.rs +++ b/runtime/common/src/elections.rs @@ -45,17 +45,18 @@ parameter_types! { .get(DispatchClass::Normal); } -/// The numbers configured here should always be more than the the maximum limits of staking pallet -/// to ensure election snapshot will not run out of memory. +/// The numbers configured here could always be more than the the maximum limits of staking pallet +/// to ensure election snapshot will not run out of memory. For now, we set them to smaller values +/// since the staking is bounded and the weight pipeline takes hours for this single pallet. pub struct BenchmarkConfig; impl pallet_election_provider_multi_phase::BenchmarkingConfig for BenchmarkConfig { - const VOTERS: [u32; 2] = [5_000, 10_000]; - const TARGETS: [u32; 2] = [1_000, 2_000]; - const ACTIVE_VOTERS: [u32; 2] = [1000, 4_000]; - const DESIRED_TARGETS: [u32; 2] = [400, 800]; - const SNAPSHOT_MAXIMUM_VOTERS: u32 = 25_000; - const MINER_MAXIMUM_VOTERS: u32 = 15_000; - const MAXIMUM_TARGETS: u32 = 2000; + const VOTERS: [u32; 2] = [1000, 2000]; + const TARGETS: [u32; 2] = [500, 1000]; + const ACTIVE_VOTERS: [u32; 2] = [500, 800]; + const DESIRED_TARGETS: [u32; 2] = [200, 400]; + const SNAPSHOT_MAXIMUM_VOTERS: u32 = 1000; + const MINER_MAXIMUM_VOTERS: u32 = 1000; + const MAXIMUM_TARGETS: u32 = 300; } /// The accuracy type used for genesis election provider; diff --git a/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs b/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs index 913050e48491..c9219a954918 100644 --- a/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/kusama/src/weights/pallet_election_provider_multi_phase.rs @@ -83,7 +83,7 @@ impl pallet_election_provider_multi_phase::WeightInfo f // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - fn create_snapshot_internal() -> Weight { + fn create_snapshot_internal(_: u32, _: u32) -> Weight { (8_835_233_000 as Weight).saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) diff --git a/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs b/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs index 82de96068ff0..a4af284de9ad 100644 --- a/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/polkadot/src/weights/pallet_election_provider_multi_phase.rs @@ -83,7 +83,7 @@ impl pallet_election_provider_multi_phase::WeightInfo f // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - fn create_snapshot_internal() -> Weight { + fn create_snapshot_internal(_: u32, _: u32) -> Weight { (8_835_233_000 as Weight).saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) diff --git a/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs b/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs index a285e77f01ce..cdfa4cbe08a5 100644 --- a/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs +++ b/runtime/westend/src/weights/pallet_election_provider_multi_phase.rs @@ -83,7 +83,7 @@ impl pallet_election_provider_multi_phase::WeightInfo f // Storage: ElectionProviderMultiPhase SnapshotMetadata (r:0 w:1) // Storage: ElectionProviderMultiPhase DesiredTargets (r:0 w:1) // Storage: ElectionProviderMultiPhase Snapshot (r:0 w:1) - fn create_snapshot_internal() -> Weight { + fn create_snapshot_internal(_: u32, _: u32) -> Weight { (8_835_233_000 as Weight).saturating_add(T::DbWeight::get().writes(3 as Weight)) } // Storage: ElectionProviderMultiPhase SignedSubmissionIndices (r:1 w:1) From 9e43470febf6edf6147c35ea0c3828811239f83c Mon Sep 17 00:00:00 2001 From: Georges Date: Thu, 23 Sep 2021 00:33:44 +0100 Subject: [PATCH 05/52] Companion for Generate storage info for pallet babe #9760 (#3831) * Adding MaxSegmentLength and MaxAuthorities to pallet babe * Missed a few to_vec * Removing `MaxSegmentLength` as not needed anymore * Adding `MaxAuthorities` to couple of missing place * Adding missing definition of `MaxAuthorities` * Adding a missing to_vec * update Substrate Co-authored-by: thiolliere Co-authored-by: parity-processbot <> --- Cargo.lock | 308 ++++++++++++------------ runtime/common/src/integration_tests.rs | 2 + runtime/kusama/src/lib.rs | 4 +- runtime/polkadot/src/lib.rs | 4 +- runtime/rococo/src/lib.rs | 4 +- runtime/test-runtime/src/lib.rs | 3 +- runtime/westend/src/lib.rs | 4 +- 7 files changed, 170 insertions(+), 159 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3a79ce8ff74f..47b43b86c43a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1928,7 +1928,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", ] @@ -1946,7 +1946,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -1966,7 +1966,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "Inflector", "chrono", @@ -1992,7 +1992,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -2006,7 +2006,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -2034,7 +2034,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "bitflags", "frame-metadata", @@ -2061,7 +2061,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2073,7 +2073,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.0.0", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro2", "quote", @@ -2095,7 +2095,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "log", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -2161,7 +2161,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "sp-api", @@ -2170,7 +2170,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "sp-api", @@ -2383,7 +2383,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "chrono", "frame-election-provider-support", @@ -4563,7 +4563,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -4579,7 +4579,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4618,7 +4618,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4638,7 +4638,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4694,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4779,7 +4779,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4796,7 +4796,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4812,7 +4812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4854,7 +4854,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4869,7 +4869,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4892,7 +4892,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4908,7 +4908,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,7 +4928,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -4962,7 +4962,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4980,7 +4980,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -4996,7 +4996,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5013,7 +5013,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5028,7 +5028,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5059,7 +5059,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5082,7 +5082,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5127,7 +5127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5148,7 +5148,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5164,7 +5164,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5178,7 +5178,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5201,7 +5201,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -5212,7 +5212,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "sp-arithmetic", @@ -5221,7 +5221,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5235,7 +5235,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5272,7 +5272,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support", "frame-system", @@ -5289,7 +5289,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5306,7 +5306,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5317,7 +5317,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5334,7 +5334,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-benchmarking", "frame-support", @@ -7726,7 +7726,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -7986,7 +7986,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "sp-core", @@ -7997,7 +7997,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "derive_more", @@ -8024,7 +8024,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8047,7 +8047,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8063,7 +8063,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8079,7 +8079,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8090,7 +8090,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "chrono", "fdlimit", @@ -8128,7 +8128,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "fnv", "futures 0.3.17", @@ -8156,7 +8156,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "hash-db", "kvdb", @@ -8181,7 +8181,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "futures 0.3.17", @@ -8205,7 +8205,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "derive_more", @@ -8248,7 +8248,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "derive_more", "futures 0.3.17", @@ -8272,7 +8272,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8285,7 +8285,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "assert_matches", "async-trait", @@ -8319,7 +8319,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "futures 0.3.17", @@ -8345,7 +8345,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "sc-client-api", "sp-authorship", @@ -8356,7 +8356,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8382,7 +8382,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "derive_more", "environmental", @@ -8400,7 +8400,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "parity-scale-codec", @@ -8416,7 +8416,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8435,7 +8435,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "derive_more", @@ -8472,7 +8472,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "derive_more", "finality-grandpa", @@ -8496,7 +8496,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8513,7 +8513,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "derive_more", @@ -8528,7 +8528,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "hash-db", "parity-scale-codec", @@ -8546,7 +8546,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-std", "async-trait", @@ -8597,7 +8597,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8613,7 +8613,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "bytes 1.0.1", "fnv", @@ -8640,7 +8640,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "libp2p", @@ -8653,7 +8653,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8662,7 +8662,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "hash-db", @@ -8693,7 +8693,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8718,7 +8718,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8735,7 +8735,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "directories", @@ -8800,7 +8800,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "parity-scale-codec", @@ -8814,7 +8814,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8836,7 +8836,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "chrono", "futures 0.3.17", @@ -8854,7 +8854,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8883,7 +8883,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -8894,7 +8894,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "intervalier", @@ -8921,7 +8921,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "derive_more", "futures 0.3.17", @@ -8935,7 +8935,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9367,7 +9367,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "hash-db", "log", @@ -9384,7 +9384,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "blake2-rfc", "proc-macro-crate 1.0.0", @@ -9396,7 +9396,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9409,7 +9409,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "integer-sqrt", "num-traits", @@ -9424,7 +9424,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9437,7 +9437,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "parity-scale-codec", @@ -9449,7 +9449,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "sp-api", @@ -9461,7 +9461,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "log", @@ -9479,7 +9479,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "futures 0.3.17", @@ -9498,7 +9498,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "merlin", @@ -9521,7 +9521,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9532,7 +9532,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9544,7 +9544,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "base58", "blake2-rfc", @@ -9589,7 +9589,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9598,7 +9598,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro2", "quote", @@ -9608,7 +9608,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "environmental", "parity-scale-codec", @@ -9619,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "finality-grandpa", "log", @@ -9637,7 +9637,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9651,7 +9651,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "hash-db", @@ -9676,7 +9676,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "lazy_static", "sp-core", @@ -9687,7 +9687,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "derive_more", @@ -9704,7 +9704,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "zstd", ] @@ -9712,7 +9712,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9727,7 +9727,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -9738,7 +9738,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "sp-api", "sp-core", @@ -9748,7 +9748,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "backtrace", ] @@ -9756,7 +9756,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "rustc-hash", "serde", @@ -9766,7 +9766,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "either", "hash256-std-hasher", @@ -9788,7 +9788,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9805,7 +9805,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "Inflector", "proc-macro-crate 1.0.0", @@ -9817,7 +9817,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "serde", "serde_json", @@ -9826,7 +9826,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "scale-info", @@ -9851,7 +9851,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "hash-db", "log", @@ -9874,12 +9874,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9892,7 +9892,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "log", "sp-core", @@ -9905,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9921,7 +9921,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "erased-serde", "log", @@ -9939,7 +9939,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "sp-api", "sp-runtime", @@ -9948,7 +9948,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "log", @@ -9964,7 +9964,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "hash-db", "memory-db", @@ -9979,7 +9979,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9995,7 +9995,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10006,7 +10006,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10202,7 +10202,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "platforms", ] @@ -10210,7 +10210,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10232,7 +10232,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-std", "derive_more", @@ -10246,7 +10246,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "async-trait", "futures 0.3.17", @@ -10273,7 +10273,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10283,7 +10283,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "proc-macro-crate 1.0.0", "proc-macro2", @@ -10294,7 +10294,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10447,7 +10447,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-system", "futures 0.3.17", @@ -10886,7 +10886,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#136120674703bf5541ee2368ebb330d803b61cce" +source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "jsonrpsee-ws-client", "log", diff --git a/runtime/common/src/integration_tests.rs b/runtime/common/src/integration_tests.rs index 03d457b5c00b..5653100815aa 100644 --- a/runtime/common/src/integration_tests.rs +++ b/runtime/common/src/integration_tests.rs @@ -108,6 +108,7 @@ parameter_types! { pub const EpochDuration: u64 = 10; pub const ExpectedBlockTime: Moment = 6_000; pub const ReportLongevity: u64 = 10; + pub const MaxAuthorities: u32 = 100_000; } impl pallet_babe::Config for Test { @@ -126,6 +127,7 @@ impl pallet_babe::Config for Test { )>>::IdentificationTuple; type HandleEquivocation = (); type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } parameter_types! { diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index 43d49791588c..c2fa01f66f36 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -240,6 +240,8 @@ impl pallet_babe::Config for Runtime { pallet_babe::EquivocationHandler; type WeightInfo = (); + + type MaxAuthorities = MaxAuthorities; } parameter_types! { @@ -1938,7 +1940,7 @@ sp_api::impl_runtime_apis! { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities(), + genesis_authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, } diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 0c22485e94b5..997762515478 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -245,6 +245,8 @@ impl pallet_babe::Config for Runtime { pallet_babe::EquivocationHandler; type WeightInfo = (); + + type MaxAuthorities = MaxAuthorities; } parameter_types! { @@ -1514,7 +1516,7 @@ sp_api::impl_runtime_apis! { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities(), + genesis_authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, } diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index fc7c026c4dc5..9f03cc8253e8 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -512,6 +512,8 @@ impl pallet_babe::Config for Runtime { pallet_babe::EquivocationHandler; type WeightInfo = (); + + type MaxAuthorities = MaxAuthorities; } parameter_types! { @@ -1309,7 +1311,7 @@ sp_api::impl_runtime_apis! { slot_duration: Babe::slot_duration(), epoch_length: EpochDurationInBlocks::get().into(), c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities(), + genesis_authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, } diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 5d23007ac8d6..722aab3e16af 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -188,6 +188,7 @@ impl pallet_babe::Config for Runtime { type HandleEquivocation = (); type WeightInfo = (); + type MaxAuthorities = MaxAuthorities; } parameter_types! { @@ -914,7 +915,7 @@ sp_api::impl_runtime_apis! { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities(), + genesis_authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, } diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 82fde047ff84..179088dc1a57 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -226,6 +226,8 @@ impl pallet_babe::Config for Runtime { pallet_babe::EquivocationHandler; type WeightInfo = (); + + type MaxAuthorities = MaxAuthorities; } parameter_types! { @@ -1363,7 +1365,7 @@ sp_api::impl_runtime_apis! { slot_duration: Babe::slot_duration(), epoch_length: EpochDuration::get(), c: BABE_GENESIS_EPOCH_CONFIG.c, - genesis_authorities: Babe::authorities(), + genesis_authorities: Babe::authorities().to_vec(), randomness: Babe::randomness(), allowed_slots: BABE_GENESIS_EPOCH_CONFIG.allowed_slots, } From a97bf523ddebd48ec63563b3b09c9e8e2abd4207 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Sep 2021 00:24:28 +0000 Subject: [PATCH 06/52] Bump proc-macro-crate from 1.0.0 to 1.1.0 (#3863) Bumps [proc-macro-crate](https://github.com/bkchr/proc-macro-crate) from 1.0.0 to 1.1.0. - [Release notes](https://github.com/bkchr/proc-macro-crate/releases) - [Commits](https://github.com/bkchr/proc-macro-crate/commits) --- updated-dependencies: - dependency-name: proc-macro-crate dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 30 +++++++++---------- .../overseer-gen/proc-macro/Cargo.toml | 2 +- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 47b43b86c43a..da9fc51114c1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2076,7 +2076,7 @@ version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "frame-support-procedural-tools-derive", - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -3075,7 +3075,7 @@ checksum = "f37924e16300e249a52a22cabb5632f846dc9760b39355f5e8bc70cd23dc6300" dependencies = [ "Inflector", "bae", - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -4269,7 +4269,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "424f6e86263cd5294cbd7f1e95746b95aca0e0d66bff31e5a40d6baa87b4aa99" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro-error 1.0.4", "proc-macro2", "quote", @@ -5203,7 +5203,7 @@ name = "pallet-staking-reward-curve" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -5423,7 +5423,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40dbbfef7f0a1143c5b06e0d76a6278e25dac0bc1af4be51a0fbb73f07e7ad09" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -6523,7 +6523,7 @@ name = "polkadot-overseer-gen-proc-macro" version = "0.9.9" dependencies = [ "assert_matches", - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -7251,9 +7251,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fdbd1df62156fbc5945f4762632564d7d038153091c3fcf1067f6aef7cff92" +checksum = "1ebace6889caf889b4d3f76becee12e90353f2b8c7d875534a71e5742f8f6f83" dependencies = [ "thiserror", "toml", @@ -8081,7 +8081,7 @@ name = "sc-chain-spec-derive" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -8885,7 +8885,7 @@ name = "sc-tracing-proc-macro" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -8963,7 +8963,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baeb2780690380592f86205aa4ee49815feb2acad8c2f59e6dd207148c3f1fcd" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -9387,7 +9387,7 @@ version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "blake2-rfc", - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -9729,7 +9729,7 @@ name = "sp-npos-elections-solution-type" version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -9808,7 +9808,7 @@ version = "4.0.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ "Inflector", - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", @@ -10285,7 +10285,7 @@ name = "substrate-test-utils-derive" version = "0.10.0-dev" source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" dependencies = [ - "proc-macro-crate 1.0.0", + "proc-macro-crate 1.1.0", "proc-macro2", "quote", "syn", diff --git a/node/overseer/overseer-gen/proc-macro/Cargo.toml b/node/overseer/overseer-gen/proc-macro/Cargo.toml index 2940499c011a..fd76912bce81 100644 --- a/node/overseer/overseer-gen/proc-macro/Cargo.toml +++ b/node/overseer/overseer-gen/proc-macro/Cargo.toml @@ -15,7 +15,7 @@ proc-macro = true syn = { version = "1.0.76", features = ["full", "extra-traits"] } quote = "1.0.9" proc-macro2 = "1.0.26" -proc-macro-crate = "1.0.0" +proc-macro-crate = "1.1.0" [dev-dependencies] assert_matches = "1.5.0" From 524439e78f6df9c4dd5d821357d3e151ab4d95ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Sep 2021 00:29:41 +0000 Subject: [PATCH 07/52] Bump parity-scale-codec from 2.2.0 to 2.3.0 (#3833) Bumps [parity-scale-codec](https://github.com/paritytech/parity-scale-codec) from 2.2.0 to 2.3.0. - [Release notes](https://github.com/paritytech/parity-scale-codec/releases) - [Changelog](https://github.com/paritytech/parity-scale-codec/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/parity-scale-codec/compare/v2.2...parity-scale-codec-v2.3.0) --- updated-dependencies: - dependency-name: parity-scale-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- core-primitives/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- node/collation-generation/Cargo.toml | 2 +- node/core/approval-voting/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/core/chain-api/Cargo.toml | 2 +- node/core/dispute-participation/Cargo.toml | 2 +- node/core/pvf/Cargo.toml | 2 +- node/jaeger/Cargo.toml | 2 +- node/network/availability-distribution/Cargo.toml | 2 +- node/network/availability-recovery/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/dispute-distribution/Cargo.toml | 2 +- node/network/protocol/Cargo.toml | 2 +- node/network/statement-distribution/Cargo.toml | 2 +- node/primitives/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/test/client/Cargo.toml | 2 +- parachain/test-parachains/Cargo.toml | 2 +- parachain/test-parachains/adder/Cargo.toml | 2 +- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/common/slot_range_helper/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- statement-table/Cargo.toml | 2 +- xcm/Cargo.toml | 2 +- xcm/xcm-builder/Cargo.toml | 2 +- xcm/xcm-executor/Cargo.toml | 2 +- 37 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index da9fc51114c1..c887e6fd17d7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5405,9 +5405,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8975095a2a03bbbdc70a74ab11a4f76a6d0b84680d87c68d722531b0ac28e8a9" +checksum = "e11263a97373b43da4b426edbb52ef99a7b51e2d9752ef56a7f8b356f48495a5" dependencies = [ "arrayvec 0.7.0", "bitvec 0.20.1", diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index 9b469657bde1..0e0322d2dd22 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -9,7 +9,7 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = [ "derive" ] } parity-util-mem = { version = "0.10.0", default-features = false, optional = true } [features] diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index f2d9475cc5d1..b0db6c75f4d1 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" polkadot-primitives = { path = "../primitives" } polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../node/primitives" } novelpoly = { package = "reed-solomon-novelpoly", version = "1.0.0" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["std", "derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["std", "derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 70d466ebd553..510f6222bf6f 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -15,7 +15,7 @@ polkadot-primitives = { path = "../../primitives" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/core/approval-voting/Cargo.toml b/node/core/approval-voting/Cargo.toml index 06d6fce4c336..c071e583cf41 100644 --- a/node/core/approval-voting/Cargo.toml +++ b/node/core/approval-voting/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" futures-timer = "3.0.2" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } tracing = "0.1.27" bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } lru = "0.6" diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 9b72f74c09f0..69c37ad3b46f 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -12,7 +12,7 @@ thiserror = "1.0.26" tracing = "0.1.27" bitvec = "0.20.1" -parity-scale-codec = { version = "2.0.0", features = ["derive"] } +parity-scale-codec = { version = "2.3.0", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index e1a3e0fa4ec3..0c818fc62f51 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -10,7 +10,7 @@ futures = "0.3.17" tracing = "0.1.27" sp-maybe-compressed-blob = { package = "sp-maybe-compressed-blob", git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-parachain = { path = "../../../parachain" } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index 076087592e4e..a0e4100d3454 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -17,7 +17,7 @@ sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = [dev-dependencies] futures = { version = "0.3.17", features = ["thread-pool"] } maplit = "1.0.2" -parity-scale-codec = "2.0.0" +parity-scale-codec = "2.3.0" polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/dispute-participation/Cargo.toml b/node/core/dispute-participation/Cargo.toml index 65c56e2423f2..dff65a8fc260 100644 --- a/node/core/dispute-participation/Cargo.toml +++ b/node/core/dispute-participation/Cargo.toml @@ -15,6 +15,6 @@ polkadot-primitives = { path = "../../../primitives" } [dev-dependencies] assert_matches = "1.5.0" -parity-scale-codec = "2.0.0" +parity-scale-codec = "2.3.0" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers"} sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 78b8c51ac516..c4289f5bbfaa 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -20,7 +20,7 @@ slotmap = "1.0" tracing = "0.1.27" pin-project = "1.0.8" rand = "0.8.3" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } polkadot-parachain = { path = "../../../parachain" } polkadot-core-primitives = { path = "../../../core-primitives" } polkadot-node-subsystem-util = { path = "../../subsystem-util"} diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index 6e95dc170080..51858a654100 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -16,4 +16,4 @@ sc-network = { git = "https://github.com/paritytech/substrate", branch = "master sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" log = "0.4.13" -parity-scale-codec = { version = "2.0.0", default-features = false } +parity-scale-codec = { version = "2.3.0", default-features = false } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index f54f45b37d91..79cc95a418fe 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" tracing = "0.1.27" -parity-scale-codec = { version = "2.0.0", features = ["std"] } +parity-scale-codec = { version = "2.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/availability-recovery/Cargo.toml b/node/network/availability-recovery/Cargo.toml index a7eaf36d8cbf..e4d56f4c6841 100644 --- a/node/network/availability-recovery/Cargo.toml +++ b/node/network/availability-recovery/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-primitives = { path = "../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index ee39a12bc57f..983f03457c8b 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -9,7 +9,7 @@ async-trait = "0.1.51" futures = "0.3.17" tracing = "0.1.27" polkadot-primitives = { path = "../../../primitives" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index d1cbeadc5a36..8c8bd3cb63bd 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -30,6 +30,6 @@ assert_matches = "1.4.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "2.0.0", features = ["std"] } +parity-scale-codec = { version = "2.3.0", features = ["std"] } polkadot-subsystem-testhelpers = { package = "polkadot-node-subsystem-test-helpers", path = "../../subsystem-test-helpers" } diff --git a/node/network/dispute-distribution/Cargo.toml b/node/network/dispute-distribution/Cargo.toml index 0cf8c251ec3a..accc229e86c3 100644 --- a/node/network/dispute-distribution/Cargo.toml +++ b/node/network/dispute-distribution/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.17" tracing = "0.1.27" derive_more = "0.99.14" -parity-scale-codec = { version = "2.0.0", features = ["std"] } +parity-scale-codec = { version = "2.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index f3c82abd7f11..4b94db56e7c4 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -10,7 +10,7 @@ async-trait = "0.1.51" polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } strum = { version = "0.21", features = ["derive"] } diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 82cec326a5c5..b0e935c2cb8b 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } arrayvec = "0.5.2" indexmap = "1.7.0" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } derive_more = "0.99.11" thiserror = "1.0.26" diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index d8b15b808005..c425c97613ad 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -9,7 +9,7 @@ description = "Primitives types for the Node-side" bounded-vec = "0.4" futures = "0.3.17" polkadot-primitives = { path = "../../primitives" } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 5bcf8b4658a4..fb844d3ce8a7 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -9,7 +9,7 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.51" futures = "0.3.17" itertools = "0.10" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } pin-project = "1.0.8" rand = "0.8.3" thiserror = "1.0.26" diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index bae3ef3fb70e..8e0599e88a4d 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } # Polkadot dependencies polkadot-test-runtime = { path = "../../../runtime/test-runtime" } diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index 13b9febd2f1c..27f11923cd98 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] tiny-keccak = "2.0.2" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } adder = { package = "test-parachain-adder", path = "adder" } halt = { package = "test-parachain-halt", path = "halt" } diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 80cd51ea8de5..49c35c5cc85f 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.2.1", features = [ "global" ] } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index b193fb608575..20bc3a1c4bbb 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -14,7 +14,7 @@ name = "adder_collator_puppet_worker" path = "bin/puppet_worker.rs" [dependencies] -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } futures = "0.3.17" futures-timer = "3.0.2" log = "0.4.13" diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 4b2065d4cb6b..1c36fd0a807d 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] serde = { version = "1.0.130", optional = true, features = ["derive"] } scale-info = { version = "1.0", default-features = false, features = ["bit-vec", "derive"] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 8388f2cc2016..5d4f30911d28 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] impl-trait-for-tuples = "0.2.0" bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.13", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/common/slot_range_helper/Cargo.toml b/runtime/common/slot_range_helper/Cargo.toml index 54d1fe693d0b..7e3ec8a8b48e 100644 --- a/runtime/common/slot_range_helper/Cargo.toml +++ b/runtime/common/slot_range_helper/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] paste = "1.0" enumn = "0.1.3" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 4c2fa8743903..6b177e1f3c82 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.2.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 3b75b95619fe..359ad454dd48 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 0a4532100951..18121fdb415a 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.2.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index d3fef706b679..527e66890819 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" build = "build.rs" [dependencies] -parity-scale-codec = { version = "2.2.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } serde = { version = "1.0.130", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 7a506849efc3..e918b0e1d475 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index ab1375138dd4..12edec1b017c 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.2.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index 4c94017dea6d..a31f84efac8d 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "polkadot-primitives", path = "../primitives" } diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 21becd6cb140..8d60407ea8cc 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] impl-trait-for-tuples = "0.2.0" -parity-scale-codec = { version = "2.0.0", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = [ "derive" ] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } derivative = {version = "2.2.0", default-features = false, features = [ "use_core" ] } log = { version = "0.4.14", default-features = false } diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index b482c5799a4f..fea1c7cbf71e 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -6,7 +6,7 @@ description = "Tools & types for building with XCM and its executor." version = "0.9.9" [dependencies] -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index d0b6d71d8fe7..b3e6b6eb9045 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -7,7 +7,7 @@ version = "0.9.9" [dependencies] impl-trait-for-tuples = "0.2.0" -parity-scale-codec = { version = "2.0.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } From ec29b1ac9a53cc7d20889e35fabb3202ac00efd5 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 22 Sep 2021 23:21:06 -0700 Subject: [PATCH 08/52] Ensure all parachain configuration extrinsics are operational (#3912) --- runtime/parachains/src/configuration.rs | 205 +++++++++++++++++++----- 1 file changed, 164 insertions(+), 41 deletions(-) diff --git a/runtime/parachains/src/configuration.rs b/runtime/parachains/src/configuration.rs index f2c94ef91532..69ff43615678 100644 --- a/runtime/parachains/src/configuration.rs +++ b/runtime/parachains/src/configuration.rs @@ -333,7 +333,10 @@ pub mod pallet { #[pallet::call] impl Pallet { /// Set the validation upgrade frequency. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_validation_upgrade_frequency( origin: OriginFor, new: T::BlockNumber, @@ -346,7 +349,10 @@ pub mod pallet { } /// Set the validation upgrade delay. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_validation_upgrade_delay( origin: OriginFor, new: T::BlockNumber, @@ -359,7 +365,10 @@ pub mod pallet { } /// Set the acceptance period for an included candidate. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_code_retention_period( origin: OriginFor, new: T::BlockNumber, @@ -372,7 +381,10 @@ pub mod pallet { } /// Set the max validation code size for incoming upgrades. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_code_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; ensure!(new <= MAX_CODE_SIZE, Error::::InvalidNewValue); @@ -383,7 +395,10 @@ pub mod pallet { } /// Set the max POV block size for incoming upgrades. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_pov_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; ensure!(new <= MAX_POV_SIZE, Error::::InvalidNewValue); @@ -394,7 +409,10 @@ pub mod pallet { } /// Set the max head data size for paras. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_head_data_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; ensure!(new <= MAX_HEAD_DATA_SIZE, Error::::InvalidNewValue); @@ -405,7 +423,10 @@ pub mod pallet { } /// Set the number of parathread execution cores. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_parathread_cores(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -415,7 +436,10 @@ pub mod pallet { } /// Set the number of retries for a particular parathread. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_parathread_retries(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -425,7 +449,10 @@ pub mod pallet { } /// Set the parachain validator-group rotation frequency - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_group_rotation_frequency( origin: OriginFor, new: T::BlockNumber, @@ -441,7 +468,10 @@ pub mod pallet { } /// Set the availability period for parachains. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_chain_availability_period( origin: OriginFor, new: T::BlockNumber, @@ -457,7 +487,10 @@ pub mod pallet { } /// Set the availability period for parathreads. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_thread_availability_period( origin: OriginFor, new: T::BlockNumber, @@ -473,7 +506,10 @@ pub mod pallet { } /// Set the scheduling lookahead, in expected number of blocks at peak throughput. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_scheduling_lookahead(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -483,7 +519,10 @@ pub mod pallet { } /// Set the maximum number of validators to assign to any core. - #[pallet::weight(T::WeightInfo::set_config_with_option_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_option_u32(), + DispatchClass::Operational, + ))] pub fn set_max_validators_per_core( origin: OriginFor, new: Option, @@ -496,7 +535,10 @@ pub mod pallet { } /// Set the maximum number of validators to use in parachain consensus. - #[pallet::weight(T::WeightInfo::set_config_with_option_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_option_u32(), + DispatchClass::Operational, + ))] pub fn set_max_validators(origin: OriginFor, new: Option) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -506,7 +548,10 @@ pub mod pallet { } /// Set the dispute period, in number of sessions to keep for disputes. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_dispute_period(origin: OriginFor, new: SessionIndex) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -516,7 +561,10 @@ pub mod pallet { } /// Set the dispute post conclusion acceptance period. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_dispute_post_conclusion_acceptance_period( origin: OriginFor, new: T::BlockNumber, @@ -530,7 +578,10 @@ pub mod pallet { } /// Set the maximum number of dispute spam slots. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_dispute_max_spam_slots(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -540,7 +591,10 @@ pub mod pallet { } /// Set the dispute conclusion by time out period. - #[pallet::weight(T::WeightInfo::set_config_with_block_number())] + #[pallet::weight(( + T::WeightInfo::set_config_with_block_number(), + DispatchClass::Operational, + ))] pub fn set_dispute_conclusion_by_time_out_period( origin: OriginFor, new: T::BlockNumber, @@ -554,7 +608,10 @@ pub mod pallet { /// Set the no show slots, in number of number of consensus slots. /// Must be at least 1. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_no_show_slots(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; @@ -567,7 +624,10 @@ pub mod pallet { } /// Set the total number of delay tranches. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_n_delay_tranches(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -577,7 +637,10 @@ pub mod pallet { } /// Set the zeroth delay tranche width. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_zeroth_delay_tranche_width(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -587,7 +650,10 @@ pub mod pallet { } /// Set the number of validators needed to approve a block. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_needed_approvals(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -597,7 +663,10 @@ pub mod pallet { } /// Set the number of samples to do of the `RelayVRFModulo` approval assignment criterion. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_relay_vrf_modulo_samples(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -607,7 +676,10 @@ pub mod pallet { } /// Sets the maximum items that can present in a upward dispatch queue at once. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_upward_queue_count(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -617,7 +689,10 @@ pub mod pallet { } /// Sets the maximum total size of items that can present in a upward dispatch queue at once. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_upward_queue_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -627,7 +702,10 @@ pub mod pallet { } /// Set the critical downward message size. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_downward_message_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -637,7 +715,10 @@ pub mod pallet { } /// Sets the soft limit for the phase of dispatching dispatchable upward messages. - #[pallet::weight(T::WeightInfo::set_config_with_weight())] + #[pallet::weight(( + T::WeightInfo::set_config_with_weight(), + DispatchClass::Operational, + ))] pub fn set_ump_service_total_weight(origin: OriginFor, new: Weight) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -647,7 +728,10 @@ pub mod pallet { } /// Sets the maximum size of an upward message that can be sent by a candidate. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_upward_message_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -657,7 +741,10 @@ pub mod pallet { } /// Sets the maximum number of messages that a candidate can contain. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_max_upward_message_num_per_candidate( origin: OriginFor, new: u32, @@ -670,7 +757,10 @@ pub mod pallet { } /// Sets the number of sessions after which an HRMP open channel request expires. - #[pallet::weight(T::WeightInfo::set_hrmp_open_request_ttl())] + #[pallet::weight(( + T::WeightInfo::set_hrmp_open_request_ttl(), + DispatchClass::Operational, + ))] // Deprecated, but is not marked as such, because that would trigger warnings coming from // the macro. pub fn set_hrmp_open_request_ttl(_origin: OriginFor, _new: u32) -> DispatchResult { @@ -678,7 +768,10 @@ pub mod pallet { } /// Sets the amount of funds that the sender should provide for opening an HRMP channel. - #[pallet::weight(T::WeightInfo::set_config_with_balance())] + #[pallet::weight(( + T::WeightInfo::set_config_with_balance(), + DispatchClass::Operational, + ))] pub fn set_hrmp_sender_deposit(origin: OriginFor, new: Balance) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -689,7 +782,10 @@ pub mod pallet { /// Sets the amount of funds that the recipient should provide for accepting opening an HRMP /// channel. - #[pallet::weight(T::WeightInfo::set_config_with_balance())] + #[pallet::weight(( + T::WeightInfo::set_config_with_balance(), + DispatchClass::Operational, + ))] pub fn set_hrmp_recipient_deposit(origin: OriginFor, new: Balance) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -699,7 +795,10 @@ pub mod pallet { } /// Sets the maximum number of messages allowed in an HRMP channel at once. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_channel_max_capacity(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -709,7 +808,10 @@ pub mod pallet { } /// Sets the maximum total size of messages in bytes allowed in an HRMP channel at once. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_channel_max_total_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -719,7 +821,10 @@ pub mod pallet { } /// Sets the maximum number of inbound HRMP channels a parachain is allowed to accept. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_max_parachain_inbound_channels( origin: OriginFor, new: u32, @@ -732,7 +837,10 @@ pub mod pallet { } /// Sets the maximum number of inbound HRMP channels a parathread is allowed to accept. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_max_parathread_inbound_channels( origin: OriginFor, new: u32, @@ -745,7 +853,10 @@ pub mod pallet { } /// Sets the maximum size of a message that could ever be put into an HRMP channel. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_channel_max_message_size(origin: OriginFor, new: u32) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { @@ -755,7 +866,10 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP channels a parachain is allowed to open. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_max_parachain_outbound_channels( origin: OriginFor, new: u32, @@ -768,7 +882,10 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP channels a parathread is allowed to open. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_max_parathread_outbound_channels( origin: OriginFor, new: u32, @@ -781,7 +898,10 @@ pub mod pallet { } /// Sets the maximum number of outbound HRMP messages can be sent by a candidate. - #[pallet::weight(T::WeightInfo::set_config_with_u32())] + #[pallet::weight(( + T::WeightInfo::set_config_with_u32(), + DispatchClass::Operational, + ))] pub fn set_hrmp_max_message_num_per_candidate( origin: OriginFor, new: u32, @@ -794,7 +914,10 @@ pub mod pallet { } /// Sets the maximum amount of weight any individual upward message may consume. - #[pallet::weight(T::WeightInfo::set_config_with_weight())] + #[pallet::weight(( + T::WeightInfo::set_config_with_weight(), + DispatchClass::Operational, + ))] pub fn set_ump_max_individual_weight(origin: OriginFor, new: Weight) -> DispatchResult { ensure_root(origin)?; Self::update_config_member(|config| { From 257bd5c53677869e37742451e05c8fd1907f1e2a Mon Sep 17 00:00:00 2001 From: Pierre Besson Date: Thu, 23 Sep 2021 13:25:08 +0200 Subject: [PATCH 09/52] Add new rococo chainspec (#3905) --- node/service/res/rococo.json | 272 +++++++++++++++++------------------ 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/node/service/res/rococo.json b/node/service/res/rococo.json index b5c28f5289a2..31017161f205 100644 --- a/node/service/res/rococo.json +++ b/node/service/res/rococo.json @@ -1,6 +1,6 @@ { "name": "Rococo", - "id": "rococo_v1_8", + "id": "rococo_v1_11", "chainType": "Live", "bootNodes": [ "/ip4/34.90.151.124/tcp/30333/p2p/12D3KooWF7BUbG5ErMZ47ZdarRwtpZamgcZqxwpnFzkhjc1spHnP", @@ -32,161 +32,161 @@ "genesis": { "raw": { "top": { - "0x42b50b77ef717947e7043bb52127d6654e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ee41af0530f856db6772616e8036be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0x6a0da05ca59913bc38a8630590f2627c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a31727416d0095b96772616e80e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e887ec3d30b64e896173676e80481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f7aec8a47707294b61756469802c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x2762c81376aaa894b6f64c67e58cc6504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x94eadf0156a8ad5156507773d0471e4a64fb6e378f53d72f7859ad0e6b6d8810": "0x0000000000", - "0x08c41974a97dbf15cfbec28365bea2da4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb393c0875f4080dabc8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dccda6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa834992156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", - "0xa8c65209d47ee80f56b0011e8fd91f504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", - "0x94eadf0156a8ad5156507773d0471e4a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195075a33a2ed5ac2cdc6265656684034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d62276": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950636f684eb09a15046772616e80d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xf5207f03cfdce586301014700e2c25934e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ef9482dba3e5b0d862616265807c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19509df5f4072c4244956261626580764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe21": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x20a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35010000000000000038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f0100000000000000d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a0100000000000000764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe2101000000000000007c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd808130100000000000000bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b0100000000000000720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed783720100000000000000da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa83490100000000000000", - "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x2062475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a040402a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b1602ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a008062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x200500000003000000040000000200000001000000060000000000000007000000", - "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00", - "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503c75eb9438a505fc6261626580a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb319b9aeb2f5add22992ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0xe1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2aee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a53", - "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043f25e7a03a30387696d6f6e8092156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0xcd710b30bd2eab0352ddcc26417aa1940b76934f4cc08dee01012d059e1b83ee": "0x00", "0x2f85f1e1378cb2d7b83adbaf0b5869c24e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da914076ec446ba6876ba5cb99bdb7129be8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb33bb8d7990ae3975438f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe218e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b752496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c0307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d58", + "0x3d9cad2baf702e20b136f4c8900cd8024e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x4da2c41eaffa8e1a791c5d65beeefd1f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da99677d775b618280f5c76d192b43ea38c38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503eaa3e59477bc9506261626580720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0xa8c65209d47ee80f56b0011e8fd91f504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90d10cc4959af6a68eba3bc06d5c7bc28520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc8a2d09463effcc78a22d75b9cb87dffc": "0x0000000000000000", + "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", + "0x94eadf0156a8ad5156507773d0471e4a1e8de4295679f32032acb318db364135": "0x00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950776743a4ae520892617564698064d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", "0xcec5070d609dd3497f72bde07fc96ba0e0cdd062e6eaf24295ad4ccfc41d4609": "0x2062475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfaa076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed3586975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef7430e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477bf49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d62276520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022afcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee81668bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80df6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f34903a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6fe1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2aee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a5338f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a040436be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe218e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b752496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c0307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d5802a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b166c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c817c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac0116c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb53102fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a602ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5bc4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff351efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a004bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11ffab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df036858062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab474ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dccda6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa834992156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", - "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x000030000080000008000000000010000000100005000000050000000100000001000000000050000004000000286bee00000000040000000400000000000000000000000000000000000000000000000000000000000000000000000800000000200000040000000400000000001000b00400000000000000000000140000000400000004000000000000000000060000006400000002000000c8000000020000001900000000000000020000000200000000c817a804000000", - "0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e7240ce913e160eb6261626580bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3328718e032416872520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0xfcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee81668bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80df6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f34903a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950149cf457032f53e57061726180d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0x1405f2411d0af5a7ff397e7c9dc68d194e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xf5207f03cfdce586301014700e2c25934e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f82586833f834350b4d435d5fd269ecc8b": "0x200500000003000000040000000200000001000000060000000000000007000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d2937d2d9650f057061726180a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x20f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3cf6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f3492c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", + "0x31a3a2ce3603138b8b352e8f192ca55a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501e69501baac264d4696d6f6e80ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e592f5ef74f560666173676e8068bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", "0x3a6772616e6470615f617574686f726974696573": "0x01200e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa0100000000000000fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d0100000000000000e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1010000000000000036be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef401000000000000006c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c810100000000000000d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc3301000000000000004bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf1401000000000000004ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc0100000000000000", - "0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503eaa3e59477bc9506261626580720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed0b865484219eb06173676e80244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950091b1bd4e8d4c12061756469802496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb393c0875f4080dabc8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x4ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dccda6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa834992156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ee41af0530f856db6772616e8036be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0x1405f2411d0af5a7ff397e7c9dc68d194e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3dc18ebe8d771cfa002ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0xd9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5bc4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff351efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a9e62b8a5c8760f06265656684033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0x3a65787472696e7369635f696e646578": "0x00000000", - "0x26aa394eea5630e07c48ae0c9558cef75684a022a34dd8bfa2baaf44f172b710": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500a3d203cf823b13d6173676e80821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b75": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502d2937d2d9650f057061726180a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3df32aff68041374f02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c817c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac0116c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb53102fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195054435a901133fb946173676e8016c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", - "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x2086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef74348a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae86298788e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2cd2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1ac4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca65192156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66", - "0x50e709b04947c0cd2f04727ef76e88f64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x2762c81376aaa894b6f64c67e58cc6504e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502e5e3ed1cdc323ab626565668402fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0x08c41974a97dbf15cfbec28365bea2da5e0621c4869aa60c02be9adcc98a0d1d": "0x20034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d6227603a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a530307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d5802fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", + "0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x201efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d000000000000000000000000000000000000000100000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", + "0x2ce461329fdf4be12bce01afc0af09bc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0x5c0d1176a568c1f92944340dbfed9e9c530ebca703c85910e7164cb7d1c9e47b": "0x9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00", "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3c25dd840975e8979fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00": "0x4bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed78372560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11ffab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da995445d4efb6eae1971fb125f6190c49202a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da90d10cc4959af6a68eba3bc06d5c7bc28520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x08c41974a97dbf15cfbec28365bea2da8f05bccc2f70ec66a32999c5761156be": "0x0000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9935ae9d4cb148940af99a366d100d5af02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a00d3cb0425699a66772616e804bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501b1525326b5d47776772616e80fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507f532159f03d44eb6175646980f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xca32a41f4b3ed515863dc0a38697f84e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d46d2cb2a4d496b46265656684025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503639d22ceafce3266265656684020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195021e85cbadb3ce9a26772616e806c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c81": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", - "0xcec5070d609dd3497f72bde07fc96ba0ff3ae12770bea2e48d9bde7385e7a25f": "0x0000000002000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19502e5e3ed1cdc323ab626565668402fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d31ed6cbd51d9f636265656684039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a53": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0000362b4c8ee30d0000000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501e69501baac264d4696d6f6e80ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0x2099d7f109d6e535fb000bba623fd4404e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950438ac98f6d864839696d6f6e80d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950776743a4ae520892617564698064d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bad35ce880ec90d4696d6f6e80c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", - "0xf9922c78cfa3c316d27a3eb48145ab1b4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", - "0xcd710b30bd2eab0352ddcc26417aa1940b76934f4cc08dee01012d059e1b83ee": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ab7b30d24546522861756469804e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0x196e027349017067f9eb56e2c4d9ded54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x1cb6f36e027abb2091cfb5110ab5087f66e8f035c8adbe7f1547b43c51e6f8a4": "0x00000000", - "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da942cd783ab1dc80a5347fe6c6f20ea02b9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e7240ce913e160eb6261626580bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x20f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3cf6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f3492c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", "0x1cb6f36e027abb2091cfb5110ab5087f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x4da2c41eaffa8e1a791c5d65beeefd1f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xda7d4185f8093e80caceb64da45219e34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x2ce461329fdf4be12bce01afc0af09bc4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", - "0xcd710b30bd2eab0352ddcc26417aa1944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x2b06af9719ac64d755623cda8ddd9b944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da945315c068df2baa1c677b9b3e81f7439fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x94eadf0156a8ad5156507773d0471e4a1e8de4295679f32032acb318db364135": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5bc812467e867ac7061726180669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950feca8028a77ba7626772616e804ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0x08c41974a97dbf15cfbec28365bea2daaacf00b9b41fda7a9268821c2a2b3e4c": "0x20034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d6227603a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a530307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d5802fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a068f246c1094c1462656566840307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d58": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d46d2cb2a4d496b46265656684025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500d1064d79ff558056772616e800e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e193783dd6b845ea6173676e80ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477b": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195068dec3fce5ade0966261626580da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa8349": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012b62e212b6a7a9c696d6f6e808e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b483908290ae9b936c519917440306ea62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x26aa394eea5630e07c48ae0c9558cef7a44704b568d21667356a5a050c118746b4def25cfda6ef3a00000000": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0x08c41974a97dbf15cfbec28365bea2daaacf00b9b41fda7a9268821c2a2b3e4c": "0x20034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d6227603a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a530307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d5802fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", + "0x2099d7f109d6e535fb000bba623fd4404e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xca32a41f4b3ed515863dc0a38697f84e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da914076ec446ba6876ba5cb99bdb7129be8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ed0b865484219eb06173676e80244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba04e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950585cf1f6f8e46326696d6f6e8086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x1cb6f36e027abb2091cfb5110ab5087f5e0621c4869aa60c02be9adcc98a0d1d": "0x20a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35010000000000000038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f0100000000000000d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a0100000000000000764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe2101000000000000007c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd808130100000000000000bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b0100000000000000720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed783720100000000000000da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa83490100000000000000", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507acca078b878d43a70617261801efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x3a636f6465": "0x52bc537646db8e0528b52ffd00581cdc045e16c60814551058a98a3a7c037a036ab2e620e6db16f9338285d687896955fea4742a4267dc65a46c795cbd660ed6e779cbef538826fc839e1d23d37573ca31989fe75761bad91569b93cd7ff3cded45d4bf62e217b6f2953923271146813aa14fde68f67ef3b7cb159b387bfc761a4993e08523187fa16bf804a2a57388921775fcb4bdeef48d3f3fd26edf7f82569b6649754ccc1cb6ac319633449cb2007aa4115a8da9ee1723df983279ced53b19dac196cf2fb26ebf73d0dd2088cf49ce532f8df831d5612597a9034c34f42ea422aca402baafbefed83630d3f925221dbf0234df0fbc126656cb0305816df66cf54fc263b8bdfd31e7ee4e99ba419b4a19426e34b39bd82caf13fd2fc5ec68652feb093538ee26426ff746e6c65fcd3d31e649d0cdef0ec9aa0e3851f49a5905f4a9124ae5cb972a51c1fbc5da977b73339a957b295d897e337bdb5adc9f4357f2435233b59b389ecef71f054331565a01495e47bf0ed00825e00d6d0451aea8320f83d0db658434fa69487f93d9da1fef77ddfd355b4e17bf041f044e20cd6f044523332d8e189a449c8a08727922e2183373c91e237e97924a750db1550bc1ca5330f4f6a161ff44423a3f8542c328ae20cd48c2c3e48af7b3126b30259fcce2792b691c112193ee8611569a03180c1b2889ff43f7142733058fe61c9fe60890c7177a9c3902cbd483ef909b3bf296732fde9c113a539e19748b3e6b0447a7f7af2d3657fd353f1868a466edcd34e3ab1c9fda089741243ae34a7f42169762e3d58c390f4de4483f7e1d750249dd42b0308ca8d29e5510a49b3e6d2f7784f8324cd25923e89a4ffd5a75d9f56548769b370ee9a816a90d8df11c0028cf53fda3266168fdeb1d9ff8b180ab2ab9638d9ff0b21a0e31abd55ff71583cea11ee2a7d4fdd55c2efadfa1f3bf28515236011051b58f181ae76058b4ac21f7e9c956a7c1c168fc731655abb82c6eb5887c1129d6c5adb2c4f8055a2933f4b5ab9dfe48f6719acc4bebc1848a7bc42e6069bfb2d500deaae3f00bba70fc6989e70ebc32a27f10f9b557ba7a9b75a1895ac72fd7ac7fcbefbbe6fdf54b2cadd7b0f76a447d2a1f1fb7e2aca70bfa73fd28755eeef5cb4ecafa201a2d45cb1c53eacf2c549eccf60316d56f56a27514b821599d692d0848f4c6b6b1c21ebf87d90fa182b2edfa7666dc25597e8d67dfa559ca1e62a13c1a8e3aef7b76fed7fb3b059b3b524ab8a3438c6f977578579eb3e362bccfc7c1f04694822eb9466ddb7a459b37d273f326cd6fd2acae0e1af59f7bf7cbfc67ac7bef7e62b9348d8f4ef1eecc80a03c25861f93e156920bd19942d89acd9c9305bb2f347aa9a759f8a3278786cd67d73cc97da7295e5fb15d63bdddfaf53da35c260b021cafbb677fcbbee5b94a1c342c62f3b39d3acfb600dffbe9334e3b48b9677d5acfb3d2d4e319a3af9d67cbf480fbd436b6b18e5fb3fbd63ff3e10d5859aefd32f9b3a7ee6fbd45db53469cdf6261d235f9a46bea549d5c81597e94dd0add70a589fd22134d3efe91d1bc0a8358b664a6390bf376d26bd19666a02c9f4767f4d25abecfdfdfab45dfd268f4ce95b52d5acfa201dc048bf48811a29f041a6a27f4fd376d113068321519a33d93e6d172d4d9c6c8980c4099658e2881c194528ed7fbd73b37d5bc40bb2c5a6129d4cc2ab66d5ffb000c69a6936c7eca2657d8ffc9a55bf236db3ea5fd286b1fea8ea1d9aebaf7ac77efd99deb1d88633c66816cdf59d1c9b55bf4955b7ead730ae323da77c91bb4cbf80219171aa075483aabb94292198728414232936294b4c812e60eca7fd768cdcff8523105001637dda41e85310a40018e9494408be77fafb59bdd3dd441c91dbcbee6e26607db29fe2f41190668a638eb91faceff5cd3037e8f59378256d1673390acba9f399a37422e821a543ea9b66cdfe358bfece58b33f7d2ad2e0f86b968795f42c46e9425c8e129ae8902715969dc490ebf7b768000b83e5fa55b46184e5fa61efd0dc304ac74c6f82bcb611409a69ef98fdf46d7f7d933e6d166d96fd9db19f7e7f128a69b32c76dcd3415d0f0052008cf6cd55beafd33be627a477cc91d53ba64ebe7f1f48efd87cbf10b2e5fb33edeaf23eed1dcf264fbef7c7dee9bfafea1dfffbf7c3dea97f9fe25c9c849e40df3ba665f58ef938bdd3d94fa11864ffb05d5df2c89dcd99ec4f759480f4298ea993fd414a6db3287d6b80fbf47b1aa464e9412a82d80ccae053d2fc4cbf922dd28ab2cdfaf1ecfdaa77baf79f013b12099ba4f79ef4fac8b17748dffb87a4d924d3074964cd206d56f855a4a166dbac109be17b4f22690ec91fcfdf83b569751389a4b9fb48daaccf5d55bea4dd327f327d4a73cc30d3f707fdab5fb50f92a5a7241565287dff85600d29d93d48c58acda05c9f922ed28a7af363790f5a915254d82c9c66f9939e36ebfb6f16097fd8a46fbfa77bbc92ddd3b159fd5594a1c33237dcaf5f71ffb524152bfe9ad53fae2849f37feeb230180c062bfd597488d737717432bd092ad53b03a98f11a42f8cf41c6228d37388d88f4c4fd81819a43c233d6156649a69eeafa20be309db229b36f77ff5bf8fba8b76cb1c737d73cce697e9f7dbdef19e3eed1dfbf4bfdea1995a2c64bcef91f73bb464cd55bc7f3d9266b08a36747fb1d97df760db1b4eb9fb9eb664cd1e49738b32d8076b78c9eea9489b65aa40908a179b40e4fb1e697ed9fb8e34bba7cdf2bec73b92668f346d47d24cc58b7f3c5b6c9bd5acfa14a7bbda38f06535d2a71d487bc7dffc327d5ac99ac11a569266db3bfdf44127696eb2e66c7ba73e7db04327eb83d54519ea831db630fac7989c18ed8b32341632d6076fd8627d2a5a6ca9288363daacfe9ea6620d343b497350d76a05a44046f04471cc77d96ef9d307a98fb18a32d066991f0d35d366f9f7b46becf707c7dea1d91face1d83bb459f4fd55bd536b36bf6c8ed99f8a32d4efe99e6e52e6862ff77fb9b1cc0dfdf6fb2dfea9b962da2cd366fa54b4a17e63b3bf7e4f77ad5680140063bfb9cafefeabdea1ef3fd33bf5fd6dbb6ae93ff60efd828b26b23fed1d9a4d55f6a7388e937ca63741b5d200d220232ad32f4a60cb1405522abe60c4997e410503d9cbf40b2a5372cdf405a43a3f467a41da63a4577c4275011a69944c4d9898300d2116c174849813d9109520eac004331561a222ae21aa212641341291200641c499306092621212812096218e219221d640b481f885698a48035106620cc416885c20e9410cc167845008df1144108441107310e24225442642344025804900d9083510ba4094891ae86450c281d884f881921ae05178a5f3a29484900aa014c211845508ab0849506243a4e2c520ec226401f884b005e10bc02890a608b7e86050528208ebba2049515a43dc8224045210484020e9806423e14868906ea41e9078403201290b710662112014ba189472a21360ce44843825a4855c8427290a7109d2ac64f318b8170e03efc24f7f81bbc0b9f02dc424442fea15d58a4a82274e9a3059a284010400a22706184c46884410a7201e894f10d110cf107f209a218621e22089299e405481e8848f8baf07e295ef07612c2cc29b4288825007df0e3e22542084539478204641848248055108e012c026804e00db0099d042e119a017600a3c31c01080528051946a508ac101eae9e5a02482ea034f07750724267c5d7c39f8581086402c1259408282e4c45784ef0851e80bc267820ff79df199d1b06f88700ae2d077fb78f091113ef189f1f9e01342380ba1e8a4f86a103af1a140f4c017835a858a82520f3e17d4277c2d0891f8b40833f079111e1162e0432334e23bc1878478fb70f0d944297c18f88cf8aa7cb1af884fe893f211e1e5be2c422a3e30c49a678657863786074683c0bb228a9802510bafca7783100761181d1b5d123a24784ef09a5091f08af0a878647427090c920d3a30c227844e089b1032218c42481442213cfaa880647427e8c400cde87410b6413242b705a9894ea233403a827744758117fb640096f10181c404e9899a816f0a280393f092e0ade1a95137f0a5e05341a884308a3017aa202cfa68009e41320aa5f8685f18df184da563350a550a9f0e44291d0bea0fba88fec0b7452882ef8bd04a554217c66783af0c7103df0abe197c30f88abe34be217c2ff84e310b91f6d5445b95a24ee121c13b42f702cfc82b42a7812e892e031d12dd111d063a23ba2a5dac2ba2a3d20975533a291d11dd1075061dec5eb955b854b853b852b851b850b847f709d709b709b78dcb84bb84ab849bbb6cdc24dc35ae1a1709f708d708d7e816e112e10ee1a67185708370817071bdc445e39e717f70cde829b78c4bc6f5c1bddd1e5c1edc1ddc31ae0eae183707d77671505770c3b837a831b86054185c1bdc1adc2f6eedd2e0cee0cae0c6e07a716170bbb8e77dc17541bdc1e5e2b6e0b2e0aee0aae06a714f704d7069178b5b826b4535e292e08ee0567189ae954bc515413dba535c295a891b4545a365178afbc475e232713f70876e07da037789bb81abc4d5c04de222718fb818b846dc2ab7884bc5597085ee943bc485d92bb60a960a5506760a3505560a360a160af6c83ec13ac1b66199609760956073960dbb8655a372a07ea03e417a010805f804e8c40785ca039215e0146112ec123e051aea16de8266a2b6d14395096d442885ee406fa035d018e82ad58c5a461d42ed410f518b50a1508d50d3a84ea84da8b870057509950a750af508d5a8aa519150855089508350cfa8647413f5567150c3106f2082516950bda85d8828a82f680e542ec4155415d416d4a20ad410d4596da242519da8515410540d5425ea12d50315033c109980e802d1043748608732074b05b0665a494320b5fb40314201224d8cf8f4408408585d87253e44889468f5514201233f4b7ed881c8cf119f2748745882840811985218148a1224467e7c7420e2e3b3438e121894c90e4b901009e289cf0f4e882069927f96f8f81084111cbe6403ea7364099325448c1c59c2a4003f4b7e6072e448a629cd804281e2a384a674a64a2bf081002da522fae30365071f9fd2a5a4021d981cf1d1c1a674020a25089f245082f0b9210164290b244d721050900420884c9668414a58e0944a4081f059c25222011d01ede10893263e32252bf4c90f3c20d961099323449034c93e143052b694a8a03b3061f2a4099126487a80f2c4674905981009c227498e5208a80e3e4b78400265c90f3f468e308982e407273e447e9e3069e2f34448690aaa0312223f3e509efc7004a6240585e283e407c913263dfcfc6084080f449034c9469ae8b0c4c8131a6a4a51d020284064064589cf92263e3ce981880e4b7e6042812548a0f859c2e40811273ee8f00465b2434c89090ae567894f141f10501e9620d161894f13223e3f467440a2c3122347789486a88f0e4c8ed0943c409f30d9018a0f941ba50e50283f3f34f9f981098e1207a8911f233a1059c204890e3e3f50904079e2d324476903148acf1326478804f1834409120a185182c44814235f52824269f20393273c10a92969804279c2e4070a931a8c3c3182c3aa6404ad009226f9894f92274c186000b25404f5f1f9c1e78703e4a0830f0f3c18c96147690a8592e4884f0f474a4350283f4b7c9ef8f4b004c997604b90ec2043aa023d8204ca12244f7e80f021128492264d8c1079e2a38312243f94498e305152ce90a8407d2062e4c7880e467e7c0880224dc10248941841f2836409921692136892234c94508088cfcf0f477c80f06121b5419f300140b8423884f7c519b94c83407ac260b906394c67ab60ab509b54cf0a11d243480f2194525abbbb7ae75e7b5dabe75d698cadd555536bbdedd55addbbb76b7b75cfebcffae759ebf9bd37c6ab2cb8df7bdd5de5b5f78e7b5ef5ea5e3dafee5e0dd2b500a95ead77bbe7793fbc98f6bc5a6bf5516bf56e4fd56d49f7dc7b78dd676d0c8dcef5bc4e55bbef45792854edf6505f6d7794b7c7828d41a1509ee77d5e5128140ae52814cabda6430fb582877247b5a3501d0a85eadcc3142a44d5ea1eed6cd7ee39edbaab9dd759f7bc7ad6eb3c77dbedb953afb5ddddba3b8de779deeeb5b777e7b957636b6abcb6a7524ee35d77eed63daf7ad6ba7b6edd6bf75a3db7aa6a3ba75359af767b8ab6c7c3ddbbead53f776faff1947bbec3db3def5a6f6ad5d16279eeee2d5fb772cf53792a95f27befbdddeede9d7b9e7775efaebdbb732f87aa73efcedb6bf13c1c5ebdddbd54a93dcffda67ade1ecabb61dde2749ee735d8378e3d4b3d774fa552a96ae7ee75eeb9a7f23cafbdee545eb7ab542aef73cff33ccf3d6ff7dcf3bc76f7bc76cf73afdd73af3dafdbf3dcbdf6dceb5a696654ddedb9e75ebb6bf5eeda6e49eb795d7b75afbbbddbdbbbbbdbf3aedeedeeeeee79aaeab5d6b7a1b5d25a6768adf1bcaa52d55a2df56866be96a91dad1e43abd79edb7677af5e2bb51ef556799e974aa55229f10922143c95a304b38a4925396284024a943079a203c688cf9318971a171812941f284880f049f9c084e503c90e3e4f9ae0161917283e3c2c31d2c311bcc4a7491323333f478c405962e4c90f911f243e50e007283e5088f8c0448725469ee0d50f1422499e30a9c08fcf121c100aebb25e7458628488cf13234d7c60a2c4c811264a80843a205162240a11282eb4870f487e96fcf004b7ecf0f3034d0b103e3d10f95982e449132247a020f141e5434dfb3cd981c813263f468e3051a2c4c80c901d1a209854e0a726899123477c92ec04f1f124213e7af0b004490f508cf4f0a99f27467ea0e4f071c3b284072450c88ff68012844f1222479028a1c00f4d584fa0a0a80f1d7ca040f179d2c4072647883cf189c2e488cf931e497682f86872c4078a2bece1c88f110a10e9010a92254876608d3b2079e213e5a6851e4182f8d0e1c6c9e7c7c8139f253e3c1031024587233e4498fc3409e2c9911b538e207c9210f901c267090f91871ca527467c941c21e2c38391274c7ea010d14109921e8e10f951f283911d7c7468854a7ca2f828210284111f6c401e982821c2c312243cf0c044094cc9070a11207c74588284c81224467a38b2c30e4c88fc00e1f35196f83889f620b2840912284f7ca210f961c2e409111d7c9ef8e8f08409919d203e88f8f0496244090588f82079f243e407081f1d5196f8788a76104f98f8e0e3431765898ff738e19ade202f2828e8020501d922142828c86910588402057945a8170404140404041414442a42818082be22140808082828a82b4281685010901709a2415d91a01a54bb08050aea224035881609aa404040b50805aa45826a502d4269901701020af222414040405e04a8d2202f428180ba485005aa45806a50755b04a80205050505dd223428a88bd0a0da45826a5050901769c1355029a5d507284668b61b18865c0d064a95366fdae070300c4798e64d1bd90d8e0196a3e68c21c6f2268d91b79c66a6ca260ca751f687a1e62e969af787e174d7c7f291b23f596c722c240ed3fc61c0b9cbe6fb7290391b72f6367c3eec6ff08b94fd6993c3619ab7fce62e9aef06db308ca4b55ef6379f03bfc81c693b1f6673d70baef919bec1b29727cf1a12f6349cd341daf08c843d0de7481b9efd0ce3f0e7c8d35b8e6d1846beec71bc6993a391a4eccfb73d8cc427992367e4e35e46621b86611979cebcf9b9ef6724c69118061c6fe21c0c7806036d86b4c150c4c2240c434f2b65f3851c0c43472f391c9cd40decc636734376c30683cc5d38c01bb3bf91e1c8be1bb81b1c0e7ee1d86e6037b61bb21b361862ee92b97133c3c1e1dce47066376637329c1bb81b1c0cb0179c1bda0dda0d1c1a4eee05e7bc3971c06ec06e9c38e7cd8903760376e3c4b9a1ddc0a1e1e46edccc707037399c1b9bed862c85639381c9c86e6ee0be594a96c2c1e1cc626e6ee46e66df0d5a0a2797657068b01bda0bb6c740a9927c1307ec859bb7fce5cd1be70bb8376fc064f00b466fe29c2fd4bce537e7cde60bb3ec6fbe50cbfe2f10b96b855f2fccdc05942ac1b7653f71ab19ccff85d35d2406c1c761e148164cf6e1a0e5c8b16c670e1c8e1cb0178adcf5c2cac5b0643968608e198e1307bf582c580e190e5a8edc0b3477c1e087b166a91c278c0dc7a2b572d85e70c870b0682d590e1b0e198e1c8c95e3c461c38163b1643972cc7080ac33078ee5cd1cb098998c4d06f66fe6c82183c1418bc1c5c864683966384e1856eee54dd62c26c729830387c3967ab3057bc1c12f0cb1688f5f90e5b0ddbc10cb7df805180ed991cc7694fd796eee7addb0b92b4593fa5cf6d68cc79793e5523860d95bb41d3212c70396fac7af566bc66396e321334ac9b2b7ce6fc72cb5c3a603f78f03bf74b4683b64381e301e9cbb7e96bd652377d05e878edc0d5af6162efbef386fe8b0edd0d1c2ed3875d876e898b56c3b683a4e1d391db2d6b963b6c3a643e64d1eb397bde4585ab96ff6c9523c608f7b81b1d058661f2eb5c3f6b297a725f9e60edacd9b3a72e7ec5bb6c73c31d2dc71be601ed90d3677c05830cf100ece9b3a6c3c336f398da983c60303f103a54a58f69c198f33c783b89c0c2d3b0f1b0b30d6cbac205b61f682cbce826c055aeb5f724e1b0e0d8e9f9965ff154e9c8ec7e191cb81d1e0156c72723539b21d4fc3028d07c6af156caf9cdc2b47f6626107e6417bb18003bf563873703c72def2d78173603c5890ad40cb69e11cdb2b87c6c3e62d6701b6020baf305b019633e371ae9003af906be15870b0198f33b7c24c6605590e8d878d05d80a341b4ccec903275be1c4e5c0563c722ccc623050aa64c13c356ff90ab614064a953298e7f496e7c0609e226f798e6c857968de721e3410f310b140a35d1011f1c0ba20ba657f930796fd5dc0b9cb05bfdedf859bbb5a5cbe150bc8c20964d6e2c3d623b73a72976aa5d299c9b060eb41f3010342533d0b7ee9c8583881cc7cd87239779d54b4ec2ce07a9c2720270cd461c1d683e603068466e4ae10d43959c8813d6c2f3ab81eb2181d9b0e0c973d4627d7e3c32f1d9b0eac074e27d763a673b290eb61d3c1f590e9d058c0f500d203056446ea91eb6c3a3216ce1e34f04d2034920f5837bbb67b9a60aa37819c3a3416705d0fdbeacd1e32983775503a2789855c8b8bcb9b3d702b30e6cd1e3318ccf2a64eeec6d4b19d7008919dd973331fda76662eb0ecbf72d1401ccdbb9cb298ef59fecb6597f9d42cfbdb6a3e86b6036321ffe69f74e1de257b396d9e6596bbb9f1385c369cbfe182dd3cce0e0dff4d1059101cf8e5ba815f2e180e7eedd06ef02b08c64170247eb9708f5f2ed96be715c40607f9f0cb9573c9e0d78e2d480dde810981b968af1d5c101abc231322739d3bb920337867a6038b7913884de603777fcc4ca0e9076e8553f998e52e8cf623877a13488ee48316e25a7ec05c7e9ca63781c050416061986bc140a932e6f371ba60a054b91a65aaa7e5c5e68f1228559ede0422136139884d76eee4767664414e2130da0e6ec7b6030b42cbcd5ade74c976ce20b9203397375d381797ad05e722d70e2d08ce0c22335da06577a1c85d27fc82a1b92bc45766967d086ed6e15ab0b92be67e4a96fd636cd9652db6ec8fcbfe27fc726136043764260437abb96b854f1fbad03de95fb0ec9d2cfb3d6da74fe1970b325b0b3221369c0ba7bb54f804d3f22eb9ec7f667f152cfb9f84d05a3861625e2607f3314368ab87f9572efbbfaec8e1e55742662dd064f06b480c7e0d81c1af1656f825e405b7f01292f3967f0b7e0d395f43602f21b416ce970bb0163afc1a221372b630e2c45909e7cdec0c85136d2599676b418692996ca5d373c1b600433d2dc337879ca62130b085f3be2984767a53086ac47fc2999633897815e25c34840696f048c2f9cc61a054e9e1afec70ae79cbdf6c81967126f2963f2d2da6deea3785ccb2ff6bacb9dfa45d10d12e6c99de045da05650f5ba832c408a63d69ceb7befe98feeea9efeca5dee12bb2bfd25df921ef96af98f7cbd3c50aaf4c2f7fed581dffd4b66afe9edf989fffd8b7a6b76495f1a9f444f7f6da5d4b7fceb8a1c583e852ba1bef42f9a6bc1af2954c4f275450e2efff2af29b118ca96a752cbd71539a8bee55fe70b7e559ab7fc5d30955ab6a8708579cb3f855f15e72d7f164ca59625fcd2f1963f0a37f1963f09bf8a78cb7fc4546a79f1abdabce57fc2af7a622ab5fcf06bf496bf88ebcc5bfe1e7e516ff987984a2d3b0ce22af3d6b55959d78d77467ab39ed6d63dc53d2dbb37753c9abb4fcbd29b15d73d2d4b182855de37e949c240a9d23e2dbd372bec7b5a7e6f565af6eff18ff4c88ebce4ca5bf52df9deaab94c6f805441b53d1b78a239f54f7408fdda02d60b8cf473c5667542ff0263142f3ba9b00c25283f710c85d21c93e698355792e620c6fa418cf47402c2509e293116ca7e2ad686f2c478949ef251dea752cb8ea13c312b437962e10ce589a968284f6ca686f2c4704ac72fef633f42ca33259653daa7d295574579625e0be5899d5c284fece585f2c46c56942796a36cfcea3ef6a3a33c53a478654ca7eca7e2a5c522e589b589f2c44a27ca136319294f2c06457962b8f4a7cf4279623a4ac7affbb11f1ee589dd92272692284faca544796234a5e589dd282d7ef9c77e54ca13fb9af2c4c692f2c45625e5897dd93c3156d94f9f529ec62ffb40a9d2f3baeb3cbcbab7c3a3e357ec47e97ff1e7adfab11fe52b555afc92e257ae5c714cbd551f2855c67e944d1fa8abb67633fda28b33288d82895c7d88ecd8acb04c45c74ee8951c853483327deaa466a7df4e16417bd0a7e0cc9667323d675964f014049e4cff0a6443c9de34b2c54efcca95cf92f0920f9bdf2b09ca22972f5ef2caf6eb7fefa47d2a1a808621cb1fb6d28140d9ace6252d7961ca99ef121a862cdf372d903fd2c53810b980851ec0e00322fb377d4bfa53f1014d941ecce58c2ca4180166bf5a81d120218225664f6eccb0a8c17e9ad034b215180b3d80012cca0b534e202c90ef5b2182a6517a1846d328297ed1075af244143e18620a3058d961d81418acbe9b4db23700058433a8a882942b574afaaa06ea20f7ce0bb065d9bfc9068c49bacf91cd0ed7239a75840f1df244275ba11f4489f0f529c5164fa19253da8fa5ca237a4795fd634c508ca6925c8f6896bfce107098627f18cd7a44f637e910b2ff8bfee8ada09236a1091540a1021a0e062bed57d092b4ac24cc9220035310210517e5142a3965fd58aaa453a874793f064359df923118cad71539d47fe1e02dff6acbfef65f57e470dfe2578fb7fc2f7e5d9183fd8a5fef2d7f8b75a8b7cc2f9bf43ceb9bd4469d50c41756d62063044010c334c548cb200e80c1c5134f74713301134a5ad23775727818acac47f44e8e2a03eaa0eaf609b7d6fbee7dffefbe776f077624bd58e49505fb7e5ffb3ddd5d6bdd76f3e048144025f5c9998c161995d0176b0ee990fafd9509960ee99efea543ea7553c9f85df0eff7f7fbfbe0f7a5effefdfe92fede0b92485742bdf2dffb67fa85102ecf34ebfb5ec67bcf9d653cefe909851adf77244c9bf579e4a539f4a968694ecd14e77a16501c91fbbb27a690bba7b9bf42b1453e35aee4fdeeaba5b8dabf220ddd77df4fe910da4f0dd07dbf4726e9be69a81d363bd2a4b6f6342569fe48d3ec9ef4f53d3209e9bd6f71064fbcc17b12014a4fc2e697495f4527404c216208587e421f4a9013b30252a0c2950c85da88963022830f252883d824fd473281c89ef7f68a3278e20d256c0291bd273d366ba64ffa2bce50ca94a49944cadc407192ef9dbcb2e95ff6cceeebf778677a3ed1846c3fe75ef22349d54a0184c0685bc05a6dad1489e90a30d3f30929f26a06a44f564a69c5691d40abfa5ac9befdce7e671f00e37d21dfd843ef74cfd33b3677df00a2dc7d04da65cbce6fb9a331c89d90dc3d157bda8910e4ee677aa773d7bdaac3e96a6d353840ab924685e5a647467a5619235758a60fb6cb434ab35961624cc10075884cb1596122c551484a87c8d850caf64dda836cff894eb6d8c929d337e9956cfa53520163fd2be857d1c93b1973855151b148c28cfc0090ea30d2d3883672f75e1f04396044fd386084068ae0fe9e7843c52277dfc98a925023d340cf24ca80526ba099e2244e9afde4e7cb4ee8957cbf1367a0671265e4aec33facf2cf2a7b252b1254644a3af12b57400b52910627f54aa666ada41924436dd2a42706a664ff2bded052e4eead68839f463021dfefee5bbcc17e7f634a73daacb8d29c7eff4b9a9ddb46f9327d7a1a1145064f36089192cbe60f1ab001cee60f2690628652ee89ec845eb9520553367f8270c60a8a6cfe10410106219b3f180842a6dfa20d3bcad0229b507ca045a65f6df86030fa5dedc6680205f966913d976d72fd0ee0f2c949cdf7412ad2d0d8acb9ffbec526a539263d3d00cbfdf6ad3843bf7f8f9b413237dc2c92dc19cc9a1b4769f1bfa4137ae5ca1503d8e4fa159b41978cd26234434dee9b4576f2a7734deea7e20d9da4fd5d9ca1febdf807ccb459263d399046fee9ecd8ec8f52b34d76d226374973257fc04c3fe8d656036c192ae9630d6dd824ad28fb39ba8ed28aad747fad19b9bb4dd0e9a4903b2faca4674a522ae48eec1ebcded5d28eb6add6e47d4f93f76bfd1e073d83397267f076a1175ef28a321819e95bb1c8489ffea5976463322b9029ee7c49da46a6786c568eec38a802d520eb560b0a8cf56dcd32b8309a9fad52cbfd61ffaa2de9e40c05c6fa14064260b44f47900619edefc8f48b1f54911f8755a407dc2d495f1a6ae4cba3774c56d775df64cd38bdd361ef7f3ad2f774d7794f7b9af67f0f7e242591f53f9cde7152afe40e3b27f58a139bdc3dd8a4f794343b7b6fd6ec7d4f53b262b33eed30a53c3c6cfad3a662017afca938833b584519beb001454e5bdace35f48ec9c2a10177c7a4b501f44ee7fb3a44f93e90767949c7b0b49655d9d4c932dded7fd0fba94843b728437f156ff01bc40edf507f66d53bf747555ef50e3d6352e4fba30aec489a0510f482ae23eb579186eeeb53d186da910d1ba2fd69eecb023cd9d07de7df79dfefde7f7fddaf477651ea0776a5edbd47734f7f38c9f7f7045611043d34c0c5e18354f4bc77fff28395946952c6bfc907abf7f53fd29ba1dffb8fec771bfabdffbcefe9fb4fba4b227dae237fbadc3da92391f7bbee7bd0c99f30fb77a4d9f7ddacd93f4c290f9fe1be77d80ccadd7ba4e99fe47bef417f12fe939f2e83a4ff0973e9c1d0c33024f9fb7dd0868acba4074bdf3b6976fefe7ee9beff53510041998429e5f199357fdfe20cf73fecdfe35e7749b0821e3ad92c7f8bc752fdb22802d7bf3ad9076d3f58455a512359330daa3507b0f4e0e9824f9f7ea4ef75328944ae3efa7448cd947c9aa393e95f1bee971e2c9166502e7d8725b2f4b7a74b24cd552479dfa966706c16e9bff7be8a3294b019e4912b12095e324acd668d523389f497a4d976753739f12c3383e7ef3ffc34877ecd9724e124de7f5f2269b6a2938f00dec9b2e857d101ddd32fcd50f3d79132ddefc8a0479ade7f246c0665d297c88f3469a8b0eca49edff77889ac4f22fb4dfb1d7652f3c5415eb56d80029001195276e084145c9c250d8708e99d2a84a777bc5cffebe354204f4fff7e271b3026f1cf91cd5c1fa47488a9936fd0ada194efb56f3a3681b2bf49a242c8175bb1ff94b47fc905b0d0832eae94f49d345fd9cdee95043591bd3781f27d4a5da09405939e543a907f6af6f0129a4676e257aee40e5b79d1070aca22575a0c335ff962d3df24e5fe1e773247066b6849fa547c000d4356d21c99e2747b8b0182340cf2180ad2dea9dddfc2683fc6e4441565702c64b4a25b5186fa55bcd89ebe4ce9835d152d96a1bfd2809e99fe4787dca70f5e20cdf223b24e7d1d777defcf7217e9bd59ddfb0ba1439ee674ef4f22c76e75ff915fb7ba1f7bc77cc9beea56f7fe2ba727146d641348f67fa1436af6bf64cda047d266754ff3253bd3736685fd9ea6151536abbffbfab57b19fb357796b14fcf1909323da160a3fbeb61daacae664bda66519a43df813ae876af01d240f32ad353680455a889bc6a56256ba65d1c8500bb48bf667ace4a9057cd129dd84c698e937a2593684efbf7748bf42b5933259dd42b3238b6e44773fa631030d253e8886c863924d1213477ff478794323d856079d52c54a6e71436f2ca8695ac6fcaf49c0284bcb2de955e136d16f55847f1ee6efffaddaadee9cf56f2c77f3ccf50df49bd72e5ca159bebdb5cb1cc0dfef5fdab756cd6af6780204845bfdf3d783b1287f1de5f403f3683b23f50e94ec506d86ffc0a2a5ffe5db6475af21554ba2b5470660e9b85ac327c2a2b5b3dbd2b57aae0831ed480099a142f06a4049f4a98041e902104286a64947d7a627880072b28e2066b48f1eee9adee1214de139e135e131e131e08bc0f78de7b1ef83af071e05be2dbc0a7c4a781cf3ef5d6f7dfd3243280c4111830a20aedd15f9f52dae30a296f113ae5a5c22aafd097774af75456e595427b9ceeeaf0942952ea95b27b2a5f7987a03dfaa98ce52582f6e8ffbed3c3e6aaff42418738a157f28582e6f4f75f98bb3a4c69abfec5e637e691b6cc555eb50de551bf93657a033413d44035c8dad70148714c1e38202a11bdd5a33e62a1466d548b3a561bf0d5a33ea24ffbd643f4a8d67a58b5512dea589575ad89eaad765135aa1ea3b52eaa46d5633574ad89ea4d488db1fad64340d45a8dd5a34a446f5f1f75ac1651a3551bf550add12356df9aa8de6a4c48d76849eaa26a44ebd0dd5134b4e3f4187d1c6c911bf9d08d75313f72a27b646b77c816b9910fdd5817cb79d135ba4436666f7ee444f7c8d6ee90d1bddd226be4353b746bf6c8120df9edd6ec91251af2dbbddd226be4353be445d7e812d998bd79aba9cb8dd9a2dc6e945bf4a1dc5d0c7587586ab9fd28b71375479728656fd6af51ee5b64ed50edde50b4d479f3d2b2f5a63d0a2d9148bdc5c29b7ec33b8cbaa14c9fd5a9ba37ca0d16918c3c23d2adeb584022d21109bce57ea3dc5fc2af92115864d419916eb55c8a91bea3ae96fb8b729348dded33f256d3a7242252ac547be98ac0988a3454ba0de5460de57ed250e9067644a52112112956aa754560ac14237d475da928d31a2318231558542219a54837d2670473538144a5a314a9f61d958aba5a29962a22c56ab9c158574494bbe64943182855bae54695769cdeea8e28f77fee024a95a0eac8ab754724d5edbbd1ff192ff6d55c542daa23afd6a96edfcd5bded057d4723b79462d4333f8e5ddbcd867d44234b2c8ac3e221797984b4bcd23f28e4c2d319a96a32f26f30dbd5a62deeaa32ff60d799f4baca5e67947de57d4e219b50cd1dc72af8ebc5a77f4cd10ad5432b7dc5eac367333b50cc91879432e5fd14ccc54f3883ea21ccbbd6a393ac960fac55ebca2dc9887ec3372570af7ef98b98b65c790bb50188fe3eaa5e808d55294dba596bb7f4791bbc2706534f34264e4b26a311af16bf552f472d45254a3b98b8453b7dc2f432e43a415516e975bee9511d18bd1aaa8c588c85d20967171214add723fb81a72712932bdc45e6a32ab988b4bd14beca5b68ab9ac6a2e2fb7d5908b91b7faf632e432b42272b9ed38dd05942abb45a614d6c421d10824028f74b0496f35a599f0f6221289472ca5a3f051f815d6c421236f351178c40236690e2634128b4cb11ab0160efd0c7e853791482c1dad804d6aa4c2e19158330da1c05b48e422c660c49b89c805340a8bc498081a8545e19158330d81b79028148b4c31b016b6b04971428854c8c1c5a6cef7596c0af13cc7263d3b5cea3e079bb446835fafaae3554b1d391e3277d55207362bac62b3c67860b3cab2b963680736eb502e913b623b641eb903a6e388d491f356fd811859a051831c0a886a434660ac397042810950f862a8747423128f86bc094657b480821a4535a322b1661a0a89706be4c638030d314af0161e3d139cc86228033d30438cb586c4388209a124d44a5a76a5eec55b0d5c5083260c818123884a5a7edf9b262213cd8a1935887da003a80f8ba830c6141ba8610613252d3dd0fbd2293694fbc722d15494fb74cbcdc2f2a721145138d64253ed742242158d37d3ed74742a42d5462393d1183bd550b7f1c874340e9d6aa8db78643a1a874e45a8da6864321a63272254d17833dd4e47deea21d45833d54e46a7186a682c32159d6e204b0beae82bea8e5c6aa9162354d167d47946299721d5ed23ea6e2f432e4437976e35947b55cb4d5d8a50ff127ba9b9ac622f1e45a417f8f555fad2e7bcc4177760f3c18acd5529874791e8b8a8df235b36b275fbc8168e6c1991ad9cb77270022eb8b8010c8a624537235a5b82084ca0028b2a6a43b5dbe9a83261850551a8620944372294516c08e7161f00030c2d4a93d1a9080346882153e224828c79aae532303045067c200503252d458cba515903b7041352382a69f98d47b983c46a4f200216246043ca38c4831d84c08a16209895b40453452c462c43aad8489462396221520da162a95b2ac6a2224219a58c52432c35d451ea28c57253b1c4524729969b8a2596324a0db1d454a8a3d42d15635111a18c522c472c44aa21542c55c462c432a48a8d44a6235591d1d01813876a2c472c445e51ca888528bc81b1dca9a1144b0d75943b5415e54e1979aa1733759412532f4fcb2f45949b8525f5b444992cb7979094ee855862584ae76a94dd0bc1baa9f04b883755b55c5fc72cf524ac6316ea781da81dbf83c4f2244cbdc5e379a85a4f4b21d2ab70ceb7c80b8c15b75e070e95c24252c017024a95a94fbd100b0b8b50f852c0177aa13e861c16220c85482f05ac4f4ba114d651f3560b41224109ca418ca68e9a8e9bbb5870bf0e9cbb50fd3afa75d8dc45c2271d35a05419434482b9d56462323798a2dc2c314530463246304430473964626a304331b119992319a298a118a353cc508c914c114ccc06cfc46086626231379923169621928121823992198aa9c9c4646e3045314530463144314732356ff50d6606e616e372945ba6961ba60663b48a297289c9dc52452f3047b9636a3243b9658c60886231b7dc3244b9658e52303331433078156324337aabbe4c516ed54c2c378689e57e1d3377b1a0c61c6c7ee18a07364712de81cd1588a9b7cc1d67eed781cdef6f913b86684ebf10a3d9b2e57eb305cbfde68ea19bcde6f6436f64335453cbd9183d514d910d51cdcde6f6436f6433545333b239aaf9239ba21a231ba327aa29b221aab9e16a86be888cd9d41c7dec6be4504dcc26f6b1af914335319b58cdd01791319b9a239ba39a3fb229aa290dbddc72ff908b11a906de44a295910b516e12f8472f465f918bcd51ee1aa2dc6051ee58ee9aa3dc2f9b5aee9aa1dc2f1d1f10c1011e8451c51a2a98ff58ee178d81182ae8801525a40021e58285f8da0abf841c118518430851c100cbcb891c7a9dce4063064b98912ba2b47921664c9b58888528590f942a5d8872df8815e5fef046d1dfa8b04509942a85c039c2359228f7cb8d211ca29993e996fbc9229ca2dc333846b96f8e72e3d78d18b2d682531b63b9ff848d72dfdc72b36eb973e00ce5be31ca4ddef0110bbf706e39f00b6708077edddcc02f1207e3a317597be1d45e38b117bec137b717bebdc8229c221c8c6f708e708d24ba3144621ca21b44376245371effcd0b36ba376b62378a8862457f23ba317454232aba39c2b915e1d470623737a31a3d829094db0e7ec045494bb0f426ce0d0a6d50012b025645494b95f826ce90875144042760506841f9bd796354a3a2c6138c58e34a494b1b0c94c2473a58411420188212a6206fb9bf1573d70be62e107ca2dcb5dc44249aa3dc3343b967e0af8672df14e556d10ce53622cacd825f98e8a64673343414cb7d434413036fb9bf28f70abff0d04d110dcd0c514be6aea3dc37433347b959686a33b517a3dc3731a3dcff421addc4668c686af0cc8d3cba199a39a2a9cdd4f00d114d8ce636539a2d610c2b78e08223a21a11510c14c010a3073f40c368a86888265644736c4041a886c4941b8e11dd0ccd1ccdcc408b2db428e208073435f2a8c2400944c0c086041094b464c12f16ee4dd2c8c2a8d0a620a20948bce84d6cc485210523f8e0096094b40ced8bd89c31a25eace00952c87580093f286949ba5fc2e6cc2d771351f40129ae10e1849296207eb16e40a9b2247e5e37847a1258c271848308e5f22c2899191c371afcca31835f398ebcd5319855f3563f0c7eddb879ab6b2ff89563c805bf582d38870abf5844de6a2316fcc25184c2af1c376ff58f38472cc4af1c35127eb18640fcba51c22f1c47deea3f611c44deea17f10b8791b7fa3ffcca51e4ad7e0fbf58316ff577f88563c85bfd268c234653941bc7506e1c46b98b72b362b971c47213e5c67194bb969b3594fb287751ee58ee1cb7dc2ca2dc46b9c53771d472e718ca9dc32837ab28f78d5b6e31c43b8a70dc72efa011e526e11d44398e72ef98b16ab9770cdda8e5ae6fee18cafdac9bb370eea2e5c5e65b6cae4ac7e6984dd62df3c0657a13f401dd0459af4da0018eddeadbedf5ba373dfd0fcb29548494df934a6028aabee5e97f6e3a8da814cbcb94b1aa6a71f9295456e5cb4fa13296313f85ca57c2fc6a0a159d520677acf2d21ef5a750f9d2d21ef5290d529f7e0cd9427bd4872155b447fd1599a23deabf902eb4477d17f285f6a8df42ae688ffa2a1286f6a89f223fdaa33e0be9d11ef5512489f6a83f9225daa3fe8904698ffa2632a43dea8b640ced513f2465688ffa2039437bd42f9134b4477d1259437bd4ff481bdaa3be479a688ffa1d29d21ef52f79a23dea5b72a43dea3b89a23dea37c9427bd4078aa96e03298e49bbb0e59ed15c999f29eb02e313165ee7a990e73d50aaf47bffe575a9f4af6bfa1cd44bb12f843261214a2421d34bb117189dd4dc13a339feb4143291b01028214cf583184d7ade3c2c24c57ba1b76fdf2f16baf715fb5176f805942afb6cda1ddb84854c2613d8b69a3b99fa6c5ab58d4d5c282c847a29de0ba13ec4656f5805f1ab6daf9af396d75f41a8f4523c2c84947aa5bca2c7d352e8c37fc1a43ef6c3e55f1fe9f2a5d5b7e057f85ecb93f0cbf428d2e73cd1f91e4f221b4736cc5bb32ad3217b46ceb2c31c564b6411927e9df356e75ad6b2ea9138903d3064d3aa8de6ce9aabb80afbb6c16655a6d3b896551ab5d1cea148159bdfb36b5a019bab7a76d45b39d81c711e36bfdc737358f6ef415e60cca17996c88ad77661965672af75f62f4e96fded4972bff8756daf0b7b599ae35c7676d8e6b2df7fcdb2bfc9961df52f58f6a765bf57664fcff9acc85d5e0be95f30bffaf1635ee6633f4aaf05b7fcebfbd4b3fccbffc77e94227e81f8e5825f2df8d5f2debb3cf8e2abf0eb845f217e91f08bf4f6c33fbdea3bfcbaf865c22f147ea1bef4a6bfdfbdbf4e47de1c7967a4459116463a8dec642fcbfe2079cf9733fbbb9036c792cbfe2da49d79a4dbbe942dfbabc80e46c2b2ff89bcb4984bcbfe216971232efb93482b23fdb4b2ecbf22fdac25a012827303474ee06c309a6c060413908182213ef084e770a78d2605241861086d0ce1603737bb348bf333080ad048638b2c9c286969dfb4b2ee084fd002065150c34a494b93e9cd4e46031678a185191d408305252d51282148f7b4411630326450f06056d2b2845fb11f250a0bd1e59c700426da9082152b252d3d2cc4759b5349a30d1b0bbaa095b4b4f865c242a08052a5c9ceb213b9ebf540a9d296fe4b76b52a8d23156ca510d463c895e6c702798131a7710ee9246785a779050ca573c89a3b88f1a481d6c29c4eb8ecb9d3fb70dfccbe68cbeec13c9beacb7db33fe15787cb9d1f4e664b1f9ed9bf24cbfe1e2ebb25c13e9a885f9d07b37db9efd479332f1743fa4e8f96fd579df8c140d2ecb379b46ef6fa48b3cfe62defbc999723c9beae845f9eccc391609fed72de5992891f6ec48d30cfe6cd4a5f4eb489b211673f9a478275a73713bddcf89d96d4d15a3c1af8c1569f6d24cdbad979ebc1b9eb75735708966c245a58821d85200e61c2190c7896c0928c7486b4928d440b65b05c982acd421a680b6dd93f973d04cf5249463a8ddc95c2b11fa50c0957a2b984a70b0803713218949172a513cc853650e62d27e54a602eb49170255a788220ae340b6920c95622d14a3018590b2d8cc191ce92ac65169eb652ee44b29566212d04411809577af9d59ba533250386b637c15c4b8ea7a50abf09ca4ef8e5c7cc870c9c9d6cd91f97fdf391f33183094120b81f381c1fb410f7f283f601c9fdc8058185b91f301c20b01f3440643e4e11c6e3c70f1910998f5384fde0817fc882c0c2dc0f20b01fa78f10f70348ee47ce47ce470803f203f763e64306ce6c3e70def21c2b134dc489b613ec645b9d64a653cc9d70e2793a994493381b61279a4966c29966a26c949972a7d3341365a3cc943b9de26c849d68269909773a99449ae9243389b9134e3c4d3411279e60271b29279a6827d8c926dac49ce93cc94e38f134c14ca7d92927d24c32d38936c2c46c9a65533e9d799489b27e0141f05333161b0b6c35e25034100465d9594e542e35da503319fc4ab1d858461c2dc54243e170c61325fbc7af94ec448d36d48c25c73243d964461a0af6c28263419de36c64c1b1a0ce7136b2b0ccbce5a811054bc1586828dc78a264232e3563b1b1c05034d46cb4a5642c272a87c2a164e39982b1d05866281b0a36d2587299c682cb452cb27ca2ce5c1b73e38c7601cbb10c53d954b014ad65d692cbb3169a0aa792b9c052a7caa682a5682db3965c1e7291b59caa5ccaa69ab5d0543895cc05963ab32c857399b5d854b41698ea4ce55c682db2169cea4ce55c682db2165c0ae7326bb1a9682d301759cba9caa56caa598ad6926b99a96c2a984a963a5d602d34154e9553cd52361759cbd9626b81a968299ccbac07e742eb316ac1f5e45a643d47aab3e796cad134b2494fda2dfbf714f5d05e702f329773458381f5d856e74bee65e6628391bde05e642ee78a0603eba9c1cc56b615cc05f7425b9d2fb997998b0d46d673bae460682bdccbb992bdd85e6030e76ab6cabdd85e6030e76ab6cab9e460682bdccbb992c1cc56b615cc05f742733961602bda0bee45f63273b1c1c856e74b6e057ba1b9e060662bdb0ab792bd9c2e39185a8f0ce6ec195ae57a66ab590fd18bad27f602f391cd1870672cfbc76014036e462673c6e4606c31b31ed88c8c4d060613439b91c99c3139185bcc2c86a3199a0c4e46061373cec8d864603031b4187233a74c4e6616038bb1cdd8666032b418590c6ec6360393a1c5c8627033a74c4e6616038b99a1c9c8c0e46270d8666430e72a2607ce6268323898d9ca06c26264a9130626b7a2c9e062645232b39918db2a0696c199f3b4e1186a333331d86468aca7250b8ee186cb1f8ea1284616832cfb9b311465ff1886dc2573d7f7d5c068682f33b81c35369b590c3477e1b2d7c868ce1b1bda4c8ec4af1a180d6d0667b39911b98bb4395f6a7235b38f06466323bf06bf6a703534276d2617c3cc5d24cd0d1a998d0d46d2e06a683434399a990daee6b491d1e4686636b89ad3464623b3b1d9c0686a68674dae664603a3b179730677c366865363bb81d1684e9a376772376c683835b81bd94dcd8ca4b13d0dec86cd8953937b5ad6bc6903cb374f4bfc660d2dc79b3438994db477e88902364cb673b8b80127b0b993bc1e14a0317e4e3241cd4d60734722892933e0000dca38c1124ac05f68a088ffae77bddbddae6f0e1607db490607ae7f42e01736d880b78e101d203d3a26d882e49d84ea6332f5e208217c55d84e8fe1beb08192f5b298793d5910795e4706e0886ed417541cf504a08788d29c01a34b27c6184d997611461b1616da606075603098949e2c609ee75858d12d8a826e51c7628b6e51cf009dc2133e90042a4be0808922905834814303726896edf094eea01478a00828aea09d400b2294fdb94f2c861adb563db4a3974c6130abc2e6538cb125b0c8410e5450461b603861a302120994a04940c21544452c100208c4a829e20a120962475e28a10a613871051551d0983152c18b245ed0060d72a08411501c41682686048e4ccf122c810a50c462347592f8410952d0a850820a424042e68b22ce98f902b60111e8b8ebfcc026d34182d73a42748008c9e93801bc10a2756e3dcff35c3d579cdea2d95a77e974d7dd5d821fe46eeffbffc3b4593a3a3d2598795e4706a05915891c37e08107ce08630c32c288c9ed051751e01a7a5830ba4eef00f96facc107376fd12e706046be99d67c80836cd2f3abdd0e7eb03949bfbf1976f7decefdbfd15b78459a63ee3fc00d35a498c2461455a240a3b4fd60a5224cee692086c802045ec4e00461240126f78fe2e7dafd05855d11822f8cd08413252857d91c2b12b835ba22745fa6a70950e05d80f4572b53955b18c3665151060fb2b57e0064d1db0f7295c00bdcbb2d0e42b0de39b0d090801538f7be96c5a36a319ad4e6404c21b99e32f5a20829d9cbd48b2d5c904d16ce0a5bd77d2529cdf198004ff6641243f096487786efa6586ebd8da239f6d2976cdfea646b5fc73e106badb55627db7b479a63ef8bbdf75e6cdefbb909d775d76277ebddd54a736e479f75ff7ebe7f1fe7fe773fbc63be7defe7db3de8617bd8557cbdd6441a58b24787b0e4db755d87cdaec3de7d1db0e55a23c1994f0ecbd58acda2016aad569cecd11c7fb056183a647ad99f7a262b536cd61ae4d5ccaf78d0b2b9cafeb466062c9b5f76121065ff1993c5233be85ebfd6e0865dfb7b4573fc2b36bb7f4587d8f787a143eafbd72fe890fa05cda94fdfc5c64ebe5cfb3d3ae4f6a08a3472ad65fbe0a9bbad5bb2d6684e677a32d11c7f91e6f88734c7ffd6128cf424c150be5f8d7ac7ac6864ff8aab69f4ce4bf61f6bd95fd53b9d7d04b76cae705eb219b2644a73d0a04358b23f98bba4596b909990b3061b55b4a1d66648a3a6b3420f277c128ca0c6126ea8341882016a2db424cdd5ca48bf5aa143a0d429b95aa139f48740a95fd01cfa950a2af2c5353a040abd41a634c7bec5a67d4a836c71ad55da48334ba65f6bd5059ae9d71a60931363ad6573cc564697eaeaa98207b4457baab05116cdfeaaea424f15635016ea4e4f15675016cd664df68f314131d614649a4d16182540ea33fa9bdf59c599ad6d4bdfbea53876870669a6568c11c79538be88e2388eff926223e2584c293efdbfa3885f4062cb83e303913ef5f4675858bc2b7e6a3ebda80adf947a20d28ac5f39145e65f4024bf0f3e7d158c8ce7551996967f01a9de1f88f42618164f4c3dd0f832f88af61e88f41e63ef9b9e4aa97cc1af1813bee27ba0fb1e0c8b4ce981c437c5b8e01750cb9b42d57da0b1e55bf0152853487aa0f1552caaee81467c45c5332c28ac1af115276cc2a38871fa81c007f11525fc02227dd8e22b3aa08bafc0570085b69abc2380d6617849b18929ddfe8b4a57fa3bb19162e3e5a074fca2622afd632ef6da7f49b1711c8b29fde9ffb5588acdfd584c19e3dd570a4da38ae5e9cf78d7bbaf149a58c6a7bfba24cfbbaf148e0fd4a2ba1e48f2ee2b99c2a73fd25c8f243e90eac119efbef0815abe64854606e681ecfbaf56588a4de73230588a8d7f0fd442a3202b6762ae47024f0fa47af15f544aa50c966273e5ca95320666855fb198f205bf80ae47faef5f40e097fe05247ef82fa0d39b461697076a79d5bf80babf1e09144fa89607527dea5f40df5f8f048aa7d403a91ef52fa0d2df7f0101999ef42fa0f1c17f01b1bcf82f2097473d90ea4fff0242bdff0b28f5ddbf80ec971ea8e53f1712a783f4b790b683d45791df41fa53e4d741eab390331da41f45861da4fe48ae3a48ff891c3b487d13a9ea20fd22a9ea20f54372ec20fd20b9ea20f54b64d841fa49e44c07a941fa3df23b48fd8eb41da4ff92381d24487d276907e90792a92423f48ef7147c4a7fa6777a677cfa38bdc3830ea9d98959c7d164ba17044924cfebb63f5dee9ee59d74827a2acad0e1274e9ccc308393d33b11dfc90ddf49e99d7cefe47ef737d85cb9f282cc824d8b9dd84489c9286c7a39c88e9dd8984eea952831f9f43d3d9eb0f9e29b446cce84d85c951e2c6153f53d69ecdeebb019de6fd2890d36a3c4648bcd2831d9b1a9c4cb41ee377fbadc388a4bae1887a5da19f8eea279fa353471973ffd3ae42e9ba75f4f77d512e9e9f7e02e1c4fbfcadc25f3f46b91bb664ea6a75fc45de4d3af3177854fbfd2dc85a34a3dfd06b88be5e95798bb723cfd4ae4aef1e9eae6e903e12e97a75f67eec231d8fc72ccbf90375888c78e5fe15b488c856ef0df78149983f539bef52249e67ccbaff0208983856e908ff31f89030be5b43c8ff748192c9403c7ebf88e9cc1f99b27ff92345848e669be491bace35b8fe3614821219b9fa16715b21cf32a1e658dcdd3fc8914b2c155769442e2dbbccc9764701553f93f838560fef434b84a4b29e4bdccaf665ef5a54f914233aaa77913cd9b5e85ab7829f4f2a727914234b84a4e29847a1ad397de9242265ce58552087c9b12ae32530a955ee6677015552934f3f65948a11d2be02a30a5d0f7329f83ab7ca5d0ccf73b0f5ca59642aaa7f91db84a570a99dee65b70159652a8e54fef420ae9c055644aa199bf2d5c05a7145afde9591f92422c5ca5540ab1e4c0554ea550f8368f035711520a752ff32329244528a8bc81abe4288566de9fc4555aa590cb9f484f3efe4a0ae1e02a5d0a8d4ff3528482ca1b5c058652e8f4365888a442fdf8556a69f31857719542a497c142325fa596e47dfbfea4d00c16aa52cb99b7297d0d29947a1a2c3403f3ab7f79976ff92ab594c142424242a737bdf8e183dfe33124d0996148ea2dfa2b92e52dfa2f240edea2ef4202e12dfa2d649d798bbe8afcbc453f45ea788b3e0bd9006fd1479115e62dfa235989bc45ff448edea26f2285788bbe4816f116fd90ac316fd107c94af316fd12b9f2167d12d9e32dfa1fd983b7e87b6495798b7e47d6226fd1bfe47b8bbe256bf0167d279b788b7e9375c85bf42b594f6fd1075205552018ffaaa8b16146ae3f566a7365038c5cdfb6ab550200c116467ff0647ed4c3e187cda0fcdd403271c8e09791c1a720f8e08398d29cfa9195249136d032b20db48b5c3f34009542ae1fda40819067a068e48a9dd42bb954335822a92803e98a0308ca94f200bf922649aa24cd32509609fe6703f8b5fbcf0020ae58a67e0953cafa9e8a3790beda4cf23cffcec16a9db0389d0f0491a00a4790a008122c6185122e5f5061041b6e80cee004038a26d670c2951eb47c51051737c8a1011170c9f4b432826c7eb61d086713a6b6d6daefbbb250488f101e2bc45d2c9290db8d56883059128bc5d3ac2aa5ebbaae4bc195dce11e21cde2c1d3138030d3da163ac837532f64f084ed1aa13452f3436573cc804aa5a2623041092c8a500257823254a428a6b451850bb028e303687c91f2810882d0d11a29062511e020ccb48b299cb84580b45231521b0eeeeab985b9bf37c71819f7bb5935d837e9198066d5f772685665e5ee2e3fdc001c72f070874d1fdddd3afd45ad05b91b637fc7336f7ea28ebbc2ae2218ebd3fef218b923d56e03b8cf0b15a8c0f690705dd7759dbb2ec641cc4050094e2380b1032118b1022b5834f08405adb5f7ebfb3575532125b7f51c7a6ac8a1011110c199cdcf7aa7053de1e8d9e32ed2159e496b9e675f073c410c6e03a82d8766e1e0aeeeebdbef71578771e88640798182357068566d5b0e3d9fd7e038e4d03b35d76f40047aa79a6004549a38030a35c2e8a26c54ee1ad42077eea7abdcd363a6b520e4b2a983bb7ecd60e275dcd5e39903cd0328a618bab151460ca250f67fbd33e6fed18adc4f0516b9b1a94487454f172d75be7784989ff9657ae6fa3d01a86100aa4c4f115891c14cbb98a28a6c7e9d82959255765fe5a0f33136516bc211e0e97bb023cd247d67f84a9af57e3593dcef66b86f2b6976ef3de891b4561949a4af4dea3e89cb401f6c51060f0b19ab57451bbaafd84ce2dfdf7d12ef3a32c97dfbe089f60e2ee957d19f8a177f415ff53156f43af1acc7f9f1ed087e3c657a4e715a35408a535d08859e80ff3a3a4084f0d06f4aca8c1c145be0c430c3e87446210507c0d701dffc401004fffbf12231f3441537508209518871854905447ce0759a0562b36690440ad101d22c9d775709eb74d95465fb54829e103201194269b021051e885ff8c0e80b1524a1f3e9006135ab7e47e290df2c9d5c5f0788101e1d20dd0a339d010872d9d4c9b7fb008be52e21a68e0a482da447088f152015dd141fb046b2ee6cd21b28e12e99d68400cb36d3730a0e8401521c4a6bae55b7ead3ee4d9b69e8a1bfbffd7aa7b1bf477e24ed56ffadd53eb514c7bde2c06bf5ecb69201521c93da72fd2a1b4d21f985b88b65dfbca9f9400adf3f1d52f3b32ea973df64651e98b2dc25049b5fa61e36290e727df326771fe66e95bb27a90b04a02cd4efa6a892bbb71f3695e06456fd9ac448b3109eb05d2c6fd577acd3acfaa62ad7992c24d717c2533f00bdd3358c37999e521021fb20dbdc06a74cbdb0a28d76d16e7dcd7201298e39f2f084930c1b1036800432ca309b63a6abfefad47ebde3ef8d79e45a3d50843da2081794910311249102f08b2223c44c4f29c0c85fa65d70a183eea7b97a75991baa14a0b55ddf6ecfb33bd63defbbcebbfdd9aeebdaee5877efaeebaedf6e9dcc6a162d79fd75f7ed263589d42452933cfb9938b9f45fdb9defebbaaedfe7a5d277dd4f734a5fa98ca5ff9a557ada3b6dbbfb767ffd7dfd7dfd956cc9765de7b60bbfbfeeed76c7da76c1fd36eebec7ef4f67eb6edf7477777777ff42da3ba490f68ebb7b09b49d6d7777af5441d05a6b4153288aa1093c954612ea63f1529deab658177fe9158cbbc798c4102c91be930986e6d0bfd7bb6de7dd667ff7a2777756fc4c26daacce766dda299d42da3b5dd7752dda1deb2168aaf41482f64b3f8a32589f6916ad6358a98c1527d39fa1de675ad11cfa1dfebcbd6df6b69ddd5a6bad35c3dc5577dbb9fdb6b6adfd7ed05a6bdbda6bbbafbd7deded6b6fdfeeebf1eeb63bd6db05778f347f6cf6effa4d6b9b7af67e97644976c7bab5f65a6badeddab3d75a7badb5b7862780437a680e7d1e2138bf52855f6d176a1df2e1e000e1d12cfa2c77777777771cefaedbbbceddbfce348b7eef3df8dd953a5217865d187661d82cd2f4effff1eccf93bdb73bd6495d472a594b02c2a359ded721c6faac6679ffcdf21e0ceb8cbbbb775dcfd8079d34ed8e75d2aa599ebbbbbbbbaf9ae57de9c1aedeb6eeb66fedbeee7aa67eb3529ae366bf3fd85dd795da85ae2b755d49d52cefddddeeb877ed42d775d8f3196a1642733c92edde3ee824dbddaeb3dd75ef3adb5df7ae2b79ed91a0f79beeeeeeeeeedebde9eede757bf7a6bb7bd7a6129edcefbd776fbabb77dd2b73ccd45a8bed8ef576a17eeeb531f5f76f7f03f82731bf5cebdb5cadf7edbeba77f83ea543ec9bddd3ee763458770ad6120cb0b3d8fcb2f5af542a954a25fb4e22cdfa16f73425ebf766adb57edff7d55aeff7e119faa3577a6badb5d67adfacb5d67b6fadf7cd5a6bbdf7d67adfacb5d67b6f35eb5fbb73df1fac9edb1deb9defe7f7fbfee87b05eba5d9e9d36679e6079a3f37d7a75f555d013ff092e697af7f252dee205b0dc0c3c3b30447094ef6ef556eafe44fe39457d4b75f1da7bd6b18359780fefdfe2417a43bf5b363d3e6b63bd6dbaf5c69173adf9c845eb9922bed9d6b9fd221fee6fd4b5622c69aefdfee9f8e21d7f7ea4100298ed9c9e890184996fb4d948b7acbbc43b9df84c9f42b755d98b7ba5e60f4bea76b253f92d21c539cc126d7f74827def7347f1e59737d52fb3fd24af7774679ba283a29ba29ba107422e8a8189f8a2d5156284fcc12519e585805e589a9464079623324a03c311c2b284f8cc7bd82f29480f2c43e2c284f6ca4519ed82a0bca137b13509efe7b02ca3325a653b23c155ba650407962560bca130b534079622a15509ed84c11e589e1ac80f2c4785c16509e16509ed8b705e5898d5c509ed8ca059427f62f287d8fb83d29b624c5bb72e58a7971292cc5c3523cefa92785ea800b287c524aff8a0129e122622847fc7ac148f855440c65885f4156c0a088d44bf1a4783f854a5886a4ee5f56559642122a248dfd2166f9501465fe28d28ff8e5b8930a8fb2f44108b12096450d5070a57c151143d9e11750119a206388e8b681528ac782bb1193e0ccbf625efa67dd78f3383035dfaab26bd4bf70f06bfc1bacf3fa170e34e0cfe097c55918f5d9a80a6d32af6f2bd5e031e655263b13ffd54d835fe3cfe02645aa8c0a8fb2fb137ed99ccc692debd1c1c948630c4eb98cfd3418fc22fd0a579ab77ae6adb6d9d9d933589d852e98f4af1890d224f6776dc1afd2ab70cde1da666b5a3d69381d7001051b58c2afc64da11296260cf6c78094207e9170e71a96eba220832784a1850d86c0d5212188a0083db002d4344041164ae4600a4c94207658ce69f6c4595b4e6671b0596cccc968a78c3453923ea5aca8c4a7159926939239a50c8d08c960104001c3160030301c1a8e85a924c8b57a14000c639e8266581d09a324cf7230658c318400180000000100d2244c00142cf24abce15a9803189447569611411e5b1521c43bf29ac26cd9104517f3c3e9ede2bbc58b08146fd43af3de03e14f33bf357466b7fbb947c4cf0545ff9a81548d27138253ba43292dd522f420b9d0ffdf677e8a0d14ad57048680449dcfb89659f916930624298249b123195aa502d6e0df43268b3e8a0807f63005313d8bf95c50e65935c0f062a5e7c136094ad8108a688be005869c939a5addd0360684cc4e17546158767bf69ae3eb74267c303d5ad19777e6bbd36134b2c8997f48eac8710a42f38e939cbf82405d0178e3bc81dc283d629f8448068d814f67b7449c9575a1c8dfcc910f409d50bb9b7a2ed8f6dc84f4315ec0758ffab30f75a5461635a21bc760c988554799fc4c5e9d69da55d69d4f55569efc6b627e6cf0b19e3c190aafacf955ea0e990247c3e2c74f4ea24c5dd0efba999c07f6478cc3b6ae5e3e55d81f24c6717d06e8fbc14b9b17c7bd87a9135ea0e7b00f6b56e999b0f04c60922bc46ae085bf94413681092f0e233a2dbc0a71d4314f4ddaca94228847fda589ae6b14bd52b1be1c30a98b1c678c4da667dfc2b0c40904b2d21b4d926ef6c79152ad14f702cdd8e0cfc6d9da0e6eb35b89a3f1f2a5d560404f950cb4c2fd7abb82586c920cc782457d2abbcb6f2204a4699c63913753ea30b33b85136b666bfcf18add130a341899cdd9a5a1990cb28f7ed124f2376ac1a7e24740ae39dc5059510465cc90a11bfaafd6e35b153d6a9fba33a2f088e881a838faf9adc50e4f77c91cb533f44658536cc427e237f20fba9bffb2d0a84272620224dbec11ed9dd5a6b3fbde076ba2e8df46280d41bc08a3cdd7c2405129cf1c8e83cbd716904ef7aaf9cc811cdf85a31499d173a9ded47f716e629a42aa24c76b245f4883917ef28e00e4fcf35d6a17df7771e4fb5ba28b6b704b6ef38d0226b3b133602f011cc3c3d439ec71a5459a6274bfb42ba0ab6d484606023d120d2283d2408966e0de23f1a2c0c736d63842a6a190b4a2f48a1895ea4deaad0c22093345d53d18cbf41860c241ee8f489e0b162975039813f927e99d5f97e401f3818c278c97166ef70d6a7618a3dd0a9703ec22cf1bd2cf4878214b899037d63710abff93ebea8be41331488687b5276a809e50ae601dc0ab87597450c116022a2926ceedd6c940e1fc1fac9f31429c62db5e0cd8768c569a5e92c7b070c8bc85f333c588ab6763bd520caa792b0b1155ffdd15af0bf67325d700b4864f312493c64adb7dfca0cf0ce7c298f9416cd673029985ca60cc96ac97fc6c9af83c31c1053e85039c44b0582c75e7090c105914cc5bf860d2be25b9359cf27851b682265bee953f16a530bdd8f50e7bf5a6345ebde290d95473dd8aefe1bf318e973c81b98f8e5af737e32699150723b0cadb7e00d5683434f3237e10c87c18e171c9a856ae1493f657ab8cf092c7cbcb3491f17d09cb2a8c9711fc8297965c527df629523c310f6f4f9bbd78c73e83691cba99ea7a88c73b3c6526e6c79d3d183c58c622c4a0239ca0fda7de91859eab3b5be2275ccb743fab607c0a70416decb8efb4d1790053e85b66fc133396a4dc862aa3726b634ce71f6ecc385bc248122b06875486bcad06f07ecf1e0828ca9fbdf786b6fc2d6bf760946bfaabd15b951db28a3f4bf9ddfb72c439a24efff380ecd0a36fdf739ed61293b1c9ca4cd67dacde32619bc4afde04f07896ea35552f357cac5a396c46b6436e777b1c64b3441ad1252233bd541dc04ed90712cc38cb8fefb87a38ab60ced762e0d466c72eea0e679a943073e4a83aa71c38a1c0e42c435a401ccbba6dc0a441117c1f94e55deff255262a5e91765d64d467d72bf8e573001670e5bb93323d4a6f98567a59674bd9872a8fc07c7faba9755b21433f87d7521feaaa67bc3ffff3619f1cbb353e12faa6e118f129505d736a7c7452372916ebd1fdfd4af71d3fe4d76e75f58edc82ebe2eeaf6488b84e1a68e0b7c9396ee0ca1d09b9e1f041c8dca01fad5b206065b28fbae919852f57913b2b0fa58a7fe93d6612fbb819b14f80f6e7896016b24c9597166fd67c146f0b2da4b8a98293b002897fd7dc7615c9870f515add568e94bbcc24805919a9483ed73228b51a767462edd1debfe9bc2fc4b5933abbcf9094c09999b4570668f87af28d5ae6375aec76a3f26eb2deb4bd18251a39aa06afba471b848e51b84f10ba52b44601ee32185f3f69170bf997d471307e3556f9b859edef266fdda8c79ae8559edeb65e9b5e965eb6dec4cd1bb21f3201328b70c1ece6ee84066f7f13cde4fcd34279a0b5fe0352ebe6e82066f29b92cc8b62ac07cc39fc4dd77d2811ff5e3fe658ed5359dea1e75c7a710cf5a25db003eddbc555c31fd2a3a8b86805bd7400a67aa556eaea7502111dd1d4d277cf18bea66a324ebf78f4b004d07afd9e32f350de98e4cda642e4c525ca80fb161673366bd44485e6d5b3b3967ff40f84815bed0ced13ac3377f53c34df96a43bbb2ea8e4049b5c50dc8316e653680ae0286c73a4a433c83af5f8b9fd941c6c467081a29d79108e78c8b363e48eec14fddb6f907822bfc262236b8db209accabbee610fd2c9d0d9defde0fc6604f7a121b85f23196dea6c386c62f857338c6519029c8f94276e3e9cd4938475288d118151e1c4fad5b9afa66941fdd3bdeeff62bff0b90e4ef2980f25cd59cbdf102a0785d278cc08f1eb2b135c333fab45869c7796888d9a77597b5dfda5f5daeaa5ec0d62dab427d220ee2babaebe61489a5789d59d1568a5c1514bf73d9aa1b60f586aa6a8444bcfe6a41a64c8f685e07f7352e0a556d7731ad760f7d4225adb1fe013d639bd5d135fa6a499adbbdb89ed71582a930d91a12ceca5a378a265be121d6c485ab57c1f74f40d99fcfbe8aa8dda57696f17ca2a31875ec81a0562cd65d9a255260ac49a502bf1e5dbfd8993ce83f2b5c0906c0f58c616c67e6265a38a16d34722846789dc7eca833aff071b85a58f774ae8bcf231acfb9d9a814c88c6c96e2d91339b1fba4f52827a421022cdf4e9c2ab598f61bfa721e2a04280e77a43bcb3b348a228b31a9e3733881ffd743e1fd6728240595e946634b260e4479b1ed1f2224622c0c97c3d7d32c2c2599bbf712d740f95e02b6fa6ce2874259673bf98de9b296a81040e3312240ad9d27c9a3c005679602032c9d1543a0f15c995631f7288ca49e673b3cae900f1d08d0acf8ca747c479b89c9aa72237e103619c5f477c2151e8d6a76b7cdebeba9eff4ab99b697a5293fd01feff6eb4fd375e8444130c7717bcaeaaec815dee3684e5e91a46b2759db235f58f8e8aa3c7f02eabc643b887e2b7d2a3ea201e84815b51526bc5cc126db8d200020ab81e34388915a8ecf2813343bf3276148ed7d5c6b207867b0d823a84ac9631f09dc66f6bce11e1cba6b7d5979bec0c1408a8446169936e594ab5eb8f5bbf23ecba5bbc13a9067526b3dfdadf6d5c5d44746a2e82a2be62be5e09a314d9af9579e95c161002851c97b519e68280b102e92b42052e7221d2f9e2a5003113af3c7f115d0de6cf0d5f133d135999d7952f0ab1f497c6483014d48d0fadc37e5f377f3bcca2e4f1eced727c2ea13d236453a065f97d9da86f13a4453c8b3413b12c5a5e1ec21bfd8e2b2044bf4809f4f5f3e88a1a240bbee2a049b6c496682fe22dea9dc3bc6ba640f937c2d3194c6309d14e2354d57aff8d8b1dc4622faa3576e14c12f096c38717de64fa163a280b9e9cf82b148adb4ae00e9eb7abfe1afb8644dbcd7af0bde66687965b4f7062f4d944017b664e3b238225988d1f19a95c1c430cb3c50f2dbf868d78a32d1569c19845b7126d517ca8fe7d19c5965cb1c77548a5876bf64f9e321bb6274d7a0ca0b16632af8ea67c499cde33a0e903b1cf9ef52e9f442bc26359898e908a458456e7b3b02eb040b1b11e957114b6cb903526ac43282f0c81646ab1c4c6e4e059e9997672a30b59defaa286f10b3dc21bf60cf3e9dcf207e1134667bfeea08f2ec8f10f1c6552f215c973fc40a77478bef6b300e9eda699d9675c331a85c5d39830c6a0dd4f3b8dde63337c27a77a3ebd7a7c4d6fb2cf790e6858404a38747cd4a9c4496fbf38f1d63dcc984737923f1c6dfb02c2ced167f0524a662f0a21cfc408312e2049c5de5677a6c6e572c538d0679951e91a2a110f67ca87378210b0abc49334d9b23186486af3a04e5ecbacac9498503b7f6c5b605346bc747966163062bfabde5abdb1081b1bae8de7f742a150e19505668ee5c9119395e44a4872df9158b9b8e6c5834165e397dc015d9c424cb23950ddefc423abaf3ceee33634b631f694b11c279104a19633b3f54e372b0a1d91d98c310545dcfb40688778873f78bb62c9413aebca5f1e0e8bebda98dc312b09fb585779543c70dd646007838f93a6e0e9f1509eb6f493a3de9ffb16c9436c1f5aba8945513242bcb10c831006a741b45862a2e0098861d7563849cca5e5541b409f5f58d12ec8fcbd1e8c0eac8347c84d5b5422710cda87a51122aeee0aa53b9f1b1b5e99989c2525da6d7f5592f20a2b5270b62352ccaa3b06bbc47a549d8b546c09b09d0d68c11afe6f1093c338db7dee461a367a86c0d0700eb3422f6ce5d8827c07cd1e11d3be4c2b9bb373e7e48b492e52a38b67e871da9fd5cfc316447a43a5891542f382eeb89137f45dc9bf31367b215cc944f145316cd64e93ece69066994348e639dd352a67515490631b303ea86b5c5454769a456f6947ce7418a4439b0458672ea8d4c5205dc57bab2b84bde535f6166a352dfa1c5a001b6c89b03ed4c2d85ccdb4415705f55d5947f9106ff9b9f91d4cf85370ea8a1d1659bc5ddd84ddd66b74925ac7fd6dbd0fc4a4d617c737a17c21692406096c363ec2d6c4d9ee6003b899b8aaea84dcd3ab22d9e3ba0219e086a6a1514466d4e81bc9293ce7a47e0c22871b661c0cfa72ebececd618f429261e61f7888890e87fdc234b6882d7592dc69a354059609a97920f3623a79f40c640e7d73cdb02daff93cccc2f0b8a00674310a986b3ed5bcb39adf2f5305b2d579f97ff166290622ba87c45c38cc04cf4945d30282f3cda0a19dcb00520df6aa1ffa5bcccacf3b8146628c7ba91a921014d0aebdad970173ec2eceebce7ab6722685e07b97d2dd41d235e849d81b7b795ca04051a6fb67af37a891f697af87153d5c3bbd10addef0c02bc9e335992f1b89efb1adcc8d44cd42c5416b692b0e9a35de8d6f25a680e9351edba758e345bc411934e51425efd1299298af5b5be569d620f3800467f8523bf989f913273b359664e16e48f7361350646b594744d3891dec84e5eba9a14674d67fe9d58c343c35a6a48cf552e22015bdeb247bef4d7beb9ce3a75ab9fec39eb7bac563cbe3ad43255c7765e5d7f88d5847c977daf69bc1728bac6f017ca9c0a15e52b3bb40fdf0ebd0531ff8d9c4e87a24651d8222473684ae69aa798f3f7b5cb775399232f5ad3c8713eb02d168516979e15a2cc12aaab26b060a823ca539675e56bc5ff782d71f0cf44379f04ad51a84c1221ce2986e65031b4927121c7c5c187ea7e8edd203cbb58eaeb9a6a5d57cb25964fb4dfd92b44f72ef257e0201761bd60defaafacd9b52833ef6b15f5540834b5c4a9535c1e9d24476a1351d678e096d0c22624ac19e6de83715c6176f449d2ee9babf3c6a9634d159291c241687837b4156cd67bf628635437d9722571c09c91ae47df4e6df03d78982c129e68d4a9a64cf3d273820b19f67c567f1095eb62e2e16123d91b6d8fe7e9f4eed80c44423b409c4a61cf3627fbe9a467e884d8d70a713b9599c0de3c1cee4e9f5d3164ec8dca9c2c4297f9cd745088e00657429c18be844ccc1c1a1dd84548428aa9d683126235877d8f0c9a73b80463673166d6fb013a2c1c641f34321dfdb26737479fa195a968ddbf0dd64b7d20718ded21090e644a7c50d7521606b44c6ab927ac01a3aa2da3517e661a0002b8979fd0132327a12692230d3cd3dc00033dd4d4241fec9a868303b9d09300dff3df181dea39b9e87fdc053d37bd54bbed606214afe7e4ccf88c9eeed883e3113cdd16adcd3dd7ec0f52054eae3bc213c3aa947f68a9e41e4f68beb6d084cbc80013ddd0fb0b6aa13a5193bfe0b0e8fa2d8824ccaea624fb01486920cb8f5370665b3ce088621815c748ce8a22cf60303600516514f4f60432facf6b92728d2cd18fc3d583009e56e2393db4361df82d4c67b339299900b2bd36bcb6d68daef83542e31811969c949edf972319266e18051634f4813384fc58900e31484599b239eb8700fa26403f09d03701fa45607d09a85f02e94b40fd2050df04e82701fa660233acb24a7877118d2364bde3328933389cc327d7e72930b34ae59ada0a7b1238634a22bbb1529643d19301422cffa9a74dadd26dd4605808e4106f42603a58c8d077c7c1c3df4dc76917f6517926c9ea03d46e71b68ed9f1aec0e040c8f55cce10828a1e193ccea4ae5412d2173e061149891d2fa144d41a45e1387fa9f7de25a6a9d94b8906b84dbbba056612947d35741b5d0c03a6c0d540b17505410fdf3cf1e4a2661b0c243f7a26323d8c6c201003f33578879f64a5f3e182daebfe82595e61ec1a36cb6b911c9df48881ea7f587e492b257a1b11822060b9cd055461c80aedc1f36336601e45dbe1e633d119b9f80628772a37632ee04785cebaa042c783e3ac0b96a76d2d25638ba72cb28a762a2023cb738df16c537d4b0cb2d0344fa81c330ed410236c46883b6deafaf25bdd2f59ddd078305153fefd0ba904876a105081951d3ed666c52aa7c26c82af29dfcf3fc444d209d82dfa20f1130f41db7e5e3171194d3110ed31cd1d626aa0e0fe8ed8713eb92a124a4f82009c7ca18bcb6329c15d17ed7717c98a54b55d25d05a26a67736e66ead5584fe751a9c539e637343923c01af58ecf8889899625a7d05d8680b032a8d20bad13d96102d2c43e1818bec20d75e4599d8314d0764a27a10936676fa75aee5d4369ff5d9e0df463d5b478f8fbf63bf7b58003c90cd11ed106e26d0e5981d03006875f07b1a5ed960f4aba58f0a0ee4cb1a0e7f4b609b17d8971b5abb843225a65aed6e8c348d1d595cc5406518ebcc3fb8d7d1e6133b1dc6701a3c435f191bbb8a243af1a1a4fd966b7b6bf10cb4783efdb648a8a2c66a3e36cdaf92f4ca82ee2fe061ddb9a581cbb4aa95a6c958f602d2fe420b8a7ee9da7d66254866da76f1f700a2c2d8406644bfb096ad1f4c146f6b43f6692b8d6a810bd3b2dac9545a7a180170dd82fe3c35ec50f4da40c3bc0579fe47e943737453d3d578adc7110e86046d136ffd8c3f42fdca37f71d387f5575b16a2d7a9f7c483f77b2e9b10a46a34a8d73f450eada7fdaa2881fc98abc617843b0fe7bbb370aa47fb8cd1cbbe343cfad922f593667e06e6263bacb6068111f0bbf5e854965ab2bcbae3711bfa433dba507f02a4efd179784479c3828aca1cdd8063a64ef59c49198f53ffe88fa419bc99f4878ff8456cf15a030fd88bc6f4d5c613b665bdaaa852db5b195565b6959b604d3cfaa406a296cae7ab108efd7854293fb2dc2254768b5cebd219f31d0e5dcf4617c77bbac0d8a6073904fd1b51fc866c81d3e8d4aef139b9407aa98e07d931a61a8af0096b0e7d480204404be27d8d0d410838e82caa83a1a59c670e95942a52d21e0dff6430dabe51265e825457b8a9f44c871aaa0fb8d8f5c837feb380008e8f961e86370fb916d847040494a8568a080795ba6852a957520dc094d2b8713b756582a2341d299b4f28e93a3a1d384209b062a35c1c623e1aea7dfdfeb05049c6ebdaed40cdfd5c995c46fcddee43431a96f9124528db673c84520ce14c68ed75462fb70b71db2403f3013a07d4ed684d61efdf7d83908d2952a915ac3c8632b19185559008fa4049b03ea91ea937b7888e2f5cac055c1017458380fcb998cab3eed4cc50ed7a04ad13157ccb29688b34bf3472731fd77a24a6207f95b785500b43924024d19cb0cd0288e1896affee51bf2af3c10b3603341cabe260d11fa31dae9b3e608b643e33ee7fa5803d220a06798ec4429870692ec01d83aef7e28c2c2b933565df6b7c46e8a943dc4210f09262ea817f95068504860fee2e7cfd16e09a1061ef3f8b3e8959d9a302d571f77eaf2c2727d05bd321e6fb6f4417b84cdd69857eb95bd7b147f0c9b13a06f5e70b0a2b847efb658bcd0b25cbe0d3322fda94a11d236d62f28f94077191452522614e3f7162d48a5f62cedc5fac02deb273f7f757465189268f9b4739ff6df02f023da47fda1377f4b9da42e390ece5d197672fe997cc6f4aae5dcebbef9c1086f17d055b12e60abc8e7743bdcc32431c8a2dfd668d9cd7aa6272d9851d42fee6fcfa12b3f274fbfc2b211ba97ec645c5c1fb05f9cb87c11490b9f99459de10a160468a81cb0b830f3c659d3206c337985a65f25b8790fb9b0412148d3d0ba7f09f19d881d56265f75f55a1b95151d85f2ddc4648ed0e82a1afa38fa767056d932030a6c75edcc10b8cae1586a2626c71ddc67062f769d18a724913c2a52b85afea20309e1866e9111d2dc8a41ce8d7f35bb3f3f1aa5a555bd359026e1b609e27cd8bb45e59b8845c044cf71423fbf341add49323a49b3173da13dd02da340ef29886e7b33fad674617ca157d23febc7d40aa1d2e208082a5216ce7b508d00dd8c20a7d6d63b0427dc3f4102de64e56574d3cf091de76b8c7e6007099d9b588dd16f33444b624219221a32f4a9d06e20ebd91833afe211d9192efaa6d43f931298aabe684f6489046514b722468e8331699a621ea63e1c9c73f6ccd2ace6d6a1bca97975c37f51c1f922c8e462b10b7db843a507b4b6d1f31b425a0c780416a173a09bcd0a5988fc094d1dec0409cfe7e7b0634e3914d3e66652a197324217a1ece49aab8e9ba4dab94e896aef16ff5e716ba382a1e2a93410e9fecf035219f6a88ab364ee56220c93e6b0580bd6bd9d2063bc4d22410c4564f0fc1184139b1012beb26c987d3ced10a4f02cec4e7045000a9783e23a815fe70edda481fd25dc29dce906669cbb153895a0bf44cf10caea6b688a4007e2b6f541c563db7cad4a72c50c0fa23eeb9c9d8a8fca75f9e930285d11aaa5e7e047ffa3ca894b95a40f068b8327c07fb75f5612330757eaf038126e3132e60b2bf4a16d6a88e0ef02c7209bd089fc18b83c14ad116f67e4a4789a42e92d88511fed2da2df7dd7753d18724ee8d24d0a39924009545185d6801c307f8e2cfb3748e774a58187d0a72aacaac2d4e51c2cc41ffbc231fa00eec2ece996762cc6450a781e1087e09e87b9bb7efce5b04c158a02d954e7053ab132529b3265b0405436b87f73f4e1284b56d9ef7052bbe1db0954ff495d38a8fc524bbaf584bc00c5b33670b5451bda1b7b8c5dd2741ecd96385e269a464cc7ae0762e696afeb913b07d6b870f08e1c561992bfa2b820c9b285dbc03675849e72d2aac825f82a57957f6701098c15436df8d8cc7c4e72a37bc986e67b5d1d8a049e0a335ee276ce912c8992b8a53aed4d90f2605b589c723a284ec4351b38986a21301c995021474843e42cd0ea77e75eb717bfcd83d81668f91be098fcb4bc48cb78901b2dd5f7079df0560dd7fa467fa89fa5150d0d4bb8a5e19e91135532db63a0bfa09e7cc5757fa3cb78415e7dd3b0bb2a01c8f2f7a25057325a1391c6eeeb153dc989da62795fd7b5d1c34ad6700ce644569f8e1c64601f6ee95be5c524d45591199e89832e457fd336671b21d6644111c02e7b9477e2c4c682e7c6dd762c903d92cddb7a505d4f2dbcf37dc0026ce41f88cc980bf1cb183e05b0458796973571cb4ad3d02d5d6f04e2cb13c54ad3eba4715b20cdb53d45ad2b2b4d9aad13eeec28b9071340a35d73d445bf4831b3365b69d6d0aa99050bea3f91aaa69a89474023914e3ff6b3f826198e03e17b4eaeaa98c303eae12d30f26406c035d9313737eb38ef3d3bc3dab0f6a7cd11082591c0bdfc630640313eabd5fc779579d9e484f39673e73a0b81736874c691f97112fa8e792e1e96b354c9c45697cb5d2594e1d89656f1cdc2499505a7ca42e5208e7a859a6155d369f8807806c62aeb5a8bbb1f8cd465d74955b2cacfa1a8dba1d4a0553adc4adc381de7e5e83d0e28181d69f446b9f15bad2227b4525127a12d7acfa25bd5761c8b614ff45fe8c812d3c3e4c87135a012a05c11d4956329a877c97ea5702f1ba1f41a2c5af101b86b1d96ac23a552ed128b01fa56f5341a0bd05c9005eebc106c2171bbb1b83ef92b4e46e65d2ccfc0109e858866feb070a5b5f8ba1607586846c7dcc45ac3507b3b60c349da9e41959deab224bda9e4ca251cb0a4cb622cbd49548f285bb76311cd6e158b2b8b10b90c874221cd67e7abef3d9afcf2fc529ff0500c42037d88f7cc30bb4e2b28682552f479e014e36de390a4a90e8f7e350b254533d65cdcc9e99454df1aa5d26349f28b2578447fff129d3df61c30ba7a55eed81095603c2ccef8fe69f19ab060c9b15c33220414fc429f904ce0e66b4026341b61ffcaea59f2aaafc9d44f55f06ad6a803a4054a466b3c9d648f715e4a3b52d8f7a2bf6cfddb05c4c4a6b080cc68df2c5fd6dc7ee998be582f45f64c4dfc0d48e0eabb1db58176ec9dfcbe59ea15df7ec1d2c6557240bbcb8c35dbc82add083bc154d37fe781e91b41d3588d25e11ddecb71fd6f71b2708195d97c304086e15d5f5e682c56b93c1bc24dd9c2283db1623ff9eba3c1c38a59c86eedf049bd7a0cb69f2e655d3650feb9c46160280a06dc31058147e3540f32b52eb5758dc40b0b86cdc052ff31edd41de4377bd656af05e16820609ee2ae27a1facab13909d2548ad35d35a506f5654e96be194ce8e8a836e780784a225279db2f23dc759580160d3e894bafbea45501f9fc0e14b4a986a5135f1e7db31016fcbda47c2433e8d97c07b5a2a76d31f660868aa99ea7c0d3457972cb55ad2f526382a9a95d834c1d8bbac6c730d793ace52b3871d97da50da567497460d3661ed68f5b464d0cc92f87d1a27aca1736d045560e69815c845c7e5837050e784ab2e1c697708cb941f5e527f7ca77e3b0c21e4946fcf3ef8613d394a0a09c1a4b3e048b5af84132921d9accc848d38f4a0f8e3083f42499007d627a278b93890423605004967e5b62fcc28b0333742a1f88f2f96875f3aa5fa3b3c5b3c437ef8bb819ed07bc0d660099667bf32fb6c61706759fc954b843b56312668e926697776d42135ba4d610f1ae0b5bb559889cca6255cc4a3e352d735d9f08afbfc4c5b3a87a65bbb4fb1af897f16dc45ea883bf2cac1a706d7fc0c6980191fd6e41423531b734c13d75b4f78fbb77bcd075e10e6459d884e4db11723fb0c4e9e8bbfda06733548d8f60a53a356b148516208c6347d10f5362fa7fc2522cd085c997738c583af3336e62ef0eb25cd0b2f350d928da6a64676c22754fa9429ce71e9fd3255ce268582f6574ab9e8e50440e533639ac6970685f071057162ba89108ef5ca3c161947e1c664bacde144e66a91e7fe3fb97176e7b11efb6ce269a7c8dcb8bdc0ce5bd1cd3ff161573e7b728f3dc9fab583aca6426de01d496291ce6375ba71320331f47b52d5fa1698d8787257593d49c0584bf78a18970cb0b0ebe33f1236bdb4963c99b7d3576b335be9ce071be1cce6fc83d69029a8d3957f0e1afc870c674d1e80e4e2a8573539462ff66409f6cafeca270c2cbc8601304541fa249c337bed1433f3539ebf005a39ed260cfa6260f294f7297f4e3d76ba677434dfb30a4edceec1d0dd6d792019e18fd64301132f184d8cde42588498c7bac50a23d8e494ac29e940d6d629dc08aa9776413286230e814374af101e50361f754f9ce8c54c51da4b7eefa1f359670741351c61056a1d755051a8ab931e33c61aee265d240a3f29290ca8f40f6b151341c548de87f02989d0ed71c6208bbe5e1a0d5c80e0706a67689deecc2fc26f218b34966d0b22569a5e830c881441a031e309119685759207f1148b72d54a4750cdbc999a4eef4a24e02e3e2722c1f94e0a0cb1817a8b516a527aaae012495cb36bb9c55f731b4ad08d2870e3fdbaca38681e117814d8b77ed849b3bdf144129067c2e460f7e5b0b932b87740d0a71a2d21e5f9f84eafcbb2db634859843d7be4421ef8f8f10fae3e9e5455506e81418c0c833592a63614e20da60f2487a1a9d0933f3e55aad11b98e46b5ea2a9334e784a0cb4031cdefa2214fcbd55e4a0519bf0ce0ce2cad55ba35e57251cba6ec3c5e37059bbf00f3aee2538f57c03df12800c9a9f325cac4ab3648169e790563cc3a9ffcbd3e79053b6335611c7f95aa2c13fd498f93c9214626c5efbcda6c4e665b95193f39106792e2aa9d617b5c24c262e3a8e8d3c01915c5cd859c2cb3340163fc2a98b2ebc96fd66a95f32453eed2631830cb81eb49ad9c7ee8e819eb01b7918a2a79877c28bfba400f94e086e945bb92c34dd7f8580d25270e23407061b18baa0c938179791dd5525cd6e2e7201bc254d5888cb3797936b05fe04d8d5223448a47260d9f203bfee0fda48fa4f7c676ad91029e96063db51c93c1b4f1d84919388864361c1413455636b4de3d92d1c7e07213684611dc5629948c32194c96ff65d12d5920b1fa6e0e21856e2839ea5a5ad3b98057547a2abb0d5f72a4cca1bdf2e4f123251b143ff23596418e261ca2733f556c69d6d802af14527e12cf5cd6c37160ce1871e0494a0a95a2ab3ee0ece314c7cfe4099b1e64ea314875cc67fb32e0bd869f5e83e70e99be1f0426ce74e5675c0ffafcf4def60552d24e57ad48bec3f3d1a8ed2474f8d4642799931d5b101b1b5048ae456e04029744f7753118f2a1c3552f5c2590e0744e32bb6c85e5067baf657a643a0a08681e3c7faf8aad3550cbf92798484d0b003cbe7843a85e829a6949582cbcc479f8d62b318c00a28a24f0ddabc87729a6f90f4b388189d97cff220dd039a3268223a47d4f8824389cc97fa78a1ae892f289c1b788d2810f3f5a6633f2500b61e3a3f28a46c3c5406465df29b72c9881bb78088bb4185db45edc796a53a15cc1ee75f28e1c582703f81ce9dc7780d3912ad8be694baab21585aed38242f04db102aa7a38a148e2bcbe622ce2d08eb9de4051358730a33ab104493fa232904d10b97cb053b0a2a6d6fd64dbbce9d34933b1d43db6abfaa80cfa4207c5ac98a9fcf478f9cd3b1d9a0a6f4fd73e5fd1fdee7bd7d41f0c74bae661089e62a0d3a9d86e6af56a1b55ce6975082a16ce5a2e7299a8f87ca2aba5246a2d97c54dd426c121ead3536f31d711d8b08a6a4740a90a4484e360d9b6d3b44886bdab7ea8e9237f0bbfbe48d4f759fc18f11acc69517da41e20d1e3fb0649b25a22a0813fae250505745bed868f2172cadf00d633016605ef3333d2f8f22be9454a0277fedb5e747d83f54a35402a9392704c1111dff8fb3616e7a7864497eb003b4ad9a67b82a5f762114d36cdc2319fc6ab24dfcf6c88bcdb998c5c621e290c87ab3a43b951bfd84488ab6a8cb5bbe3a4b74a1b0f98d090255d9793ae8d38cd1e8ac318f688013eec11741d874ac5e571679ef41cfc0c00d206d776427ce0b1decb8aeb1adaa420a2c6d4572bc1ac0c57e0981e9e705c443f03901c4f16d3f8607b01d8868cbc2e531eec0e9b99d9eb1c2b360b0f29bb0e86be206402af401c22460cec755c604b7b05933ae19917a1ef8b26c1187b0f6ea11f16f4c2400d07e1dc441adcd9b8b4803811d6b5f20e476d0a62a6fa4d6fa914f10b9e80f47f68c2d48bed453e115e986cc2b5a3ab55ec3e65e2bdf07d361e5bb34fd644dbdeadf670ef84ee5e0de5bdf24be5e07382f3be5ab6cd3e9918cd17a2c28e52d77035449de9824d3d3d3f18eab6fe304681f394522443fd295b034f4218a5ffadd3154de8b95300460e0cb262dea41e8366b2f20430658c78c1c31f25695bf8a8f5bf38a14872e1295bd02525065c7e169d682aff10c3fa7bb18b7bcfa1eae88801658525c82e65168097ec48d9f472c5e5e70e52fa55af724b5d15ea2014594591e0ab41e1de176a59313c3d470927c00718d2c3185fc75b0a60b80d8111f80f818d5156c7b93c30323e7514066c97f4372163d898ad8bcf63fe1d4f1ff69b503d566f49c7c31aca818f210a248e53781446a43d48068229997d2d796550279fd5579b44c4ee44b893c922b093cb772e2c9b2743c2db4d4d4a043a497179a7700f4fde376af9b58485558f9043bc349815f9f4c14a41d765bf20fb5110bb4d73507f02a45ef8843695c754b2f1040c1a005f183d0fa55c53eb3dbbf0b7d0d7c9036d7f0411ed2703752f49842603716a0c87caf6ced309e2282d3e062972b28b76025835c3a46e73ff7eb79a56f4fa53e272042c2f388532a7187bd5d36d739c096bf0a45317d902d8560a5a71cd406dd12e0f0d51651043c2ec700422a8b1ead76192ede363650f8a720d9e810a3c78ff2e939589733a06cebf4ebff66387cf7d4ffb694bda3788dd692e9fbd5b5b3b853d27f5fc750e80e9156890c7dfdd0aab69b2a3c6d7054eeaefc9b4e8b788ef87a292a0ae4ecb64271fa62f89acf3e5f4dbdcd764c003e48c7c2d75fd55e5e5baba5723871ab73c0deeb4eb6ae8521507b07b1fe086c22b1e9d1132e88dde5ed7103207a9afa3a12c52ab07f1902ad2452fa47d8850c89e0cd493a40c8175b7c4f34de8f7385b5dcd5f0bc1351b3a9b48ee4da33407d31a16f3f3bc1696ff8b10d594ddc6670d0371ce51076fdf74f83f9de02b3b681b2bbbcbc3e1c32c252ab0e3b858d69d557e0d04252b911c17de13bec0b97ebd2992e01aa724f25693f91f1bf8722a6f90efc001545bddc1aeca6b158d41c478a64161c63208658312cafa7c926f9631a8432aef6b9e57afc17884b8f05a073c82ae334a95e688128cb9fa55e6ff74b356ecf5a3f2ae90141911e7eb6446e9fc83b43d35c6e955c2590bfcf1959e1c6c45f54c325158884cf5f11982bcd3e1881216033b5c0281d14ff5ac303dc5e69ca2aa04d9d0f85479a8b459ad7e74790cd9c61fc8f344533cf06152f2a8aaaa622d7d890989ed2e865a2c72cd41313a642872cda8ba7837824deb372a4bff09e542d0cdbbe5e8df5a39450ed8baca489914f5beca49c2730f31ede28451ddbd7402f74de42dd1bdf791372ef76e40790bb9f7c69f8edd07a2856d96b2f2a288ab14dbd9a25d35d4061fdd2e51c1cdfecf14732d24469c2343b6d46cdaa9e5fe3deee603eb2c51785eb7ea8929ee7ae9545f613ca6e46e291ac003bc844d6523bef359eb1b749b2d2f02f19bd4a3c11ed829f72a31ca8f5a5beb107998cf83adbfb954ab350f1e64fe58ba437b6225170e72e4b39b766b7adeaab50e36672149770f690d854c85f78f2729eff1dfd3f871829a9822d5a8c16ec8fa4969a2bdcd5ad1a6af093d9aec87cb1bebc7d1424f2808fc27aa21c07f24ba3b14b811471e251c4ca50b992a6c623aecae69c83acf9aa5d91a07446f44edc177ad2ea2b39b841bc38da7d119492802382f610ddf7620cdf5b569cfe6ce7f7716c9f010fb85aa11ebd635fc09fd64930b3a2d4f2bae4af5ba2b081e7270707e07e880611c1a9bfac38d00cf460dc0a6fa76df02c2d13792f7c06d486f7446a7d32fbcf21c6fac44d4a5237c1be2f2785fb98116d69037f89b806d046cdb5063252e5d15db384b1196d6a12aec262d7f814d2ea88da0e759405f52d99f247fc34866b88ebcb429993c5b9d655d3e8c4dce8dace8de8564e8e0e46da1f7867478294cc12009a50a88943c915283821c1a0b6abc418b54af39348c8027c5225df829b5e59633bd28838acd745ebf64b1bca5cad568d7d692ab3af58677c0f9d0e5bf1f0e8e7cfdbdc37cdf925dd32933b27c12e68e3713439db86e6c040ce1f415632a590533ad6be6928410fc35a32ce96bd6787e15fdde7eba74305c6a444a6469135aa00f7e1603376fd6cef6ae4fe2819a109b07bca9456b4f03073c2240fdfae3df79d0304651d6e1c7df59c317138eb40008868eba27c73fdb2ec1a8906674e9b58877cb6d67ad6474d5909c11d3f6219579ae5c80b45544b5a7ab716ff9c395f9b1a70c3e54989c6022cc2085a2c9fcaeb372b10675f3de31e2a4c1f6920d1ddd994269e944d5145615ae0453be4fd94178aee41b00d7af60d52d6e9f6eb3dbfdb8b4c08ec20f0299bcbb3c55bc289efccb15932ad944cb72e25722acecddbc6cf6c0d115aa815c3fd5c67a99c5d42bb10ac1a02b7a32abec832f119efbc5b01647879f036a0e8ca6a29401acb5d707dd0decd774ea090ec20a2c3e7590dccab20237852681f27b4ea5264f0f988d22f647e556d4e8d61aaf1e0861c00e7f1609b2e8a3036509a7177d826ba129f45f79096c4510722142695fa1b4f0aabd37ff6a95990f3f19ee0a5daff669282fa5dee6420322327d5326072d95d589508b67e18d72f725e827b8fe15dbb341ddc6a52d066d8da50056e110d1c32478ce1d30e4f0a736a1db018234d68607b5b9a7f18c2d61ee696b1319027aacb1980a6caea4ab4a2abcf0b26366c07bfd7d08d022d29549488444ed3d736f1111306f3f46d3b8942923d1b1b06e3af89caf7a6db3de5ec1361a96574903d448fb7cba31962e13a4405d36b0bf3b21d9c61e956b27f96362e9dccfba7a03bb387ec292c9e593781e19e887bc26407c14b4e7830473860724bb60c417241e4069cf584bc8053fa1d12e41dca1b707ba56cfc97f7347f310f133dc8fc3310ed592eed3514e4e5da6c54b08b110f62827b30e9fd35c3a20079133971ad5331ca450927042a37fb3fbc0f0bb20887a0f9a2aa0d3cf8533f5198698390e54cc9b0182a48e19c8f9beb9ee20c3ef5edf6748578721941e36fb0b871b6a02d926415669d79da6f35533c8bf8730d5d61482805d147b02ca87ab2c5862e479b9b88ce20b6536517a8d690ac844f2cd2ecbb5165885af0ff0a7c5d7638e1a954ebf7189c490c6a693bbd1062b4624bd1ecdeb5a2200ba58cbe69024918db2926e060d7b52c3a844c3e80ac4d5390d143c0886fa51380f4de3a8fb89b606a63fdb9559ca95b0b261d028c109b7afd49fac0fcdba54a57fac73014e25ce1cd7a4ae47a8c255bf609e5169227c0fad00fa4fdba8f206d35f6f9723cac713ea62d4846e2becdb77723fcd086628063edec61cbc31d578595d3cd6ab2959ac503f7838dd2f050063672c8e3303b4f42d57462ad7af4add957d47caa4ba3392c28a4e9460aed5b01c259772a1113a48be5a9987ad8c79f18f5dbe438b558e24df66c801ed907297a0d21858e3022e3355af4bf235744fbd65bacc545d2fc967d43df596713953a54c5482a15960b34cd9ac284b734364da0f8a9eab86a8ace88d01e6ae4e96315249af18a15b512fc6cda732458946deb035793fecead4fce26ae487ee5734a7dd1ad41dc4e888b2e72a921424692afc31c26566d575095e946ef87184cb4c9566a20282a4094904cba6a25a8a0934511c46b1bfde5eb96288aa456ab13f51ae0475a3622cf6e398269192741506ec0f15572eeb4670f8a132f647a57d28f64f35a5d226970a2963ffce4275e4964e14d10ada5bd5509326883b88571e830eb49948122a72e06384ae7190c0e8f38077a1e0c2023d506315699788ae11cb34cfcdd4b97ed8f3cccd2ecde4be2fae136f5693403d95d87aa5f71ca163c0ca3c11de58ba9c4fcdbac72da840da3b533fe55207d8f28bf52bc69e93f2fba25a3ff26ad99892f51c533912511998286fa0a451201139e0d40989fa543fbcabe31eb1a9e754db5986b4cc56225dc017805a434d75f7aaf2bda85154956e97f3c64d8552a92640a5aad4508aa119fcac303f2e9fa9522e85de038598a42f4940ca0404deb5e8378551335d4daa7b61aa486e925596f9cf5afffc13fa857c7e8fc05fa3891a464fab921cc54456a570fdd4db975587fd54e49995a1a5e47cb882e924f400660ebb1c82e75046d50a04492be347386523e1beb132c2920a73cc107371a073ffd74e028632b42750336942a4bb6d3e0a1a4b8ec5b8958a549018c58ab13f88fe42da97b3ad2c7dadbb5d138e85ca54a121a9ac747d2df6b8ca35232cc7bd960bfa6332a079331cd432ec7debb9536cd32185a03b1968dc1852e4745a541f54635c010b5d41c02ea529bec49592b09a0ae9c7531efb24aa91270c843780a69384fad562c0fbc79b08d35f5abd4ef1d86fd0a5bfef2e7f724315624c3ea43e9bfaff5219eab5519c74ba6d8d452f98251877f8e5ad2279a3bc31ac6f15eb36dfaa7aa4540af4fa70e6f5e50160d8cf6a23062e648d87c27f03226afcf007a5381111254546fbb3ba5bb9c939482cabc61dc4750230c07adad1595daf5d52a9f0575b4ed2892626e3b2fa4ace4a3ba1965fe4cb4afd0b70d8113636d87bb0b2ca4eb5edbf70fb5e9c8e348031d69cdf1b594903542b37bfa193a1823806890c840a0c45039289a6a9639bd5ef8f9096b7fe72bacf6a614bb53bef394d88756db2f3db768b695c106ba7b3322668b829562c116bf26f83c07e4ae23cbded8cc0050c025fb510d838c0a085b080a6e204542f9e3b69243e60cef556992376ff7ab58e1425cb3e57fd7b1738ddfe8d96d4f059077b5c2a39ce9df66d06c1a8b80d21c44d3a3a7f624442a39830e15baad2dc45c8191b5073cd73382f35922444e28030c88e0f65888d064910bfc375421b82c42537407317be88939ecbd43005f7de3a1da41c40143e366592d6b6e5264ff0e0c20909c58749c744e9a1481b284eb76b729fbc3e9d24bcddde08a5f3092b83b12b22e243db087397bcf2f96161892bd38d7364a555d3516e64dc8353cc1bb6f660d8688c16ddaf96e4c69741179a84c204acf42e0c5bd8e01cada5f53189c650567482fc59fb746218792ce8864cf17ac20fd147ee93d301d9bc363119a3d75a8c35f69217875518f08e7760482821ba9f62999b22fa231291ae6bad49f95a0b7313e7edea85991149bc05365c92e0bac2ae1322121ae2a9bada84b8e8a73ad3d7d0f6edfad00818a45a01698eddd523d31410404e4b684182ffe30ec9d8358b4e6ac335b2a7a8c9752fa77a860e8de5fa4f7aa62edffbf4e588c859288dbabd9e63b817bdb090a77cc1254232505615470cee39fd27f08b8f2474e4addc5dcf8d8efc417478e82bc7d38f577042a0f352b072065b1055f4eaa57367cce91a7ba861882d8ed7cc232a5140668d0996b06fa6bb32afbf86851401ffb0086c1cd2bda301aa6071a274dea45d6b05cc94e74690e36757c5d949d4dc6386effaf8c70ba42c71a719c5ddebc0428a177626eb25cd6ea7eb6173e2957422850b12b0c0f3507815f4b25cb6c0fa09972b5c929a250718b5782b0f2fe0103ca96f62862b7858bc60510b6ee653e69f8227ee02c2c92991256916a3eda9f3fc74de4b60948858d0d9fcf414455987afb81748232c4f29974984bd338b3332015b2ab0528c04c7471cf6a791fcbbce9de7f2c3486f6b18567a1f9a4225757d60e5eab1a6e2cacde3a7cc60a30e357021afa42c2a48d17d71a5015ae9ee81ee049ec2a08347a59a2a2520bbe09ca3c13716fc37eba8a6087ccc0f2790e87984ca92c3c2fd37708060dfa63329e0f80df86c783c5194884cce924dd4584c44f11e924af29a850e9df4157183cf7e070f9773dbb27a27103a4cde68aaeb429dcc8343e42e8485c09b1007a35073165b33e67337ce2de7c282b1a7a24ea653c1052e85bded9891ca8b01c109a6c157fe5160a0023557b4905167d8b9a5a2a840c27edb4b2b1b29dae6293f0897a4d49dc1623c614dd4c1dd112ea0281f73fa5a859d7fece1129b46fd077f2541952ce0ce75e1da534a8ea7ef25a89dc63ef40cb66ced31072aa3a5ab12d289f968f85f2c417fd10e0355f28d5116dfed22ea09798cdca80408f90220f906e57ff06eae05154146bf261e058c64b971ce3c8468f75fab48b791b18367908b8b72bd05a7c19cc3f2bc16f7f3fdc795a495fe388dbce050cfb36aaa88a440ae7bfbc725c2181c44e8d17e073c172ef908d06d914dcc68c27f14f58dc4138dcdeca0f79b4e2f2db65c1a631f534b4fac12dce0e2b4863a98db3f0a09a8d76cb45e89addc948762cf5f32d73a7cae3d7831789f21485d7053914e74fbfab5179c9d28f3c86acbae8c8f9a82f19ea691542a16403ed0829a02e03e71717c0e5ba6a5d569b3d5c67616761ac06cb06278cc483e4386a37f7bac3a9d41995f878e7d6ab6a462b0d20ea3df37a08cd434d13bd1050f93395b1f7ef168af80f750e9e62d158a360e0215d653e22f35454b04a00356fa3d91702a68305c217585bfce239a543d1826a808a0e7a449619635e1ca741beecd5651d6f563e20ab501869e801fe57287f752de54981ae1ba503b4209630626bc201928c910860dfc63866131857925b42244686a86b00eb3a7100be203b954b9310f08b432dc0518a73782e1b3ac96729fc6177aca49de61fd34e62858252822472ce6a0e0e376b193421cb1f1483b2599d090dcfe189af2833b6b04875790a2140712857b5fdffd67f0cd3b8dfce08d7df70bf9563a4fa761c2e7060f12847eec1296ea741ccf4c34207bd3a268135f457136472ac98ca413eeb1d60c38343eab3694168f75b7aac147e5e9320ba434460b82c0bdd67c1c460955fd014e17f0cc67973843bae460bb4c5309290db627699cf2bbccd8d6ea0598f9bf413912de31b9493d3f463cb23f630ff18bf830ed841d3ba71bd6ea849dc97668a69fda3e5676c8442a48964288d9d71f1375602cf23aacab94958548921fccc1d0d4cf5e23906382563487092d58392604d1b46dfbaea4c978fb12efdb0777169dd7e6a6203c2cb6c1e3e7ad31234d23bfde29687c21003c6a76d1e2ac8543a8a91f24dac66a37a05920f6862beea2211c0d979497b9f1439e3ee48198bbcbcdd89fd6d5c7ad3a483f9edeac61e2e63ee64f1e7334105509a0b69df0e5374dc6df08d2fec038bce939607053d1dafcd1980de9ce1a36b369f0345ace9c1271c0bbf37b80476c0ce18532538bc1977c7c5f12c62d32fe4bfefb13a538a6c1ebde421dc25028b43ea3c27cf1b2fa12862caa250f051042b3b4802ce37b96dec99b3ebf4947ed0d9c29c5911306419234e206c0061c1f6783b3de04b1736b2024b655d43bd45a2413b26a048de36dc8efa0b4a43034a2645c087f69000f09964fb2d8324079011a65e6e165d393040da6cbf819b31bccf8f97b8b0bb2c3701aa8bf1d5a9f4b210e2c41765b1669f97c868554e04621b5df973d459a62b5031d51d7fcba08ae8a5324da2d5281b5a4bff130791111d4726460511e4a930edc66dd14bfd1cc2893a25ebd126e1e47023034c18ea7433aa088681ac58de7fee48282e45ce034d290637c37606fc1c99a92b1de603ce9b4e2de1d43bfc1fbcc8cefa8e917e1e74de2a5574f4876df288d3f7aef08ff3775a142288ee53f972ad738377450d64ae56e8585774f8e6d38a07485f6ecd0ed78d8c6da678859fddbf3fc66e6de379cda1053fae47cc0f9f521d5012b63167b97b2e0eb095effbc32dafb8844820ff1e06484169cfca4580d80ef42f203f220844780d25f94fdeb611b8a73a5ce4a15a3eaeeba7141ac09187be29ed9afe6f138ff4e4922b1cc2636d70451833b089f605e9e0156e89f13c2b5a786d3e7200668a14f594a060fe8b53a68cf638fe374153480d1914e455708573f2ad84c9d12bc9780473fbbafba0af3065094a1f4c1682efe44cb31b8475a3f496ba4fffbb8408dd4b5769b2462816579faa50b279a54014ef6a5c8e419c2333645ef268ae1b0a9fc1797f78b96531cff659ff4963c732540f3f7c1ae783887f99a02eafcc1095eb0b98a5d949c5dae262e1dc6bf5a86d5bb59c2eca66aa57f27cd6881b39fb27a444c7e780de4ba236bcd0559f218566f08426d59844308d66e13d881b22d47ad958be34e54bcf3010910fd11fa7af0246be815219cacac249bbb70e4bb140c80a7c0e3bb75dd632a66c3dedf26d910183c2d72d21bee3ed248911aa2b11870cbea13cd36256f34fa5868fd2b857cb0ef83b25e2058354fcb3436637fda04e518cd5374bae9ce7f04620d206e4cdd2648a9eae52d80e16fb520704db6592f491b6be864a230d8b3be304e74df2012b5cf4f60da441f7390b1fa9b06c124ca49b2ace3632727a952507314c6ae55a8c8b2383b6d816d0c0c34ecb013e8287d4fa6c78df71958a16d5cc8a3f3006d904b21d10d31ee53010efafaaf6b5cac84314027fd8f446e2c1615539d7206bd42ad168a8a6a42de1c80909fd546e3695a021bc4d099431dab47f8e51fd8d5d998ec684c115b27ab98763f35919fc7266880e0109773257028a1d9e1c0551b4460b3dda3fb257aa2e07098a859f219143a992bf5bc4904760e72dd4b4f30172e0cd57154e3697b2d18a60b7f2171d11f073d9e09e1c5f25300e0c8f8962e3a68bb23b92546d3c73461018f42a174959923356a630f4755c38428028746b097565dc174d49915dbca20daf67e238132a9f0561dc0eb7d9dd063c9e565707fc897f27029680a8627827506837c7acc858ad40251979b1a5081a9b8422dcc57801af405eacbfe6add3a85868eb745df0e8fda7bc41955857f8a8131ad82bb0a84ae64aa432207642d6f49c29403100cb990bd91125af56ce203466eca1380704f7a1c5c84dc8446b04572a0bde02391e4db842cbec0b5f8b189750e5c9ebfbbe75b0440fe2cb92eec9e8c4cb3d10163a6e7da2b06c90182fb3e2f05e0b460cc8873c665ab6c70c6ef883fdc209d14beefd1a4cc18c6442fe070ab7e36970c1553c0b0a593991acf2d9efa61bde205cba1db7af5f3fa4ae2c78309daab020f02f78c2c804b3c2631d3e853a30ee8952949a897853e0c221397821653e3bcf6a47cebaa6261bfcd38883417af12a9621ecaff290270acb6bd1350b0f49901fe41b7370ac70f96bf1ffdc3147ec5e2bdd37797bada885fca374b04b8b3dc4e09fa580270154f502822125aabeabe640f8f183049085f2459d65e58650eb62a88cc4c190328884c04c73313c4dd241e2673dacc0b606f0f4f1eab38b2c01f37d5d997f3857aad0ada4dc219b87ed807695290dee8c6674bf3c4c030defb0fb34be9bb3c5cd6844afd644bb181b20357054adacde0787a93bc992c3a252e3a106c9ce77635f7fac82b5800580cc8adcf01e7369994242495bdaed2d2e388e03d662beb5b8deca806106b40d6eeed4667a6e8de64605c2b9fce7480b7f6c24ec31965c60185441178ea7f14632dc676ed6b81953f3cd301460db8b5b816e095a244e204d4c1e9e889a414c7e8f104c80afaaeb0dd338546c903550abbb7bb644ef35425fb17207818989a6395a63fea839748a4235f5b7bc506b280a0b3183101875c87ef83bc2f19cec71064218be0665bba671c2c1c0ac1e90eb09eeeb9f69ef1f0582d38fed5a24dfac8bd386d3825fb5ef9bcc19b82a6fdc2f1db834df2f4edc86f0eb94cc281e633ac735c4cc7a505407e3b0fbd0c872ba6f45a1268f9c5656aeacd27086c405a631108133b83fb878917e27113f487fdf71fce350b6e83d830699a48a6027b3167e4a3f8061cafa8484403fae7443e286baef2b52204bddd435990805c1e4438257e4f576908be0e387206bd20cd11b1e2c91a58009f37b0e220272ef8ad8870e4e6b92e8a5d8ec07132d92edb61139e56a3709101735a9ecc619a4db364d6e9dd329d284b045e9ce01ebbbaacd1342ff5fc8018acca944c745de6322211653e941995a6918a3bb799c3d939070e28f7abf24a18a48bcbfde48b45de72a94ff80a4910f2d4fb5b07d007e85d2dee133975ed15f0ef00c09714c107cd5bb56b5ede65870a0ee59723f0c9f2dd3ad4765afc9da7f233dd16277f99446752f63a8aafe9941004ed9880578fe8baa1a295b7ccb55c774a8a52b1d02122ff8c46344d1f2227e092115f03a8f21e3438f07e9b5c7b415b2ec61ceea7ef3be1350bb36d68b558f9c390de047c62f4a32d3e0f4700b6c213c507bd1c61eb719144d58ae3af32f5c6837bd882629b3bd5bf3660339fc551216b657d122c424963a492dc2d28a49f699e747f9a1d0c259e4c39626ca8cbc83c37d766d4b4912faad0c7d5ed72cd8d611a99e2c2a70ca7b6ea120f61abf108069dc48122392679ac24888509c15058a784dedd2831b0bebf24e899ef5802e178723d233da6c66c9ca28c3e9119d6e114c9c2cead7c07e530b534971e768ffb5712f4461d3b5c98486ac204d7467344fd49cb2f107c1fbe3957417b80e333ac5cf685101d0c6b1929b61c90a8fe0701af3f94f28d6c5037a85809cfe63fbf18fabd11bb1010b901ca466261276857eb80def240a02277ea9d75cd80d502a2cd42efd75c093896811b650b3befd1e8d1acbacc56ba80d19df68fb31d131d283087f365e8b6b0a3ec43090f87e9c07bf82964f2da73f570fed52136ee1ab2d6fc8bb7e4ccde9b76b9b8522818434cefe0f93f167f4af0f46055cce31b0358c4fb59c4fe8c3a940b862889061f4d8ea7fdaaa5c11b1bc487ca678827b5d43eb753ea8631e4dd3742eab0c367d06317d8c291cf4257be4a07369e738848bc84859a29f8e20461272019d42ec266bcc8342c8be09a676719e5bb6b823f001c300bdfe56e2b1b64b61c2577d2866999a3794a2baa129a6a0cbdb30d9dff8dd5c60fe3482124e36c6f6e02bbd1105ba49658dc44cc40e2431c43033ca417f48e08d82c648847ab5f36d6e6ea8adeeea7586c34679f3ee79bd1c7a47ac6f9bacc773f2c2280d1a92bce40e8e3a7a685d407a302bf2f28e821904ac9d6022315ef6c7e139c8333ebc0a0c504ef4280ef6aa557a0986cfed6fff16f4b6242d2af08bd09e355f7024177dba5944f007a93f1c622e32b23267bcff0384ccde5427a229ee7e5d4fc2a2d9f4e799e240efc2b4a444750e4af5f1bb5e6a8d2d81764a61ebb5fe8bd3958498efa645f0eccbf1f0d7ccce4435a315ae031f4548a50858741fe6170fe77430b7adf57f1509da44cbd4997efc5c066d76b190a36d80d104a1fc6762a192a54cc3622cb2069687a19d18d89d75f23fb287df02f3369677761f7df5a2ba33bbc57701c4270c40ca0ab9b04a6ee13093754ff6ecda301e4ad77a74d63d8c6c79edbe3333f32093ebee983392dcc4b79bdb81bc6b2fa53622bf2627217d33aa4bb30fd619a71ce12c450b419dcc9202dd3ea029e93d9ccfba5eeb0e208321fabfd1c2b886ba7ed91416f7e09f3d56a9061e263c19fa95da386fc2444e3230fb68bc2980dfea7442aa02f5e035aad4f01a5ff77518bc274d0d47c5cd68da74290a27bbefc14ffa7375662293a92fcaf77621924dc7c76e53162e269d4731c5b5c2910f7ae2a0df244be23af17b5d989b6251d10726aca603f6955d26fcd53f2838a8de9c666ddc004e6726ac001e641b60f673787ac955e02c970aa3b5fa7bedd54d97d72e4331d578aef2dd367c0dfd21fad33828b7297731a56908d4ff863a4d5da0cbd57a797e5cdc4bc4789016ada15e44bb1de1cae70de39f1d10321c5f585086521a528680a6d5e7444d6b7ac897b4558bfa91772c72cb54a103fd59ceff7b464a38df51a9a008144c0ed967b1b33ad3472378300e8277ebf8fa8f7c04df54d1f06a107adfe0970f79e41060e18bf9f3fabb1574321f33ad071f7ef57e5df61ab07a590818370d5d8ec6ff2ae4ec213d38c1b5c1ba67e89eb6f0de8796204b86e446d91fd32cc3883442517b8954e70b0e28fbc58d0f605911549eb9a2d158b589e6144d66c736adf76c72be5d3f2b5ee3e827ff5535cdb7a960b92d48d02a44f5452524a6e748ed5ab2529968b05e7617e77b8f3480406ff4566c1b64f6d604b46a79dc460951f1b2868220208c88fc9960922ba422a86010e2f8d6355b2029b237489d6f72aea3882fb2f1687f2a1e418faa63c1b815d7f2c8bcf4ea520819bf9b41661d06ce2a809a459ac86c507e6a287108e5c7b199acb73fb79068da40066cfa0336217806017a3e0ed43f0ee124715f21adfefc8521ff9b5af01d9cfecea49a8ab467c70ee1bd1689735f8aebb079c38df5f1406ef50e1512efb2ac0e8e075d7464f4ec5dfb221d4e1eb584c478e1a01820b77814807f565407cdde8380b25bac8b84ce6cdc50842f47125c78fafccec66a8dd43c03c7b0c82765a2fb41d6193de83a898aeadc45ca0a133e3cb15b7b90e52b7d762e0e1c056ef87c333d2fe4fbcb8530ee8ce501d3c86d585ab207428bb472c03033130b15d2680a0910894e8875ab37aee0afc22055520c64a284fc5907fffc5a8e89e30fae8ff91ca2620e9fd6d55e88738a9defa98e45bea7c991c98b72656ea8317527316eca2f38fe7453ae4da9ee15d73a297ff66096d9658f08dc813c89a95b247be394ddadb42c0bcc73f612e4278b58b281409a0be7e667dae0b2ba14cc2d0bdddb900f671e8b11172ece6bf525e0e96af066c27a59168d3de900a5eb5c5ceff0907372ad8fccbaa1195619f9307bd2e0645a65fa8953c7aaedf4dc22f433e0206a95d680345d97481c23e6588ff9018009761a2f6e8e4dabef3ce09229ff9945665ac7551499cb5163a41edce9e02fcc60488df1285bf64364034fe719483e750b90af656f0b14aa7669a8f25b5c19d45f3e06233887207a55e61a638a00924f6c1670997ae375199d0a49f5f413bf8d31c16dd5967dbe04a35ec73a74f21328e2bf0c45e69bce1278b232455c778dc27268fb0978597e5a67ac93d44e796070e9b8cfe6edeb85a8b9ae426432e77fc622eafccea59b331b54eb8dd96fc750be1d7feffd81262884c74efc90effaa1578926dd683a7428d52aa7b63653c705e334f895f614b7d7d92ff8b9392c54429a541d889474353177581b6804efe6ae29c5c4640484e2e9906fb8bd8b2c8ec77b0a8274647e5013683a5ff1f2240d10506fc18729fee635b29a6f3e3c3b1b105b4f2310a88e90544e1022ab6068f5b2014b2a20e8d5f8e2d557e7beb4b8362c74ebbe72abd3e472957b2fcbf5b455063cef7ec94f7169156f53dad6270a16630a1135081e7ae17df58d758a925b25310affb13d9e9727db6970769a8a9a0912e217b37d97b4b29539232e5080109850862f6bf1466124b58588e6079b260a6b2b6cf584b7bdfef7d7a6fbdf5deaf96eea054a766cb44131240b1c936f9a789d8225ddf9aa90920259668824995175871440a30600206527a7672ec8c3b468690eda907aac515128c6088299a6861040a493b4449a28754a634268c4ee0b532a5316184b6d324cbd86eadb57787f6930b7ba7672787edf08e2da8491628af3f3f683e82dc7befbdb66b4bdb61028b77830411c280987c7ade1248744d94dc53a6b4262a3005d0a4045d7b0f974c694d3ad04950e048072dac74208a134439e1bfc6ccf11e9ce285078a4f1c19a1b0b1987c40264a5215618c44364554d9228b2684a8028b1e4fa258fa02258226644259d8008b0f3a6cc163892a4b6cf1e6d79c4c40c128420f78200118444424ed18010c8430cd8a94c0034ee8a0882b96b045f18962850829385005cc949684045410b6294d087d565c31f9c044098410042174e0a683a41e9a13168499d29282606500763030f2bd0f504871c405462600421130286034a125edc0090b78d82206605421b3e2e8072d786a5c985f338e493ba8c29469942650be4ca35041a22b2284175710a18b2840a06205b193a5239f6f44102e2c5191bd2027847494230a1350a8328de26488efa3d567b4f84f56f7e7e87df6bb9976e539e2f264e5f2bcb9beb5b4611f88ddd2d21dfe36072a7e9092edd32fffb49396ead45e02fa8cb5c22c8d7579b252a3d092fa3b7c6c497f91ae35806e49ea6dcbb6ee5d7653ea947ad3f77e4f4115c2e84fdfb3ed750e27bdee76ac7d5cda3227d7bfdefd69bdf6b27adbae64b5e98dd9cbb0fbd33e6ddb79f63d04cb33cc6ebffbc67f764fed77f663e84aafcdc62e4398ed7b0dc2d86f3d5cb115e0cd16f432bceee704ddeddfe9e93f7772b48702182a49f4e049144a740185094c18c9b80b623b1c449b02c4b5414c80031e60912d41c11339e0a035a909096ab3792094c74c694d92f2e9ddae0f684c30914f9946794110ad4c6b494082054824f8410e073db0410f376a34ddc28b2738185c21d4031076fccd367bb461c3014ee0a00b2a4d7001021bb9c80bae5c3902072278828b1d62358a180191644869064b3710424c67c781b891022c80c082045e2439c951f9a0092634f8c11039a882c64d938c7bb0d626535ad2910f8bf9353f7e0e262849c8c114208e04918419b52e92a22891c54845097e603b0b974ca32801c42953289010c203e4124ccc644a5b6289ec651a658a13b4cdfb9966262bd5e48cac7ed727e5b663f39c61ee576e1efe355f21cbfd2ed3963b16089376c550b6994af1a289d012109c084309098e7e90c3a935d1010a110f59cc344a124b1cb1d382a12a4696cbcc111a1d76bfbf8f64c11f97971cf28476e889dd1ff262b6a3ddd3363da3ce9e338c0eebb724f5177d53f97d3198903b32065c5ac033fd3153b105ea834c4ba3167e1c282d8601fb18b896c77abfa54fa953faf82da56e9f8a2d5a06ddc725101a7b21052f77ba48fbb502a43a46fa44092df364fa44c9073248ab6dec274a6cb93f6c56903f481de60fe479240bf46d79d6212fe6d83ef891b8faff38b6e70dd9be97d4bbff955e8d21953119832d2de0f9be97a9d8024ebea511062c8ff5f630c2681ef7d29a691861c49cde4befa546fe547c210522b548752b046b7d8ada58ff7a5645a9a5d45a6cad0d6b95d0524aa9dfd0521d6bad5beb58e5d43cc751957279e75ed72ba654d014d62b466b2d2b535b3d6f1c4f5676faa2efe5674b9363f036bd2bb5a79a36e95bb7d6adb5d652cf145a6bada5a6d05a6b2d35d9ea02a50547f9f49630f2a4050f18e913254af9f4284d892cb96bd78ea203910cb7a006b80d72736e3cbfa6dbe80e1a60afdb9b1cb634dda42c30738282dc2a60ee66bb59c8f8b5d69af78e43a850753748882d08cef1ac0f17024f7e80c2c510c018ea40ecdae47b694b20c977878921d8669a4bdc2111b865188638ccbcb77bef0dba4a0491ef5bd56d080ca64ba6528021cb2f99d294e0219f66ae2302c1beb8f33eef234f4a5baa48b82e52f2595fdc799d479e94b654912aae8b5aa92fee70479e94b65491705d84ff9e94b65491707d2da52d55a47e5f6af2a4b46cc5589f5aea7d6eadf5225efd9e00690de8337a619b7dd63f6d49cb186c253d2a34b7bb17254192c59342a3b5d6ee76776bad8bd65abbdbddad0d7231c65dd7799e0d42ac04f170d7759ee77ddff7352eafeb3ccffbbeaf46450a087ab92fb0e096a4d4acdc946a54a4e0b05ca9519112c43bf987b5bbdddd5a7befc5822dc6de15635cbbbbb536c90993ce765d9625b7d6de7bbb2e8b673dcfbb7ade92bdf7628cbbaef33cefb3dfe75dbf8fd65abbdbddadb51763dc759de779dff799acc9e45d4d265a6bed6e77b716775de779def77d269309b420e85d4190d65abbdbddaded3ccffbbecf6432812018da30f4ae61f89d583ea327f1fce873f2d172ff9794fb4193c904d6402ab91f9412863ea31f85ae24f7879e44b4a2e85d45d18b723f969c0bf990cb7ce647dc48ee0b2cb8669244c55653b25225c9493369a42c2deb234dd4b32c5dd4491a49cb5a28cb92949a959b528d8a141c962b352a522aad1aa9b39aa41ed5a26e238ee44c72bf2ba9b37aa41aa94341a8920c3447711de4862c3608b15682d87c46579b3e638eda93fbfbc1eefe69534aeef71e36f4195f04a26d5a71859a5df4da7bbdebbddf894575fa3fefe42f02a131cf5ffd95ca486d99038dd558bbdf649001489bc7a95fbfd7efbd7eaf53bf4e29a5d7efedb63cb5dd7adbee76ebeeeed8f258bfee5de8eededeed5e777bb7dbca9ad14abf6ba57fbfd27a6fad95d24ae9b5f75aa7d4560f02589e1e88afa5b4296dcb63bd6fd33fbb9bd2a67f7677534a4beb67b7773baa4e19ebfb571045bf29a5b4eb760069dd0f36d3ed72631c04773e502a47284103255330a902053523a8a2fcf1d3410edb014d3f3f24dd0fe7b8a089e401630f6ca1848a27a28051845b0ccbc8184f198114197fe54f9bb63c29945c7f7e5802de9d1f90b4b4db9f1f341f3b343c068900873bf71c3ddf0fb2aefc217dd8d207cc0b729857fee01c709831935ac63f782768ca1321f8dafbe707cdc78f08ac84ed3f3876a618a5e0b67b90101f3f5c30653a45042bc8623ebdce515adc6c3f3b4a10fbe7c70f26b3a04bc3b1f301451d4e797aa20a36b3408764f9cb3f866834facbbf93b0c217d9333331e18bac343432e18ba439874c5569d39f0699526a734699b20d31ae8a56491ad652d22f11c896ada3158cf56562582b981755caa565449dc41034b55c279c7f91a66c9667111c92521d2b02e1d2fa0d79b688b2bf0d79fa941af21c6590a75992670f91e4b9ba65ff274f9923647f1af2f42733e439c6204fd3459e3dd4224f9f2243a65645674c51f65f91a73fc9e7aae8fc7cb68e4e966a75f6cc853c658690fd5bc8d3a78ce4b993cfd6d1d9b3132992270b24cf1845e74c16a799cfd6d1d9431d798ef96c1d3593e6914067cb489dd4d93a1b0d5257a48974914aa4e210a9451a1cc009409fb168a46dd69288f1f4409fb1d66f2246cf5d04aaa38bd6de8bf21947114886ce0654e90d486767cbf5bbc95865e86cb9bf8a40b67adedda70c4dbdae034f94ea844af0dc8dd2767b71277ae1670243eab0eecff106a319fca5c4588744a32a6b23c6903e05c516bdec193d976ba8b60c672a68c16b56696c093f0608518261c84d8608b4d98f6b7109ad1724c8e6920a69d7ae474f9bfd3d3e44f187e6c28f7e30a50a2bdd619f3ead3c1526d4fd0e1febca2575fc2f064cbe549100f5ef8397b46d3ecdf8bd8acb1c6df65371a793181bdf902fa52f7c49cf9dc10ec7aed4ed097f08a6c23662b44acd43596115570980b8b69cad129055ca69b3df04717407f85d898a1cd67d5b25ab549154a2b32a592b0df39278455ed1cbcb0bc6f4f19faed41d2d7b4505f8625d19ce9030f98324a53aa692b6f9619870153acc63e190ed53d3665b5a6ba55fd52bed13fe8e3c89462c7ff5b71263fd93b55aad62642a51abc691c562c9b46ae8c5c4884032d8a17c3f4604ba0f826725f10dae94fd91e48a4351ae448c270e4538109d8ecbf62979ca6087b2bf0d67600b748594f258af27701e9588dae8f01c81c259bf60a4495cd25ab9e5561a623cbda2dc5e9197a461e1917e75386bb3998cf5cf7096fbc1b10565fac4137eaa43bd947591eb335a8014c7d8e5b23fe833e2303bbb68b4f89b94c173d9d2daf9fb9f2dd9daf294017710b64d2164ef5d5441cc5d696554c7bf5530d6ff715b43ed163cdb3cefde83f6bd4c45fbb634ba4f45cfc596b45a2825e0b96cdba45dce67c0ca5f596d561aec4e07762811a592fbc3bac3c7c3121442487860890e4f1821832ba234811264288825381102c90e8ea668820656d8a0bbbb4684dcf6031d062d0969055634518329549644a18244106e352bc6204f07af6fdfeeba2b7f30c61877d0e7c3c70f17acb001f6ab841108b92f103994c062095684a056845a0ca2a8a0f48e0eaeedee6e8c31c6b8b31709a6ea7560ca101643304082116a49885929b2b5b62b7fdafce183e6c3744de5cf4fe9f908fa7ea63cf1c2bb36888f1f2e4c79b20514a1afbf16bc2c28a785100d7010214e546927acb41357da092ceeded871dbb063bdb8307a93c9643b38e172adb5160a122849a02881c282f250a4983bd65a3bc407318a2f866e183bc6186377df9961064630dd8f2790f81349dcbab5d6da16b7ee3ec39d61064428cfd1e304e72417b483886fc018bbbbbb3b761b767277063c9cbaa609599a116b3d80718d24a08872031e948cc0430c4731058ad077e50c37d890b3e1a76718e2b0af9cc15ff567701b2ccd8b19a858122285891427f6dabc98810af116032c31f8a2236df8400c2b37cc507f061b86c030e476830d33e4a064b9c1adca7e8683d362c5335263f4821a4841e5065910014592269498987c28006f600e4ea7a1f036da4e1ef086c8620547f440061f40819426926a5b28b14a4e909099d2a87822c3644aa3a2888f871374408899425163c1141ff0141e7af4f8f151e381098ea850f338fadfef61a4ef25ada1d73c277eb092f776fe1de999feb2721dbf5a9ea6d26bf33e76af2bdddea73f3c297ad260ad618c674f8f8655faf24f4a0b9598ecdf327ef91c5bf239c6e473f49a1bcf9e13eef7f4a03ba807c54845be35b0ded59e70c625a53a7eb500bbbb9590bbbbbbdbb61548ac304245071980200adc932ab6889d5ea63e5c1a3ea16e1e08c1a8a8053c00638818145a13514491820a018d91121081881e5079a2e8090fa040428870088c1e7a48c114445cf480835847f10416539c40650ac594233eb053850af7fcf43879b9b676a4b2f7de7b814839367b5c530d04a632d3da951b6431539a144bf86ee00d05a21129bcc88d9d90a0bbcd4c6952d8408a27a7dc6d87e2acb82e08dddd9f281969c15d39240230340cdfd7a7410efbca21feaa3fa4fdb613c510a14b59b27ea3f041d541426c41843c21fa71db102894e082b1bb3b4dc9fa85418b213428ba70b11e14481d09439b75078c67502182080c19024390ea3d7bba30be64046018e28daa19994a710415788d82027606518ef23288ea3288c21944dd0ca26c06519e4118981718d50b4ccae505a66544bdc09cc4107c81317d5e875f605e606a4e34a490e9d71a03909e30521a0b90644a1bc276cb9496c4497619dd51b12cfb0eb93e7dc1fbee83baef5f30fdf741df5311a8061a5e001f7f10fef0c37203e0e3507c2c964ab97e102ec1ba24abb85c3fac39b0ac367f7d0f3e586ec0f4df173e18ce40221352d277641aca958a2fb45ee8fefbafdc80f75dd9f2efbe488cc65a41a6ff9ec6a84803101a3395f52b6d41bc6f05e1727d1c8ac472b93e91181583b4bc0c52caf5bb5bae2f0ac1c16b5ac565fd695b03effdf32ae51abb64eb05fcf76f2dd7c7f8310edfea503e6ded12dda27b546f7f5a5caeb18eb44a65eb85fbdd77e506ec52ae4f633416a3225050ae00f6962b0e382c79a106418929643122568b25327a2586cb1c88582d96c86232b7d2c511590cbfb5e1eeed9218ff2d91e80dc4e40bf7f14e3e6d0d488d517f9d663e6d2d7bb524efb6e304531cd164955669a728ac9862268b9d748966939a87d2b8020c1d20c9624ef3d7ac46642baab4a37acbf54f8b94ebbbcc612eb6125c91c5eafb90fbcc61b6e6affab63ccd9d7cbacc9368b97acd6d375c2e9f4e972a4d96ed50ae0f66fb4e9e27a50dd143ce96d695b69f4e5bf34a7398cb2ccdb33587f1a022095aeca664ab352ccb540691af88ed93104ea63426bef09a892b36c80f3a516a48c8f8daf611440803aae081cfe87e4f0f97e7585afaea2f6fe997b4c93e63f56c32a530f0cf18d9ff7cc97f062a56cccbc621d6ec89cca27ab4f4e51be353e28f8f7ad787df7a8f94216b6abe6ccbaf2b63485a25f7b348daa64ba922699b6279ae48da66aa8421699ba8b285a46d8ee549696179f6e4fe139923f783f7cfcee7c7883113fa8ce2cf8840a89f091fa4a1a1f9d06774f9178152ffe20a358f0f92a1cf789f1481bc27c515cad296a5772dbd130da8ec5f0157b6c195fd3b36aa32fd9315fef9e29f35a83fcdf1cf1c973f77527fe678f913ccf43fcaa3a6da68ff93de5a547fd29c594120982f24f597aa4ce5b890b4cd96722451246df3548a2149db04cb93954f93faebbb644de5f1a2369a06d5b9c9eda53903d284e3c862fd9be6ced9934d93ea00a1f3bed3fdeab02f66895422b58889482de2b92620045ab9e5b2d4a848a9ddee496a54a4dcdb28776b3156b252c5dacac493acbd178571d7d97b3146759de7597b5118771dca83e1fb30aaeb3c0f9523c76472a2aca44d8ab442cddf7724a94dfa262799be89499bf489daa448323dd2269d65fa566e5f2ce55ce642596e57ac2875923e72424baa5191d247ada49314658aa54d5a73990ab549873295e5bec0d2b33ed246725f60c1552649546cb56e252b5592aa93caa422e1d02695d52395a871a84549327d475265550807ba94a98f362903daa44add1168936281e1479b9452c9d4479bb4a6d6efde6993e6c834a74d1ab6493daa43699b3447cd52d3d2dadd8da3b35428332ea91063fdc619c8fe5487f5ee97d9a33a0eebbe2355fdeaf1737f4dc36c537bffa7b17ffdebce05481db6043f7d2f07b13aae06727ff50f52bdb2d2d77781dcefd1e0616411400d23d350a94e13b1981432b484869e1c83998bc4bc07a9c8c2f734d4303229e4fd0e4b68e8c936f80da7d5ae5024f7d7ec913476499a2dd9e44924f77fa4155b48e5fb200eabd882d770df062fd760c3e8d97ea536ecdb2ea422013c872efae3102fb1406377efeea92b2dd0ded54f18973478bea5b54480a0cf689dbabb3b7677ecde5511a8519e578184211261f444156a18f907cd2001baff9e8a60792a1a5b2d1c3192fd2d901aebc806d231d3831e76a43b108f991eb461475a6b81d898e9c11b76e4bdf702b931d38338ec488c31c64070ccf460177664d7755dd701e962a607bdb023bb2227c2dd30521f2de5684977a8cabcae148b309e9628fb2702f162a6074db4b6db8b3bef7416c96ed455b12b5b2c7cdffd0a5fa744758a642a76a20a7608bf750d2c657f3b94bd94c17a0e2a01521c23e8f9785a99e94f96bfdabe2b39ecbe2dbbd11b1a6bb6619bcdc20f96a7672acff12b4f96579eaf94bdb75604b265d8663bc6d87bf73c201dbb6597f39792b1bedff26989724ba02dee70e3b6436e87b2f58af08d02a435270d129336bdd6ced6824acad0d91aa98d186dd8489dd43cde513a27d97ed784f234ada351188fb7dfd528ec84b7df25d11d3c6f4f5b84c29f564661f7e62f2250d3ff742b58509e9bb3330af379fb9688c276bc7dbf5198096fdf711496e3ed7b8ec2606fdf9728ace7edbb12dd61e3adfd1ea23c38de7e1ba1b01b6fbf8f509e9db7674fb6e69f66b66de2fc0e8551d837e4a23c35defe4861dfebed57ba43c7dbb79467c6dbf7284fcedb0f290f8dce96f137529b9eb464acd9997412ad79bea38e4279be23a8e9ef7f6f0e0b6bfeca354fa8d4e62502e50971404d14caf02e65ff6fc861a89c13396c94f9cbcd12a7f4075f642b83357c91323deb5977a251177551872f32a66c4f346a59cbbeef63d9f8be17b9cae00d5f240c98a52ef983387c912f39876c29419a21c458bf68d33f146bae76e18b54e59610506ba84dff534b1624b3e42f2023c6d38b4ce51eb2351bbaf91bb2c6769015271ad51bd8b4f6e9e543d2981d2a40c768644a4ea1cf78428d2814ca14be48171e644b26b34475fc9f5c29ad6caba415d2eaa8c85f31366f1353bed45ea8bc549191caa5acd4a46cfef29a13c85aabb4d38a88eeb0f1299bc3ae885242a144a36aabb6716c7169696909c317d9e22429696c697149b9b8b88c99073993c3511d1a9aaf463b6ac99672b8194c90902cf96af119572e22d00aa94d9f79b0aa2af5532a953aca4ada7c91a80c235bb2a51c8eeab45aae18a21824314962ac682b253333e39191a84d3ace52b65415ba82964b2aa57a51a96a2d4ff9041e3c3d4aa11d3ec6e37540f578ffef88ef08e6cf0f899604cb41cae47037aae31fd6562bd69fe12d6616732406490c0f7255d43a92929c4e964c29e594295b4d525434ce64fe1c67295bcaf652727494f219819056483095fae9e545047a396ad331264f195e2b25d9ffa75fe42ac98b14730eb225935992c9511d977797f7544c514c921825aa556dc5649524875c15bd9c5e4e67caf62165ffb04694c7df41b67cc8560fd942f2178c67065991b4e9950827aad0b97574c44beb286c69790f6fa7ae3381acb21b966cbce89075f6221ad5217f700c5f24883a52c264b4f9cb490b950bc5507c9896f0457e990609c3909b0c11c0d9b01267f0075dc217e9e519240358a2107f3015bec82ed3207dfce4902efcf09f410669d33f460c0255e18bc4398734ba4f83fc1ba4d08ddfe16337ca25f64759f3cc647ffafa6a1f7f7de178b015fa8c38f0ff34689f661c1f2302e1c041d6d5cb882cd832474634dbf4377b6444a31d1d3a74ccbc5e074933918c2bd5b12f2302990fb65aad3662bc390739939bb141cedca80ecc84f70f71e0d9f4fea152f3506a9adec13fc3dbec0892f0cf5392bffc4d205749fae5aba222c69a36fdbfcda3b1cee4e88ed7fbbbf8ad2387ddf7d39f29db2d5745aba257abe50a7dc619efca7997089483673ca6f1339e8a40345ea4cde3ec45b3fdf2ab34d2f17090318adaf4bf41c648d22fff1d32869236dd96bf3f5745ad9abfc6992d6705f8623a65ebc8a8dac02e578cd0677c7d0c11288608841f044f6badb5d55a5bad7d7dd7f8d75311a8c6ff740c71859aade71cd248e7699046431fd37954ce61aba251360a35cfebfdc7a1e6c138ef8946d45f495e644b09d9426ad3bf06d962d2a6ff2a78d666e36f0c7304c608cc50cd56b2f7276824fb9724cc256186fc65ca396c86c85f3e9a72b3fc3d49cad0649248991922379d664a99191231a8c5c145526a7632339821991992cccc3bb5deb6484a75bad21381ece939a63c634c59722af9048dc820c928c5e0428616a38aec8f82199a2192999d7032493233991acc91ec7f7bf4fc90b74aa459373c8020aad6dab6db6b4163c9eeb84cdf6fe397c378faed5e8bb167c3aefb72183dcf0bafb495b1be1cc6d31bdb0663fd50546126d3368d643a8ae215150a250255ea42892bd43c8e2d2dd6c54504aa65ca25d532a650a9542a15938a41673bd972dadc69b3fdbb6354c961e0d7f79bc34ca58d764ab25a8eac3113090e75b523b0287757eb3238b4c558ff04874092c64ce468848bb895b6f7f5b1f77e04ca63396085b2e4367384baeef3f077ef7722d0adf9d69456fc36fbfb3d3b04ceba1a38e4d59e6cd762232eb3dc55c01a6c3e1d67e4799f4cff9134d7faa6fa3fdd35a13cdd136af677272577bfe31c4b579e9ecbfd31af5ce2ffddd73206fffb1594390531fad36cdf735b33167fd0ec5f4516bc0c8fc69a3149f37702bdf254f3575ba73af6dbab6fa0a98e052bb58dc9ceb679ba6e0b3b51e9d7a976aa559863e957bfe3da6cc735edd3fd769961c749b92baa990e9e1d98093972746ee098f1f62e9da68c239b1a37264e521334255c17b030f711396cac9171646343ca14bd6cc898d7f77dacd70c1ccec6868429026743be64936c6169337753b67045e06ca4d468ada42bb8f06643a6320eb265abd19290c82213c81acb6163024963b4d30935a250a89b0de9a2836cd15a4954c75dae182c22d66cb5b4caad70377fbdfccb8c0a894635a3e1c1dd703825ba63c6ab66ab1b0e37e3358e2d2e2d2d2d616843b638494a1a5b5a5c522e2e2e63d641d2201db55ade904b86a325211dd95b914d8b4b4ee6c1aa4aa552371b12956f902d5a12d211d561b1625832199719ab8c4a6dde94a36aa63ad2b016161c0e77c3e1b0e4725770f994c7998b6d979149c9a45ffee5f3e8d8f99af892527f7e34596be9860ed9423a2a5252bdabfe65b5e42f1898a70d5bddde922aa22366a99a8db6d59fa34d3553cd6c6e70371c0e4b2e87b3c1d9d860b12157576e36a49875c816ad95d442a23a28d4c81a5a5d69d3df2457b796b0a54835a365ff50c961a3cd5feeae996b0807d9cad96c37ca160eb773a3c2e15ab8f0747a0f734539336eb7192f1b12145d337f61318145381bf2cb38e68d0de9e51b1bb2cb38e68d49e2bc0d89f358d43c364a1a88c8b28d7f3dce639cb7388f6f6e70de5a9ca7f9e6a6ec19716e707070ecab468d1a36356c6a1e6cb55a3837eb9034483433489a22aa03cbe9e2c37defa63fc3dc92bfaef4cb5bb3db8d0689eeb0517d0b17fea99add56379b1bd3bc797c836343daac9ae12387d1307a1565efcfd5cd3544b672aa57d9c2e166e0703636386f83e3d9248d5e8ff3fa71e6b0d56d2c4ad23c36ef3f1e8d4a9a07e7dd866c61c9b5beb8c9b8bd6cc8b6212b0e6743d26c92aa2338a48ae8a654cd6eaad9ed4ac35a587038193635324ab2069bcfb1a8a5e453685433d58cd56af2647533f3b9baf9941569f33932b9f993540b37d2b27fcbea8622cf1612d9ffd4c2e148563e5b381a21b2bf87c3e5701127e21f0b48400ad68aef65217765a5e6bd6d8166c1ca64f8decb82b7e8e00dad053ae30771e8a2003ce3ae2b69f0fbfdc407c2ac5ac0d3c78a5181a7ef0361562de0e963c5a8c0d3e7eec9cca042199727a646199767adbbb5f6de8b31eebace73f7646650a18ccb1353a38ccbb3969451c3c64bc60db9732347c60d792fc65dd7799ef77d9fc96402dd3d99195428e3f2c4d428e3f2ac2565d4b0f1927143eedcc8917143dedbe1e0c1a9c191a3b3a161e2c8d1b9b8984c20088661288ae2e97442a12c0ae55d511f08b36a014f1f2b46059e3e774f660615cab83c3135cab83c6b4919356cbc64dc903b377264dc90f7763878706a70e4e86c68983872742e2e3e3c545821f340c1e7070b3e78a0e0f34f45a0000ce06b0d800b7f02007e02e0c23f78a9d72a02c10ef02d0221e03bc883eeae80b722d00284c0fe8a403db107310dcdff745bec99c2183321759817b302fbb36f3d7ff615207f362ec89f9d3bc09ffd0502feec25217f761605fce9b205fce9420da0df5810e0cfc6417e170640f3672b71c162a954e31886417f3a5101fef42203fce9472ffce94809f8d39318f0a7d3ba580318b00005244008025e384010030029400f2c88002a7c99a6fc01b8f0ef72b1582ad53886a1f97d2250001e34853ea30b6f3281201886a118fa8c01785104fa17691e3c9dece9e45d4f336684a7d1a58b759200fcd947ada4853f1b29c9853fdb094d4a8d8a00e8b7103d44f6e181425661051f3f5898f1671771e172b1582ad538f6ad71b92597611a01900080fd09b1ff39e15300c0bb90c2f7f8f9167afcff0780e6cef001ea6101f623e6e3841500a0420af967470f149e07cdbfcbc562a954e388428940340f8ea1cf78c28f22500a3ff678b0a5a525f62e221000dee5e7c154e833d27c4a04fa4fcd7850a5b22a957755613c862e2a181cc342f367cdfd9ff58b1d7fd6a51e7fb6ec843f5b28853f7be8e7cf3612fbb36700f8b38f00fdd9445cc0feac5de42e074fc5fdbb582c95aae7cf3ef2f9b39178fcd9494dcb7f76cdc79f6dbb33807c0020967f5240e1841e3c76f83c4d4f0dac54e1cbb8ec7872fcbb5c2c964aa5528940383ec7bfbcc0c0c0ac562b168b851f8c89b13131de35c6c5e5255cc5dc18131c7fd6242726fc5969b51c7f562ab62a4a5674d0af48d4176452c6cdab868d9c9d1b2eef72b158b9a596f550cf9ac8621d248db779f3713e0759f326901d0eec2ea4cedfa0d99991636383460d9c9759d6dc7432f0bfcbc562b1582210b6f9181108e7636a1e949191a1f12d71859a4dfc2e11a87b97cb833162d81831bc6b8c7b63c2968dd12c555685ca3feb50cd9f7566f3673d82f3672532ffac48f28c3f6bd19f3589ce9ff588e64f9a844c1f03ff9e6b862eb9fecf9a44fe596932feacb5b3daaad2596feea2934363c6cbc4b9b1a99151921dfe1a9af296de8cebdfe56ab5442019d7bb5c31628840dea74699fbe0777d6b3d561325d3cf327fd21aa5d2fa93daa892eb4f6a85dee8158aa35832fdc0530bcc2a9cdca8b4aa5b4a821c64a848460000000023180000200c06045918255118ca3d1480115eac4c5c54341b89c224465118844108116300010000000821c62044432b088a590a1be880bb2923038096e8657a58b5417159d329ae1bc189779f63db04b68678155751099af60b4bb443374216f43782cd81b43af4cd1e5c374565eb55dceaf8490c759b6e7d56be747019a3dbc470c89d7e77192afeb0819e095e60a2b440a0ccb952c4368e0f2d337c9116837d05fabd513e0434845582e731f14a684a9870f6a8ab42cef508ab4a2b53f7634137bb32b3b4ae5469ededfb01d6a675e6d3bac5d24f30e34f5c317f080bf220d930a99583b4ef69a9f307e060e1217af5074849adb3959587febc7fe8297a6d1e723eadbc8fdefd603facea0716bb4983d03b62acfac1597456195cfdfa50a05c6f0b0a592c7a92dc81d1838de9cdf77e01765eba33216dce352eafcdcc35cea61e8015ee15a24de3f701670048cd0aa41e37cd4d01e0d24706a4f6b5a5e262e682bfa1cb8121eda3203a45c50065a7bf643e2c901fd2a2228423f34df81b8e152c3e18b1ba72eb419ba39cf954afff1940e9559b110adb6bb65642d3fdbccb8c35caedf366d2a10fd29a578ad6645946ae42f339d15ce573535b3f530f5d2fc07ba372e09236a56de3b652756c21a09bfccd86251196f42e64ff2727a54d29bcf517d4386b98fc6b5af15dfc32a57a6acaa72282c235033676fb9baffa1164cd3223a1e3ac143ba1127bcbab65378910131bc70511170d7c3e325c73df057713abe8173eedf77f48f7f94ed9c7b562d2b60e2311bbc2828e3301813a1c0a7ae2fbeb0c00cbd0a410ad0edf486cbe5a2786d71d013da9031102e35f292b5b91c3182700120abafb64286e75a3b103a91e03b2bc22dde6190c8ea1c5375712b25676e09e8c1213310842f60e151b04f2e870bb850588690bd8924184b3dd4e0630a0855feaa9b679597d17fb1b978e15c7abfcbbc78a42713150462ee760b27d0fd51fff6ca3ded6b03d499fd42f530a4f59132bd3a8d34a818c799f465b82e3b706efe839a6bac4c7d2ddd8bc079a0a9df4673f17a356b823bed9471469c886376baf050aa940a7b09cd7fec4444ddb50768434a859bbf58054c8192b414fba0c6610624cd62f34682f32ea0ea2dfc26af2f1ccfbccda4545ea3205d2dc1c70661fdbfd195adee5764c9f050f70d9db1286623abe280774457a2cd82dd23805c86e579165e427c09e96db6828d628e9b85a03ca0393ae27ebfde043e17fa332c5810b4dd2532710ca92f28d73d1d342fc8451a5b3ebc300aeab2f41a21ce64341e59eb52c2e39fde6be25a106fe309972b5d0c94290302577f2cbc0ec3fd64275331ffb24f80ecb88006f4254e7593378a4b2372f9bebf4bacfba28f7efe80b0a25d6131198a383746f8434a09a25dcc1cdbf117007123266052b5bec0520ccc49c8139e0b99186bdde8e20cc51b3c8aba5cd27e5163d5046a24609a589a49a223486ce898485aeda38b87f9a48304eab39644d24dcf7a8ab40d1fc6b85a8d61e5ead4a568893612e9051baa1a85f2640d32a13fa77cfe73221d3033dd26c9820fc500e41e180b2b04c10571738b503578c1a75531a70cf39c5915540912ea06e020a6bab808daa8ef509711263ae169f05647d02cc3b0141774f383738e6d720640c744c9f20d2117153dde1117d468c943e8f10615fdd89d43fe8bb93dd0e9cbd4e312361de7d778b1aa6368ef896b38f05a9f56d2557ffd4cdef287378562223b6af52ef1929858ab2a3af990bc3856ef0b1574c6be03efb51d5132433ec19ace804a533d020ca8fd852fc0f431beb944ec0754731c216f7d0badad00326b6450f05e4243a332c904a58a9644bb4887b8522fa57d92388f7aef863c439e0fe80577065c4719c5dcbc0137a059a6bf061d715b453c937eb8f9f8dd201884c78ab864d15c1b6a8d6d0ae4507b6a92dc77c8944812a936de917199b3549c4e05f3c2cd530ed2c202d7c4e2adf3ab4103158f535189e85a2c2c775d286a2deab90a8fcd195cbe8ae950559473ace3b3708e4ee6552c99160f76d80dfc03a8a105c60cbb10b12abde3b94edaec0851e8c731fdeaa04c25ec7558940ec331c547ade07f9fac7d880e2a223e3ead1b5d23019451baf3b74dcca69705e3db86774aa0929c45562075131a06ba634eb8528a3dc81d14b9de80e6816c626a2bb1e207b7b105c10b038b7a8c6a894342d2ea26a96d4930b113bfc69182c7a361815f5b8cb3c3e7c507cc397448957955cf84f0ab6a46236bf80c91683d2678a4d0fe076b1ab202255474437bae201bfc05b2658d00d26a0c0cf3830609361425152e224184f094a3ddbf10b130d87645de12b408d638b39309049a19aee95082708c2194be7faa1e80247e3ca52cfdff2a819a801aa632c377662e096007b298978ba0358808f06c039aba68841d1a75a10dd8b01de3ad2a8b1ccfb62901b1306ae186c122610eb0eda808180535ca1a7263e1579f4405c40b8e7bff7dcedd5056a30e5758fc350cfbe39ccb1f65606c9b63191bc66777d405919586bbe48c25cc8de99b6f6d0d33b5df75c3b2b837915a6992e4c858a98907aff944dbb518b7c9fdaa9aab74a521b79f4b6a24021e39ac80231dd4009c4640295ebe953b8a42d163050d683b88d55e1621a24996152654b04700947112bb884f8278c44009006de2e1271e4c0025adf489b210d3a2ebc49ded210d240f70d11f2246da52ccb789d60e40906ad8a7ce6ef9404016908c6b56ba0c24c7b555a609519d7f0c8ae21a75fc3ae4fc6a9fcccbf06a18df0302b888649943448c16b58214672cff01fbc8644e848e835d0bd0243efc78578d5d3100e6c18ffff14078262d7e4858fbd0628d535c490353cbaec88f81a08062a871d71a884220ce81b7b8b80202d7780a261950e84092a75c37f30b5151d067b92be0c30f63383ae8000b68f0d9224fb28ccef1d097c09825726724bf17b0a27798285c35d4bf612af2647057671dd285daa516d3f68c96e0ece084fe92c5f8276ca7df6286c59d60e6e0447f11e8a07e106ef53b3d1e1afb08d5d0dbb1369960acafa09b9cd9f957603505ee1c65726cc2dc9dac3a8285222da0f7c3da56174f1e46e9b89b9e209a4ae77fdb870ed35122904565e20e6d526823d4b71e3a818222dda0f6e79a57174f57269976f6780a5b5a03aad054bb1a81e3b7a36b86370275bfdf1823d503169c7c7b889e3b732dbb61778b65fb270786d40ef91522d657205a993c494f198b8feb116bdf8452b02151ee36545883f4cf62fb97a0ae764e57ca061ae9fa808a6e0410212aa5681113549778fa2f53d963ae1d9aa3c1f8dd2b19eb12eaaea63d01ce041db752e3abd772e21c89bccc1215ab2006c411f28e36d474ae3380c1e9824fd96a2be0456511f33c5c42053f46e29b45deb6033d4ba0282ee0d674b93e634e00787113f2d4550ae90035fecd0f6a1ff8c31d094ab7f57422ae8abf55edec9eaf439ebd038fe6430a68146dbb3759ae9ca3eae64c326834a495f15e7902c9ee666384bb40e5c5b9cb7e08e9f700ebd31970d4eb13f641e07bc105caa387894c89b5a3364e298e9fd29f054dd66343d55e9977f7b4e1aaf6ce25ba90f63ba9c21384080023570d961d8288aef0c03b8729921c2a67b291fa891061e0cf43720fb56d0a956a3f742f10b1ae86b7251c6dac690a1a0af8a1436a82256131563e814c835fd7910e27baa6f29196209c428418b71d6a523b075b4024dc44c115015abc5003a1664f866aa663ac341ec9cb384d6817b8bf3467015274010bf38420801bfcf45a7f74b462adc8a3f8a7cf588c32e7ca7eef70905161fcd577d97d373a0a2ef6a7df6db53235adf6756e047ecd269114471e0e311e13aeddf9966a87f14f6d5d83aa72588f47baaaf61f81fbb97a802723d6d1160ede71dd0f6333a9d1b766e0f6b06b8bea9db1cca9a87993967c996039736e76de1f8488078bc51a09200139a1fe0b1489e4d4f2c648df398086261887555ea721e6396a35646f73d5682f5b2d784d6ca78e3082590d1adbc54470050fd11a709a62012793dbd0af503a89a1d841838d2db755a403a04ff0889a50f50935d238d811d441dec3ae65689f5d05eadfcb1935c0d0d31085832bb18853d173848ea283f8cb785b9fd06def84c311029cc14234a355b18749beb80ce1a3883f103c6a1df66e4733af7c8a634f811b95d6121c07ce2b3ff854e5c5f56266ae3fcf79464e1ed9c1937a061cd8cd93b7cd384ce858ee6ded55e3f0b23bbdf0b5467561061670004704e275487f1232ed8e327e4eab451ec3f9954bf63152876eb9e12754bb60b873c27839a0b9acc341322391918d3a481ed6d9cf67c31fb40da90429d71923ab03cd8142c83857773334e296d733db00ede6d7c7050725043b33681120f3c143ac49e356c0dbe50d91b9eb1ee87511b1444afd2043293b0ae12b894c7adfe28a9c529d80f8feb0ec06dea7c25fc0e66df7e7abdfcf78eb8a0e3b61e720a64c18d1b1bb30be944c13dd7e51d00a96e0ee2a7afef248e89285bd3311be0265522649a8d88ec05c9f25a664b550214ea1fb0c8383049db3044f04c8da434aa207434407239bf2f07273e9fb1627121fa1a2700166f98de8239852bcf5a1d255da404bca3d84da6f972f8847b7b4543a9334e6e2a6681169b4ba67f1495292f84988399c4de476593be3f369d742c3a7c34d1de497384efb4c980c6b1d30abee50711bc236fa1ad7e82e5fafe18beff13c1dcb0fbc167fcf68bd8b03d4db24f02b8a2b52431dfe062b2545866186c6ad54efe45a0d20447c535e8fcd4cd07c34cde351fcbb0060868d5405bcba0d219e8742f5499ee0e1c61eaa0ca2486c43f173a410b34710f392b017c6f8f5f9e2f02ab02fe88a098a9d99f603edee8f503d36fc50cab64b46d2eef3207af21b4d143ea6e39eccfc7931195d65f293fe04648acc5d6d6fbb50411018ceb3c0cc81a2fb4a9603963df860b8c89f1a4b5ed601bd665e7ff6162fc14c5ffed2b820867fd74e436fd892e3fe8d19c7f8a3e7d40352bc825f68022b341a9fcd2006eec888a4bd0ed0caf033926784a506c1a27d2e27821d88881d6733b1b81d626ac55a013866f85159dbdce385cd42052f04c473ba527ec22a09edf041751f1f6a4be404e23de9393c26d3e3e831b913c7c5a89afcf860a02473aa594de8e5ebee70c5c62948350d4c8cdc31f271446c9572cb9f41552262c49bff1f346026421def063a83d6f0a630929edbb699c89918adb42e34f804489be2c3f6c503d823c5aa5ff12c0b2e892281cb157ff2e17dc7fc36a5c1231b6052d47e1ccd61b3b5a11103edaa2532960638a34f61c92bdf74b013cb296f437284a0956dec9ca47d6f6c9ab28c5ca5bf10efc9f9de77f4964ca2554428c8c8cc82239b28b1ebee5a4485a020139073486e0d0f039f3474f4d197cd0a75b140d53e241d154f910ccf3d494911b6839b225c088b359a27f414a68a392941ba78e74837fd6650ec340f950378e9d624d76ecf7dd8debea28afb5546f7c96769192506951c55d1cbc88d3d7446d79386e030fe0e72c72e1cb62baa7c01af5241db20c48757c2c439e5610876d630ed8eba49168209dd0f20d6b71b307eff6d2b2adcb7b1b0b83d610223dbdd3c74074ecf1a92a67f7390fb22fcefbb84acd8d730b9e2aac3daa42704c08d5d3fcdbb97c9e6b03950a0a9eb00f1662114d2098e9f51b4e84c8bfc6fe8158300b096c67215dcfb9232a09512a7f5c091f9135472005ceaf536a4338d70135b1bcb9fcb9520c6b3f45e85eafc93664c70c96a79ce202197112d2e65eaa147bfccdcb64ef8c2aa06e38013a8c01b02f0f5d1143428c1b0a404b8f2aeca58bc23443502e9bfbeae28319a61d17beeeab019b9deaeaab0e1dc42acb8f0eb68aa588576cfca010797050af8810d99e17f605a9d5133a4dcd70a5cb696cf2f4ce3aca477fb7ffa0191308f7775018c4275d15ccb8736559e98663beab06b6ec3e9f88a534a23ed2086939883eeec87459504249e66ea0a6baa1c86490f2bc99c890a6fc8c57d1f9889746082b96ae486e7f1837472b15847cb22c04d84c20fd87055bd90307f820fa03e35ecb79d0d71b91588ed1edef141285f6bc127c23807b4701221fe16d932b1e05fc51b32c8f0011eb180f470ff44bc68e29f51a807efdd1fa6e875d652922838250cf25906a7d9b039746ea1309f902a63e6f7d90a1a9771ec3fe3e4336f497f9f4530af12c2ca78cae8a23762c2e3748f4b22ae75f67cfc57f42014c80a7be7fdb20ad601e3057f58cbbc621baea27bdd528b57051b8690dd653688a121b6e25a789012f26d8065e08993fbff2a3a460651130b66702475fd2e761989e3ecacc3d59ef16bfd597c59b95dfc29173446f60fd06e79c8b6fee45e9dd40c83727e10321d97b3788f2cf81efe43ca969bb6d4e73e693239fcde58371a22e061e0958491506b318414bd69f1acb8388cf22909e95ec09c596740c0c65770311824a86b2837f9f4848c89951ff9677fbeff219d41215cdda64704e65df87d353852e98781b82f32bb311a2db6f4e9d905eaa91dcdb097168dd339303e69eac8cd9efd44bb448f7f3529e3de03fca96c552438e0c33956e7c46a8c256458a113a73c4dd495eb8a90aba6d6c8d225c987502b01d97816a28d6d70ac1c736e1b0670681a65dc85fd7f80dbf5442299dbebe6432302194931a661aa96cbea2b33b1b0acf4233a4503ea242c62e0c028c43f1abf0d904cdea846223c21c4a0902f78d91b02a2f344031636f876f70bbabd5fea06370ec61e4643e6c5e5f90bd225a918e5bd9f1cc47c7f3f315a506918a653cad2090036546b040d0c5e64d5883e2bc004d870e0f22504122f9547befdc5ef7c1282611c031ec1dccbb3dad5832138d5cd4784f9f2d8811bc4f6a642d20d222f720f1de6573e05d081e24b786b338d4603b7a478f7c2beb3aa1b205d371025de63c8e5affb29bed6023b6cb46f93ac265e1188a8076f916f26060c3418efde970521721e4a5d395840bad2367de892fcb9f28ec9d1f033b77245c98d3c84bb00e6c3fbbbf6371606c76b39c1db53116e88c9d4ec868c3dd71dcbb07240285d3d1f45e75fe125bc3e3101d1ecb12b38e510a62f12bf881c6928e3e7a12f9cd8f681456d392de24a9ca38f9861a64b137e0511388cd0301fb3d170ff7996b6a57be4f23e75185d48e7f4edf18c5971a32bd8bcb7b4d8aca29deef7b787549b3d9a3259b700031800512158b7a209e5872ad8abb6aef4503ddd1b6311879e415936a9e46e89b80b53e775a0bbcf59905e54ca09f8ad550407d470e99cc3d1aafc35068f2b2810d27ba9c2f33a38324106009b43902552749a0cf60569e2be91627b7a722dbcd2146f0df50ca93220632309848e850a0bf752d8172f3823e04617bbaa1a170b9072994178f0e0a5643079de072d472220b6795e35efc413c84b6ccdce05fdca8e02e0a46722b007a06e9767782cc78bbe4fdb15e89f1a22870dd938e237f50d5abaec618c22ed87033c448531c359bd2062cdbff5f042573fb9b72cffed5db699f388da1dbac50ba3c2e1b3fab19d4a84523641d8a2238388b4595680c6f1992dd85ea00f8ba41e0d8478d88466e0d0fe061e9811c1e21fc84eda818b787d6ca19f4ae93d867e871bbfa4a813161813f88ec4d9625a26148195741746c89c66898f90ec67468545630fde0d798711731629c60243da3d8bccd4106cc76983b99c5ae6be07f0824057780f5bb8080c7d0be6931167102f93730f43135c98913547fd462f90f42c34f8d62045f556a0f41b8548bf6ad51f4ea4d8bf77c28205725279bfc35e2c018508ce6600361a3bf5c3c6a77d38698fdfba8d2c245cd5a87f690946ccfd166477cc981ad3a36ef611a6fb577dfb68dbda44d91d99acb012c9f2130169217154a84ba32c7a650ef847c4b41f90860f0f283b61a8c0dafc9131f60b5d81a166df5088cd45c8263b77dc4fe6a9d0923efb73340c6575641299a5a72ac93d0b82c56cc32aaa6df735ae524d36f7ffd840bd5c36dc053e76027d361124b2a68496083264c93a06a3e405c27502b4205bf50a9122e7f164a868ec652f4d59a8a055fb2ba31cb0305d8866560b06d84d8f26f3b3076c66bc57fb28b3c0cd58c1510fbbf0c9960186743957dc4805b94bd93887c38899f2a5f0047aa043e2a81254f0791a17e4f40440a0622584e49de9d612b57e642e976652f0f0686940444adb367ec2efcba4e287747517fbc0e580cb7a7b715ed02e4ef6a4cebd80281fd963f0c6c0e07ba495618f9572d99b1bfd530963ad851abcebe87e6ac3ab4e9ae5299aa46271b9ed964a858b1cea84dfbc508ffc716861612e5ba94750347c4f6bf11f22111a264847ec6bb1ac57f58a01250170cc02b61828f3a81759cf318a6bce151f0acc4759bf146f6125a649586df61c54a0b97a12c384f0a457d61e968d289cc0eb711fc24eebfb431b0f2b633e0fe9ea80b4cc01cd31f04e8cceb7e166df5cc792330ab98df2c55fa521d58e2107c7a4bfa0c50029bd6ef4534f6d05d20a00f8d7dc49d0f5de24872ff5d5ce617325d05e853e008add7a8c14d67ee6a98d85ab1b62ba5c74577cce6f8eccc28e7844450de4d1ec57fe9c1c405c1a07de639b628787b03a4d5d00aea5070bd87680c3edca9b1a680ddf13650919c61da285dbb51837a4a64ffce6e4bc2d0bfac44aa1feca83bce0f5f97dd5a1d6ff3fa4e9b64d914e81054ff6859f4f3d725d871a132cae3bda9bf944f0510bdbffc681a64aaf3b05fd9f88ac32660bb451161e75ee0f1658b5e834b360b7f89854bebc78f5f8635269b5c129a3fbd37efdeff416f22fc3fa2d95fe4fe8e8b61be9b123415e457e3fe85ecb852675960f19e1f0ca6ec5f0013375316aece7e73afef01a6b8343203f4eccb1760bac7349f9f8358a836506e014c27cacd1a160b131b804193b958ba3ec13eac8da82b2261973bf10e27de589bdc2a5ecdcdaf9c0c115011696710241f3831827e87d1e17cb72b44d3441e628b2f4480ed19e8895a6f503682313a8b98bf4587e39a89f66eebb9470ae079da12c7c0d714525542add58782088a0f1a9a67a16d219f84c93d030d47b3158726b686ceae549bbdb7e9cf8c540b7a2fa99dba4e873e33b2eae61950cee90c42dee5124532c2864804d6bc5f22bb171653809cbcbb8011b49b38792bf3e1e4394f0a94aa6ff2e4c78d3864b8cd7525c0baa6678ee5cbe6bc18362886f54156ca76e2da23f6938b8994f0b61965f8feda791d828e9f7cb9fdd6b00068a4bf00c630eb2c8e2b0ad5d2696349916aa007cae1871eff0a77f5ce6d6e63679932ac6156b21f8b8c0265d5148fa77acfefe4198644fee66277b7ca0b77b496c87a122148ded5c2d31a630599c609b495a9984dfcbcd1433fad1bf5642da26e6e033d9c26d00861e21ef7917860bc25369446b3a25ac2df751cdb08ee86c65eefb08d443083378fa93993a9e863172f9b019a2b3baf2d69db66dc88189b2b262f7af779b4ac40e4376cf87c6f5b1e3666529481a5403edec0fd55d56e5e3e5defd35588010b6f806d0b97895c9ae2a5ed23b96da4dc3ceebbd3c5b98f0df68c09082bbecf9d29d97da1cb955fab496a899394425809fc380b0b8a00940d152b54984636b9ddc2c2549fc5e4728df3d806acb5a000ef1035f2f6b90efd009df94ce32b9f2af11bad4fb4de5c93c70ebda440999ff1d43c0985ad097728488b9097c842f7d7012e3fe04715001eaf13815105728276cd640aa60e4ca6a640a77898bc8879ca4340ca41a1f12766ac8861215298f9450128b4e45dfec141491f7fe356f43bde2fd0881d7debd6aec9f0c54d25f92833b106f2c11555ce7661d4a79d26ef9133625c35a853d59d03966be2ecab46073865a3bfd359532bc16724cf17b037117ddeca97ee908a7b91c56559321fc0e07d423dfa1ee79eb4db0d0807ce98661558d1f429b5cc3a6f2f127d0ee1f5445d443f137dcb2a116e6bb3d67da006dcb0363560616b0a2e3120301543edf9f85af92eb459bd19af28d527507902076057807790fed78b40a6295fd1f6c7f22ba9195e9dc4439225b78e6e06cd0cd2795e1f6f98d864eb30a733c8357467218ce33da975b75bf826cde732a986b82f454236e3f93c4aecb12cc2bf3917816fd216e28b47f7a49f9892c240c603f9b230517b41fb405becd00b28deaad32326df9e37a675b27eb9b3ec8a97810fb8457113553520ba6b8cc8b25dd398dd18902716bc0fbf315b645ddb601bfb206f653aca7e949b118f38707b32a98f158566f00bb792c8513148b03e9fb31ab5a25e768b6bebb976a38bd6316a86d86971fdcc59a1fed64519f56c3ffaefc70271d322354319d2cecf2536c13cb4febe3e026e21889629c5abf2bc88ec89619b8c152ae78345168e98cb41e8b7d47c8413ba4f16f34129c7baae017a10af6601a7c2b9dcf8bf09601ce0ea3972de0ca0b191cdc1ab6bd8ae95f7bec2dcafca77186b150f7d5a7c5be83d9d82054878d726455428e844e4fad728a2cb0e6b0fab043eed16d79fca6899380d0600ba5ddc8c723c364f0e115199636bdb9e6f83054dc74bbdba104fa14f3c3fda79d826efd5868676d3d6e1736b6b83b6ea26331ee490b82fab5b25cd904539eaea80f062b5828b5bcfb3fe0de812196237a11ddfe5f26e96b3bb6b654106110fe816352d77b842de66853bb1a7119fb371dd3ad9c60e8825d040036f867768a3022e2c5d2d129d8d04e1451159a3bdc6a3ce067fdae5321cba507cee4ead6a514a1e81c05f1a576226d68c4d2009e422440994d24ff786905ed76a9b8ce446efbf803e77ae2d0512a6970dfc80cef9a3d6fcaa06f496ad74e375d06717c0741d31ab75b2d27be7a1bcaf1b297407442aea2745ecae903301e6223145225841256cd1699d022e26e76ea52ca206d0a14f7086aa3b2d52a38df16c51322b77cecd1bfe7848b8e9a4820b001ab1c3bd99a3031d53f03c40dc39131aeeb969cb5100613fcedc27f2b13da9fe1a1bf8c4797d90e3ae79d821870f090bedf8b6d06e34a9bbe4306e86faa2ea59b460be1a9becc3fc0520d2869bc8f45aa8fdbf7e4ebdb27613c8a9cd6d3f6ecf7afea6218909883c3fd1c51f7b9492aa4c633d4271a8187a9b4a3b64f8a23949228c59cea50503913e1ee8b62464558896ac876487120452a0f551e6d66a8659522d9892583765add0263dd658353bed579da720c2ad2626cdb99c3617c806dcfa62c3b421c034046e6b5473f6e0446be6784ec8d9340b29aad3a2f47a0d7e97183e148848379a2610f94fb1d4e2ddda36754b0440703181cd86d32ab2044b3e16dc85a697dcf83349e3ec18fa183096494caf780db7cfe1018ffd6f70f895ce6f26523f5590520389ebe024694740a6451f53d7c41095fb48cfa47deef06ddeda4ab75e8da3eb9c2af90ff9693d358836429b916ccc205c4a0ee04be30b0de5d61f218d84f19ade435017ef18c0d146691ba88454a2e50f1c69a2892a6870a89aa5c938b226984c70fc6495b27eae33ffeb53e15386b2c29aab4ba8ef488d4a2fcc3bd0394b699080d6c5a036692d7995234a0fe8f3efd265f40c159a2a90a4c722284a52b4cdcea9c7dfb260a709716327c04eed37d6d0522aa9342702ab1da0549cd5683160d03f8aa273156b17b601c29f54093bfaf66b763216320644e9d6a5a2f6f4c4c13914be9f2af3fac8fd06f3ed1d63f339f41adf6280e4f4970f94d42bece88c7094bfff963ca92c7d7e5242ae47d00b925d85772f0180e84ece4321d254541eaa01749f9b56b613c56f86f0d8ec437b1e36d29951faf6f59194ad46ac92d074d5dfd7a9b7d626362f912e03277a558091022dee1588f10aca150f0aae90f81aa1bd023adb1ad4cb29189c8a37fd0e417f368c28cc555d56430591fa3b041b2f312db3fe912d10f15611e498f6f1e8b4f592dd535aa6a90f94ab3a0b09b3c814111457b2b874171f3af994f2a5abdae8611f192a96855326aae13b8c6cdd48b4cb50c608f661d6418ea9404e4ded827d2022c932d4f62331e9c182e6a5c00aeea6c321f0a43aa82c587409e8836a3dafcfeaad37b27ce2658f84c3b9dc9cb445e8f4b0fa1c5fc9f646c16b130ffdac5c4b8fc4b0b6bcb49b9c21f1e88a9263de8c99c642405e775aa3b0aef571c82b0ca7b80fb2fd3ea093023aedff03c3f4641f6a01a9bfb77e528324915c52e874ffc2f7bb6e88cb31bc1a314719461783151709fc384ba71e69df44e042e6113a5aa9bd5ac70862421e2a77a21ac7b59390614a1bcc669601cbb8133258b156954142c81dc3be3571d6887fe4feb5798dec8cbe2f10b40d8d403cc23ed7c4f829a9eb00f9a2a4a8e81210ca7c469cb61885f348b460d775349f7a05dbc057669d117ba66ca1982ccde39a4097651c08acc30981395a384d449b7d5870178ffa750a860e488e7bb358acf543708d05ccda0f6329c9a7791313a6bee4e89fff06788d63627c5d14935324a285e077a7e7c4f4b55790fa2333c447036ee0fec3aed4eeff70a5713e07616562a649f9f6568d5268504ba129cca7d594b757e9bf615e6a7867845027cbab2a9a6c07e93b3be997dbd501d22814ed681756a3ecc70507e611c97bc68ccc6701cf1160522a1012d0f82b5acbe402629ce628b6a03ea45b9c643f22e5f3637aa321a2fe4fa637f9c0ebd03e796fe19e7e64871bd4b84e5bf66b6d7f10b60a0fb83bfce86fe824070642075f06ed3205a586d0a41de01621c96e504c4041500eaab4752bf827626771afcf684212c8014d71cbbea9e4102bb4eeb411388995b50a5fa1180be6563c5d4f02b57d777cb1e33b5494ec379e648fe52eb8f6b85e1240ee1bf2a079ba030a4b0bd05dbe71b30561b8353204210e16f741a53643d364ff63407fd21cb1f5f217fbf8cfcfba2b1f4c16cb49c8ee383f3ac836c6c9a95ddf0ee6a2899619f26b2ab673088dfd8e5a59c0c7151619cac51f4b89d9f5214f4dc8c46a3dfb08f46d1935b23f977bd18e00e36fab8d71b87cf1c6628d559bcd1478af95f30fb83e8b902b7e62ad2a293d8e67237e74c229ae02a547c6e4fd15a56fdadcc0220996a43473b6bc1877d3ae5ed96c806538cb07e418e928b81d4b4b4840a0154669b19127136044f8d0f09a152bfe2d0091c2ea30db8de14a5dc161b28d7b8859f087f253345cc5bc66ef65b810ef70cc8d84c959f7076744ba742db7d6a43e5962b5d1d7a4baa79f017a0fa2fec6783ada2dc610812e188cc619aef6622c1bd5e887007c302b92ced128f8a9a024fd3478b20e47878884c844ef2da910fd7691b17b8a667a7be96531aa5a99d0c9226174e6279c878b33ed8d71b6b316e57e1fa811bbfd8836a23c2e22be95017706d77c2a38ea921adaf9a9ef4771814973e8b8a4563fea6b6db8b45d669136be4defe612ce3472618083ecbbfc1855a0f136b5058eb9a31c1473f7d589ed5168900b6e11b5729d450f441c94d1a90bf61f24a939289b22662fb7134b1ef807cebdf8d2e4a22dc0787c01466220c9388a4c639712ad5d55635671cb0b3b8af9ee2d51694483d924f4e163828d44613189d74e323dfbc1e1b3994718c1fa94042709ac5c8dbf5fcfb1282c02d3e6271aa71a9657913257b1e6c3d69a34076ff26109837b678e3e9f944c434eb6b6c5b81e74e5d89b4e0cca9e94d0c4f03c81b29e352d0c1349138e34279684665de234a917bb059d48db32955bf20d52ca790f97d811e9aabad25d1e73a43d9321cbd8e5e74a12398dbf8eef0bbd5d6357bc3c2218ad49856e54d3c1e2294e7f26b806246af8fe1763cc5521add02aeed0b00d2aa155e8cc5f201726dadd475bb06c5118da39938734297a7901de09de39c47141423259aa9a7c08b8d61888d98d098fdd616820d97104a9c2fdf509b4584ca48404b7431d11fc5d2fcea30eb723b8cf0d35820a88278a434b3aa661cf7c4d32d54c1a3b1c5354c63867e0396481f94ddb4aafb6646cd7b05a5923d531dbf658e92c4c12020a4b2f74c622598b4718aa9db1313be94d65be14be1c42635f0e01fa8f9ce28bf76594c10d78f5c7190793d1bf46382e081384ff0f1fa662447abc1092d51f86d93e442c0c4508738eb1cceb52789a22a110e1a91d7f5871ec33b30151014150417b3e7511c49b836c74d080767682ba80a0c7bf83205e08c8c95a46467d0a9555075b4b3eeb393b0d25d9ed579b30b230afd4c35f19da82793ecc41547f5532ff709575384fc19c89d800ba0f61b63b27b8dd5d617ba41eff7f64c7e03ae388b8e7196b4fc210724861c9f26613d8ebfdde1115e1efd6d1b2c9cc22aa7475777c7444525e092433602792be5504e817577aa7998789f955140c796adb6b8de59e41635c79f15b5c11afb80c63dd99d441650e2ce2440eb997eb0e0137c73a505512c4f2cbba01d2b6dc2fbc71124e73b610846db99238a0817109cf7d74fcf057256e3edac7871977ed6229daa11de1f78629df5ad3aa5c93e6af7758e75228401917dcb3b2d28c1ad8c2ef8e52799f880f92732c74ae2225a6f367f3883d4f8dba66df28e0a1814b505a670a85e1d4941814374a3414b39f0797b518b0c23bb9fad2e39303eb0a1681e2e1860f9334d6a9d482a55470085a87e1ccf820c89164f45722a10307f9c6c057b199c0010f47896c50db97fffeca6e633b9e59785a4307cfd3af2fe44b9a70380d67c72cb6d91d92339e0e15a15f23588605717605be050e63d6eb9ba412c9ad405ea76f3a51795dfe02e918898a10281fde603326c56976ac1c1661df82fc138b04065fcc187dda4ba589966fba864e40160e56dd60fe50056dce21a760048e2a88d55c53d95e3ffea65705ba88457b2f641a3d00bd8099b34ab72dddc3ae16f4b4930e5b973070a2e9df811b770d7b8961fa16a2052c6baf05c50266a4d7b72969c387f6f3bfa9eb4900b490becf900ca504a9f1b298ada4b8f0d888d7d60b8d9ca2303a9c7224711dec8709d382e53d43569722aa22e072c78ff089775308ea21c6812c6c12d1aa6115334154f65c8a891c0cd4f9ac9663ea1a40b97b6b171ca525d6d123565dcf5bc5c84f76fcc7dbf2736f7decc5f1fa599f548d91f94e1c211c66f1cd856004098abf21221e811415faa198deb1912c27c57dcbc9c0880b8ee47090762bdf7d1c71befc7c5094f81d8076893dc8cbb0c02c45bf8e06db85e55cb39d62f72e4a7ea05f77ba60f39b7fd1e28e45eaf1f0d74288a26f8a68e275433f50a008fc44f8b3085060d8dd49c1efc4461dc0e13007d55669af810f084a688ac49141f33f7c4a1a05e9aa5b080c457ca1e533c45dea57cc45eff1a03f52b219904dfa0a7032ba99845ee7465f932966d156795fe817fedb1e0396aa44f93b4ed47da85f3e0b09a46562f3aa3c380048edd6a0da12d9e5d284175a8df0b0ede93d16e88c3d74b74193c24a048843c333f7cf4de6b80a40a68c81d88963b8d408643be1146e598845fabccaa8955419be05cfc19e180753e79511ca5c1c2396c3955956db3707d1344ff4581f85de50083f9ee4e0e9016c7db64900b52a88bdb0bd3c9201c8f34d5e449bd0aaf418098fe0d0cacd0eb80287f9f02a7198006288ef5c421239854c642c0381e314e45b0f7fd08d5b3058e242eace1f06584c34baddf1757e8bdc3c06f194b89a6b2a2eb496e46ce67b6c1af422b1545fba0f5d2d9ffffccea2477564d9f6276056660837e3814ce83f20c91dc9fd14507e8fc9529854962234f23ecc336ffb072c4292e127ac63b2738554bc560086f5fd6782c958bb47a71a9bdb3b47a39fd7e0c0bf9a3c6ff39ae5faffacd3ab31181903a88d8e4275d6191932f762aaa8a71a954b5a213d921f760ec84e9ff1e1819e4b2f05a5b1fe8892be4798c77d766c1c980a93e482dcd797b00847479fb64115f0e27f8386c9e73306baefa11d13165bdfc52347206858ecdb99f5bac41cca6cf159294f1386a64017b1981d004fe5c25713ee88c54147f1892627dce59fffc5547863b8f2bce260316fc8bca237649ae8d5081d3dcfa4ef62047a95045cdfa7cd08e6573c04a4a93ffa4bdf74241f19218a490ea1563884e8eddd317385dfcc938c844c123f1bb7a856f55417f31ef88f2765f9dbc0fc4a89e2faae628de61fdae062954341ba9b5206d6549813a431eb99fd91e01040a0a2f9a3468913462572b74153d3ccfb2f2e0a25efdb5d6adfad4c141722d071de9a234848a623bd4b7104e3940517dc6a4f56360f28c6b525147c29c4cea8b7cc8ca723e68f0f618b508a1a0bae05fd1956fbb33d8ceb722da401402cedda925fa9417da9143c4e268594f90c661ee86d179c670b04eed67ba35f609874b144d5dfb67d56bdaf0d0b294b17831d7513fa56c2147932d0d320b68b80e1a2f14223ca86792aed49e9254c5a8f334b56a33717bfef06b9280cd2c6d6f6392cc94bba5d687194465d728a6cdacbe267e1c7d592ae140f477deb56561133375598bca199de915232cc837bc4a0ad0077c219f4194df6ce029c1b3111b1fc87bde6c4e2c16f6921c642c48ad96d1e18854c2f0f2fd6027a92453cc86e321affba4a975cf7c5a3eed68072a712708d08ba1ce28700329b41e8a2f7c7c3857331496e89ea5627ccac665937cef41506a766516d6aea4170d1cd72b531d6f83035efad864be0234aa30c44362761202f49c3ce024299796e1d25d1585e4794278ad60a1c7268a3d2b4dcdc1602b9e9b4f85dd864b1864a087314c9a7443f09b413a567e5dcad05541cbc7fc44002ce2070b1f4c94cf99e09cf798316d6e0c22be781775321354405c34fe6e268616a506ffe691f5ca841883dc7ca1f84b54156039051edb54ab9dcfea3ffbcc29dab45556a3472c9f3a157c0840a44a0e7dac8bb2323cd26877a92b2b0c973297f327695d773c92007e7438ec2a30cf70787bf8639642ecf6ef0860f232ebeff3cabfc275808afdad36967d2f9459f54f096ddf5cbcc8c4130e0d36bd9b84a9abcf0c688b46db6d34e3a6c1a67e40b053aaf598a5803ad243f2360e587d34112eb50ed059fc5be21beb32ebf25fda6a5629815afa2450c787ad8c5c7d3b059495cdaf58df5bf30cc80e0a78a38faf9a1bf468cf03ef544894d86e30ac320657d90c6989367bba8a444bfc5a2cf8ebf323a17782f78f67b470aaec7f5ddcbf78b6d29183a85f2d8c27404a8015d4c88e15898b8c99019b71a6a05a818549660e069cc4849e5d2e7c4c3379d5b25aac867d2202b4aa236700c3c0bbf1d65a1a8e14db14fd428673970c94dbb7042943e28c5615fb4f95a6e98c405c3dad56e56a4a165eaccb1777707f9f202f8f420c740a1a8062a42aae968a2ed5662c797937336534d8582eeec7a0c0731364e6eacd9099c2b5934f920e945653cf160047b8d1a9955ccb2f0de49aa1fa9c59eb1015e307e8ac16dccc3369e127a830e0b8d31cc98a0ff05906685f474302f30450ada617c149156bffa8f0a502e35ccf161b1aacbd47482e325178ae9f81bd610f65aaa82ab5d774c4134acc50d36f4a828a836904a7405b0e98c918db5f2c111a0988be5d6d0108d1e56f0d8ed8c808f9705cddd26dba362079c41d193533e87673cdba5836c687ac325ca21aab54155823887c2a8ad8d2ab293271b89b3a5ade18e0f147b1bee49210c22b897b402145b68ea1758a7d7abc7739b8eaa5df0af42d8284957729f67a880e08d0e0db0b9f861e9431801458455d93a327a6aad00d31e9152a1b91dcbd1d7418952f8d8c6cc15a7f79b0a2322997d07b2967e4f9009be3e618ebe639f46da634b9663a8736fe984aa06b85c4806614fcd63062a3deca39f7e2bf23712687a36ef8a773ef30a21abe0b2b25812af5bdafd32572bc82b89f48b8c561e1602e6ebab51404cc83aba2283becc4d51fa377872fd9e6668e494fb8d95a2ed956cab44bd0214f83511b025730fd838af8a5eca807264475eadbd1a58b41ab0198d7d25ad44aaa8252307142ef68a34b8d706efc3a819862ec3a32246b1e23d797c98c4f9156db6b7b1997c18a2e0869c7d2085527e70178fce0f4b009c8d14f35bf24abe5716ef8c626d1d7b4f4a407313a8c41d6f4224225fdbda66daa0242d894e915eacaead85896bc8b8f047f288ec22e4ac3d7e4e8665f149376b379de102ede615cb7aee488015d8e24a111acc068c581feb4cb738cedde0dca954a5c4666f710876bc197071ea46538982ae7d7621a1501e2e02e853d7bdbcc55993c0631397808c4313cf9540920d1939f7927472cda32561140e5547aafb8105e6fdd325e639e6bc7629c5c7931e16a24a0b38455ca38fa01aeb46543f44c4323325546f37bb21dc2c3a695d24269661e4671653e559f8316849c32e7a542686f95d9bdac80cdc9d17d833283309a5c4b8e0163230542ddcaa13a36fb9e4b55d13e7d60f444e7e343bc62396c43fa07d97aa2ad32a5469e55f851556288aa31fbdc186233a10d492faa5121e9f70220dbab623e2f6001bb7090b75921d9a4151050b87933b162a3e0bb588ef4674231cce7d4ccbd86c01731c5ea5ed50d92e75ef7c30dba232cc76041dd8d18eee464ae32ee1614ea24552aaa81c98e625f9d88e9dbe5c4ed481cfa1c47e65a9f635a87589bb4d6c406e027b0db48d4f0f74a6425e74c7921977010b7313dd72a605556896102491c1f8dbe4404f1f21eb77d575130c756022638c080dc6aa863213ad9d5f362309f2875ab74d1848015e752be93ec19a2a5404581f0ccd35788481c2891497dbbe2639a692216416977033e064e550a24ef58934a8fe1b8ee2893a97b85afadecaedf36cabac4bc464542d35b11f69462c51a2c8f1233ea856947d593a0d03ba3340a01b06d43d8ee30e198056b127a663d3a2c3d9218ad39095caf1a236bb797e5c7416f8c5d4331ed53f948188c0250ab38f5c0b2ba9f0795c0d451d605f94226129375e726fa67c0b602c73184b96482be2746fe98fb311e7b36f5364cd86325a0e7e41c7ad980a13fa114bdfbce6b6ad7a1bec698894777ced5ae898ce07280df79e73c15f99ee93c01d7a221be8fa7d1312f8216d00984e355b3bf99504c8b552f7f05f5d1ef744a1663a8bf7f4f9cb236374cd6a120fe753cda899aef755366ff97966d78ad1d77619b83570622ead3e6426d86d1c2954e4b5c16ea720cf7fa7a7ab0eddc97f30ae9902bfae41b50600d4dbc08fde770d8e36eca30bc219ad441d16010867ee2b207f11d8d0985872030308dffc6b339f2dc85f17a2db8326b4a1402f69ae9e7d539123a3be7bf849784d9f2853fc83131c420580a52dfe8c82ed3a20a2e50d50d01c70fb29b824b8945e4e91107fa5369a3e3af9dfa964d1da5471f13ad5fe8ee686fc50e469e7be820f942802809db62259f552dad136327205d404e6f78ef3d66c69b224188ed419472da6736e34180cf370de1f59691390383586b201c029ac36963a83f928f035748f8586c46f5f18fce2dc7b26bbbdd25230652fe386fe5fa2c34ee8cc2c75367b87aa0d62ae078b6a3afc209a74c5a27978005dba6ab380cc2c524f1b85736c17a44e2a2fe317e9e3c73a5a53251149920961557aff023465ff7cd500b3a633f53ff8220ac38bdca5d63e3e3f239c1690c27fdd683b40f3d4b3f05fe8a9b7f5851446fc075e4201c20ff8994b8a54fa68ac916a17551fb24ac2234d48f3206d7025b4c548d144e424b810a4116a7c36402f137d512e6bc1d6bfc0ea8d7710342863c580e0d1e47d3ce7fddb026bfc12f61d1b19db74f587a32916bb7d0610a59e8cbe15db091a9960746ffc62e731cdb8ecf1eec832d2a1140f97a9510175c133da19d3a121e74bb1716647f2feb834ee5963563816468c0f129179f512843ba043f004a48581738e7829692c69d44ccc3dc65576de69aa75cf6327eb4dfed60d426beb5d88025685764608d6d141c1a1a0abc87f269463bc42fbf579ac085faef5c9a1148ed1a234e52be6cad295335c50667b751760a4d416b484bafb778b200d744ae659ea23fbf2579bb50a0127c74bcf56309aa856dba4d5e0f259ce97dfebde66756003c80a018dc79769c2fd3d0d9bd848e9e97354bda8f4403d0e3f1b446ac6e117e53272d421625fae55fe0f5c4eba49cdf4f68cae2ac970c9f94d938a53d47b2cab3c27c8a3f43126fb4ebeb5aa355c811385f23940580a1c38c0a55367f26bf6cf1a34e010a681a60b08054ea54df152069c75023a67227e59209a556d0e0803b34240c73809d0893182f488ae28195ff85822f918738483553a09875dfac90dc8fce5ace4360e5e4ca80935751c0caaab5a58fe86cc144edbaac9d7f7f4ffdf8a72fddf6cbabbb6d664d7ae5cb9a5945206a907fc07960767d667d6db799e399ff9cc5a6f67d667d6db79e67ce6336bbd9d599f3967bd9d399ff9cc5a6f67d667ce596f673eb3d6db99f5a9b53eb7acf5b9657d6aadf376ea2d9fa7e6a3276f1bc6f7de5c83d7f3887d2c5964cb5926c47648b08f2da5b57e9f968355ab1394507cfc281cc74a95ca2627d407d6c8a9e2c33865da19e438eefb32d8653083a8ef4485ccc4f426a89e7fe8fba3adfc75c3be0d885c53563669d3583fcc75c7eb45362f83a3e908261e53c88ed0217549a7eec864fa5028d4f765508ad328052a4ff1795aa65147407d27294e1fa23edc3054113e4e7cf5f4f6fb327804d4779242347ddea69d67e4d4b875cb7983547498528dbd5aadbdd7e25814f56d7d7b939ca86feb193bada84e7c5a0a1ceb4ef609fb847dc2e88c9d569c5838998085ae6fe34d9ac24dba49e7791abd989d50b7df5d8eaf3c0f6b1ad672debceea8dba46e75cfe9d34fa2edc4f6898f5e1ceecd4b54aa51a4e75cd69d81c671f4a9a7574f52a2adef405b5d15344d2b693906be6fdab01e1ffeccf377dfc5a60dcbf9d21af2436d288a83b6f3bc2cbb9de0a751ac43d3d601b561da98f3ddbb71f0dc117726f6553d537eaf13ead4656301632fe71b359fe86d5b1118735ca954648494746494a468895192222436e8086956c40d8c679d08ab962bc1676abd79473afd0d49a7bf119540ebae66a14ba9509d895b9d889d89bbb55a6befbd18634dd3ae86c2f26514152d3c79282a9ae62e362e964b0c6fe1a2c62586e39cb76dd35a731c572a954e5c9752a13a13b73a113b13773514962fa3a868e1c94351d13477b171b15c62780b17352e311c832f5ee4f622064823f3f22206f832ca9d1a7a29830c1c3c374a1964ec991a2d34cc302387860d1b38346ce0d0a0610367a6a5c60c1a6680c9a1c18005282001083880010a40001c1b59c9cc0c34cca89143cb8c9619981c1c1b346898a1c68c96191825e00e4f9f97355c5232d3f29b9a60665a60c08d7ca191d9afe5cf0b4f589794ccb40060064649cbccbf8aca6a258a4ac01d9e3e2f6bf8fb4a303334669831d3026383861a332d30df511166a605dcc8171a99fd5afebcf084350cec060d367a8d1964a0d13283958032342fe46b7bd9c0fd2d33303432e4cb066e25e00e4f9f97355c52424f36b8b5fc79e109eb921210dc4a4025e00e4f9f97355c52b24170832bdc06b5fc79e109eb9292fde232f20dfc163c2a3985dec792bdac61ad04dce1e9f3322e29c9993e67e2c0299794e82de79212bde592929ce9c8993870ca9b2e2929292929e981899e8c4d11e78c820fa9eb3745af6f23f629c2571ffbdca49b74937ef4dc2e843846c48963513cf199ddd1bd1863faa2c6eacd7b74f2e64d424979fcd887e2882638f8e9579c5e96ca54e93bf581a8c7ffade82bc4b1be7dfe6ee346f86adf705c1cac55a3a9bfd3687ea6d15c755c34db1c775db7b906c56776479bdb6e9ece226eeb5888d6dfd7bdb9ba5e5277745975a8a678eda74f9998ea3689a6a41daf1761f34ca497ba234b9e4e6777743a3f4d5359ad34d4d6e2f76d300cc3cd6fd7f8e9bcacd369492284f689cfd4b2eea889eea83b92f1c0d9e8baa30ea94b12bba3ef2675f04d360cf4e935a9e3b74e7cf8fbca7bb849a83da4eb377151bf1f9ececb1a729af193c9867de3e924c257df3ca5b4e9f4dbb41fffc9b469f7baa353917ebfd41df5fbdce9f4ba793a71ace2188e85d864443dc2e6f00741dda9d66a6dc5d65a6babb5b65a5babed016f4443a8f81ec16c113f160b5f0ff7882375fa941e757a8aab55d6708e6161f6427bba494bda5afafbd7e89678b5c1d52a9438b5c1f5b833d05fc3669d6b6edd3adccfafd11fb457262aad41d088b8b9daad9475af8631f7f75e8e53eac23ca25fcc69bf57c3f8deab6918db6a843d225b0c845ab76dc3396fdbb66d9b071b848deacf629c31a63fc630841ae49cab766fbe959257cbf8deab699f33c6f847da1aa9919c73ce39e7acb5ce396badb72de7acb5de36bde5d96cb6cdb4de667a9b65bde599def24c6f7936db665a6f33bdcdb2def24c6f79b66d7acbb36da6f536d3db2ceb2dcff496679bdef4b6e93cdbb4de667a9b65bde599def26cdbf4a6379d677a9b65bde599def22ce73cd35bce33bde559ce79d3b3acb7d92ca7a0b3dec5f6f23bbb4796b44a7c5ac3f7355cb3a6b51cdba65fd3f0d5fe7ab7e38d097b69b5a66c3becde7b8168176f36e0463384e0b1464e4ecec51ac6f86466c97b7472ee706294aa3f1d6647d3061c2e312b8f29912ce54dfc23738d2eebfee3c7411487b3b43cbe4bfa06a382a3bdc61c4bd6c8e9336ae0b0af0d890df4b5458192f765ae51ca35eaf73b1d4bb8ed459d8e152497455404e5a41392199d9c283ff8353e7296ad9f1cad562b1420cbbaaf6d98ca88f223842f8625efb7f80143ab35a53c0c8ce3b0753dc4734a599b47f7d2e6c1da58398390f2c97de43d5ede483fb9f095a3330c45a22232942013136b6a941fba776c173a21a23a29a633e573715e5e344e6e58b77b7c10cfdba6bdb7a6b25a797b9b4e955e534a87c9da940e4b5edc5df80a9215be42b445e1fbfb1b92ef516f6e46428458f8c9593aa2a699e9b4e4bdff7d2c31f04d9698e9349d29db744ac5facd3f3da780faed2cfce4e4c3b2c3b254469698e9ecd7749a6616070508e5c792d7d4a1e4cd1203c2e7b1c42c795790509d14b008cacffd8e25c6124be9bacd83fb2905948aa1e8774d01da887e39ed1d0702f78cc9fcdbe6c15d7fa7f1bd9ff5cdb5e2e8783c7a358efc3c9e4ba7cf69999f5efae6aa3f4eaa651eb59fdad58ea7d27b4ddaeda00f28dababfb361a81f3ae6b40f74bcb373b59d0dc33550aafdd83e83034711b5165173c8f87a7859407fe954d76aada799cc233aa5adca3d11734126cec9b850b7affdd4926382baec5b0e082ee896872565a069de8e3d8df5e949ddfcbac969b26e7fc72e0ec7ed180c8f9c8f18f0dc0b805be935e58701805e5a79a9bbc193f1e9d0a2c1e1060e5d0e5edd98eb592333ae18e3ac611b8c6bf0e7b079f038236b39ec1cadc386c1806f3b6c98f65c1027e3649aa7f5b0e23827e3822ed0c7bdc905d5c0f1b0a4d57e7fd6bef4f93b6eaac1a7fdee7ee39af73cc8f8baaf5b07ed69ef3ec6867563cea7d5fe62e3a05d2be5efb0c7bbd2773c7832be52e95f6c58a9d462871d68ef76f030e78270d01c0ffbf261c5057132adc586ddcbb1cdf636bb87cfdbd8462356369648b141fffd3bfab0d23bf0dc37cef1b02cfb3cec1ddbefc80559d2fe7dc157dfe482bad5b4172d02a01280bd5a558e330c17021005b0bfdbf1d78a07b07974bfdcf68de7c79b07dfbf814180cd53478f005bffd095d75e80adc32dca02d008fafd026c1edc3b03944cf9795429d5ea448592a25251a9542b2c2dcf4795cae505264646e575254ea5d25b56a934d5044cf9594c7a3a7539a2c6887a048e11f60895119ac6592e3c817b2a35c2a7263da1de5b6f4dfab4133eaf22892c7d1badcf91affeb5f5de6b29adb6e21e269cf7acd5da7b31d6344bc4896351d85a6f9213d59eacd0ba44828ebe50aa69f6622d539d12c643b5d4d531e7bb6707a2f63b6a19114dd2dbd49d649eac939dba4ff675289927eb2c5839ed4d0cd3b45a1282859f72dcc91a513b94679ff8f0907d512dbb58a360f0004dd2b2a1a1a129481b00ce061ec2442c898b743c6449fb78280c43d16a19d5d1dac7c6ffb2acb77bac78989898a85678c88adf974aa55627d553a9364cb56198d2fb54d33a2d3be9502ed6b011f090966999964da17d58d20a752d9342d6715afbda793f555c42de362b888c607094e48c71e37a0183a6a6850bd6eb656bc1c8c4bc5e644124d975244b2606462606460932473063caa984934891a1142149ce6de482a71015191222347edfa8325225097ac1ab0d18312f624ea3a1737694729eb32446315c31e4ca0a0b8c172e5ad4d0a4384fb5fcdf04d942ac177f5446e7c922413014c3301c2244081886a2b546670cde2224a3adcbbdc90df9f49cf8e4048b3f31a19028a6e4163534ac931394941499181820a29089494a954aa5acddc2d0c5e56f62b84a2511c60b172d6a6858262629954af5988b31209951fc89f15631303534acef43c5c8801bdc2a3f2a3e4744442dc694f374c19c46e7499e4e9cd6342c232316699a755d508c0c0c4c4cca0f99941f30293f6478cc6f36364ffe8d89f9fc38060626e673c6314f3b0ccc98f3c5c0c4c4c4644cb65aad9856ccca4a4c0d0d8ba654ea6894f0e325e5147f8c8c5e605680b0b06c18cb86c9c0c0c46c332437239263ca79b260626264780ff263c82de625c8968264f4627492e729c345a0182ec660cef3e5657319f9b7b0aca8a4a09cac54291331045127d3f6ba161c9ca71d01d0035c04897138714579ffde82af97394b5fe95d56e9291de5a4779c97f9aaab7ad77999a7ba49efb697b9d83b939779d8bb939739d8bbcfcb1cd53bd0cbfc339940f44c59f8c3cda3bba636323ff52ef43237f54ef432dfbd33f132f77a97f232ef7aa7f2322ff56ee565cef5eea443f132df72ef54bcccb5dead7899e3deb17899dfdeb57899dbdebde7f22d2c2b2a29e368d29ee61068b4a5bd4604c72bcb7e1fcecbf7fcdac5176f34f8811582374c67c64d8e8c17305e38362e5ab86890ad2d068b6686464f2ca5a3d47041ec8fe5760f1b7452530ad275ddaaeb543dc532b27f98749611d38fedfbbe1d509278c84e411b0f3b0e4ff9f149e9493a9209431955908a474f0eaf366404217338b5f105616fd3c96432056d1cd4b999a9e17c949183f382f102252606c5c5450bd74b0b066646902d64f3f7513e2442820a0282a11886e1c65143840801c350341145d1daafebdcfc978664584505afb868e16269b5b4b080080991a190289ab47c5753262626396ffcd45f305ed8a8a8acb868e16269b5b4d0ccb0808842262629552a95b2d6d467e8dc943a65d7a964e4e0bc60bcb059ad4e5cb470a1e8b44ea7191a25fc204d292111e9e38789502aa55aa954aa9c7787f1c2260c45172d5c26ad199ad4297542c9c8c1d1fa35a6c86e583f521bf74a40748a4ccb7a6acfee31848dcaa686d71f55908d779f8b162e546b669bb66955c3c4c6b93e73f283e6e407ebe4c7c67567a1fc9849f94193f28395f28366a605cfd1a2c5f699fc4c8e2e5c6cdcc5af36cc858b94ca36624be691aafc50091223468c2763902a1bb6b2b232a375182f6c5e749de7a2856bbf50c293a613b9b2c2c2b2612c1b4633f3ac998de3ad470de7a285ab54c384cd8633a69961b100696969d95abfb5be866da1e13d6a7ea66623836c2dfde4d892849a96201bb79d6686f5406866f886b138908dd34e33336e186b04e2427ea9939b4c0ccc8bcbc8bf8565452505e564a54a99882188fa4ea6ed75254ee3cdc6743af4b082b5d6da6b9435adc277af15ba9ec79b445b27d579cbf9055ab6c211f2a6f5a6b72368cd695620d2364cd3740cac778b169eb761f7b7a7355f7d3dbedc036ec334ad6e78b3dbb499bc53a6a74fdb9aa7f5b699642830144da7adbde785218a6d0948d09bdef496f596f596b3decef33c733ef399b5de022efb19e5392554977d8dab9e730275d9c71c8820bedeb95c7b00df460509807a4aa7548c200cbd6e1d66e858d3b0c61eae35ae7635ad76cf66c3f60d3cda476e724b981c109323020b37392a4c8ec8e4a060e369be637b877de9d1074ad4bda57865c3ba2e25858823b236dbc66c767e9b0d9ba106bdb5dba82fee7296ad9cbc32f8f2188dc364feb25deea2b577f9c8f1d2e5bccbbfdb3cdfe52d7de394debb79be7eabe75dceb2b777f98a49850777937779ca573fef721414cabbfc0404bdcb57e1e52a51f42e4f999878979ba452dee5a24ae55d1eae56dee5200fee27dee5281414eff22f25c5bbfca4b2797057f12e37b1b4e07bf9ee264e6d6c7c097d5bbefbd2c8e25deeb5b4789777ffdee525cebdcbb971f42ed72e2edee5dbcb8b77798681f12ed76262bc2ac371ef64bccb2f497a975b16abce6c1edc6948991898179791b34cf96d78d4be3606d0524ce26fd22974fa08a0afd2d32f002dc525e30780ea40cb70565df653dea45674fa36d057f721527559953769159d12c1492b34e86bf5f47528cb8bbe546fdef41dab2efbae4e35256c6aa9c9c24f54e96ff2e68b9874d34d2e080add3e1f4d2b2eb10967538448ff43d4ed8f2315dd7eca68846e5f655c19451614d52a08c955d1ed97ace8f6b7191c92ba633c33ecd2681ed14bdade3ad0a1ae8d957b793a1bd683d7f1eb6c5810fd7ade5f4e374c87254e877a4d99e0707b49e35e2bbdf69b534a7230360fee30cfe35c10c783e334cee675fdde77dab3c1a7f52ebdf61ddf5d97e3c9f8bad2d7b09acb86751dc7d93c78ac494a46469ac3f1343cfae0796f9f93f10df3c69c0f7bb805b7789c5771763dcf52c8bf93e1c9f8b4d62d399be78e1509d7a39c1c1a601eb5afedabf85a0d5b0b732f17141bef9581e9efeb8fe939c29b076b631b39590db0662bbddabd373c6a5f52509c1dbbac24c89cb085a4d0e9167205d69bf5fcdeacb37f938a818ea0d3af26a03afae9d713d0d2e56162deac3a4c6fd61f4aeb8e97af3ba03af74bf2abace6cdea03f566156abd5985509cd39b754825d2e9878096a20e1d4bf89bf40b9d7e076829fefc78617c937201a8ba2cd0164a14a0a5188b61814a21e54d4a854e3f01b41477ec285a79933ea1d317002dc5a0eab21fe4049637e912785497e5a1844e61b41465d5657f8ad59b34546f5228ba39a3d3d7a1a5e803062d45a1eab26fde00a92efb668d6963ca74fa30b414855497fd93375fdd9b2e94d77e73a5533e4465c88448a745c23753266f9eba48a4baec2b85424b7148484b71a8ba6c2916a92efbe2d3ef445eff046fe31b97a85a7fdfeabba9c9cc1dd3514bd188111dddbef8534b91a8baecff00d5523c7204a8db1763b514915c415bb11db5148b8a7674fb62502d4523a3a06e5fe4514b3189ac96e2e9a396e24ca896e211905a8a484978742c684b26fa104202d2ed8b426a29260da9a5b864a896e18c482d43a422b514970c9911e9368b22ddda7c163fdb8cac6f7d5f033e79fa6866fef42810f527206d7cdfedb0c4efc4ccfa980d63b15e6a9158912031524b940e1d46886a89faf9213a524b1410d01124b544c5aea03aa8248a6af92d595264544b544f8f51925aa27224e9f6c5b396289feac282eaa090a0ad592dbfd96c7654cbefe8e8a8db17916af921212175fb62522dbfa4eaca82ea7c59d0d6925a7e45d5657f49b71fce6af9195597d1acdb2f09ce82ea7c58d0d67756977d0e079465df26e98166a2dbe78630a415e976877641d4c769288591c71366b1ccfc248b948971d1305c7b0125ed6b3ff6a581f48bfeccb5cef95db40b4a074a47b75f1af9b7fc002511fb01d23c6bfd255c32f397f41296159514540f2a070a09940faa0795235bfc5cd6f84b5ff7ce115dfb1a97334baf9f0bfa66b36e1fa53b59a98e90b2480272d49740cabc541a73ce997f4543e84428e27ad04a9adc0fbafd900bc20df98c6a49abcbe47e24a925a52e93f341c782ea703ca0adb3961c8feab20fc4a82fd193e4e782ec2b6b5fbaa32ed52b72db294cd37b078d0dd39aefd80eb2afbb83f2b8832c6969f0dd37776cefb0a43d7be94d4d56c3ab96c4981e75fcf7563cd6d7af71b307fd336cd87dcd774c1b9328f119db06bd77d8970ff677ccbef4dbdf412f1ba6c79cefea3bde911e617a84c77ac492f669ec4a649fc6ce4f63c7a3f5a5e137457aeaf4372df753aa539f7ab9f4668bbe84e6decca14338271cd49b14c9f721522df788933e925ed698142275fbb4e2ecd80a857a6ebb890f71ea6e78346cfc37760db6e3b98f9af7d8468edb40e7beceddb8b1f1c3b4d2575dd259086cc7836dfc3bbb06db715c8736214284ecc0601ba61fb66bb09ad7f1dbb5ec0b0a0ae28238be0d5dd68913d2edc3f68ed6f358430d1b3f8e5d8385f5d8c00caa4faf3ed507070e8f67c3f0f3ec1a6cd763fbcc7b989ee35f326932eda7baecdb07502407a048381eb28be3a3dbc701d5a30e76b41e038096fbd5df4ae585c43a65e9e9c3509dda69fd6e1e5c29b6a6f071085ae1839b09ef9dd29b44743c9a5af7f6e8617b637242e0a65d0d9f9ee33d7c5636505fe242e87edf845a82fb8de7f0c9b171dafe049f0d539781d2e3afa4597b379aa5cfafb9e603cad381237ae935997d5d8b831ae965f1b02485617250747b63724eb04c0e4814ddfec60de9f64b7f7969d4be7b6a5ff531eea5d1bc9f7fdb3bf70353f43b43e79ae54c46bf660cd4d18b7ecd16120d2a8b987effa59628196fdee4bc6983f3a60c8c3755fafd7ecd948e5a72f272618ab5047bc0166f9afa3577bf608eaebb402472bf8f6b09fa5497fd8b932ca9f5e8e0bbbf64d47a48dee37b1962702036f0417c9dfc9a181fc4d781f816174277197e931fc4d787788e03d12308dd6bbe031c0821be5ef3417c3dc6438003c1816d0c63180304be031fc4aacbf0a81db5047554977dd48e6e1f15544bf007c5a39620108f6e1f25ab2518ab2e25a80e98046df9a825b803e5a3db4709d5120cb28f02524b90070a48b78f12524b508612d2eda386d412f4811ad2eda3866a090ad94711a92508c4031f44915a8242aaab0aaa0336415b466a090e09e27f4019e9f65144b504877e781f46d3da471da92548c487bfe148b78f42524bb048755d4175c02a68aba896a0115451b78f32aa25488432eaf651496a091e49d2eda3ce5a8248aa0b0baa035e415bb35a8245a859b78f3aaa2568440375d4eda3906a092669a190ba7d54522dc1139505d501b1402da92538dba825dd3ed8534bf088b30fe6a82588545d20c8d1ed833eb5049390a03a601643f070465bf63fc0432d50d23ea8a396e09212bc103a7e6a19f6900004aa6598032856cbd02709aa1322b1a396a10e7047b70f06d532fc0183ba7d90472d43209047b70fca6a19c64059b70ffaa865b803f4d1ed8342b50c8340a16e1f0452cb9087078008a965286b82ea844ad0d6905a863e46f0410ce9f6c1a15a86423dffc3685afb20915a86408ad432145205d5099ba02d23b50c875417512dc3a123b50c8f781f887423fe062322f89dd1b4453cec48b70f22a96558e40aaa1356415b45b50c8d18d532244a52cbf0c859cb1009165427bc82b6ec13f1378a7a089e861108be95a4dba70167b50c8b8e6a191a21d5324c525d59509d104caa6538c4efd9079e1b4d2bc45fa46e3ffbf0413cfee13df0dd8c27e3237f66c37a98d9b03a86b39b910bbac1ccbe42244b9a98b561e48748f665fbcbdfd1c45808dd6f5a4fe3b5987ddd68b1db71a963ee4d54c7fbcd55c737de6ce918f6664cc73b6fb63abee1cd181daba0e67855133c7e90beea091eff097d5514bcaacfe397a1af9a82c76f435f1589c77f435f55c7e397417124506a657efc275a728f3f45cbfdf8576879e3f1bfd012f6f86968b9f3f85fd0f2060a45bf79f2bb1bae915cfbc9c177f3405fc3dec07bd07cd541f334b8593b8defaa0a78cdbaa6aa80d32e01be6f4059f677f0ef3c0cf637fc8d1b5f55f07b7fd5f11cf775059ff35716bc565bf01acddba794fed716708e07b4c502cef960059cfba1835715f01bf80eaf4870ce8a1470ae8aeac3b92850c0b92127a826a83938d78376930bbac1296dc13c8c53da8a91791ace3981b2ec7318efee89aefddd7b8742d1b5d1c49f877ad7aad49acc237a86651a9cf61bad456e1b3420fbf28142d1ef93b1960d23495e57687e8566348242d1a250b446ab83b5ad8f7d70492dc325250097f4d452eca924e8e9f6c31cb51473dc77408e6e3ff4a9a5e8535d48501d1109dad2514b518703421ddd7ef8534bf1a701e14fb71f02d55204624008d4ed87b15a8ab170472dc51de18e6e3f0caaa518643fe4514b91078f6e3f945525a88ea8046df9a8a5e8a38e20f4d1ed8742b514856acf685afb21905a8a408e00d2ed87426a1354476c82b686d4521c624438a4db0f876a290e896034adfd90482d45224510e9f6c322b50aaa2356415b466a2912318646bafd902804a369ed87476a291e01c1181ee9f6432457501df18aa25a8a45fb872832aaa568c4fd0746a324b5148548d2edc7f000e79a405df683e09c91eab2df01ce41415d3c5e9cf361c91ace09b1a47d203837445bf665e01c114bda7f00e78a58d23e0738b7044adadf00e79e505df67fe03e7008704a5b2e1f62119e331b3663e482703083c03b603c7ac037604472c033604c6ac02f605cb28057c018ce14f0091843a4047c0ea3f6a304d5d15c405b281d393c0e23ea0787bf614401ddf03b2310214d7c4b761e36a27a607f6344e5a82efb379ec648a44815dfec3bfa905c21c3df18a1f1ad71c69363916894443cc3d7eff1e639a3189f9330e0b525ddbe067ac880890111891e3187e883c59e9ba3db0b58a002149880044e4f33017002a84f02341138893395a314a4f1551e02b3947fc038be0346cd057c25c5bf01490c184ddb577e010a4800020e6080021060000208c0ccb679388ea3b1e1610794ed3f1d50defede6171502327bb2c144ec8ded83f710e88e5865017f63fce39416fec8b9c8b82b660b0a074e430fee0f00374c36843123100f0e0a861c9ce081b51396e8c34a090b0d16bcc30936176f4348e907ec6586691f4a28e8c1c9ca25abe8a8c5235a3697bea6fc693d668da7ef23146187cd38092f63f2cc8d1b4ddf33e896b339ab6ab5e1c4ddb57aa5ffde5dc102869ff05e75c702e480bd7bdef61ee718b66efdce78ee8976562f233d7c4e48c607254981c91c94501c56ac74c996e724136dde482ccae9b5c900976930b3a79d17e4c4e0a3b64e125f695af7d618c53522c526891c2d102d16cfbd3edd88ecabd57c26f82ab374f4edefcd49b32266fdae8376ff29b33ba105fd7ee0dff7e4851e82be6ef734ad2d7cbdf77d197cbdf7fd157cbdfa7415ffff76fd017fffb38e8574b5aaefe3e0b2d4ffe3e0c2d537fbf8696267f1f062df5dfd7a165a7255157ea82be124c0ce77e5049fb329c0b4249fb2f9c1b6249fb2e9c8b8292f65b38574525ed3fe7aca0a47dce3924962cb22cfb2bce07d465ff84fb515df653dc10a8cbbe09a7b9296897f5a87428f1687a246488860001000400b318000843511407721c09d3aca80f1480125782605a443a97cb42811448411c05511083300c8300a28041c428859042a604eb6a2c59cac2cd8950074e7c907e0f3c21f687a912951366841574e90197ba27fee44f358e2c5ff928dec18681253ecf132248d80913b78523d3ae8ea41cf3de33f823980f8c0e1d76b90f39217743b5e3b522be42c5404ef733e4a027302b00a3ec6ed0a4ccade9c8bd43422e3c884b1a1751663cdca3fcd4f41ea97ea7dd70e153f0f74105f174aeb0bdbaed3a93c28b44157a78dda0ff3d273a74792a75d2e953a11f131d44af4c776bc6184515f2146b087428046de8bd4f562f1da8a4073ae2ae41459e9a6b0d9bff3d4dd6524b0f98e9cde636200e833ee67fcf93b5cb1eb0d089c9aced3a1a948845afad45243ce2a6290d580751165cb7bb88ef3d4b16466ccd59e7347518060aa7795cae5ee3503ab0db42a7e8b1dc28f467d1730ea1344ff033cef8bc65116ffc50e7537b4054347176291714c90e1a6fd19b7f72f41c864849ee448d37dc6356293a5050d41aebdc7c1dd1e8039b685f5225d548d80057ede41b7bd1cd95c3f302f7da2522565cd702acb65487884e8f44c3d1eb6d02f86bdf72089874040f52d0a7634cf698e1d3bdeb2c7a16ba4988f71a4a8e35be62ce3801facf6926d0daf115c244907f4240d5f12ecac6d151e0eb1ed26674a9ca552117f43fa5dd2f6f1383e3a437b5394a63ed4b95ee7a5aee16cd2c552803e89d85b9698eebe6cdf9d6c74d1c868e8635c6a3ee5b97bd5eaa6be10414b0e1ec71e44bc80f29f4446ccd24206a4500b145dd1dd9101956602f5096b95691ba44a1bb729379adbea2eaacc09a56be8f141282196fedf1e68ed08691981c7b14c747b7606aacd68f6109d3bf035584323b1c8b964e720b10f37bac185a722e64b9ca25e2f5b428dc7153763edddcdf510f23c4a9abc2a7f2c87a9ce8951d907b872de3fd32f4b41865f01026770b720f858d9202e4534f85c8c3a0172433e350bfc4153307b011ace7b6470b5322b8f734f471ff7b9ee8e7f05c42f616d72b039d167c084a343bdf0498f5a0a80ee541b60d57850155bf5776ed22f8122296efde9703db28dd920cf6a9cfe46257e8f7965958e851e3ea05b91138ca096f759623ad9a2d8b58bd6788b565fc017a1039db681a23e893a2f70babb9cba8604fcabce43ecd70e99e58baaf412f1b9d5013463e45668fe34d8dccb48ed4430d5760c07ecb4d97845f7a6b05acb51360ada049a13bc9b270efcdb02dbb2e8e42356e57740ed111ef32e616d01dbc003042e98157449ce81b8a97214fc0f294171046ab111805ec76a55957afae68a7685a7e1930e64a7f8aa6d7970117aef4a7e623c2f3b96506f6a25708486b240017aff1a738f4433a30b24bffee1900b3d5bbe5d49af962d49dbdaa06cda4b1556964e2a469a4b1d14b9be89b5db69b591eb5376a050ec8652293d32891d2e12233cb244e8db5267a0e2107a1269cd16488023d2fd912f5509c87fcf89ec643ee10ab6525a617d96a4345c03906ede47eb726798cf25295a6952f39e96bbcb5d49fcc8f6dedc9162f94364e2203109de696b9ff550af53b97e6df80c58cc57a28a75de7b4d7c2704559b991e16d1381cd082f41a2f32ba67daccebf40749b9d898a2d70c2453edfb8735b72c714d3d42c48c1a3918c2806ae8e4d047f32dba50064c3c3ce3c8d5e31ea3435fcc354a126ae43fee5c8984d3845ea5cb373a0b674b6f403c614cb508e63cd67284c5e00189df8266840743ad1221ac8a335e972a55a95fb99f5594dbe3ae413d4f643adba409426e26d0a495a65a5b484397a97cc7567acdec7b0d98d789dee752c8f4e58cc5117e5c4e5d2ff2e5a58e1292e62c1f86ee9ced7e44b2260bb2060e76afdf91f3be98577973179fdbb9f46ef3fad43c9be0fa94a49dcdf131db3fa6148159a10a35b03b62036757d0756d68a71b42b36c229d0f7a2dc8f8ab182c1466140093780c63236185fecdfa57491e28bb824f1a0899c55026f4138d55b46771849004a2e1f3e893a4604551c39d5b0641e8ac95d0bb8b3c37540376518ad0d8cc35e57e65f4aeb1c1f8fadf9bb4e57e4d885e62c9286d5a2bc5ca9d458395ec26c22c4ab76366d4906ca113696e30ba22cc7e74f32514c25e278a92b8950a72c34c62c13286f9d1325b0fea4b97643a833030e4f91496bc1c2226b16eebd0bd0441c174bf4d57111ba88b7bb5b0c5bf37e7f49a0d1a6aa4d127d49b11b83e6903dc1bf5e7019649a5d3f9046af34abef176244cac1e43b96695b3aac642385bb193a14d200ac5e02487abfaabb7e219ba9dd73191842cee701a060127c4f639d6e3296d9c776d5b0da53e2cd7857c38257bbef2fcafa9d06f3c20d997ff45e06e4dadf1ff422b890592462683ee3662b4337c67071215608aa7c02214231362e4a0c4982b3a3b944f01285e01dcda8967cb0e3d99ca3f35356c426d46fbae0414393fc61f8b15dca85d5f2308931af418cc93fcdc2c85d306054bff975d1fe8ea8a99d63155dc3816a242bc8340ee3bb220f50b0925c440f6a980f30aa92ba80e0cfae60d0b1863b103a403c182a0cb71872e61a9c415be1856d80dbbf49f1c274118f4561293991dffd1a0add544ed7557527fef735a1658778a6c0b699dd44bd61e183f863f9beea70fed63c199aa6aabe52b9575a18cba157e4f3839f01b06b962b606701dc4c0d981d8273fdcb5e432d0ead11db608c0d961b5b4e86474ccda8b33d9f4ff753f8d2c9623dceb6f3ea130e6c376a4ab9a87be24443e066d630ff1b8f049323062503f5329b2a35c59c7130b30c7616c1cd34d88c80bb739c83991d783de32aa8555db49cf19843b03a9cb187f0ad38334ecf0d305f7dc7ff41f2178d14eab17e9fecf78db0e7446ca210688f82075859ebf84f07ac30ea40f163a380d65247e54faa04e79d794f7ba463cf9565287f0079f85381e88e5cdf115ee311951d70820e731b7b47cc99305f3ec63b4d3d778ddfdee75eb8270311e90b054bd1797010e4ff5ec5202160884f6581947442620a2ea7bbdacce9bb485d749306b3c840df2f47b16ef1f5b1fb88a94acc5e4fac070dce8a217050d22c2673da7b1cb618fef37028caeff7dfcba121c3004e38f3f6af6c8cb8b0beb0592f5b866eb5de1b85b185d878964db234ca1bbaa091e3c451fedae4d6b60cbe7baddf47b7ef000c06a9b3264c2c6db08ac9b81553e353134a2559b6ab3db290cf50bb233acc676b7533f5c4be03e5de6818e086da0ec2f8bc1145040ca2b37be5b1cdc6eaea64d1c61d0a01e463798231a7709584be6668d9f89078c38fddadcc25a18103bc24c6f83884bb8eef6ed083561f465c4bf0ce97334916ef3dfd931b13e47643a9b4651436b723d71821149b1eef861984d6b6748eb5dd9cd1d606b12a17f6c5b5aeafa70e012b426cdb835b6d335d2e2b44cc3ab260b8d1d151763a62da98b84cbfe2341de1fe2ecb1a0b6e0b42b75ee82903f6cfffe72f27624d5fe663ea2e5e3f35230e6bd7980ba332fbb51cc64e1aabb49ea54cd2a04de738ac384c23d3ab139ab5e9aca34f71c8545a72fba6569dfbbf518c5883e378e5afe86bbabaef4a1b35fbe067092ad11657f5efff806ec65cd63483569dee222a2d3a049860ac765e2fbe6660aea2d63f6a39f3e53401baba2acf35e179b7561bcb4fd4d46e5579467725faad9782f6d433fa20e679568f53b1a6e332c39448d8ddca59bbaa4a05ada5df2a312502538536ad5205ae1c9374e7450e2a900ebbe0ae642c18f558a11adce6708b0332f9aaf233258296cbc886eb90c7922d93a83109557a8f51d036233719dc3d7e2d9de85af96a3d988a8d1b88f88ac93849dab53b497d4e6a7e911f52909261ea33b09c77b1d7e51175da474aef60932001a63b701010e42d34318b9b810b64f54b5e0d09b741e8b8082a96839a8a22293874d2228f0bc3fbd2d87fef80ac69dd828cd73304161efac6ba3165064da37a814db64e668637b8690abe7a3f37aef15aa30ad4541e6be332dfedf91c5238931f737d101fa303cf6d473617a4168c1b49df00059a60decf043d7f213d17ce8de8bcb01a091c544e319b3b7a7f01294138b896955dd1d52abd37ebf0f055d9653a199e2e82554cd4796929a7d99405c49de207736fdcc9cbf75d86eba6a254e63a88112c865dc2ee4bdc8a8c769d22766d6e257d09d44205295f62b53c9c28392c40164e0169aea396da8374440e5e37a95fc98fa6dc6bf81d2735fef71a8080f273745e52f32c98fe7744f6f176c4c3bbe3fbe6164477a2731a9325a0a185ef99d1deff3dcc1d143048f55cda8159accc57fb7fff845d53f4c95bd930e360423c7af2629711d9f1a445ec855af0bff840f2c9e4c7fc0f25d556a3a62f850423c9d789ca24fabe9ef5b7230415021d568905a6c821d91100257f724dace656b05bb04c975663e65dc688f67f0d41bd3122df8de1a02770c3e2651623910593aa146e6e956b036fe0fd9640f2fa915a32e8b4c42267a9d079acb010c4263f7f029b0595b68db238c7824987eb5a871946d76457c2471592da324e602d662f30345462b99fd06b621e9d86d103f6e838e2757f857f7126c502256fade027f9e23a0a903a40a6130421b6cbaa9001535673e64089fcdaab6789e34e5652137e618208d1e1c06573e00210b76b057069cc064e4f481a3788f13600ed2c0cee090e28054900681d61cbfca0503ed53e286b461f9cbdfd3850e7e0c30802d2910bca31e5d76e1238f73ee891ed0f45225155a067d98ba1f67e02b4ec87a5f8058d3a483b965069a53649ede5a2a8ec23981e9a109e07b9497c45d5d09d0663df435d4bc297062decb7a7ed78a33b22606d516c955dca9fb6369b107519eac3a1ae7b2ec15b69c1684f233b0c904cbbb0be8cb9f242800200b5cf2cad59427c877d11c044cb9eca9bfa205d6b10e7b12f928374b947ee7a8ae9ae888fcd9b336adea19aa280b4d8866c41393c78268b5296a8ec4d4fc49d0d16ba440b82f36f23c8e334a791d637692c7e341a790f31ee22815e519de84d6475138b31844f60aa11ce7f00be20eac265f7f8a6205cea9a8917a94b392ae08cbf324bce1a6f23a30985e75514fde78cf17e5db15b99cae32356ae4ba4df1cbeca6fe891ef702730753a87c6eb30cc8f6f8e29795aeb7ff1e7ea719bfa61b41250dd331058842569ae3615826d09f6fff9f245331154387b5502b3ab2ce23e290461e838ce7b8096c3d6333a415388d572b2691a9be9bca0082cbfb4a330e0b778b79dd4fc55955a141ab7ebce5e904ae4939d37c0d14ff37162b548d128249652a6fa6c3cce606db00f26a29adf439941d1854d8ad1512006a6b06aea3b12e69aacbd6f96825b537ab068087386652e29db3a8de916abc051cc22b65192237a1a012d21421ee9001e6a422da89144acac2bfef7701ed9d0616b470433eee67ed865255342311d6c0b7df712978d29f8727e8656dcea5ca4a91c3b29e4d7e92bac37df411ba1944f3ff11b1ff01bb7b8db1392c00605d32ff404aa10cc40d729c4ec87ebe7d4217edecd6ee7517a27e68a3085f9e2641f2d842fee1605f41ce95687b9b341b03ce6c855ed6ee921a153a9aadd24bb2081f3aa2f0b755e0a3c5277f41b2880d1a182e486e36d6b2df0ca806c9178bb5880286f52bbf4c51c7d608e5ac2d64bc6a15554ef599c95eba82b0ca4513a5b04782d59fc3965e752fe6a2e0f8ac22b221958b433986b67235ae46c6218b582664c6f732abbede8d52126ec5570aa36cf8b84f784543cfe3e19cbd1c7e2541fc79ded5724709e826c23d1bb9bde252ee8bd6b9a4eed6c9acb4cd378b283f8891831168cca162c617c472847eca08e5b17bf21290a1025c4f0da4465c90488614c7ba84677b1b2ce2140c33d735ad6979e484e9447de8d6fa5d0d26ff13aaf5dfd69341d3584af7ca704e8613647aba7354272aac57c2142a01b3d9fd4ef997711a7d57d6fb2017396d2d121a40f328260432ac7efc8199231a1a8ce303225a0a50491f91699a665b7f563139fee34328aee52c78d9edb4507fe602ef2856ccd937c3e81c0d2fbfa4494dac141c990f28c3e7c9a97937ffe2a104b31cdbefd4e737d68c303c1261086a786c00b9940d4a2101d43bdb931c604ca7b6bd44a08f5166a477c07c034f8dca6995bfcd4d44f29d04e71528f585a88e57e200ad38b821a932089a89211b57293d68447390a7746042ffb962488f899d40a9b90bb05c780305ea846234bf435fff7f3b754115b905370c8c9447a4c029923474f1cc46ecc2eb84e84e193ca197dc4a722899f0747292788cbd1fdb6a5b47808a2151f00d1d8ed3ce7e4796a321644f63c7342dfe863616afa2e9d5b528b333cb38b9c5cb32615fa950eb0911beae0201d7436a062239ce2a4732b2815b5119651d690200fef67c30e11e230b268d4431b3b68846550992a8fc9bf125ca15dcdf53d49e9a87100173fd4652f0b9aed7129a11d1fa8ee5272510488d2d1698e06ad72b6340818fccd5870abeef5660e2f10236c81e4cf6602ea856e366b86ea5242e1cd67fd0da8bcf963d421688a739c81e2b55d6c7a1c53b1403f33690fb832b9fe1090cea28850519f03237c4da0a7ef3fbc78a247fd4236d9626491b8e2bbe0c40404671c55775276364faf3b7dd8819075ce7dd1f1dcab63af3cd086f435fbfe584d280308d03d3caab8b1aeb43147b7475e813743eb9aea239c1812ee36008496bf9cb546f2c7a631cd440850ad29503851d7438643a070ff4b41b7a6c555f0392db591fd811dcf2c234eb4d31f438d4dced2c1c96b84766270de513e80dc635359ac2c0a22d6fda2a22d8d062bbef16c1dce22c361f771167b77b9c619b982e1b28e7e14fe0d701b7d2a723ea480de8f19facaadf47e9b74ebf73141f5849f028ea2eb4442192f7a321a5f1ff1d39cc5af021ead9af4222d4237e2674599a440b1896f531447aeee23e72848addc2045410fe5bc932368631358e7891a66ec859c310e027c6ec2c8b748542cab9db72f88e805f7385292f381f2eb934507ae66c924cb1ea37549a31800b22916fb806d368e844a0e914bcc11450f0ee5d9cfc11b2d1cb87bcef39029049b8d647be6981416aba654b0714cd557c759341b36075f342002873a983f89bd3702682fbf502f6b96db4c75f453b5aa783a3a2ae190d117229bba5c3c0f5fee203d898b0974e96eaabc67287422a68e9c57b376bf71d8de968427dfec373352ed559dbd6de1f7f7066ea47999970022f04d48355b847d824914033e0d910ac83b72e1d38125135e0717ae24c33ce4c6c4788aa91679acc2812e3c763d915ae93a621c0db305059619c7b23af55c1dce392d16bf7c83cf15433784d6fe5cd2909af838d3f03cb7fed0d8603b22d195c5c7b11ed6342e2ea65190b33c111cddee22f369c821da386d0b57b588ad4eca66734e954c0790434190c7e50896894952942080f2d8d2409bf13845cf3e0ea3f870cc4e6ea94f91ae083919ae37c68a179de22953756cc68d0ac13ef2af4ba80e8534f5fa04e19fb54ead513e0774587c4fea874bc8e4b2097f994ae87d1bfc42974a72d4b18054af1d505f3c42897a490ee14561ddbb853dc61c02f24a71f233050c453dde2183ff10fe3bb11f237d9283edf4a4d026aaf853749d57ef1f6264b0cf38ff9739dc6ab8f07c28b01160d6709ae1713c98b4071b9d1f81c0d7d534bb156fee452bce0ea0a8f01caecc73667396b3db0c9b10626264ee15ac417f43dbd1daee6650c9c520a29634b55fe046642bbe1e9e603c60f8180ff10d5a733178030f562b01a766648cda0f05a19d096acfe1cabeb4341f9f50945ef76bca55dc0afc4ce1f367f587f64b0149649c6b1380dce6758415e3941556233df53a43d54f61a722d1abcc245960cf3183dab2317cff9e31f5fbc5b0c3bdd197fcf2c50e3b8b759acb419e257d12ec920abc36b732970ca7acec308a20abc667cf216b502c23bb2e4d089b4e20e6179533d794724216981dd921c1093a9d70b157d879430619df6fca6751441789231009ac37b455f171a0af0a659a3e83f406dfb0cb7579c1396d934ab5f2d4f0b2a55c2ab9b5918d4742655a9102261cb4b7a0868a4825bf44cc2df4e70c14a2c183950b8bb3b06ed0606885937438f79ab253b3c964cc7333094cbd42c216aed2943474c88d7fce9c73b3bf0ee8fe09de2d8b91fdcb7de564fa9016a3f9e96f7f33d8b402bd44ba75389fe354d3e90fbda2c74209d7a9a7efbaace7829a734b57f038bd0a4d27171b2dbc5bc50ab0a09a00882fffe96997f9e706da5486e361223d6ff4c76ccac1caae7013500ebbb8f2369566c1cd5deb491ab05b961e027f3c6483ffd4ab9a515ff027cce3761bfe03c5e0e3f35f26edf2dbc727977726fcdc8afce02977e4153e94d14f472bba74bf8bfdc3496288c86a4bb6d342404967cc4b76129145fcc8b1627a7f13ffe46dd124da41f647d8b799756efcf403c14294023998f05f3bdf520038ca1db2c3bcc02af38174cc9fd42f68796c1920688a45ba141b0aa5401d43376142daae6430892c3110cecdf9b2f38c3f2bfadaeffa53b7604e592a441697e16c2046aff229d7ebe9d521d843a00675ffbbaa8f1dac715187cd950c9135bd225493d58ee1b055ceb96366a1101293297d4bc214b068a2d6f7d4169fadb2cd243774a8ff2ab60aaf701d3046ad109900021841767c682db57077c4ee7db7aad9dfadb877b7e23004dd6ead6679824ee5a46cb40799f83f45af8949dc7b40767e751a7574d94bf8521f0bf1d3bae92d4ff4b3ec639d0b894e0a60c13fd6548b402f16b5ce6430131af1f60dba034f1672bac35bf06eefbc7fb1ba82cb942c6e8436275d2cb5d00741cb904c670e11b6d1961998958b5b3fc66423b64b33fbb155655471b0a61250b4bcb425ae633f0428f1d84627f077d33d5f02d226988d13b0953b769d4d80c06cfc311f388111b9f4b6fe1288519b9b6d6fbb62171d65d90712d512c491df036782403278b1bb1e64213cb05ab9fac5a54807f0683f96e7ebbb18dd906267d5839e88ea40e4dd330aa07b130d7b9b695543db74b668cfb36296a0c049e06d3a177cddd699082af54caa81940678a90a941cfa9a5e564b5a0a5c697b77060c2c046493d752c2379745b230906467009c040a7af2fc67f9da52a921bbc3572e3985ec0c90c65f5d4b4a8fd7334000e8381ef1eb426ad27cf33d5b7783647c0e6f2de9d25ada227c305c7181258538f0ba1bf83b4fbe98e90696b01a76beb2c11dc9cad4ca7302e1ab80fcd739fca30fd28cd59232a7b3e1d136a8cb7ea602cd06b3b95d92bcad2239f15931da06a1b8e980511b23789e6327b92442c93660b1e96ba16e7449ac1905ae00bc477445af9c3a65a4e1247acb0030b54d6623310fcd441d78afd706f115803afb31025667a22d94c4f1bc90752ae6f2dac0254495d1e8374ee7888bbe814c53c165d220f50c5386ac47f06d4f7090b476848b3898238217a9403525a9691046b5c1fdc317652075802876a794308b48ef43e4d702c1f37e3eee1559f9ef8cae732f3c124ce3fd2570b5ac551b7c9ce9b305b8ec94270a85cbadfcac9c5400819a2ea6b2f8e450ce8881c752601bc88d943690c6c9bd88b1b8622dad47fae726e2f7596637ee45921bb4c12f7a939509878671c19e9600150f710c7667fe6b590958eb5d903991f90004688cb20204212eb203338eb6528f2f414d24fceaefc50490bcf0fbc1ac92864cbe1cb6b6ea8c431b8a40b32c8bb76a9acc0cd86b253e373a2f0c22c25f9bdce5671f9d302df45f6e75e33d234d3efea1e11bd3eca11f2f2b5e17fd3fa6cb975fa8bf7a317e7e76999d361ba0c695cae6555b146a979f7d640ce63f209a3201812090527db4b5d47e54cc7e850b3d70580da6cc8c41fea339a5f70c11373d217954d6b281383d5621d38a6c703dac50df5388c012c8a425ef05ea51bc6068f930934e3135b3ea54e2814543064ad713f439dd8b430873c0c776839ba408563d7cdf43cbc5844f3d0272c8a59789393c22c7db5a61e9a58735a16fae367a60805e07717b035ac81dc3a43a39c6595709cc32935c9f64d51fd35689a67b5b99a9d920e1491b8005640324abd9c00e8d00130a0bd06cb0a88ccd300929461c6191b8b2812611f1fe39c3403628e15195619366a24cd0c015e100abc3d5d3086373ac852bf16402e1a7feb2f7aa424c96810d5879d8f5c34b3da2ab8be946d090268e0e0e241edc49a0f93038a0af00e6030fe6ba298783d184130803a0c75741f2f78e518ece10f109a4ee536d1d8dee4c03532920b2e9813eaf1717e2c99112cb3cf0dbadee980ad6141433a5be2e5f770d72cb672066138e522908956e6e0b5a52b4ba61cfb1c5c187af4136bf4ded5b7a48af27f064237d93e3bb06b9e4f6025bbb3105337c1ed3d0d2d147e464de96f6f5dfba619b9963173757a0e36bde5aa46bf06624b601486c0d726d07db60df7898c534c4caa11a58331afcfdf73978c93ce8bd0810312dc07b856a3980b21cbb87f949402951fab002d5875c72849145bf42a48ae2a1915dcb1df93555803c04a32d9bdeb456e179c888f01c16c6420a3e30698cb52c0f45c31afb97133c441065b23c4e7b503886ecaee4d8a3e5867e2799dc61886a922b5f970bb19b6f61d5b57895a4b9911fbe48587d6b16e5bcd798f53340fe10c6720f94b3be782c77c02157138bc94f6307dd582576048041e3376e4ca5c449bc0b14819f152830936f3fb08f9db60787803c33dd5cbac72fde65040a50b95ad2c2171c45dfeada41c32d0d2ccbd9029683bedc311314fb8da31f19e6605b2abe1ae5b7244af44741a95e01a12c6576d8b298941c656f322a7d9343d574bc85548615cf4153b248831127f8cde067b1f4af37be6513e077e0e6fa17b48b2bc1edf12a5062e23758b982eaf67a95e84d90dfd74b185d21f6a5cf16d94f67a3ad89cd14b815cde2eeff2ddf4341ac8efdbf6e61b4ad78de9475732efa9a5986c4adf82ceecdafa53b80c47df57ebd855195621f3a4fde9695b596bed9ce70efff96efa1f775b78253a35abd90665b4af74b8ee1d6c66ea9bde8b4eed42566fb1ef7934e8339c2a54a170fddea21b416cfeb4f5f62b5ef71bffdc4c3f7798b1432bb50684bcc6f062ddf20ca4abcc649be19bcd1fb075d919427f0eba47e1db0352423fb01ceb295ef73c2b574edaba30ea15e3f624569d1e652245cab77a6232ebe1c3fdf5a0fe0eadc05b97ee38d2f1f5c2b2d36576454a44a3c57981755770eea7a68d66b263f7c47ac96dc88daa3c61c013ceb1823b715ebef73951f5520f2d597a0a9825597ba5b5dbe7fa7bf132eace355ba6e0ef440695381d73d6624b452491eaf4fe22743179cc5d12267b3d9bb8413fa27dce455240fd0ed1cf02c243d4f22f88c629968fbbb9592d702dd01b9b815026db49ff6edb5b64ca2d6e111481e5f1f35fa4ae472ad8af14a333b2da75a27b6607bb957083d300e6e2ba7eff0e3afab5bc917c87a2e09ebfd9e3f5cd35828eb4abe988edb2e0df4ecc96bafca879ce3ea57f5ec40996ef19248f88382f735071bfa78557d1fa2ef6b44f2de5c3a39285366256c66f7c1d16552b5f8e6597b0db2adb038cc8bb6134eb421a978cb7deff8aa0db296f57178e8ef47e9801b39c7180ff6a9fdaaabb11671560db0b740e9f81b79db8dc6a6ceda5e29916821bf904e86cebbd76b64050fa96484d4a93a01eb15a25f640efe7e8d538cc8cde026d2f813304334bf46f9db463e83ab321738650564184e8339b9e8da576ae31730c3943511b586b816b016dd81e2725cfb858c964d650b77a5f4d9f2ae5d4b4d052ac1b759f448a8270df42f9c043895ec8cb5d9d8fa7f6432b62c2ca8731c4a940b720c23811c9f2d75f2d75703115f9e893ccbf7d8ccdb42d8c0fbe3a305a028d73214c1836b5cd0b87af674de0c60b2a51e40df37f479557db63fc0e08b3aea2dcdf6d528678f349b5a3ff6412799815ac7283f585ccaea2fe45a751705e0302e12fe2a6539b80ccd71898d69f0b21ba54f1c8c0b4c834b5a236d1863652c1ed7371ccd93cec642821693d805c25bbf015ac7c817daaef2bfc524e2dd7b3c16c5fee54ec79140eafd59d89401dbe4c596ac7332fb2d43d07e2d4c547bb194f29097467233c0ee953e7da7b03802c90716cbd4158ba85b6c48c74838fc8e0f77eb2f54715a24bcfccd2022055fb66610e19da02a52539a74d5af5192a06fec88d703dbda5746cd4478da90e44a0394f3862ef7dc272c223dffb088fde1a119b16178b680ead0d38aff1a62821878180dc39a58d52734caac7e4ea1adb14a7e5d5bb40f87d7f775f80262198beffb123a96215128916a3db503ccc1fce82ed9a6655e4faf0c7c753e1e3bfe19bd0105bb8a5e434bfeceac922dd7d37530fd9f37b968ba1d16832698b7dbddfd57bc02813eb6c688eaee10b463d83ad17d059398b6d6e237fa1b377af400dde3dfbdaa85a36ee318efed30ece54df3a42cccef5296524be9a157a92a28383456b5ca51a8021da23c63e1969f472d6e10dd46f5ae92b1b6d89919b60419ab351bc20caf86d07a24e9d8eabd84df83ebc6305696ed78ce24294c150aeb3581a13b13ee2617b26dd92e060bfcd263d6e69e52347cb148b3dca09d131789a0d6c544171b1a172a2f16a6ebeb04dc51ba581dad7c92193372b192dc310ace2c2e359a54428bdfe1164b1c4a95ba92cc5a4a2b455da577e5e82b7d749d1a825aacef002a7c5e252362aa68b172edc45284b358e9f205f22d8c2a700ddca12247a8ce2f2b46b44356fc4c387081c421f5eeac58540b24b61ae52eb1a58575c55d62888ba693670ef6aac3e38a6531436ea529b462b9121a0a59eaa7e996ce23c98ad53bd220f61066edf6e3c143c003e94e2312bb911ac1d64c1deb98afc78799432b622103698dcfc2de4ab8e8610af50edc07e22975d4c9ac3db0fe20c0c87e2fc837c6760dbd098dd5e073f5badcde21d4f96c26d47fb4136b5a26fa09833cbe072d8452e42195c678db25b495d7229dd63be75dafd85edcd950e72aae2b80ba52605a84ea9395c05b45709f195434ce3f68daf2b513f29d93ce91985dac6e63a7605a6dab62ef33b8f1dc7aa7bceb057b137bca48c9b7563b61add7d056ae74de5aef9cf355636bafcba8d29f0d2de594df0641cdaf394a4d8a486fc7b9ef9c39ae1b941922c7d50a59145b5a1a6b80a23c87774b1f62f91b10bb67502cadcbdf6f716f3016ea04ee002aca449d17a5c176887c031f04a56c55e6f961404a34bff7fed60f4e68cc00687333d0cfc19e17d1ed1b428a8d0d9662f5264e74866660dd1511191aad791581392642bc7c8319a40f26fd45bec1d0f083d27c836d1c80061fe0eeb144c4b5c2d333177fdca70f1db36e33f8bb365dad6fa5151ca4301c0ca55ade56fe49042d8dc19d1f603858e33962968d93e2e17b98a3efa2d9a7b00475ab08f9e237805764f4d21c6360ebaa396cc411a1b761b775787c02d13eac6fc77dc64c1c5e2f7f2db3484dcb45c4818f69bcd54c234074066f189baebf89833fc7579592c3a921a2fa71fe77f8550d0e689d21b0bb1b28f7d84a8bf8fe8da18586d990317ea7eda2c9a7b204dde6fef05bcf691e646a089838906e311064bfa1de08c4d5c2eb998bd616d77f305c1f8a0fa74e137c34b4d878d8eb44efb55d34fb14b6a09b3912beedfc9279927eacb8f5e3a01a42d7913c7e50745c2dbd9ea9686d69bc0718f1cac13831345a70a930008b809cf49a90feffc256885a69ebb742ddb5de4418d17436fc1edab32234b43dd819559732055a0e924da6bfcfbe23f3da2a6787425b628eff69dc2fe7720e64f27d3e28c4bec3514507a16ec24c324e4f05cba9beff843edaea4c287430b00d04a899c18b0c85c9a38134a52f51a85d1d3d5701b9242b2b0ca89c4afdbf0e09016794b212e42b2b6255fc9a44d9eb92c7c9140bc59a3a7e2d0991464723fbf61fac4473b1bac2b2c8e9d4b3503de3aae92cf90550842516cedbc79de07a3083af692f5f191a423d61be8ed33c534b15d59319b5ec582dd99525da1fff096da1412206605186bdb286a11b16d6916d78f56d2e18a4533c9cea14bdafbb8a0574b8aa5aac2316661168000aa9aa8424ee322fe7cade2107f5b026b8a3394173905f42e577cbd5845cf3511f39f907943d60cfc0fd1514112219b82de9f536032103b15d549abdd77f1810cf7e341bb6e7cec167ba4997e68e8a133661eec04a65bbd698c66309d50aad9011a06ae4e005a153bdb68d24748a33aa4bcbe627fa22abea7b3b80838d4e955c15d05b00866470585942c79028be5987dd9008399e02b0a04f59bd6470dcce9ed64ff25a41d07adfa736d70c01c37d2668c763dbeb0ab80533e1a2b76b9612ad2616580eadb896590edd40afaaaf234773887ea2c15bc04be5c2d1f599a9aa6f5be5df109485090292f025019f05dcf1a5085dadabc4f6b9666121676b3e52dffa7032964c6b705ced1f00256b3af1a9392834548302e2e4628d802104b4fe3e84e14e6582edaeee29ca840d3291bc9cc07c999a6a30131dd232eae872c30ecca7ee1ab97f7b7c87f9cbd20d60869cdb2f098f492041c3fa6775247e8fa0472fd02d8f8fd32a2ac3a6b348aed3711ccdee1183811c2224635d8b948c1c083f4c6a94410cd501afec74ac3309c01669c11a7eadb5e307ccfaa0decbbb20804fc784ba73986f2fa91a804f777ebbd16ee9d0a212350376fc1776f055bb65dbf2e61afab652e06ed0482c6554db0f4fbcdd2db3321c23749b8f483c3628877d3d1b5c269ee428d7a9f3df50b4265643ad2b545aeb4f6b7dd87c175e33ebeadd61f0a1706bdd82fbb852e5b2e8343e5ca284898f9c9d5d5a61ad49dbab7ab43c61367c7dfefccc536dde672534ffc124e3573cbd81e9013718d630bbaea104b602eb40fb154283021c22d6cb0c4fbe1ff529fd2ec55fcf3b9e9e45d5ab85774c865b5ce737288f25432fc82603d8ec17a12b25c3c2ec86ddd40c61cef1f7bdc2e1fe21198c5e072cf1e35e271900d78b5d29ce01a0f50180d3bf900c7afa6ff616d75943cc4d1ed899620dfce5477e09495461af36db91e1e76e82981698d41c8686f2f37d5cc05923dd91a0694fea067dbf08ea20e822e8f521b95ef0ab2cb726a55b6a8bc8e368a2544f91487e45221b3a2ad11389b4f05f6193229c8565d785841f51b457e2584344a3e88951c4595ef819249e16e90409ba7d1f11c73f1e233eb6a513687db0d2c3a50b2d6d65efd2f9d4f96844561faffe1974a4d8b8bfe1a4c275dd0da54c051baa0f87a8b47efb7693af69405f1e7a6e0f8f668bd30145ea036b78e0c64bfc52578408dfc95e2ffb3f5d3122f8d48f97fd9fae1cb1fcc5afbcc8fdb2bfd3952396bff8942c747f9d98731fd601d3e516d5733382efe1220ef531e93b49c7386e5b5b6513b886fd756ace8d5a3f6faa7a47197a8f1770b8af69cf9234c6d1b6b555a601cc1c02fed419f395876f5c145421de7e1187fb9af73c69e31c6d5b5b6519f0dcdc29378950cbf9bc41d5e9af8e2f5ec0a13ee2bd25e998e36d6ba30c036bcf3d7df3aa0db9b2f450df6f87a7c7229476d10985b6c4fe6e50f0133f0e7b6d24ef2d6a9874ed9065ad51fe4f9c95f21e277d3358e3f74ffaa2e8215fd3c7ff3704cf8a89f4411b1ac930665f74cba64592cd57b1638a5026475d3ab1d1cbc4c40e7f49e0b7cf51abfa1188f1e4884d61a034304464467ef0392c1b575b3cd57bdf6a78bb9f0dc2cc99f4471e4e6988f69bcef7e3858698de0cb3b24d3522b55da3ef3ccd7036c33b64f0cc9d51ab098fea0749bff484803818b3bd179af13f1f2e684d8ce29fec4b7f1006f5807d7dc27fbada459d082cac9f9e887bce910936f371e2d1d90539481976151b9b62e10fb388f5924b1980aa9aa73f7a2857975dfe182fddb7341b4c285cc05ab36790f30a5d409b684fb8da3d5db1aef2d7f4f169f5b014fb91a90217805d3c893d1918ae2fcc6a6d8470b3cc8dd1ca5046b0c2d796a84b7e1ad27d3f93bf2193019d69387dde897d09971ea460077aa86496d3db6d9f320445a921780a03ddcc2f17ad5087a04c61ea6baf0810cc6c1a0966f55e097ea2a5f83b4ccc02ee9ed223ac0b3ae19c41cca0f250db33988dc93f0c1a745e8474a78806cb479ea7e09364037638c5baf6f030067fa461a73d4585259f55deea26d16d49505d19540320561c92e0fa525230bc144cdef69cb2ee6fe171ae9972dd62ae9705efbf1a49def8f571301498b7b4cd9219df079198e8f8989b260f0a548ec56e05d69301c9af24e72d5bb0f056d2a0bd76f71969ab4f751f212c837ecf438ff7ae7266095de1fa285ee0fe5d0d0cc0898ea2b207f3fc9b1dda3af6a2c8e110b8e6f9d40b2894c5f354f290cf3eaa03d293a78d3eaf5ffbb3c5bc27334e2a412ba7b68290051ae7f4b69841ec99d51b58836deafeefc15220f35546334f335e615740d4cbe2c0fc3c34be6d4ce3b0e886446d1a4be04d870a4a947279fcf6c99295b47a641f326cec69467fc3c623531ac5cc6481229193181fea29013fb429acb136cd4a8e9d157c7250af9d5964816a710e1aed9fe1b5d50eb4f10ccefbceeea2bf23c2508e9091631d3433a9f5386c369c90e2bc2170bad6936fbde822e83a3fbf71b9513922c57ba153765b3c625a606a97aa80877239aa21315f9cf80944ea249bccc2d8f3aaa517d4d75ec7330abea6b6426372ab79c6f2d65490ee5f03bf0961af126babac8ca7b7e4bbeea0a787f219d49c97f01c5610f965b4055470ca0fc6165a8537c760876cd6b9498f7208f08f9e704efbf4d9a5c53c307ac667f5678699f5d59f6cc8026a304e6c52206019a503912eb18be47e35e14e06fb9fb9526ae32002654d8beb6f242853c0e838eb6702292ebbe1000018b84af9a0861a0ed6beb82854bb9be8a4dde256f0dffe67b3841042242152eebde59632a52465e2069106c906f2853476c2d22f496da491311de760eda82f715090232c85a52431648812449a4817e9e93142db8739cacf0f33656eccf69531633ab62124247f734eaae9be7c0a5e37ee6f3cd5d4a7774f33c3e9a864cfca6bdd5137743ab8435485619312e17c3ccdab687fc2117a919e1e37e2e33e9e64e52b5fe24c8eb812c702a4ee045eb7ae043b11f624a80ff1217d4bd663a13f8d42f29148edb05e6489460fad0bf120a151145d4a2ee82db032985171f9e7162e3f8b172ebf15062148d41dcef9b05d575cfe335cee23d4f78f43a8ef8b6a209214951fe99f9fdee2a21d14749dec1504772304770489e862c2bda280511eaec47692d5aa9f50a2a4a358b2a49d3c39d24c9a764399317970f9b719353835ae9cd574fd0d1ab7437bdc09733b358d3d985baac0a5978cef47a3178998e596bedf337069fc10bca5b7e82d3dbbd32d699bfc58c4a5df8fd52b1fbe244f3443c6c89f959ebd841bbc52dbdec7efeb0417a260f2671d5f5613a1ca754b440cf5f2eff27137fc99b4f1be7e988cd2e185541561c386b1db7ad232ec7fb21f66e1676f4ada9fb9c71ccafe61574aec65a67da43efab1977ffd89aaaeabe450a0b4fc868fbda43ee0cbcf4e5415638912e1036a1ee5a2fed3dd36ed446df8680fbe1f783838a917adc81ce8bfd5b621d22091a6e1af1512e11a3ffa7dd88b51f6d055775f46883c212d5fe83e82d23e52f468358d9be938070557921f5cc11b1e9c1aa99a9741bd54d3bc7c9886ffbabf8c708d1a99976a621b72deedf219a15022cd358d06571bc5c1b970d5447d38d395b470375c9ae241423829726eae8344dc166356d48bcc750fa363f62f8a9e37e4d2ea62a23485c9e587d8c983280f9e6002feb3f0ddf2f6fe0444f6a9347277f84e7900b951dbfa2f20f7827e5988a444b3f821cb8a49a2159ad0a23c2270df6b19290f2018908b59107894f22de9c30fd3bd1dff2d5a2ed7bdbf9df7cd535c8a947b4befc12ae0f74d6cea832f74f64275ea40dc3f00311de7bc5ce79c78762f1f6793a43e206a3c6e2378e6d94e9b60e495efba5eba7d2e753d467df89d9f65ce39947db4f14af91946559884b09d389dc844c63cb9d9e573046f247593b78d503709dd9bf0c721b747ac87d0e193d79f8b0eba20701e7d5dbb7c8a3025d6f2a25986a33a19639471720ae2a82fc61f1d74e3bf29b18ff253988b5405b55ea93cf43e134d86427def9ac6bedb47ea53b5d644a8efb36a85e29ba698a640229088d391cf7fd1e77731a9f52d38c5f2a83e99aab0f99a9cd46fb6b4c5dc6eb9bdb158b172bb840667235dbea7068750211c25311a298186534983726b402598865da64042c97552d460c8dde8755358a1874b7b9c4ee9b58ff1b0078b284e0d406080a2c516b82086fa9b2b43174a57304971b2f39b9bc29477a3f31b4f900e8edf82306d01c46dd784e7372184f82de766a7a445ea761d9c4dc368f90dde286745bdc8f4bbd39901baf05d34488453b0c74885b0c704f42e7800dd7f958b0f40a90e2f6456625efc8e26f33a8f03e76fd81842089e5389da8b0b0e8a8f1c77ced2e409c59d4f9fc6a03c5c933bb50dfe899e9e3e10d6b9546b31ecf66e8c9fa13efc9ea806ac011e0316013fb2a1cf80a5f1226b3d05ace92d605bb219fb6828fd19eb2ad837eb3963f95e60b3353c6c6666c3cf450fd1166b813780d5c023c062e04376f4346c06deb2a237590afc01ec057ec6ba3be1731ca2df530575b00e8ea1d234e81243552e2e2f2f0e4803d2b4b7c50bfa82e60fb3e1e7f810440c8eb6f18df91a35372ad039189b140d0cfa6de9cf494fbff5ab3c9c5f7af827caa3bff43aba81dc9245d9ed5dd4eb689475f70506096963f918348200815315cbbfa05a07706690e952df856a47e0b0e0b0682c0406e52033a8ca3d887d8bd29f1e06e19c2bc8f61b17d9001be11c9e27b192217e632684e03786c2047e632a48e037c6c2077e632fd4f88dc74082dff88a207e63a019bfb116a9dff8898d9770fdc650dce627d4fcc652d8b889cd6f3c85cd6f4cc56dee0287e1368b81fec666b8cd3ff03756c36dc6a2c80e6e6fdc83227e631cf8dce0f6c64afcf88d69608465707be31970e0377ec1ed67216f67b43202120990d1ffa2381d0bfcce057e7b6ad0c06f0f0b0c341c6e67e0b76787db79d0a1c06fdc8224efa6b7170605fcf6b8a0440bb7b7f76401bfbd2b3c6185dbdb9b228701bfbd296c4f0a0df8ed451145136e6f0f0a07fcf694c00409b7b7f7c4037e7b4d3479486e6f8f0908fcf68edcfe67e4ed8caef08830807e429c4ecb1fe0b7e782db06f8edbde036027e7b32b85d83db347e7b3ab8dd83dbbf3d2160e10eb73797071fbf393a3c91c3edcd4d21e237f7862ada707b736eb83dfa2df0764650de0dff18d670db59b1637364b0420c3f5db8bdb92a6e8fa250717b73596083abc2ed0fc0db1901dddfdc1774e4f8cd05a9e996230dcd74fb6e948103217d68592417b407e3a13edf8cb850fa7059820bdda5fc6b6801fa5eafe686aae86734cb2cf9d07afa9965ab0fd71e6bc67f7fcdcf7c9838ea05e10b78c10a7156d6b4b2d7c151ebc0a4948642339bf76645b2628c211c9c1586437d78641c1c3bd3275a30c6c8cc6dd9da337d6447224424f5e94c28df836ef420eb9f4718f1911ef511b567c55bbd2b6a4f2fe1bb331d4be8be05d3f0d7a02a874182581ab410cecc860d1b1142082184d647f896a51941de2da24319aa721fc91f49f8b0c6aa068d5f8327b6cc26859657d1c8ad783b53f39fa0ecc7adf02091e869dd993ab47f275e4b66eff688d49cbb30eb2773bfb09d1ddacf037f30cc52c223c4e4a1fd42b85cb26489103c3c54e5cf437b30fc19f5702d22eb92ca4379c06b69120d977f8821687f0e289239724c1db4075ff89935e911f9969c3e4de33f6f47fe583ff20145a64fdb903f6fa7eea03ee15aed81fce1012fd45617de1062882bb6c432b7320b2d9a65ce66be53157da79a7b43be2ffbf758dd81b3e1b76ce5c1bbe1bf6cad3e4aea92cb1fdfad3d45fcb2a40f91434a2339a6cca3ea0b69536ab526b9fc3cfad695b3e13f920d319de31cf355087fc85cd83af8dde9d336aaacd3e772114e11410755b5168750df67b7797444096750558ca81b80bbdab183aafabacffaf7ceaaa1aa185976f0c01d2b0900aa32620580aa2a567d60b76ccc569fdad3a316799a592a6dc6a37fa0aa2c739fd9ec331e1347b5da5a96a5aa5161b5087cfeda5369b88b7c17a91d81ba50370014678513afb4b508d3f08d5aed8942a83d100786c70b0f8a5aa1dc87981ea61eb4ae6a5fc88e063e11d0fa67692e0382aa627c1fd407d4a68f152680085d0abe00a80fbfd66703e01c54657d3613630686cccc0b6dc6ceccccfccccccccc8cb4e2cc0c9c8196b601b9312622ed513e2b1891d1b24c609031376a3c84536690d58a71076c045f676e2743859b117c21b4a242d5070ce0b75d42cb08be511b015726da39d7dd468cd009e5f5182a1dd139a224122dd159a2267ab22a4faa8a9dc50aeb25da39d7dd8d1db97a09f8e0126ea49d739dc56a8976ce7516ab25da39d759ac9608415a83300c1652a265c1410a11293e52e88d9a071983142952a4a45229999addcd4f35f82f2e67f4f0bf6dc4877f723ba691cb293d7ccce5981e7ebb9cd3c30fb91dd48ae5765ede4d3facbf5d577336fd1b5ff8eeedfcbbe9d495b6720a4a7d573e47237ad3db49a1de4ecdbb79793b389ad3c97136fdfdff766abc9b7e950f9942bfa2757db925b8f5df8bfe55ad88fafe290c7b156de37bb2395caadf6479bc547fc916c0a5fa497601239b53937d3fcefcfe1ad7671fd236a8757d68eb87ec06e486fe06e754d16ff02f5108521e3064815c68dda55647d3cd4dc15de1ba719b53b7b674da91f88e1e19f23ba276446a07132e03e00ea4ae6b3fa3e8244b5de7643be23e8d59723de281e1bd1bf7ccb4875f773615467eae5d7e20c71ef6b087cbe34108869e2855e69e94d241530feb3a67c3a37a71cff1856593aa68cd0f19d5d35ccd755ce385d9fec0b94fa63ee629ddce0c9dadd3b2ec65ce592935e1a821a7eea9b3711f0a3d6696d1deff70529c534e24aa75e47e8473dd676e9248a55255997af075ce26abb356d36884e24b48dde6733ca22a12c988592a31a34c279515aaaad051cda887ba421b902b8930b1484313d3f49cbd561f2e3877149f4c84ca2da8fcde45162bb401b9a5ac84954aa5d2254ba552a9c40f063e9929b85f10f7c9511a40ddf71ecaede5d3fea45c2538dd6167ee22f94efe704fae04a2e4c5ecddfe704f2e86394ff121de5195043ec3516bde51558d9c77f4002d703ad80335e7db1ae195e71dcf3c32e477905e07bb3d42fa0c479542094e39fdc1536e7c4855510549f094fbbe91509f4fb9d70f1ced0038f7391c188453419c725122269398c76bca4881f407cea51fa98a3eadf4198efac301cd77b7647fe0dc8e5435ff05f5e716b4a28870c9128bc28ef05d8cfe2f4209618450e3276454a244325fd6958457ab0bfa7befbda63e30aa729798118cb28f0f16e3c3988e7342d7bd47183d1363ba0f8d5cece8ed315213731673bc594fbf2084535a8631d2eb21b87d79c3173dfb4c42b7e0cdfcf54bd14ce774689b5e1e13f13071f284e4a5779f51cba3d189fee9f4f3455688e891f81d228d89f8992cf9d7fa24d2bb3592a885d79f53eb574287fd32495571be453fa3a7396715f4f4843ffe8c9fc59f9f45518c34468d338602e572bc3e3e262d19e5c7ef7aa507314346953252033c38a2aa2c13711366c204bb304d4af995aa023f4996a8c136819d7bfcde7bef3d78e3468b4b8b0b0b0abb329795959550144384215d60788c54553d60ad7434fe9116c0baf2692e935c2e2112a9643299e6e984442524e372fd635836b32c73b1f00585c29064d9a4734e1791a886b258cdd191e712332473d210a5d425b4c44432b3584d3a5de6a448422a444422178bcaebba9e1e81b1ee6c5c5cb42d052f2124a29677b1eeb64416d48acac954228daa284467865d5b8b93db6fd94d4589283305c2d74055c844331365b566a3998d3252566ad2a40917322c962c59427bd6c036fa2f1ec20636b0210b2cd61025ca935ca50b21cb1c15545091061f5c91896626ca6acd46331b65a4de6ab4f17ee324dad0863664efa4841fa01ea0340059315ed14140d1dd593f5870aebbfd0c518432d1cc4459add96866a38c54ca2e7777d84e404214b01d8a52a9db614701dba1804209a753b7c35651e976d84e40026c87c257a80a76b7c3760212603b14f14f493011691484d0fe40e9e0eeb64831d2cfba69682e11b3f9dc0ab584a23a4f177665a318a36559568c966559288c44a395cdab06cf119a34010b5254310517a26c35f1b3962b5a985f567a964d6a5d38270d5993c698cdcbc2b6dac98daa48295559482a66848abd48843d84cf4d54f83afad92352075fd6af658fc8c7a4e54198b6c91be30c42f52a38c5ef4f9e0055ca83f21adccfddaa4feda13c32a00e61d39a97ed2bcb26c5ae396928bb6a1d914434831042887d0621545d2f93f3b20c1d3a0cc36ed47ab3cb3a0f82366a110e2d7139115551a13ec7a18751ec2dcbb21ea32a4b8489a80aaba3e7386485b0d18854a22acb08f5b26f763314ea015cd3c81e1d9b78e274ac8f1f63fcaca1dc1ffb26e9483b1bf824aa0a59b7a3547b4cad021e912cabc5e5a5f6d41e252f30f149086d33aff8bda4aad7d0537003ad2f437567c230312821aeb48199bc30955b51c9bb4298cf855aefc0d1f007a108f508990533798530e816cce415c262118b635cd427b5a7f6d49eda537b6a11ae2173b7daf3d2b3f688a68f07d5e9e341d3c783e4f4f1a0e9e36c9c982efef97c3bf1646dff691b550b49297f7e7eda8607350d7fadf2a9deed6fe85aed24dcd06af2474a89f688fc8e3236f57e21aa825378c4dca7d51e3344eb7888d68535841ee46ef8e30d7924bd96e963519555a23cfa3661ea13ab5c1643a1a80ad27f2f7b4755f033f89ed566798285ba1225d8377661df5809b330877d0bf581691e056ca1bea4455a117acb0c187f96fda1360d5c6a7229d233e9df8f4bab4b91489c91b20b73ab21adb11165b14398f44949a73a5ab12e53c8ad16aaeab63c89afe0142914ae84047122a29e21438cf8ac7ca26d2d1a68d540d17694fef9912beb8a8db9a43cde2d22b22db0aa9d4c7034fcd44e246e0a611eb1d309277f9a2648fec9e55b34a57071b7e93302d47daf624750afa9ca9f50b81cf7525b05c3e51c315cfe2de66e73c53644cf3f7d38c7f4fcd308e7c0e79f4ad8868be3197263877c7e7985d3e9e79768783bf1f96514a7633dbf5483cb794ec79fdfefe06cd4e7774f8897df503ccef9b0d52f38a1baad3f70362f5eb8fccfc5b5626e2781069aea14ea91cb52b4ede19ca8591f4ba8cf5480f564d7a938e1f243282eff8cc2e5a753b8fc242b5cfe131597bf6e0188ad8681f2738df212ea31aa6a61b17d512dda06e496fe3d8b75ce06659bc98a93922fe92a9eac9e5cb6eec0ddf4a06d0542a80ae1f26315c9e597d589cbef950997df544596169968214128b69ad8aa7d44ab9e9e2794ac94583634605b2ea5e5270cc58993283f3fac0510d0142952b6789483822e73142b6ec264c58469942c2c2449a6d34865a58ae82c5978357ff18267c9f695810183aa4a96ef8a15b2b2a2f2232b6434527918aa5251c192ac56a7d3bf50d5e974c17802c6caf4e3c2ea52fd5504c303b3484f4682417dd40b61cc4c1cf5122225ec16188aa1aaccbe5bb2ef665c24724fecf8190c55611836636466657d1623966cbc7f83638d2c7677ebb731182d2b7421086e63d1a560b4e2c39be1f820314703a50f21074484b233cbc29b72179346099a950c196e3d86e960673d5684f56d596f41cb7a19d487a57112325632ba219c417db4c64266ac6660ad357c5754437db4f6b6a859c51a9b991a416cd387c80581c724f5450e2207dab8e151baa5619b6a1bc367208c18a75b19cb9a6e5fc8e956bbec35dd7e864db72e2eecc09c6e63289d6e61422fa2d074eb52a7db96d168ba652191a65b54a934ddae984cd3adcae934dd9e5454a65bd3caca745b42a1a65b120bcb743b6a69996eab8bcb742b7a79996e43312e6060a65b2a2d13fe59b4cf32c1edb6625ff84f053131d3ed74e162bacdfea75bccdae9f6d2b4e956be7831dd5a574666da7861c0986ee1cccc8c417db8ed5475c6f82eb4b6d7a5f66efca5dd52d741e677e3afc5e7a5367137aba4f83d6efbacb371acbb2586f54a24c3ddba637774518877f8c577f346d3d1eefa82aee3e77a0cee1edf7b2fca08e5287a955deaee767f1731c6b8d9db324a8eefbd17657cef3d18a50a171a763682513aadb9417a3ad23a1bda6db79a12e4697af546d6fd2e62d3cfbadb3d67436bd4a850f7a49bda4d9246af341d8dda26811bdfbbbbdb0878bfcae7f805eba1be2ecd6601730e643dd4f78ff5e05c944c75c28e417d7e92ad2279c51be532d2c51853734ebf1a9cf2f6c68150bbd134dd1a8c30c69ae8f8b98639795b91ce5008a2442c2cce326a697908bb0596321708217479ef1a08a38c11465639adac10e03d61f11c6f14ef784bfcaec960ac185b8555ba4f2beeeedd9353ee99507f1d6a360c1a06959f6b17777796da937938e5bea6766b5544847b72617c12959a4e4696167f990c2363bcddadc856992697e92f0de31df31c2cbdcc1612faecddf67477774b0774e367124a18374208a37b9d313f0c930f1dece7e1360d341f46bbe15c8710c35145d93f91b6c9ad52ad3a1affee90ddbc5bc65fe68b3eb3a2ef17d4f7ac05a7b267204e6554db8044e15229c5859fb18c31c618bbbba58c0e7f3829ae73144e6556702afb1e525ff638aa7fe83749b324a412377baa6df53a17b9990d16f224aaf2283793a9140ece8d1b399e9127244af68e73a4cccd9ee350b3972d2596b9f4cfdc2bf6e4fa4759519f62e2fd02c79e44378249c5c47031f330ac8cf6e285266361fc8c8b1855e4625230342f325c6648aba586c5064563e54605e7e483e9871210a41aa3206a8ec8c60cddc04171ccfadc9c3ad90ec673092187b072441df0fa8e06c07cee3c42318ec9854fca5a51a8bf9d4ae1e0dcb8c12447acb9aedba1672ee6db17549d48d4f75273ec3d2017b8771d5f99368908a9efdd3ed7519bced9b8acae220bbe988e732e67e3be59a0c9340c863203e3db264e8cd92d6837379ce86cfc85b7cb4cc7396f9d4d4328638c5146d9118637c39914a73c7a7b777c2e63783f6f7798c9cc5e417d1fff39f273a8a691feaf79e64168b3971aa43e97e2e7facd5c3124cd4c59998ca9fd40dd7e7f1aaaeae737d48ebc87fabee1f49a96d2aa4dc3a9d7f1f5d3ae86b301b9deee1d6366588c18978c09415e72079ff782f08fbfed6f06e71c9e30862ce6e083355c71f9dbfe8db447a4c2066cb8620e3e58c3cf65b7db63d2232601075740c365243090021aa20ca690821401442a6cc0869f4b878cc40283fd86aa2ad76d239348a2e44b4c7d3b7c4daf065fd4b3b9fc72002e864bfdf5202e7fd3b8fc314e67e6e5edc8bc9b01f010c139cea59eb6b1dc773105172e62a410130323050ccc8b63f2f2e292c3c5a56588961616215858503c28d4caceca8a8a8e8aca09c7e964ba6132956c944aa41c126914c468546bd42a0242240afd100a511f289d387366375986d1c0b0cbe6ba648d94d60ccb8a32628434175e78d953d763389dfe9f713aec6cfaf9f2cb381df792535bd438071744c1e2622ec8361cf0b71f72d0a031e3468c18323e5c276164b860798162196da44d44cadc8a9c03ac025cc358332e7ffc01c7e577806b7280b6b1057137c9e45a0f653f20f2ba1832f76efc37d155b9ee74f9372c13b9143b9bb9b95c7e2a726d6bf9c00cb18020a3a8106073c5882b531181c44e23b02e1309a22c95005a2413781cdd13a8220a985fe4fc2115487a84733a2ffe743af0f9652ce2af7b0104be8b07991026dc23217730c1ef2e1f819a6c1a117fa855406f6b6efabb2eb908a420d735b6e04b67237ba86dd6b3f5cf9ad635cd0dbfd6b365b1f5cffaf8f77a7e0bc3306dbbfaba3ece0b2deb253f163c8bfbf1e3deec110ce4e2fec2f59b7ceb5dca2bad5b847ce9524aebf97bda8fd47d4022bf3b2ca0e649f8608c5183fe2edc72d6a5f5efa3061db4b4e85c739f3779efac4b89b2dbcbd5c1a629816bfdb3dbdf175fd4e2bb7c470b208d8037c6a8c997067af2b9fc2bddfd2f09a5fca86dd775cfddfdb9c7e7fedcfdfda8e15538f932e91ab3e65a3f2b8870d4de24bfd336f7f133e75c84ae6dd5397e4e804471fb9ddd5c93ebac6859daf62ca9b94dbbceb2dcdbec8d43e58731c63819c6687b683fbc07191137aefb0cdaad5ef8f2a5b371fdab22cc360d7c59254abed436c86f836f69ce23e4e7de8f1bf7750edc73ce39e7dc7bcebdf79c7bef39f79c7bcf7a672de7729c76dd73b4007d8b70ce5a23f80dd569cfd9b9340288f57805aebb5d8c4a50826b71043aa2734449245aa2b3444d4e38e144142aae50039ce6a854cb1d4735ecd00c00000000c316000018100c874482d1344e24b1f514801162885068683a144562490cc32888821808214601028001061985904256e200a5f261a50a812a057998f14827a337c06b870c0744871e8582b2aeca4b5d64c78738aaedce2e9a7fae5cc50124d24bd05b28cbc94ce9505e4bf53efa1daa49d7512df9230c3c4b83cf373a1ff509f155d653e96eb82bdcf62244317ac16bf406a00e4ca3a3c4b6cf5d70311db793f47c9e07ad911cdb4d82a47d364b62eaebb6c76b8fd48962f11092092b6ac779640cdd71018f319927793815a41b2ec816102e601652980a00053566720a084f2dd677542d6f5465fc8a7e6654d8cdabababed6cfb38e59ad9c4dcc6ace6a3069689a6598612d5455d77bd382721cae84a85527b36f29c1de687178055ed14bc82f75ed89c42153f4c4ece1a79c8d5c999e71cd8c1c8352408e2d6f5d150f9b339d13e63ff02bace7df6c0b531f673d8f7829dded2d955a48544cc16a0ece25bb570281d3778312fb2ead47b52db6f5409cab4b7115ffecbde1bec39e401808124ac0a2540d91f3a8aa45d09ea205db2cbd69af162da4335e033fadf271cc43ddcb720700abbfa073f324592b04ed61c19eb036375579175f21fed87dba48a358aa816ff98f2516a4a007f262c0d5b18500e3c1c2635af2b89a22514d2975d6c6bc41b37452aac0e9c66487aa8ad909704ba834ae3e572bb626e65cb26267f65e3606713359844e6ce062ed0033329c214a2225e6c9bc8af99a0a131a7e35b1212e3ac919820c69b14c79150b754d1729f916a103b5e4a9995fd6005182b50c200876c2ef20d3e7eabd11cc9182e66815b9247f05eb62c10cd964bb847ca33058eb103fea922a5f62886b18da429b238b55350388414853774a31ca2613e6cbc3fb5f331607a0d6683739259af477285eac5d19fcf30873759f6e37bfd361f062b25d4e855c7b16b4fb2fafd9079266adca2e703338568beba7960246c6e98ab6172f9322346a15460e74a3e3951d13a7c2bfbe27cdc9f3cfada7b48842dd8f15535995a084e876db443dfc1aaceb870490a736a61392466354b822fdd46376b41e9e2ffd20f8d9d47bddf68acadeaa07c9ca2ca8f9ccf2b261a60c6efe34c81940be1c0d2858538b56a55071770e6ef84f8fd15e03b8d481f9d6dbc95094c117bbc3d1ee48d9ef96e44e9566086ca6b88c71398c11c1b820d3711d44ddde486b61f656241617e819173eff8fe109c2367ee62191dbed77beaf04652de8aaab243383eec7bf3225df2dc35b551b5a48013ba901fe47c3b84f673afb1430b910c508f999050f4124c6d2b4bb50007cad3e9dc0d62f77900d1f282c086a60ed4f8f9de5a65f361b9e67303934102f441a191a51884e3fb03d14e790dfd6b9a7ae184c53962b4f279012e100ec7cefb3ea279d52733431fda256ec6247f76abce1ebc078aa16acb33e3dbcf83a45dd0eb19c71854239b9f61bd89ebf26b9971af48ec5580aa214ca067bec2430f4b1e57945a91f82b0f3d96bcaba5298689f54ebe67ae719f82970e4015133bbd92266c6d73e09f0d8f3e37edc9c802026725fb7a5e8c2dfa9367b6c18f9bb27ba2e6745c87e576bed72264201fa749684bfa6a8814079ab8d7142d24533ab61abeca410f4bcda710b371e83623949a73cc4ecbe4aa8cc1110b781cf3c03daa554c95fdfdb794794563aaaf0893751221d341e0d7e5c980703635c09b87bf53c06e1dac5441140a2eb1119a1f24113e9d1b517c0cc722271d6b3a476b62a27a7f5f664927cbe1111caf2c500922abd2f74157c8e704396c360167ffb3fd79b9fc4dd60ca36698da4d248f6fb2033ff5d6d47c3510f62584d35bdec9a8ebe3ca53784f9b02257bce89a3696ca2d0a2edbb7e3cd6a001bb0c928755a80275809c04ea6706a1c306722b40d2a140dc0f2e9830c44f1f3d04b14c13cf16e590583313841b5af08e21e48dbaae1399335e6e2f73e775099b12630733efba05e524dcfbd01567ae0aa8f959309b7d17108ba58b37fc630245723ddced720b323185a46b87d2a2191ba78ce2c9629a2eba5e2556f5219063d7e5de787db445417180fcec4cc403f3cd59af15fccba8311dd2b6476232a96c1f1a6f6440a6fe89d264ff5ee9f5156df689bdbf7610a644de7c131f01c5e36b1016833ae39917c38a261c6b9b5e993f6032f532cb260b560f907c5c7ae6a00f02a5286ffdebc6801cbcd6ee974ada0bbc681ec38ee9bc8c73f60ae782f384ad4b6e37088946b003ed33cbadef2b5a80fa80d75e4b2c41f0535a56fa40dd1453e39127a513ad355789f6cb4cafdb4bfb13f07a7914b287a8cb9463851e8518787d95dd4b56fa36e3333fd170f3fde763447fda3f38579604d7581462096252e256b838e19b20e2626569138781d8b0470e05e2f14fc413fe400c128ae0125279cbfbf776f7da2e13994384b1718894da53a51625cc8176a0beec414e48ff36167a6f50e46219e4108856e83dc13c35a40812472cc7d543f227d5264aa058c2bd9d01070417a8f75b5b505a60c60668d94357a7d15dd6f47cdab9709ebaf8bfcd262b29de0b5028b08e1adc1eb789992a34fc5b23e5978c2181cf1d8d18dc562cb08686be0050b15acc5493c61c7ba24772ff0723b94fc09a63052c2be3cac3ef684586a6571a9ba21c9e76824d35e3692177c46d7936631581ed28c3e9c9c89967d7e52c26f66d1576927a5bc84b38b6bc1b3d590b05f9e2bafd4e94394b1bd9dbdbbbb355732a120ffb26c0a81f931a98ec150590853cd462fc475b8e467626f7385e0992325b50ca0796eb69a5e0c8c2d9a77c4ef72d266c3a9bda92b0e2ed7f454fb2d98392e03eb9b6f73c1a57e3fac0a8f460644d59da88d142fd8c76460691a2e40019c6acd01a25e92789a03bf0d1400d48a80334e5bfa710a1fe9f571d4300af7d30488f77b0ff12fb8626cfe7a1c1abccd9c493152e63aefe1bce5f03459dff26ef779c3a495820a33d75c38a9abfc3168c65888f606950753bf293d83057aedce5b648553a91aec4530d5875cd9eabba638df47f510f7c0cc441897cec03caa2f906d22692543d7d2cf113ec5c1f717e6e280432b6758c1012365d59b53bc1458574641172ed44cb47db6b26644b1e5bb40658a78fe2a54df1d347b1a50fb12c6d13378e75ba215eda2816a7e92c8db1ae698049aca9d083701db3e69ebd3ba2c354b45e7a0776d3a7586943bc4dbb9d6e842524cf6c4e39eaf5d066101356d3a7d8e9a758d386586943bc6943bcf421def443bcb421deb42156da106fa5df028fdeb82e14c692fb6979e622852b331876910bc712a0bf676037210ad790e6277f654358fcffa88ea105506d7c5a2d6d8a9d3ec492768a9d3ec59b36c44a1fe24d1b62a51de2adb42b4803da7de010b7d4d1584e45fdc91ffb5000a9f220c882e54c391314658d82cac517149a973e11865c9f7acd35d6a61cefc3b9fa1df2e557db084846339830acfd1466bd94452d03b66d5334320e17585b422c9d8665e988a994c9d4f42fdeea263b63eb559fc5019f52df8521eb2849e99aef07280c50d442feaa60994b0716adc067abab64343e3f1ef53aae9a40d3416888db47352363a5204491b3be810c9f3d413ddd171c076caf1d302ec1b8e790c1b98d2720d6855da01b5f3491dac79880d458cba5b9185b121890010c4596ee063b091c235c62ded32f040cc26faddf13961048cd1ecd879ee0e1a009aad0f20c6be0e426727d17b903ec036417681adf2135343fe37399c61d481cd57d3c004402d7a7c4f3b7300edb339d358a99cfa639e810eec469d589c929ded93465087566acd20d2fffbe60101eafc934481ce7b0e9faf952a45a8b5630bde83a1fe10d00b74cd9f53ec2efc984d8c6830b96cc3aded21890c95e4990b550164188c256458861426709d3d33ba030341d0be497727f9c2503bd1408062fbaab0a73c7aca714a970ca2a0c1bd4cc12021611b800b53b8582ee586b8b814a12e584a9ede2b80e0c87c26276101c7c9c571be3a748c9ea58623de8c87830299848daaffe61e8aeffcbaaa4e9299541bb90695ff8bf7487b336f927ba360021f9370aecbf49bcc6ba5e68d80bf97108a7024a5b477b57ddd42a9f1c77827692e521d0e35a97d73d3af4a2cee1cc654d5240309ed4c91214bb007478ff64002783d730cead2d1af9dc9f544df17006c5084ad495bd0a29544d9753baef3160f30f221740b6ce14392872f4d5e09ba1df8c2d7ee330407311c194b8f8184ea3a5cd254feed9cac5180f8b8a73fa29ec0cf47413f2acd4d3849acf9d8191668a25942871b75ae0baaf4b7aef94383442ef60dffeffb9ad00c33889d8c118eb83db959823181a9f7b09fd413496e9f4d4c4a8175d46d9b3b480d4519ee4311707a70c0a6f7de16092fac8c3db2870d287bf0cee029e04317d1aff18ebc13fdc2787b31bdc81ed0b554bf86279ddce386fd9fbbaece40e25a36e988e078fb5dcf83ad2c02a14458ea105109ac47706d5d75628da0fc419fa5a0527541c66515706edcb66988075dc20195969b6d2c9c0428e48c5bab4f1591bd79557618ae8d7983f9b4c17d41602817edba9d7a4231e132668190963e5ee9ec43de007b178e065f0dc8ba4330cf74866e888862209cfcac81ea44b27d688f79e8dd97114191e91e6101a5f885cfadc5ccbc86e567f0554be603eb9ff028b05448712ed6a0a304ed014534373da87b3988410dd59e4fc8f0a26862543effd4e2727ba136c0894d98c9539eb8d0d794dee8089d4e5398ca13207b9f0f7573e79384296f981738868ee4367823a1d2cd7638bf0fec6b62a720a51a734b82412c842b5f3730dc17468da7e4793f8024941e12629d6ece536e8dce43ffb5c900f28a23e67da910a72ff8a0a10910e7f703e09d1a4a62922f4e9870755ce1c94cb2ce32eea1f3eb2298d01684589fd6adec25f1fa5cee3b99056c828addba837055561a9959fb2d824e324126f1f22159e0794fb46ad541195844b8188de43ca3da756ae884ac2a44865ef0061be132b55446565522492779072cfa9290b2692722190d27b0cde83e14cdc53bdb4d1976310c2aff2d9603600be9f22215310e2dc935b2243b45a5aee8d94d9b81523e6b87083c8de50aa8e093985a86d46c6606a6cc08e0fb65dd83e49ba8999697e12d125bc7aeb34759244e80ddeb687b2455a627bf0216197818630918c08b7d2b613eac0ed653eb3131e016a9c9695a0e8899368f222b72aafb14f73702e2f1326f7baf71e87e763571768a41ca6801562137267cd6c09ebfa46ad0d8c56a797a273161e2a8f02f9b9ee8e68e29a1cf7445f5c0491f56828307e37cba463859c58ec164af1b345efeee0cc9f7a2897ad9d4240e94793f1e0c41dd1fa0ca85b91455f1983b16dde5419e33c044fef2b01137605ac51de14a2bd65e88d7a1d2eaf7fd555fc13ceed13aa1e1003a97926860a0bd947db7eea10d28be5073a0c5630820e780fd04550fb3d08d5dca65356ed04cae157285f5a7f646dd5f1a007a0d9f73742597a189d716750cba203d059f706b51c0d049d716f51cbd04106ec36630578a6887b24bffe50c56c0877867195c98322d66583f52f1d5d14682fd02066511f290a3014c8d9fb517c766841ed9685df079d7013bd8d45dabd8fa88b8a6942d37d82780a9dcf18f70941f6d8c312eaecfeb4ebdb604c626ae1d136362e4fac9b5ff9c93a7d095dfda6438db5d65e57b3c430baa45292f5889e2cd5d321a6485bdb6cd9d0a4a124e18e04f730a10da746dc9cd45ce3082e260f0c0cd31201654da044b67e1d6e7f85a39d7164ab3f99f7418770a8a3684f2fa54dd4376e96683fc9f5911c6133ad052d738e59ea4129fe3056108280ac9df6a620138e4c79a28e49ff2b8c5af274a3b2b8f3140e69a64bdcd20d858a794e1e36b8ffb19652897cd8bcb23b91e5328e1de119b9e37063cfbe9e73dd8de16750774ceac9bf2e8449501fc95b205e92093b976ed92c3016efc61e0b88e60933d255f3cb885e43a82724c7c277bdc720aae386f88541e73090ce40d761b57ae40d169e9e294df41072a0bd035a7900c0f53f462e2f62c1249dbd0124dea5930ae4f4b04080c5dc4896b954a2ebb26a048155d5dad8b1f017ffb88e8761e1d8f4e04e5f373d62e82947c959e591053d98eb1a8ea865f0dd80405a066bc2bae8370896b3221c38e0e8eadfb84c4d062fed229d5e69c2bba0dfa546eee1e515af046301f57698989431723be4771323fbf5100da33b844b3a051f6e7748b7aeadafba04dd0b48871abc40c540906d8555ebf625084b6c58667d1ebb54fff334e776187b8f4862a772993ed35bb8ad078d9e7a10a5c716e8e483a0acff53c3d8ba1159f4e15a363f313da4961d3a09f29065955fb25fcbc638ffceada98ac51b7f59d4e83777c8d05c0848499fe6b2810a1194e2a7b31a0442e2780e52354c56e4cfa60cbbb8fc2122986f2d1e4b55ff8f6e04310af7dccfd6eef64d1512408a6310b54bee0172d0b4352b0bc78a72820b2b7381211de773061528dc20e0a832da867d68e00c11cc4d7583ef8d885e7698ef9d8adbea1cedd0be09af65e941d680b295461665775a91a57d348ee82529f39e4ac281b7931c1c6c8f88a9726ec4ba5c6491db06f1ed889670b300a44dced77976af81dc45879c8243a8c877b083d830c6dcd3b1f0032c0be43f688b222617c98d7f9010e2fd65d37a06388820de9556dd298fd45c23424c263459d7082ba68dc4bb46d6d0d4c4a2c3d49c0d0e016f6f374445eda0dd6240f537220a9f0100258134b218e9985c12789976c6279b4b64c38c2ad2d4c992630a73cfe4d755c93b5b698e390958d882094f532d0363be50591421b2475524407e19d7e42461c3db13ac5d6b3a511d4b09c78c94e1ee565330ef257084151b430f5fa95f2e7c3f9eff202c3d4a42222e328054081d59d93965ab93ef71ca2d521b6214e49721410ebd505098deb9998140c2c55756b030853365bce9678517f366194875b30d31aafd816f0bc1a52ba2dc01863ffabcde6692545e90d00c9382c0ba0e7278924a1b7b5d56b21818248aa8d69952666be17dec0e124592d0809dbff7532254617a9fa5fc8bee992d3046faec681789b5fb5909e25f697c896f5b23b26b3d997bea88c02a4159813669cd117769439b739098b99908ce2387c24e6811fdea5059cd0140b060bc812e2a723680dd2f31b4bf33ab14e945ca91e6488a078e8f0900cd9f8843986d0c51e5cebccaf4d4dc89e4b26f21180c84bb4eefa22109a5f16164ffe10e8a9b662564b0a0ec08d326b41cabe21e93ecb8389c9f55ba7aecf5d6ac7e0a29f99f2faf56914f21840f9f13a9a554c8f5b1d6cb0af42ed80f514f5363e7b667dbab3fea35b5f76cf526b0345cbfe7e609a96ad863415e719132551053e89dc4d5295222ee8656f95e159cc0e5ed5f6d4fcee7e04bf5f1e00dfd8e948c15ab3712200472cf89ddad2e5adb5ccd1e37f3246a25119b95fb7f068845d9651c868b586981c743673a1f6fe7efecc962f1d874f7dcc7bc0fbce6ca5d5cacffdefebd0a64928a15b8276749dc96ee311837537656534b86003b95ac840281c71f227e8b20629b3d4394db9053bfafd13eed4a6d13030e98b648ba9912b08a11a2f23daa44b1f7095cbbd2381a12010a2c0b9f542cc9b764907f081a15a8206b3043d5df25c413030514f7554d72b0eb0952561d9f3cb77f9dfccde83fc749fcbe8ffcb24f6ef58b94ac472538af6159b575be74e6ec2eb4e13f964fe2350fde47b2605dbaecb0b8d92423dab11de5938cf9a7ef752a0160d37d728ef7530208f3beae221f56467efbea6426a1fcf36e5621cd2192ac163f491f291cbe6aa47eb2882b48d20a6427fef642920d5b81d82aedc4534a57a72dee739d5c5adaa7deebd897110d552e56e9f38119d7a16a7d08f17d5ea1aa4e3e0c217d5fc070091c1acd827e0cf562bcde50df297dd3578ad2825b75db3e03933605deb767ff06bd369e1e760a7d7d00565492bb9b94547db79ef556df6c6794329253e71771036dcc4b72ea88abd8fa59d3cb5a6f047a8d6e668793d84ef401f45ead70786970c5a41554aef4181368626b822d37afd419ae634a44b2fef40caa2ab9879ad4390e135cc91a4452b39180bba4ad6726d6ec4da2d1eb5ba68bde702a8e8faa15d860dca9bd8c6f8c223d0891d7966dfd1852fa3d4d28ad269f42493f3e66ade3ae0cf3ded6379b8bc595de353236e909fd18e9c548bd3424f159b48a76642b96421d3c5a5e85fd6348ed3e2450e57076d3744f14442eae22e3eea1683192dacbb3121085c8ee0132faef4a5f60c567b5c7bf5dd6d02b2c9b19b318477973a27d2b61918c2a79eb2ccf32bb31585aa5ae3a9050e1e674b4b5dd6fda225686905e4f0a1da4aa48e9a2bc1c8faa3cfa88804549fe82daa291d95f97e1485871e566443eddd80a0a4b5eecf5b8ea38ad7fffb1028b068f8f5ad8bc7fa5c62fd5413cfff425e60720df9020e5f2582479ffe0365da4499d66eac1948942e7477fffc5141d51ac92852be828edaf4cd916806f864f9052f8e63a0a3fa214b8a8f80cdcfe8ac7587c73c199f1af9241763252a1f357aab275f2d8a7df751142cf047cd8c784d5e5b5857c4ab450ba9caf56163326368de14a58aa8be8f3203e0a38476319fb377780552e5bb61568f4229d2810063e0b0987aca716a1db5a9c5c7166585bacb52e4a054bb11afedf695065a772349679e776688969e3583eb724c562f7e4d503465db944cf4ef0a985ffddf594e915cc685a88033e7875ad209f2ca96a7c2a8b0a994f71670b0093580a70bc61315943e2997fb77b68aaa35c81bff88ea51fb36f01934c0a8d59e96889f4af43325d9d081c3219d533fd30a1b36d8b113fde3f027bc5b5ba7b63192b1d136985a283183a2bc8db10ed3de402518e2b7f2392a40ee570aeacfc32a15052738af6d41741c98180f46bd2f4e13a8f1d5cbfd1fd30cff1435cdbaa773041f788e26d1523b0a67711ddd32b54d0c5ad7717af35eb3dbdc5d438da9c750511a5b913ddfba12ce996af0d09f4cd68392f5b9b910984d84de1d92ccf2bf5367557bf1020a86576f6d89f0fc290e9149d9b3bced9fe99a7c37ab9254ee55fdae0a2d9fb60253f637b02d2cc6a97a5768c9bcb30536ee83da28b66464ddeaf714565682dc9bc3a09947c32552399b74e02953c270e5a7265f29df694f620bee7f68e8791b1a39a51924cf058109c3fc6da2b9798bd05604d5cbb9ad754791704e08e3050de41c67d5ff167103edf259ad59cbcab91e28bbc52b35cc77041e6c6781d007738b52c2c53d4261d00a56133156c86a2ef3620184c3bf1fb2af4083c85d9582842608f17d31be163a10ef5ed247d054cd097b02b284d8868be93dcb755e26c36154e89913df1733dd0a21414c2bf58a4e9a9d5ec53c02493a8c14f2840a8b2142f4c3ebb4d5834f70df131a5b70598dfb4fd44bd99463b6e43c02d1e2d94d91127a37f6bc7a003ec7270e40a736739ca9a1efe98d2784696475488039adbf0bcdb50d93cc26f20bef6d07beefe17cb5f17b020055911ba4d3efa51d1daa0b2f944930984b2b8a0bdb9b2f82fb87e5db0ad029e52c9ae867f9dda9323e8589be4ace8385a376cedd0408dccdc8c498c04c67e19e35bdb5a3867119f75405be8ce6007c40fad61ed1de87c112a1109f6aa9104d1062d03b9cca05db67a1e960a50bcdf858c2a51e9b1435285348d976c64ac319a60431769571bc7c80f08255918b0f8bda1381a6f1f57d641e31c7bcaff8d486cbdb6900287cb3adf8ba3ba1d9a73bc19299201bc04c51869571dfa1b3d925011cfd0780aa9d2f741d84a91489a8ed07f24734730d322c6f062c139c27127e87753784a8bea4600608d5fd115495f9edf941ef86fbe4bec2e61e55584834af74f7ebbbaa31ce7e2113e82e3f6244a30c41eb4dd5bae05a3e5867aa2fa8c3d09fb04db37a59d700d3713941285eb55d283249cc9ed1658d2d3dc71e54ac635ebfa9dcd1d847ad2682730ffed7cc03242f0a9b3e0e8d6ab5753deda14b048b6204dadda8c53f1e64ea8f7614b420ec9de01875216c090b339e0b80839dd5a757580b7c09a2bbf5a823e2961a4256743dc935a634fd0fbb0f1474d9e485ae689c9ea651408d2a1c3e495bed4036f324187f86c3dd68951b8d118a11e79e3c94727465fbdc4c23001dd822138423cf0f4d701bd433913d2825ed2b0e67c92df03c064c993669cd4b93925b09649b202a4329e0a79f06fba34a25c7641ed4daa40226905972b4e674c436700bfe96bb69f29be45362d4107bfb79ce6f526dadad3e3001e5c13ffde5a7280cd2a4315216f661e50b1d954cfb3c988ff9f0e771dedfef6e41918c1ded22de6b201c4e22394cb56e12dcbdd796c577e8b84c1145cd7077607e341d8859c57504ccae417b6c8fdbaf7497f32f11c575700f6cf5b9f294087b0713a23bacd9bd085c97f21781a124cea7f05e4453ac3af1231bbd5b91a94cd412977ae8411296ad873edc194bd40fb3ce2bb1dd70e01673410a16b894d305d666d33cb3a2c2c44d1cde47bfabc1d7edc49a722f9be18a47be90d4e08a8b3910b70274b4da9cf8f61dd7ca3b02ada90826c0b097b0e0f5ae209dc99258046caf016a9c3f112a549571cc97ed351b3f62a8aa90653b49a0b58f507090e15871c22f4c5b8406e24154926486a9b58bd4dadb1b245587d15c5522ff1bfdef720d16d1863bd7c7f6bb296756fc2cfdfff8ea20a3d2ca2682c095ad6376f6151f3628dd4c021ff11ec0273f6f9d32bdfe2704002e21ad62b1fea9f8f8e8995cf17913a4396310b28bb0dcbab8ece5a123d28a7e5a1ebfc710b201dfb2fa83a68558f8a01aed0164529420fe5ffca519215fa7b05cdba20508d29ff972933aefcafdcc9a2c1fc166b60661e539d67459ecc050f7094932d662e63aa1917c5a072166a26667433085d1d7fbec658c94e77986f970d22f6070c185ad9a14ceac40883e4253049367c2fee3b077dff2bc9fc402ea77b7885297bd260d0a7057831d06439604ef614cfb3ec5f1e60d1721584fa2cdfb28aba9b8dde21fad8d79a500fc8e4cb670fa60438f29933f0e77fd9d8abbe60ac41b6f6e0cca37687e12773286ca19895a1e650332ce1c3db239519b848309f20fe0ec587455a2e9f5dd6ba2ad7f8883ee34aa6edfa37b06a8057630c6ebf36418bbeb018f313e235dab21e312228156ae219eafb8c02d46ef5db245e77cb3d9b050856eb9b251a7264f5a18c57ef87a16c615a395da9ebd51f73ca98964af11307e86f055e92f011585cafdec350f3fa0fa6dbd63dd3da26ff7a7b5ccac02061cb008c5c22c8abdf1f5b97b998d2f5ea5372678fd8f3aa97081ce3a2bcca37132a665a4e83b479b3cf199ec847310598efc37227a93bc3014c0098d3229543cbe8a233ebe7343a13eaf4f008b7009a35331d454891f392ef3a3380ba8d887b1a88e115b7da1b10c1ee3866db05f9d8b9f2fbd48061d33873e1cbb24dbf2cda064916e93b4eb7d95f9c841ceccf1b248fa3ad581d685a2d9d531d746072da96c536e3f483a4cf299c1226a2624d7fa9b15ed71b79f7845f757c2aae0bef1628c546bed99c6d90119dbc2c6d175acae454ab8f7cc6c526df3e4c923de62ea6d03cca89a83b5c4c3db6209843dd97a7ee9fd08511ac9601cccee41a155ed4a39c577a09da4a5d5f0ff2541bd94e850619509bf644ebff1f387dc79f063b4260539b466d45e1075a7f9a0b589e5eee8ada84a0c0d073ca7805ccecc8a293e6208ff28579466df646154c97ad89be9fa3dc6871d23784c39ac2a7d9dee0a0063ab5795c7b598e418ed0b6a633fee39d48d9bf9c5f4d0678cb91295b8104911561d995327614e8fd4dfa10942c5a641c463cad48240dd0f8f818131d92379400f3c2c47f3ec608c2d9951a9576d062887543cad8828a53af98dab6e09b1762a0a57cc35200f2cc36d026410aee09ef6c9808fca378826bebb3d2594d67222d51ce86d2c05ca20437aa3c01947db5ac66586c5238a67f67fff9493d6aa47bc6ab4d1007a4e9a249f03b259eda87ddf9381a85596b33a4e5967b0218a13fda367140ace13bfffc3256e340203d359f155eeb28f4e7ec33627b9faa707da7c90ae5b8ae3660b8188610c3d9482c72a0433035a7aef3f8dedbac420ac053586d2337728f48b3989ef0cb7c9393a63b12bddb4847320be73e04feff5d6fa6bf1efcc141b5282d6abd8f67ad04923df700dd862629b66d482e22c688ab91c5de3fac5448b4018609010c8e91b47c9fb416da5012483524323a3ce4f0547a27c8f774c24f4ce654f24eadf45027e6737ac24e24736af24e557ad1279ea78355583e30c11890ad111c6d543f4d74d2956cc31ad174338ef325074fa57f623ea724fca44996b54ea4de66b05313357783095b7f7e5470a02ac144aba29b379ff4ba73c212c4e14d9512456d6f02e3035206a2fcdc9bfe672fc857eeb5a8f76dfabc7ceb285bd76e735449590cb4de162a58e6fd3ca0d6299e6691e435599b04426145f98bc40c98c138aa234114e6c973cdd762e656fb1eb2a4a5827221f99b15e96e661f8921aabb19ca34957643b0ca7c90b006d5da3c72a466649509a30127b914dd9a926e795248a37873fb01e0107dde2c8d5a5ec1027d006abc42e3c904677c77b56609effab27469e8bc323827db1e839133f0620e043dc3f1701b718ebf8188328a130dc599f1e6cb6c758bd4fea0fa4305fa5c6e30fc5869ff8dc8196fc9ac607e8fdb1a725b164979ffd6496d5cd9c778fc9c5b703bd7d43972c22a293457d3468d8f5dde6876a1a69b03d487930b5e3997ecd3952447f1eac0957de898a67a38ade9760ac43fcab804ad0eb4f1b85c116dc264e1b6790cf197509d7a5f331c53f0f4b928166deaef8115cb3db319d0b19a91b3fa6ffeba86818d0e8ce05ba7098daa6434205d6ffd9c8167edf16487d5e1f7a465d80abc0cf0952056f8eafd5978ed73e94e7382080e476e027ce5755289f50ce00b7389be4d5e15df7a4c17d281069bb7390724ddc6e15a36160c6defd62f3407fe6112fe50db12c7300f0c04f415659d25fb9f5264f3de40973186069450e6cb3645462a9358b3287aeceff5fc3ff711691bf0dd2a7e10e8d9300b140f81289669ae2e4f5706f3b9ba5058ca258c26ad20be4f2351d5f65b1e8231baf0283109e21b9821e8e4d85cf4adf301f145e96802247e25ae8f621d6e02e2bb6e2205aab40a8840cc86353b8341eac437577c79b6671d4ae820202b1aa9b8c6541ce8d49b6fd2fb2d7f4874a0f2ab36306a9ae7f5a141c0b09d33b21a44e39b9abccac751f8bcfe38550b34c17e4936c7e1bc466e34a13875221959e56ba95885726ca74e369a40d69aec152c0212a6bfc6b741e68c0b2086420d208836fa0006bfcd34bebfe5c011c121bed15a1bb5168029fdfeb3436b4700523114d5fd905d77502ba4a6e435b9fad3f8ce116d190d5f74620cb9526b0658d6dd8bff619036c8906d8579340a564d6e999244615f3fcdcf80af8e208d6f9fadde8b65214a1fd748ddbc34470a31259d39fd4335be2ba621035f15f7bf27e20bb4a7a09c903dcd4c040b32fe9f35e87e83e53b03dc04887243e96c86ee90f528e5dbfcc7db567335e5dbb4c9aff9b91d49ca9ff0cdf321aae839b2366391b83c1bc476948c7f5356c5d29c35de56842519a850fc9e07ce2b038867fbed0e65b18fd81825ea1eb6a7fcb3508fdbe419b0616e670ee1e72c1de83f84eec846d1ea51c18d3fd2f01e0d596d408f0de92ea3d7d50467487c460b28c3960f376a6d21d5b31da34bc4045c51ceaa67133176483b901925bf5297bd8c6950a8c3feeb930b2941f68eaeadfead689510ab1724c50066d2c06b8094016838f38344dde30e2042c02c0167d4434cbd1417933bde07f9864970149ee6a51fd30fbd73d1e794f97b7c353d115853fba4b427ee27d7a5d86f69d9684034c47205aa46278804d6480ee90862078655a21eb81331bb469c8dc4b986a9478521e4969d7c34848967f980c80f15b11b02e3157670484a7308f279d02ffe7ea080925424e5bb4bfb9391075e55f7f5566da5859e85099927560239d239e81f2ef3fe1aa1a73e7eea021da8093075487eae604130b2d9aaca9266885614c76260578a22e5d215c523da8431b7c08c5330b52f522d8f56a41129e42291c66df5fd71afb2a4eed9bc14c5e255e4dc2b05227cdb4a4b5b47923a2a232c02ec0d0c813ac21331873a2f71caa91be6b4ff725cd2082cd972bf1fd633da5a960bb0a742312d5e9610b56299e1ef5e632160f1cdf71b1a5ab4af8ce80bb08c53b4e960cd004f341474a1cb3d2ec01883121e92290d9925d921ce2b95f2a19ff2c54cc85d8961468bdfb32ecafb6ca198f36bd40285a377551d1333b4a48fb27db48b659f553663b853b596eb1d5fbba44b1ec65bb8dd44f620903a821d8f71da888f187b5d044300e76ce8e7038d0e7c98bd43228dd4fb27f0659cd54aedddbcf07d5fc3b0e7bec5eb954a66c43e34a788aa05b16dd3822b0c1acb3d606386a51959cfe16d6f645ac08e33ca5d4d7266c55b20d4861a4fedf147b1c31ac3b05ce36414db78a7d479b7d4b3a6bee16e1c027ae3f80525e4924d9014ab5c07980f6ae40445e3b53d9812b29b3586a0e24b3812d11b79770c995663c14180df9f62684bb3405afe98e19194663cb4c47df4ac57170d028bafcee05639454fefacd604a66e36515d85786e5890e85423398940b5b89052a12a2c36aa49931ae795bc2906df23a628cd4da7e4ae1f6c33658e0c440a0f2af3253b296f6eb35b57af0a3e205adaed22885e397514e1b76857558cc0ab447ae55872fd5fdbb578e42d564349fee7978bd5e44308e1f7a1f033ddece84658aece77352e9a6c425e94d808f7d283d9dbab634ef6410e301cdc2359b5bd824f643c69a7b0c523deabd3a1a31e696ef59d83b37a673e3120ced7cfbc0383afeabe9b240ecb24e83a1f84beba702e039246a492fa8d358588b5b38fd6009fca7cbcf196345a996b0281c22201c65bd26805d724040e8b84186f49975a397db556f08a80289a2ae8a3b128556779c3fd9bd5f91661a5e447062601f03cb987751c930b30e68cbfda5076fc267574de70d8a713bd8065a0e178eb1ccd3bc9c5b352ad35abc245f80effdc27c592f17c8883b88871f6d6e8888440901b70c92ef751356801d2f0c8cf51750f3dd05398a3cd1fc79f493984d0a41aa76c1a623d9c2121057c48088d7afe0162e50246c79322ffe6ab885ec33c2275549cd5570522703305f248b9b3983337484f677dc8901cb4a48af86fedeb7aed8b5a7036b5ef1c49b742e4d27b1e1020f7dbd79ad967643f12e8eb74418fb40e8f2f4e64a65927d038ac8abe60a11dff358ded1390025080a63e1235293bd4a517df24de14375b28c527b98c5d3f46aadd1318c96a790de191a095f4b393aa0915eb3a91e3d34a3fc3729667de02d39f638cbb72a6103b5a8a30123d7b6f40dc48ca9889793680b75bf82c6bcd361352f75dc45589088846718909b08f4b477c1015022090b21418e21ad35435f38f35aa83d03c6dad83bbd217ec16277489e98e4135d6c2de3e159ed7a2ccf6b4acf858d75c22ff4fca23bac90b6feedc64e77126baf50e9024710d823ff04ac466dbbf6d9e586eabf228aca4b38315dcbcd5f76667bf8edf09bb8840e266e19b1adfed9a74f08019b8ee3217836a1d90697907782cac3205e70208b3e52146fb496559ba111bfcbf21bdd2f059b002d10b3bcccb9c1c57ad9ed2b27dc9b3dea312234bee0f8730597be021326efae5c3f0b8f31c0e39d0c6932a00023fffcf8dff5977af48d88f7640eb0c4bd7a5f53be24828fe4e545926424632dd2577891a90698a35e84efff2405e042e1e644e88d3e878fda5064ce19f3c7073d8a7caf07248b425ee6225787226a9ac13489253e7a96ce1a601117913f212866372da5016acfc49a8687b8d41b88bfe5ee327ac7dea79055ac17d52db2a8be5085f5939327272460a825bb17e8c59916e4037fc0796905c7bc8092bd075f2c1eb4c37f1261444a1fd7a1572870e7278b12135a064b82917ba801b4208738e467cb9b92d907c8b2d989fd67c86b14dc8df618633e3f1cac9efe0afd6e23c02f2a917ad140cb221247f10ef36afe876d658abd0850291552d9cd6b85fbcd02a10920e6ed3140dd52493fee2596a9f6d899609f11a0fcb00762ae038172b2134d25f0b14174536ad562a4092bc8c1769259afe5e17711d6d8ad078c3109725c636ebef81179764bbfc3bc40f78b1bc6514894b881e9c68bc5c19130f1c714461fac0bcd6c21cd85cbe6905340507f1887ce9ce90110ded1d1e5de20aaf1fc754708f937234589454da99b923b9cae97ce1665878fb8a99dfacb1a0bfe7ac412deb64efa5c4fb701910dedead3e9319a4920b77363990c0fe90daf905cc918176df23bfe6f17edfe0ea11a5d62467119f7b47189e1bfc6f8041d4037a9605095c030c27d59cea5e07e6a9eb501992596e52f8927c37c51459a35f42272dd189434ce936360f6e26bfee032c3ff82020f13cf87a9a193ef4f8b166c0ab618888a9f25bb0ccdf9ab328852b86f8e14f869eb2876aa201013ccf2f26fcc2727e0feabf7e172faaf59a7ec1b9ffee0e71a7c5ce92199cbf2329cf9ae2e522a8a6d08540140d2d28cc1d3f67423cf9e10d015c8a2bc9def21d095c6b9e5d7e83b44f23b371bd271e26582914093ab57c94d148c308bf623eb005893458aacbf8b0e5fd217b8be861bcbf8e5480f7b1446ae04a1a3b042769937cf277b8fe2d5392c9d60acfca251d7e7be22a255c6f95acde9f31f05b3594d2d3a9ea3d3c6a9b6ec3082a9ba4fe650095377a46efabc964908287fc8a02902be785622afdb1f34b1b49bcb7444b29ce49bffa03e42dc238042542e75be7c3bf9dab872fa3776646a4387ce113f9a25e49404926019b4141a1b080f012f54b99cc6d2de84e2dd4d336f3fd3a403ddba197387da445d0d7a12736457c7f633775948b0a26dbcafa1b03cabe15b49b7d30252416f6209ae03b96a66652d1f1401f0ed9a1bc7973f9f09ceebce7198c30373493cb3e2589eab122f9ba385d27c8362c1fd7530f2e8853a8b6852bb2c772937da1c22109713274bff1dbebbcffd1ab2837c35b75bebc32ce82a82f9c96ca18d8794ac4470d5140cf84ab1f96ec0c35dbe3ce9855eba2adbaa585adfa57b00c4a18f431cac8fc1b8590c63e3b2962126276ecfe733d3e57cb6d0f50ffda179d739d1b2cd21f9e1f8dbd913fe92dac875bd74a38e4a00c688828821f8041f5a75cb9f988e83d108e53eef0d27b82e94cd03b78c37cadd2736d68f77facd3864c0bdc8fa5d30d21b1c9835abd95b7ba881078326d9a091334fc4e0a9add5e4c852e524803beb612140dfb71bdadc1022e59bdeefe6660af52a5168e629bae848a2351e986fc1bbc66b8c1fe03053a582824fc2310f42086742a39dea81b0da295e50f3674d8db041e388da84090afe88df62921c761c7c7fdc90cef27a92f2707ea0db6b015ad17b961ec475c2d2546ee9c27a5541554a4b1db4a10e5439dc598d9b55c1575667a607507c7e1e64c7e2c877c330d86edb3ec8f02ccf6666151d18532471a129922a389237bd769af3c854be2aa59d92cd50652a463b56351067a62125230a5ee6c5258b7c2e4fdeffb18b200c21d546ef1ae3ac7b4cc9d20ae156995295120346ebbf73d32abb48122011f2705fdab786ff4608bde689455c9f66584a5a044fb5f1c287469e13b069968516a79e24042b431bccbdbae43238ba13c1ddbae80418bd33c87060f8562bb944eb397e30fbd9c5fd0d8222e414eda216ac1beb77316a0abe9120d028e884cefb44d94430e607dc8d790fbeda89730e6233feaecc32a5abc86d2e3829d804a891f00c89eccd309802216948f2fe9412327e0bcdaff317cb783f385bf6cd1e45e1d779eaba08d56a65a08110689f9ef9f9ebca0e29c6c873a2b1943ebb55921571a310da94c2cddf40b227193cf8de2749c21dc6ff202ff6d64cf05604a81f370435bc900cb0360577e2cf95dfd4fa150d78ef02e9161ce175c183fb98bc124e452490d9f2efcaffb985cc882b7a1e5124bbd52419e4ea74e0c3b5ee9a4361779160b2e958b3cf242211a1de4bd97f14ed1804ed07140e2af2424a94614d91e012b6d6329b6b1e95a52be33c216437fad89ac89e07086e90b31eaeb8895310ac14b8ec10fd3e57433598f66abe79b0bd6688811d8c8762674978800cbf5ab3ca3d97f2102d9886f77c0966d8eca6df49239500311a9a7e655f01fa56334d9d39b88b80ae650a3417611afe6be5e2106bb91395ea36421d1afebcc9502e9a5f2e6fb96ce60aa80694305810c8cc307316730449ae8cda0883f6b9e21a39fc59d86d70b8f6792dc95e7193cb115b06f9c0288c880da2c5f51dffd5d8641c8849108fc732c06760f195cb9803d8fa7febbab5f00b455a2e397c806259b41f7031ebf065578b4a99029a2448052b8a965ac9c27113746d32b1b36e7664c998a74044404cbfb0d2889ad6b5aa189a082314223a58bb2dd0b31217e217a57bb312fb7aac5825f98eb1e5f37a18eb7d86c60aa6b7645ee92df9a434d26a90fcb760590d07c557e35de29d73eef7c43e2c1b8bc5875d0ce81b14f24e444d48aca1928e5a7d457cab00db1cc224297c7765ba446c725e01d39966afa60af2a54e7eb2a03b4f79e047f218d5a171eb8bc653bfc73e07a6cc8816ce6a071393860ac18d9dc8dcfa5285e52a6552c19386f74b6e524c7a3dd5719949be1a0a723909803681a0396c48b21e5fc3c64e87d5298102d54dfeaae0fce5516ace157c970a6b535f5bfa55036e4d80dbdc8476ff71b84c9ad33b708cfd128b421eb82ab8f8aacf1d88eb81c94d2953ffa2000f34c0a226eb04a5e3a1cbd57d67d0dd8e5c14322f5d5b51e02e8906c6058c08ecb3319dcfeac8b7c1d949a3f723f281e8a365924e4ff1d63c17279e3b761584d475c5755ce7927daf8a34e2c14ca6e94896e008cf48a8b8c26b1dd0634463875ff6076d72d9cfd38abba78fe96493157494666e92d4c7af53f0e1ab4003717981e3be6ff3dcdcb8d996187264aacd6cafa102991cd271064e98f161a3d6a02f11525e2a6725a3f80b94a7062228940543506e427047a16db03704317c242ec1f6b08e664f7d0b91e9b89bec6d5f55690ad64f8f20d05f305e83e414e3eb5050c9ffe8edc82af12c402cea23525083944595f932414301fa59933c342b75fdd56eae62c49746d6258ec7722724ade37966b76abf3b952e2edd504bd375fed51fdf642b45ad2fc961dd6e302146723f8fcefd48eaaa4065454f8ba983f20a7e99a7b2f8074132c07e3aa2150f4ad5e284a6822b7991f4d8919971da990c9fe23b57e5b1923b10f1056d44a40f2cee3450b53bcd49d3fd73be83bae01b7c4694eb4fb647aa5452cfa864e10be5854ded2623426913421857b2366bfa0f83e348b199a880cdafc4b5fd5089e9eca7d6f1007f3db45108239d30c63017367b40003290ffde2c1528db818383bc606c6fc77972816cc422a561e5ee69133bc4ff1bc1df6a2bf93a552fd2139968b0bb0fef6f62499020be6674830b7792a01f8350149c357b06cd0a74716d605c58b3db1c7c5cc63fb848c168a7ea0a4af71f4daafa1184d8f8ac8fc838a9453d5b40b962042f18b93302628d1bf13876c5898100547df19bac16db6a4b9a4d64719fc4028a00243f0868a1dc3466c5c608660b53b09e515e6bc637ffc02543a61bcf0b91b2accd98f955610bdde202557878c415ea3ffa3d4f9f4762eaa923fa9d40f93e4ce36925b9e9193808bda7a687c78a9277df5217a35adbfd6a37a3adf36656fccbc1f88935f6918a8d0f33bc989a4b04655b0a770ef207b1a971dd6c372c5e435c9db931c8e1e2bd44b278030b39617b4376f47c268f7f4f3316eff771dd9bd09a0894619027f60c80f7050fbe09d6148c876fa704986c2343b7178a5f413f93881642db8cb5aaa0598e1ab0a4821fd1140b85d06f8916f1e6ea088df98dec122e9d62bb7542349aa32c1058a6f00063cca78a839f05395fe47b0351cfd8945b29cbd2e8cb2e0e54211f86aa878959993ba08ff8c12eb5aa9a458198e922142ed09916e112773b0a86a63afdfc39be068ea048d250fdf511e7240f2e4775ecacfd7aa8687eacbe494ee537d038f6d539e807ffafd3c7bef8948aa7c2d26f51ec8aedf8151d158eff048ef1d5592e43e6d3b4a10a0f1b0d8b7fb64881650208fa6541467328ab83414b6fc81abd87b43e6b90b1a8a79e4699000e3f944e2f441858798b2c666e0afead0708c6e4a0addcba13d336704b624d87d76da3d39f802b9fce4b30f90b6b8b96062b02cf541e7af4a606a86fdc0516ba1fb88060c6e199044dde2eee64061b16bdb0dbeca5cb4ce07158b19228c26257db9af56fdc5c5c7df3caa28b95a66f4c91f94d53aa61630cbbd7233dca7d5106c93f4abd62d307da01498cab0121ced9ac6ea7ecbb03aeb87cbb70399407575b1c57b6ca3a5451505298d1100cd1ef73f585de76c75ffb307bcdc23c3e31b9a9e97fdd013ac15706382c7a40e8e81f1e7aae8c487c955ac053cf8540e8acfacdcc718fae690349e9ed3445f419c863324fe109657979374ef12e8338880af14ba761989832be9cf9a0c62fd43f5e5ed61dd28f240cbf3240903360fa5aa62b7cf613e76afc60d2d50ff0c9652882f879f849fb4ceb0baa4dd7c872d99435ccc75130f15bf5401cd572b547f645d5d9ab4c632564d3b5bfa564d45b1105fd37eb22a508b7f549fd09ccad50c73c551b7c73bc0d5f30ad93d36b6a3397fcf6e5ac74074ff21a1ad79f1b3cd0508f90bbefaa8a4b2cb2693af3a0af1fa2d8a1bdd4afdef5d978df4535eb1254d829997e4bc78845b695f05922e803a262d9ef55b9257c7a5c6b622d658c377264f98a105a15b54724297cde290af9ce91cb3a669e73f4ea07645ab6d4a853701e9d4e00fd10ea367b34792e098bb7909e4fd6bc3635e2e8824a756692ae900f0a8002b85e48396c4591c4e78bdb65bdbb416e8b47920a09da07eb06c98d62ced184f18f5a5aca15e0e1afb6a9c48d7eefdd94fe7b45d417e704106f0a78e7b4a81e7a078faca73f13c41d193a89e28dab3bb71b6e60303cc7e387ee7cd4d84a658257208fba0c245d99f547a875d9478c7b525c2697d8a78206ae127ba16b3955454e6375d25a3e767f29c0361f07ac8be3554521c2a694455e644bc12e79b4f208340dfcebe52deeb9cf739db9a4a10c8dedcc284aed18ee9c971439f61aa705065d93bb09e084d34b7cbe1c11272fe292771789f580054135c1716853bd1e1d1bf218063f7398322e28f84edaadc8594373e444d8f27e0f6285ce4fa10cc8112c1b2620e77cbe1feaae220b7c6f0716ce3624d5e2f7b2e814f601b33eeda190c7664e920b7c8a6f3c161178d310d57991903c25db8b92e076e551127ab5ba9d930654c7b40bc2d7019b85bf21fe73b58cd73a8286e63cd9166d36a9ef9c3e24106838c18c5be0f48642638bc2f0e8f7c78b95d05a53d88a952175a3eddd6f7d0f43f86fe8fdc82bae20e86676939fc91ae54454e73ca51d3092def056daf616bfec55f315e1e14c75cd27a0b0bb0c5682e2a462cf25bf2e47af9436cb8125f62c49b98f9f4cc2ac6359e77bb252e897c40429dca4c29a5c95551594c99207e13a6393a044f852aa7505e79a3d1d7de685e28c0710cf370916de297692dab81dd789851c41cdbebc06fb7e7f9a33bf0a1d3efdedcd6ae31707255dee3a69b63d543d58293e1379652583413b195a9a8b7caa8664ca2a786823a8103f6aa83bb3231bf6883cbace68d6bdafe91d6d2ac575bf262f9949eea8ee5e0eba1711e1655c3ca43a84c37bc1e7e1a8d24d4fe9c443cedd05767f5e6fde192ca6e3dce3349fcb27b7d854b37dfeb4b847d4cb6c2bc6ac32b45f7ea579dd214abd4d7db3bea5aba05892771fc7c69034701cd45b1bf065b6ca5c3456232851f2e86cfb8ed3732ff6e5f7310eb407d749074b715708303bbec777b4e006f72c5fda59a39093e270840aefed2c093045ec4df32d2b96751f8bf7e53757c78743f27344167beaa9af1627d38c2e4ef0c12a0f6ef81268b27e97b0c339cf129a1fee292dcffa305221c4e5c6137b089b00a346a036ad95a93562056b24a07cf01daa3f6c0112aa69e6cb89cf19f93fc891ca729554418247151b05ed6fd030324457b61609bd50b6b2ea31c0c91ed2b3b3f0a6e0574e9df0b15d725b1762bdc80b121336c77237b6fb2e5de5ba694649a086b09360935cb62ba98fb627f985dbd3087f12aabd2c1cae055665486edf7255e655658a7dfcde055f67233aa7c6ad8feae8aedcf8c266c4b6684c6ecc184a561fb533308b63fb33281307930cb601d34e61a1e6b1e298d60fb9bc96656bcdfaaf7f427ac79bcedbbf7dee9fb7f2fd613fd0bbadba3e66f13f6c3fc17fb7201ae72991076fe1038343bb211628df583ee59a77b70747a300c3ecde1e382d34c5bd97e0f64aedbc6fc9e654396399e53a4534b27f66e25e9b1331f90f4c879ada2f9261c1290ab1b1ed000b93252468c27c7cb47805c1df181953ae881610d90392f3c201011b99241255733b04eff1d62802036ecf0c0f0c4bccc5f174620560ac961537f6360601d22303b55f2782b213a24cff7f267e4aa87a626e1bea0ecc6fbd03556f3f1d7adf63252a5e435eda9e4a1afbd275534af3dcb958fcf44243dfad0013089e8034d9582655be1712a9325dc86b5f926d4debc1257716b14bb9b6969e5293dba6c442e427df437baa1d843d1ae26ccbaaeebdabf8ef364bccdf33c6f85babd58dbfaa86f53af10f5b0685e6e1ba59bf705518afa3e1ab62b34221739ce07a40f7d29bc8828a40ffd6e2b943d4fe1a2e6e121ba7d5f906489577efc0a3f9eda30926b40aaf80512c9556c06bfe0b219369595c0509038fd6c068fefe7359ac7c7f7b353ab6876fc4b9e96c7df692f9b61ebf7784953d955798a0da4aa7e3f2bd5af71f98a689f3d90d3176b666fea136a334a6dde86bea64dfad2dad8883d20b5a1f45d3e1aa8385d3e1064507229eec5aad98ccbb85a8b180b3ff10d7808b6bfe6ab8126699e206e90f8b06593e6258d287413c48d9de2cdf75adca023473883e3c8f61b39d2801eca58e26a91df680c0c592a5eedb36dc8de009231302fa00c3318c0062b5aa41217d14933cd9b1c07a4c79d12d87e13d8def9c0c755d87e6f04b6bfcb4288153d5488481f9602065ef1142b42988a1e2e9a5cd4ad1cd94fe95c85657bf917e458b2baf63af7b8ca9d2825cee5ec7c7f9edc6ab55a9c1038d3c86cb55a2d16974d1a1cbceffe8827767f443a4e3ff7292b7e68d264875843acd6b82a85fbae4ae97ea6ac804be413cbfb0bcee992c555c942d51b5aaf5acdbe1a5cb01996275d8069358fcbb49e1be799bbcf2f45c5276d336db2f336b332329594aea3537bd760349d7bc3de30bcf1834c4c0064808881c989b100cc0b1098205e40165e2e00ba000054e292c2715992fac61493cf5be1c380d7fdf09a74281f9d131477837ac2511b4e08ba8974884dab3eb5d067d66312914d1e1e65fa8e2ea2269cef3cb7efb46c738e6e9ea33c182b3f870c8e1e72c4e19c1fb61f87f4e151135a174220a10fc9f9a338f17adef64296c3cc5f5230bba5f46c2679dc5fdbb22834304b276f2ec73cf69ebf20ef354dd3344df36efad450af799eabba97a08cf7a86eb514db0615e44a4641f2642f9f9f205793992079b8974bb0f25909724559a79fd5e02348a7a02653c898bddc52d243b4d8640aad43695393ac845d420839f673b20aac016662321f41594ac1f6138f574da4d8a682eddfaa92e6a1be7df6d31bb29a7462ceb726bacd93e9b19b74db7305c2f39a6e5e18a2549ee57efb8eab618f1a00d9caccf9a8d7aa2662c950b4ce2f0885ea4d665f90d397699e203c9bfdf674326b3edb3f9b3e08c3d0458e9ec9f92ecdacd475b279b2fffa9d65df83794e2d9353ce6c7e53f7e95aaba3d174301b91c3436666ce704c7f42d3344ddb64dc087631cf22c7712286f3dc0854d7c1a0629b12ea657249328737f0e9f3361710a4a84dd3b64d89725b875dcadb90640e7b2800fbe9c79d8bc7699a1be17195bfd3348d89eec543c1703154c673255c0925b61b1e1b01f677119111a07337f36f383c4702d8bf699aa67993cc794dd334cd9900fb3566665e9239a0e56d0362126dd308cd05f66fef4680fd949999c11d1d399a4607cf1a4f7eec4e80fd1acd17c4df490059ecd79e4539c4f1c3ba4e4a97d28d7023bc736742e39ca0eed37dce6c4e2696ac9ceed2e7f4e427e52472a202318982a474e99dd7f5e7a58638da60d69f76e0db6073ba13f2f352fe1e0384ae939e7477cf3a8e4e255c89962ea57bf255dabb53e76e662debc09c534a29e5dca4e64fee3e3bba3547dda7fb4479f293e225a2691681fc5f901481982e2bbf93004a8f4264af3731dd1de5efa29439d2e52993999459aca52f39ceccb24ccb7c6a33cb667b0d66b784a3dcb780fc19e74850f7e93ec1b92da14dcddda7fb9ceed37d52e7a494d27376f764879214065dc7c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c434336da31c8aa266a66d94dbb8a6365a9a99b6518d72531bcd4cdbb2ed898f9a326d6a9d1a52ca27357a766a80fcdeddde52b694cd71aeae7324b8b77bfb1a2ea56c57c3a5cb76a29b3cf3fbe79c3cd365cb9625e864f308e931db766ebabb65d8deb56844e69ecdeeeaf5d8ddddf4359eda112dde0148fbc437cbefff833679322debd67ad55ad6adb5d186966959b7db276ef987326e28745926a59452ca2ccba69c538bd26336b399cd6c66339b3dee314c4dcbb65e829d9a9679cc356d9b5996bde3c02cea3812ccb2e93d9409717f25a836fba9446156f2d27d4e9238f259bcd9f7775d6df6f687ecfdb56f713a1b699e6559e6dc9ab1d92d9336d1ddfd5dd3b44cdcaa685e80fc43c0e66d29d674c31030a3dabb285f734d730ace1d5762dbb6bb6ddbb6853f826670537453823231d3a59c52ce396596a5c18140d3b68de336f139099d4be96edadd2e5eed37519ba2d3e44d13b3d9de431af70a50def9e75fbbbbe6d7e51732c9fe30a77796b1e6d3a74f9f3e7dcea96559db8cce39e79cd99c734e2a6ad5064d03e29be71ee75996790e454f8f72f2b826a4d3b43927a573aee89cf4e90efd46a12a901ea5e6deb7a5344fb1cc5c28135a264eb0f327c0d963d645dc01903ff39739e7f4c9338978b2eec424b2dc51dc9b607fb2ee32936142f36c8a734e770e74ce44b604c8af4d51ca6c5a36291af6ce99cd997d3358ab518d6ad4bd47f7b9bb463f4abb2f455db64a5450929916173002510d9a46c05405336e004616618091821818b4500314d4000c972e7e6250051934914262e18b0d84f14514dc3fa7821f5ac4208d32a2c8d2c409c848a2228c2412ecfc4c0115a6684ac20a25d4e00969032e8010061742d8d9b2e408230861a491b232a90c0ed8ceca241db461ef4e5287d4f1f48c529f9c854b703bcf6d763b6e580832c4e5861443e6c00756326d916a4826442187145e82a16010f0f8cb54d8fc652b6c02d6e2e62fb3805fc05c3012a3c04a4ec191d78fbf8c8564115cbe02488a24970c1dd0f2c40c444a1c188391d879c2ce9310250859424f53cf1160380306349e07bf246f60712095640d80f080323a32e118d6d88451a081641f5859f98c25fc8595afc45900b3d9911f620f3e449fd249632a5288ea4927974e4032d8f03d78eca8c97684f4c000038d8e1ce1ccfc9b1108101c376462601caca979015d525f3399bc42e225993e644004a1795ba80821371f82903e4f644e13d6a122799870358f6c52f293e790919536433e7847172bd8620b2e5c0558608145962db6d8628b2db6d8628b1570d14dcde3d43cfcddd4a3fc8e8dd1c5518f328b12f0c84aa4ee97e7b5951ed1904270407b2fc0904a5a25f10108254d86e028dce223523a8021c90b3122104a9ae41802c6a337887284f4c12173780a32893db079b4bfe001e4175613c11edbb906793af72b04e085214882c0fc1592e465e503ebf40a08d6e91e29255f136f882842486660fb61c400bc88436c03e122deee57928305db4d18946cd8fe21763cf10624233123bff071a13ff3c1c3f60b491f1c517825c33a1b18c3b618e45eab1ca869acb9a68177c87af645f48616af55972e1dfdb1fd547ec153f2589dda9ee5af08dbafc23261cd26431199d32f43397e8185223250f10ea971c92bb0655021ad691958a7b9202816341978a5bd0d3f04d0be63586132b76d4570df2c5b887d647f5d139da30004bbbbbbbbbb5f5e5a4aa0eeeeeeee6e2cdc048e85abc0b360d15eb0d044276f96c4307d66dab6d16caa62fee6c81a67fa128e26846bbc2cb9a4814a719f4231731c2ae3feeec4d41ebfb2a3022e5bea525b2ad52d793739761cc1d14387243501e7ee94f75ca5edbc8e535ab6d4a5be2d95f2bee999cb80720bea0bd296b41a5413e83ff9f3a529f6d2926f1bb8fdbda1cc83d2c1c3fb9b638699182b616c00bdee066e65e405e68567e0d511d6e1151223bc4ac23a9e189bc09125d8fe6e420b417e48b0fd2e44b0fd3d1c01091a13903e1d0499d36f06ebf4af61fbd3b0bdd43c59eaafffa77d2a13af17f1f71ec86715fa2a9369fdb52147d5e634ba898e25d3b6979e614227f9bb2ef57ddf2f2e376062646a58a7c1679dd67ec89c2c136f93cc7e9ffb0064fb3d50877d43d4e1e11f197ed4f4ff4df7e665b5bf2263f3802fa0cbcf7f015d1ec887ac4b4dd5cb3625ad0bfddce8e256d96a6293cc66224d0d9e590993e16c0a93436919f263650f4f0b3a0018ad4d0dc242879291f1c2f0aba971115fd680a29c07cd1730c8ce088466746e322e9fd7a1c21af1c31a148af3bc8e7e41764620df86da4617980e456710c9429095906a273b8f901c3c56b60000afd9cf9951ee4e9ab13635e63eaf436dfdda22c8ce0824f5a534efafe81cdd418d40bc769a86cab44ccb3ad4c65197944bd619eb644d3bede97c7118987aa38538605e5cba1de641a1787add03f54475286ee4a89601d9e1110264270686eb4d0e7a0333761608eb7410219d0c0e8fbf29f680fcd499d8af1e7bcece59b64bd6329f7ed35fd8306c571b05726c2e6cbfa0b58cdd0220fd0a227dfa043bbcea2e6c7fabc002b1fdda2ef7424d235735e126c0c2518005169da3a0bd682fc410430cc7c20b2a3a7973bb98edefe81820b7b3c14e4edf1abe86bd74b63627279973c6e6e41e4b62a7b73a595ec1cfcf59fea6715a7c1780f2efef38d1c1407fdab6340e8b5b8c0caa05d8d45f91af8a8e6d31c7e198cce16f2180f2ef16eb6056da7414fce5cd4d1559fece614c7923e2e71474265928984529390e7f77014aee6e3b5345cd849d9d1fc826d9249b9a8d66a3d9f8c2bfe020af573251487e41a9cb9b1e9be3ea12c929e9286d32afa45ca827e5acb91919cc689d72fcf88b027e1fa5efe275f37bfe0eb0f1e4cf45dfbeadfbaefbbefb36d4d66d346ca227a577ea93966eb4a3de17f4f5a6678f3c36cfc871df73e26d32c7af02886aee5d9e725f4d510172eff27daa4a497d12cf4a8958b8afa3dc4bfb3df7057d620fc87d1cf7de470327ca744fbd2ae5d889de5bae7ea7f170df3f6e28b1c9b49cf864dad9624d8ffdd36ef5a6c7f1a3f0bcb30283c1c0a03205ab632518546c603b1904946128516475ac0c832808ad9282a58966f99bb8f5254ffc1d60fbebc4e956354f6edfac31ff13b753bc43feb3060635e0795ee6aa66b94afb9c879982642740610992c7250972458f2079522f9f8b600446038cc10cc1868e63445fe05188f449a3927455913c330ab9ea413e3fc14ec81512d6e9670ef006e42ac916252c23e143eb1e31851e3676d618b7bc196119e0182a2542240f8e9e2c2e5c20f6fab0120c1e2dc81567c901805c31d20f1bb9e22e7a489e1b2fbf86579cc43a3995999b797ed98663de40b5ab8a911512642f57155415a3ed45022bbe650832a7ff136f7bcc8960fb5f522ecd923579c55a9a95fe790c86c1481fce41e82a5e729c7e9abf14bc61f8f7c72cb4feb7a7075e75956e8b84576dd49d8457bdc5f6fbc0ab7e5de9d35828715587f64aa7fba3bdd2493af5d82b9db2f0aa9d6cb220f1aad910bbe0557761fb3989573d05d60143fa741564ce91ab1c00e2a538e20547f1862b88f77f8877f421de1d7bd3474ebcf2a49bb771628357aec5e68957ae243e9029f0cac7e82a481f27c3638ed34f29088638e20dffc715c43beefc10ef8eca87b79278358d6e92b4f06a5ab1d162fb5d8957f3e54ab6dfc7e0d5cc820ce9334f2073b4f0ca61ac03632db6bd8c17c7e0952ff5106f5b86f1cacdc84195366a2b3caaec106fd73416fde2257a86edd7215ed008a1bdbc148abc34dacb4b192ff5d8cb4b21cd4823ca167fc8a6e870e5a892e36b8cac08a7844f33c5e5aa9263dbac30ca0209b6bfc34d0927983d90e3e7cdad663f67b6fde715d9689dd38857f3c80aaf669617afe69151162bb691e609a4cff442e664c1abd9c5c481c4e9f7c18bbd13e674fd69091e9b5120ca8c984599122eb613c6e4c511af6652165e4d2d48bc9a4ab30b5ecd31367a5fec265eefbbec68cb62fb02968a3f784f7f26f12a7365495a789555d9c4a9c5f64fa56d8ec1abccca14e718aef9b9aacc216499096ec854a71b4624c84c308d66fd646fd8443ec276d91bb292bd21c3ec0d79c9de90c8deb0c8ded0656f58536f4f918e1bde46bae1e5231c37bc72e9caa7cb48aeeb31dbef75444c427b3b2226a0bd5f12136aef96c404b477285c82c4fe903212a5cd1027c4431b0fa121433f9cf6031174f2e67a926d967495448ad126d0e95b23d1d24ecfef8c345482b96b8b69fdca9c26124b1303bcdc626962304b13838845ddc85f7e8494a4d4a2446051e87aa3f175b4f3343a7d5318933deeeae92dd6e4f4e42d222f7abd5eafd7eba5a4a7a7a7a7a727f6ea71ad8f909294604b2e97cbe572b95eafd7ebf57a29e9d74b3acdcce9a94554e46a2397cbe572b95cafd7ebf57abd9c5cfcca260b89262985b05f1a633b4d2d4a041685ae371a5f2e97cbe572b938c6318e718c631ce318924b6b5122b02874bd11cbe572b95c2e17b75cdbced3e8f44d610c6c58c31ad6b08635ac61522945d430222f0ac10f9dc889a8a788c00b5ada49ea49ec3e23e852005ea934830dadd23efb6eedbb4c0bda644edf344effb705bc3bb6bddef4c89699681259ae6de587c3ce8eef70cd9e279195ac6f0b78e99743b3a60fc04bed66fb1bbc40f853ff267d64d644cdd7d0c006304b9ffec73952a2e7c51c27e8ef6c69de2480f725a2c681e525bc8caee562b1bf803886bf8e64d9956078271f6627ba5ed42f9ebf7df4c2df4612f2b7935cf8db4a41fe36ac8597fca4c35d0484f92533c700c0cc452233bfbc7c6499198663572ec53027f18ee5fb967d4ac1f2fdfc4b695e8bb90a15a4c56cbfe6e42a54930ce2a502d09c6cff46d43cdb1372ecefdf9690fd5dcb551b6589978256bc600824def06310ef1311eff823de1dbbc11ca79fc2205e0aaec40b863ee20d7f88787fec11efa812ef0e25729c97ab6892e3f4531ef152f005f182a110f186ef82787f0c22deb185ce89ee8897826018fe8fa31773157d729cfe9d9d710c4310f421520a8261f81f77b4c335b9cb55a89d9d71fc0f65c41b8238444ac119f182e1ff388a77125997ef6e5466a19c5c2505cba3d6681e2633df8f52c30872d57d3f6ac955deab49fac4dc4035d9d6663494a6651d1a673ccd96736b58fe1b4eae75689ce133a82d96bf43e38c992a2dc7c335f10a0f714bc5805ada992aad64a19a5cd5fd2e0fd4493c0bcbf7dff3bf7ca77d412f620ff8bdfc82be07ea97ca36ab6ce727599bcb555dabe56ab95aae96abe56ac15cd521216d30a40d86b4c1903618d20643a24494826018fe8fe30e4d7295f77a25bd925e49afa457d2ebc9555e8c3ba2943e7931fae4c5e89317a34f5e8c3e7ddcd1c71d7ddcd1c71d7ddcd1e7e29a5c2551463b3be3f81f8620c835510a8261f83f8e28a34addd5b2fd9ba56d80b743b2fdfdb2fc5fcd9c2cfff55eb61fc9f2d336c0964ab40df082944b6da04b504a47cdbb547047bddb94496475d0d488414c22abe30ba2117b401dd48275ea10afcce799437a1e92e37831c781d1252f1673754ee0832e2f7f3dcbdb77a9da590f0d7eef0cb94a3d7f87e42aefe5c5a40f8ee7f7b6344fcc87320f33c3cf2ccad499c751351bce3c7fccc3cc7c47bfa018b1079c89999941da19310b63caf05eeebd70d46967aa191ee387915972b73255ca9c3046943db68da965b80e1c07382adb99988c78e5860853a5c551a50dabb4a98ab25ecc55f3f9bd2657dd7816f92737673f235749c182e3655e78661ee6fb3f2aa9efff402057a97757f71d8efaf23155b330292ac097e79f79999719b1077c997961991731a666303332eee297f9323842b738aa94393033a2ec51a64a2b654eaac6e8dc17cb6c5f6ec8d425422d8b43bc7243ecb42dc53255da982a2d4c95292eb539b59f8b53a814f552754b55cdba5477b55771eabe3ba584675fb7792fd5e55375ba3c3ff85dea0b02c51ed005747111bd5475db715e0ae5a5501cf552de6b9ffa9ebf22dedbcedde5a2c19f6cb605e14f75ceef290af9130b8b8bdf0a420c0af1506f3faf39a7a54d9ab82dc22ce6a048150509177f1a1e5c143a6265032d60d08650f699b76ddbdd6016a4b43798f479b1fc5b19725b925b6c6b6a9ee6d7a164791c3317232be5f643408d9b73d2e72850d3cc1f027a280678a76bbaba4a976137c052455b12a765f8b3b0fd1409a9ea59c2760fb8c1ac04ea2ed3369d1e80d19aaf651f15aff8677506c7e9ef71958bb4d5e9485501ba2635af455bb435b96d6e2a9fc136b919ea108b7e9bd8d33304e4efe6dff9aa01787b6ce3c03d340099eb10707e372a81dc6cf1523b0390fbb8da793c0498144e5e8405693ef101235a198fe0084a20d26e70c512963621b852a044c91081075edc13aac4e40dd0d841ac2be3096c288d1cdd50de5293520b9490b439c33881139d5970dda612cb71aa0561b85851fc85bc8a96251616ed8758db36c46a322dc7d16d63e92aeef11880f36f8fe59e8af3d5734e9701a87d16cdc3e29369b979364e6b32ad66b56f00da2f916df067da46b91935ce686d598f47c9e1e28b2696d00c1228d32f788dd22060c2124d2c2122492c997e81d905543cc11cc7c5288d44151bb858423c4b3b96ab70c512732e46a1f1c0118c584233482cffec877a1ca75fe0d14108d630624511d2807003a31ecb2fc419a14988e59fde194bad09a36d45460bb64339494611cb7f88259f02d59e1880b76772a8cee3ad8925350ed54954e77d2917f065d3a8f7b19772015fbe94dc5246a2fc48491a922e0cbec0c4c817098529d268b184b4268c58b25f689818991b38664220ac808c2496e4d1e3b9d0c2a88a36373e7eac30e2008005203901b8c2ca93ce4e0b415c10f2028f0acb1a493d437c80c08515b0185ea20940486245119261818b25fb05219a466b74550b4edc208975a306c71862c820a986a64897b183294fac9e220c289a70f48cd21a4c1c0181043f40923b90c10bc620580113b4e88113d30aa4d0e2d0062a8881530e0e6cd1021d5a5a46dc442c8a229624c3892c4e2c57c9315ee0c512ab5d45d3472e6842095a2c21540f5c2c2c3435c82d965f6eb12c4aef685c60b2c6616bb474d270b15cc44243033fdb21bb03860846ac28423a3d00a3c5f217123be062b928b4b3c4152d26421060acea495779053a02bc3d9e74d54e0da080c492ae8a6223e58825b435b164bf206d501dcbcfeba4e491a24553888758a5065b39bb7e96a21b80dbc93a345232c7d0dff5e75d8b703ebfcb24679ef2e976c8999f3ab69d4bcb4f7ee752846b171aa6bd41489e9e92dfc996cd9ca5ae909d32a7c6baccf17af47a94a2eb8680e28becd1e3972233121c56065cafc4b0e3fd0b6a1f3fbf20999f3cbecbb24cd3be20f1b5feed0b9ad931616adb24b5730fa6529ba44a41c20509254936db651e4cd56c922a599de6c1d4cc769b0753a7eda80753dd2649f25d9f502b4339142a351fa88f5429583a480bf5ca91ef3a9ada4ee866b5e9d1d4acdb3c9aea4e9c7c56af3079224c7e89132de1366cf81d8a43a152343f3e3151a4d496d24ca45ca86da5b340a27617495ac6c019ab432175f877544952ddc871f87df410ab771143f524c7f181ccf9419bf1379549ed98e370117505858d681e3236a1937a030e38e490830e3a1831521f872fc8865b9fc31704c3e7e0a3c317b4c2eb50a3bc912f28036fe41b005b176c7e872f6885df41f23079e0c19b79e0814b117971080a8ef8e389880922fef81e3742e38d8f1e45bcb470e3a387542d91b1d79592fc11f9cf63c7cbf7244fcdcb072279667e5864d204b461d7b5ed918a844ba5b66bafeb66357ba44a5637bdae99ed32afebb49de675757ba422d1a38d23df6d1ea749caa152446ae535988d56cb850c64ff63084a90189a1eb5cd886d61a385da53f096147f42e6f0efa80e05ebf0d7549fe259a4772147fe54f52439f2dbc01045c421625ccd232993b88c3c0552873fac5b5829736864fe862fe847e871f8825a781c56c8e10beaf139c840791dbe20185e876f006c7f0c017fdec817d4e38dc81de60e3b78f30e3b70a9ec615245acc4140f98181f1f291e3034e14c149c3ab32324c2859b991d613f50139919187f127909623389f003b55256652aafd1a3f20ab55b42b5a5fca8cd040cb5696a1bc91c7e98da5678d4cea288daabda493df2fba8ada5477e9fda63d4907fa676ac47fe1db5b7f4c81fa5361bb5a7d0233f11d55b3df2bb505d4a8ffc44aa4fe1cf40f52c7ae4b7a99ea57a173d720b55f608a5f2282259fe18fe8a33ff65f905c98b64ce92e42699c343c81cee971f95395c81640ebb92952fb994272519bd8e90908e5e46de72222f7297bbbcc889bc156b727a7a726a8ac1c8cc549212cc495d82292519bd8e90908e5e6d14c2c8cc6e654dd44532efa4b6ab8b9aa85b1c23d294393d3d3935c59294604b4b30a524a3d71112d2d1cb885b4cc445ec6217173111b788843032b1a610e69dd427a7a68c8f7c46248491491991f09d54b964f997d424f548e8aa239f9a323019913025de57c04ff18e091865c4bb13c30e8c787b98f484e20d9d8444c40b2e012d8b3434cc5f0f4022cf445e8bcb4a1a682152c34a1a8041c5827f43dbfdf100ec88a40f94efef94903eecfafe8e03bce228bebf63a279188aefef988a29bebf7bb90a0b57f924288b41c01f78179797ce5250e1e10802be7fdb62b4458d6812e538232e898ba15aaeba0187ef4725b92a87ef47c55c65814ff2375cf27774f27787c9df9e18fe4aa52b61572e5dd974a5d3954f978980fe729191bfeceae12fbf90fce5a3277f19e9b2d265d8e5a5cb4dec74f9e936d1eda276dd7edd46baad741b767b6987bfddf480bfede4c3df7eaac05f27ba7fbde887bfee02e2afbf74f8eb478e9443751c6adf505b88da48ed7a62468a00041c508f34800108a8cf830e40fc702be0c303763880010a60430d04a061860114099241002cfba40723401498800416a08004c4c0c4c9922a1d27493d52432895b3565c61c5774ca54e2ad5a9d4a652d976736629991ea7d06c06c5f4188ada96afa834b3e27f9eafe02bacb0e20a6a8508f638994a959be50fcc6728180ab107fc81e2e7fd074ad5ac08a566768aca4655ea1516014351a765292c1165b1089ea9542652e62c116a59a6f21d5341058ba04a39f2493ceb8888e5e7e7a13c1bb191d803febcfc827e1ea8d9a8b2652a2a5b287506697fc490a9a8d2769907a5ba95a262e12aa460e1107c12cfc2c2557cc7505487a28aff790ec177a82f884320f6805c45150fd41c02b63f95a2aa10c1c9503015f5ca91e72af5a9b014cf53882108aa142c3fcf20f854ab7978caf7a7a4340f7ba079d803fc814a1d673e4b51398a2a59074aed9f1ab2f753c156ab65bbf67e2a6db55a1ef89fe729df755f104f117b40f6c077ecf114f6c08f1e10777a9ca9f953a5ed360f4a65cb50c8ede7a1546a3bf6a054698778829d68e2b70e7c4729e5259efb829803cf7d87f28680fcc4a3be202e1ae23bd9a59c5c75e4fbfbc955407c6f4afca5447fc10dfc0d93f8fb1af83b5a1a297f772c4d12122f47fca516c688bfa08559e1a5ab0cf0e34b571de071be1bc9554bf8c9554c86fe82366cfda5360c6784fe523bf3c3c7cd4b5725e05b78e92a057c9097ae5ac0bb6023d62440df15f8fe9e23ae7252444c4c94bfa025e22fb532321980f2d94b5715f9efc1e367874a02eff3d25513f8d54b5751e061f8f6027ca2764445b563a276ae1ebb2a3d76463d76567aec5e1ca85d163d3af8ac84782948245e30dc8078c34f42bc3f6a604b6229220c0931c976f408f1d2ce08f182dd534bbc7448bc5e9190f8b58a68590f8c225e9008f1522f03a996859202aa9b1123dfc12c10c40e30db200ecfddf01d50d58e1cf92e06c4010cf0de17e3806ab664c97744dd937fdf8742794fb681eaeca187ef88fa876f6ac3d7f0047897f78abeafc836507524481e70e42a26f707f0dd0ccf7d3400d54e9224a82b725591eff78eba02323cf7357545607f409559b35e71e2e43b224f0904b754a75ec97691e310a55a579efc104fbe2372557fe772950f6fdf85f5dd4b5709e0b92b31fc05be75f87ecfc95546bedf7b72d50edfffb55ca5e4fb3f2257f1f0fd5f91ab107064c9f77f2f5725e0fbbf235729e0fb3f24572de0fbbf245731f9fe4fc9553d7cff07731503beff5b725503beff8bb90a03dfff35b9ca01dfff39b90ac9f77f4fae7ac0f7a75aae6af2fd29225741e0fb5345ae8ac0f7a75cae4af2fd5b92ab9c7cffa6e42a09fc04be7f5b72150562f87e6f72d593ef77275709f1fdfe24447de2a41e719cfe2675080c54466252f969496d25b5972e503d88ea16a88ee438fd40d4fea1b6ab72052afb502950275025509354e93811a810a80fa848aa741c07d4065406d41eaa749c055405d404d423553a0e0f75876aa44ac7d1a1e65071a837d4035403d402541b6a0d950095863a431d402d5283aa0c5500553ace8f784756958eb3e36d958e53f34055b262a8a1e3b4cca1d191e3c3191c37bea3944b853df6ff10a93f6c61a8572eadea95309f7aa592bde1954e3d37bc8cc4532fbf5eb8e165277bc3db4841eaed237bc3db2f7bc3db309d7a5b290037bc4e04a45e7fd91b5e3fb237bc8e84536f37d91bde76b2370ca0c3a8c40b1a6a921c229a1100000080026316000028140c0985625196a5599eca0f14800f65aa52605e3a9347e33487611843c000020001000080c8ccc8cc4c0400d289492b76ef421b1e1371a11537dadf5190ff0cfb6f7c92a0bcf94cfbd26523c3f17ff0ce2e2b7e88a9707d92a3db017514e9fad5caa95905b610280b8d7c752a6637d84b896c46d6e8af02f0b4444c9aac0edf201c0dcabaf6ccb2cb07299c1dd93545a2a9302389ddcfa62cbbd9f51d90049732685523d660def18bc9c2cc476db17e504cad58d474fbd8f87906a49810a49c6584f0d850c1110222420c249625189c7ff13da43a08bcdaeb45680be293ffa9ada634f5865d82447220c45058db8cd00671d476dbd9d19dec0303f344440d61e0209192ec208fdb5caf6b9b2219a97642b38063bc8ac4df7cec7f7dede6195d71803f534430c80a960a1c14c8d492f793de51b178c41863903873bb7a2df7528a2268f9a20d27fdd337fc65eb28d23a0a71364a6e0fceb2551780e91cea10ba48ea09e68b17ce6309151f69be10945a29640ebae83e068af3ec0692108c1a53fd9a1c317687a993e84e43d4cf1bc2ac159d50d5f2cadf2ff858f6c072d1838b9eee277440b9d3e6955ecca85a1b3591add1e51572b23aabffddd420fd9646880690599a31bc4c0b6f24fde6929dfbf88b3483dbffcef9ec8bf05d0c1631a90a34d4e07a04f433b391e4cf9b358294f03ffaae77d04973afd9679179fc281a80b53125c40a1235d88b04f3002c1f3a5ec20958ed49a964e8578c6ad2bcbce406df71eb89bf505331b6309d19a69db26130c223d3d3b53e097c801a2c41940eee087e02f619fea3027223dcc2cb3af804fd14626faa629eb985ec7a354430dd4eede4259c1c317e44e103e3061d2b73d448ec2892b42acb285f70e2acf236963dba9fbd2e31b0da89952a15c5c2b0a6520ca7032162cba8ad9cf8004b23ed060bb03f3529814756d4a86ea56df9d1af4d8f761be2f7a7d2479f5850d8a0c02f417810376688d2f1093ef816c053f2a8482305bf04c143c0edc3800bee4e290301673ba912cb12b18fe2298cb7512ae7e234e162d227e90fa00ab0ac08cc291f27f05f703dc42e221d0bce227122c11abf1f070d0258ed70ce66e98d2057f421d3dc356c2f6da6f0c981a9503e978d16fc10080775c72c500458a20086c2480b724caef1017c08538407232ceecf55d5589259ffbfbd6a0dda8502bf010720a1952241f6415f9e1cba2887feee57dea2a8cbcf67606d416930b06959e5a2402f6bea408be675f57d7e48c1b12459aa895a679a8b0c83db4b0627dfb23d9a98a13c45c5775e56802e2dfbb24082c51b03490361dc428cde4f9e45fc4d1cf4b1911b172d6a4604893145eae341bf5440664f29c6d4759b788587a7161c4b5f1d4091450cf1a5c9871e8b561c55d0f44a90935e61526e5e2e2537c56274a3752e8dd30a44b124beb20d3da7af253e437b49e02c7e5c899158ca7424ae8198abdc8dbc7a6229fc24aa6173562b680bb7f86bc438fe4aeb034880517d06b840c2c9390615184712a76f8acbe213be563add54c4263b091c309e7599c75d7f1a17bf769c734687b1adddcc440525254b9dc754d894874c740986f5a16043bece26a0ed11511678d504e0aa2bbc2e7a963f0e41f7530e293bbb5ea30c6634828f048a89735058ddae83282682f814a83f3e52c37306c7bce0f027931cf057ba030f1fb2d3a0ac83fb6326487036a34c51b788887dce22645644803734580a7dddbbea3955947430a5a05103eac01f4cf396d718e30f70f519e19efcae22a6937b7039cf20e0c981e7c432e3a049c1323b63b5743a1c393819cf6ea146941cfc3bb16835237d1a0f2c2317fab9db54076c8a815f511654a541c622a91059302c5867553585ea9f4f1983104031e5a052c2c00acc5bc8c12ee4a28a005b1c75c076a4c9485abe2d84091d0324ac845f01ee29900d96e562da34d168d6bbeaf17832767f49b4752bc1aee25bf9025193c1df00ab2f808fe3404a2fc5bf34074491682dfc5b896b45e8a5ff796b2c9138e364bd3027c828ad8a6ef57372721267582bfa96691ae1c7724035a0e8212b0aebf3f378dac90844ff81b43a93eb6486b4ce27fa3c1108eb075d620dde127b76b3febd2b778be98fd59456144746bdf5633b36dc0628ea2f2ac4949a160ea79887ad831fa2d2e019f8d5f5560c5bf6ef49145e5c31fa9c8ac8c0f9ba923a9f48092b74f8cf2a55d960efd6e300d2c81bed9d6b5d12504da07492c22c39e09a8256345aa4bccd5087f569ef5d54c4558207b221b0303f54d78fab95d88d87d6a4e6f63e387bfa23721c1f168f655c09d9829ef9d88ac3d0865754a62b0d2a0a20a743d20ea154ac9903951193e31b66c878b024b8fb1ddd03702a03f0d80364f82bdb99c40865af5649cfc6f6aa065dac893dd650cea204c5770a8d8ee335480bfa2ac1193fc8db026014963bdac91f78a76e7aaa88dba6a52444f42fe40673438e3b59d4cfbe1e59dbefa6d968bd490af90b0ab1876fbaad1f384f9078090fbb3f73bcbc49130bbbfbeff55a1c289042aa15fef1dddb4bcb386dee4237c4151280eafb53147bfaae80dea32d6a72c9442a3386d97588074cb5be8b6abca6108e2033a0e85550a8bf122c309ba95c467eab691b3d71cf131a6bd685edd222dcf7810d196d12357fa0dc0f76f98b60c33c033ca6a37ac3f74a546f72640dcddd29458141334439b20ddee5f4b8438edd63e2b60d1a84a3832e210087d05c5f82880d295b4efb2059959a12197174e364762a434ee0e04f1a7a4f616eebb861fd7f33faa1f06eb90077b39e4979b085f304282c9c627ddad3c34afe7a4cf31ff42f3ce3bcd2c1850967a0753aa0ecfbcb828b0e75de0d61a2cc912b9918372117021a5aa0505962bb0c41a1bba60c06fcf570f848ac95072f7751ae09232ba0e5744dcd620c40141039032ed43dc988cc52a8f540548ef7194960d048c6d180654504da400f5da6dc55f2a4569d6c2e88aade1290f96624ac91d9ca2674e61d4085d61d668a4e202e39982a53ef6a1d616b9452b0bcb07d4217ddbf17774d2337c5f95250f6efea221eaf2173e10fb0642ade28248267de43868a2d1446054e7f0ae9667e9f14ecfa1ceb76c7bec0d2a363c98c7d3f5bcdcc09453a48f5ffa707714a5e5f8580cc8a7fdb4a20527d7ab3625b5b0158ba32d92643cd57fc3158c24bb1100ebe240d968b148be24696468409115fe2fcb8b8d02368b18bd3024094aa022d243f2d6e742de1291802ae2f3e8297402c1702da16cf424b10fb0b89088cef0b268c12867819c6631013a1545b7a1efbc6ad9f1f5eddc1682894c06c0f6214814cc893b4c313d4ee85717df2842f10f4704e7f4de5e981cb51d7c4bda60f06d9126686787f91968c3d37ef237ad9a50f07f095167e6f75ec7b8ee6d83bc3f7adb83d2e4c7b56d226916cdae40a306ebfc41865920db9749770390e287908037be823293176d07d4670ee87c8f72254cbb114397bbedca355d07d6cc022670e1341b90811e4ae1b820865e17b742521c88c41b4587b965a518d4b9aa3b0c62a028042d65ffb81498b1b10951c5b197437ffd59b29d9a1688ea7f2529c4a4f4c0f1548af10e3e6fe096feed937e90d5286e891fe435e358e6f69bf114d8ae3912643596cdce2317641998c71d9e41c0bcb625cb398f911c5cd03a4efc8f1b0bde336f62844af4c74f403c7bf66a87e935bb5bdd5820b633a14b9cd210d02741500c0403e288257f14b25a0b79145d059cac6fe61889c7df0859766aa5c2ddebcd4be4444e1b6451b3da6bc5ad34a2e40599422bf8d6427b04728b2882016c4850889b1c44f7122002000280802404044be79b0460c84dd58db1992d1c07e5e2e5bce2ae13a3aecad1013362fc95859840993f3dc00f5e4450a86198626182d4dc7a9537da768c8f35a57363e345e546554232d1655e6a0475ff6251833260d190874863a6a1c306bdd42814c8b7909330ccc122c174ecb16251375274d37525f7035448330a2575e9605b34fa042fafe99750906cfc738c6ce2b9af9a051aea3a2ef02bd32be853131468d152361ccf38663a29327e3e978124f0753c8d4514079cc044d42d3c0249a2954481e9b80a6980982496288ecff5928a7df0308944d75f224b620a23a114d5ee84c1c61e2e48a920c3db0b90d93c9610f4d5d0e3cfacd6dc307014f8998db47f42b01650757d20495d803d5b6da5a44e409c50c04d19a5724b4fb7b6533e398a41bcd278c45f49fe03a7e3d0c054041100080253d6ea70b420350100a0650529fc3eb42d0001244741163ec94a11388314c05b0db020dd2086c10320083ee00195402d020e925867b77e666c924cad1776b42a58b854d43751f066fa2ea2c0d8945a510877d8cea5464a94fcb950863fe5d2dd83b53df3eab136710f7d615ac4d11b3b4dd4059065f61448d28e36a94e248ec6aa9de19db34bd6e08fe05b6c879e1869f6f1f64cb213f16cf74ce34d37706699cb934df480e6a8fb6231ecfbb54ae1cd74268089015d523bd42043db242041a5dee4db71e25f7445d964950eb79c50800209df1b00330546946495247e848024a819200b148ba562ccdd3eb0e72af153112e8af2a40dba40bd5b034945c05d05de8404ccab918d7212a4a9ca2311a2e5125eb99d920323345ee55109866d7238d55e085b05b1dd01547ec9724f5c337f4580099bc296fb60faceb4ff07298510d6398a6ef085cc2d7a6b422fe96802d5149a4c0698fad37d8cb9d7e8e75c707b354e361c0802dc48e15f95e2027539469c95d74b67d4343710b3d1135d41fd668b5d850d6104006634160f172484bd159b4941ddc8cd2b7830a11930a45264e47541f1c8a883dbc16252ddf119d2e48e2b42b2f66cfd226cb26ae706d061438db02ff84c02d11f40ad564c8198303a872acfbdca4fe6932241f7daf0bea3d2172c97f2b59b8008584fe19d65ff8cf4176b10aede660c637ea57be4d687734704ba4784e0cb919f2fde6235270796f0c610e5f08eb4663c2159bccf0e3ccb8ca131b976059113f646530dcc9dc91016b16e0b23011c8d2eb195cfc38e4da9aec8bfe959b1d200711fc3e38d55791204532e525794e9bfa9c956d293afda852bdfa068a5fd742a3f84ac7f83a1b0c896472929635ef2dc9a21802f84132586cccc30526c06142157094d5a5e93fa2d5757aa09588c17150cf92a6d601c6f9f4774dacb420c0320d4c11c992377d54343704fcfda5d32431374919198417a8b95ff60e1c46542c92763bd1bc4e3a59cc0fce745abd3a3ae2eef00cd94fbe20176254a4b272c6165ff988229ec2a50b6071e0408cf1422ea51ea57f01d1c8408ed81ed4949421959ccea89547e581f8b1e851b86c11437b147306ddb18db8bf0c61aede2a46e4867fa7f373618fdd2272c67a97777ea7e0fc709e0435b4008f77b52e69962216e99f80fb91b389d805e0572f28118f1eb08e5fa1f8d571e8734e5750c77f50ae1d2db3ba70f5578a45714c4991495c3ad0323070bb930ddd87bab964906c5ccd0508019f3c13d86f5b401cca14a0155a5b032024d4a5e718604fedc64c4fc09393510f2ac03b70372cc32d16c21d4a60cc222f9019f5c67d2bc0dbf688cfadc5f6b5c0b48399a8c515e3db50282d561de0d8d18260007c682936eff1ebfd1fb0401959316d34e21f540106eec7cf5662af1fe1248e5ea0b1552ae8dd99cd84d258917427a1df76e0d3957770c7fb63251d46a55db8fa292391bb06b615055037fb7db7fdeba171ed558b0f837d738c30c7c1c2d8193d5fd485f257f59ef629f6a71b502b1ed0959e060b81274f0a2c32706546a40908c4fc5fde40700ec10f94139e5d7595f09b40a7e6bc651ccc659784797795e0c5a0d50345038dd7bb3e0e5832d47f52b7108cfee309e190c8b62784e284f9e8c2324a18902ef4741554520768a6902e4e0dfa1f273c004a227f1c246ffa93638937fdb879169b8f236dfa9547419bfeb1d0f242f18c09e171576d9efa2d360bb3fe564de3e4756aa991fa9b475c076901013830f16fbdfbb3044c3850f7fd286807b8c0b41e6bf44ede3b00fb3d5cd1c4ffc85f75c45fa75d64e1c4276677a25a1aa1c77d9742c55eb92a20d2c1e57e952f5e945603661bb14a8d6ed9bbcff29e8c1a0136684c19968d3f487ee8b9cf2a1405feb2dd95c0e57c7d9bd9b19f5e8d6e224768aa38f5902ddacabafdcfee25d6bc116de40d27c558ed611263a20ba9094b0b37487ee9fba3943aa26df341eac2574c14bd7ae300266a92135ca122dcc54363e422e98d7a15d48b155230fe8abc7505560d1f1132e9e015b29128d646af8210ba7e38c505f39b063038cd361857f1fd5db0b97b0e3ba69d7e0f729a4bec38ca7a15cf771364193602a753c43bc22ba9ffd21fb4942e048fad035e3e6795b8413f10a0b4b6310beb896b162194ec349691092300430046008c00c01f6c2ea0aecf79822b54ae96446de461b1125ba2f2f1b066c4d9deeff462f0d508955c5676186fadc63abaae289b7cec9b6e76d088a59c53cc56728d3b634223d84348c69002a20d388ac405a55416c44cdc9af6db477d4116930f8bba99874a8b9b41f2e8dedfa0be32fadc8813add96f6b1681d5a3a486715cb88f4f3712f6ade9c0854422b382ffac6d237fd32c5b3c0b4d95c57d2bcc406c7c912c1064d3192368b8bd03a5ccdd23721f011ce2d26318836ee4b66a92147890cf1a33d61f0e1d1640ec8399dc9f2ffdfb820a5ca6845044a9ac51366475175372d69b3a0c3d051619b136795ce882d1c5fda1546250208d3afd723d902b4051b388fb30292c44641510aaa815306664fb381c256d90963277dc02d115ec2e2db66d3c779c4929402ea22c1572efcaf3e9970a5789a33a0a99cf5036067622ec3036ae71276765bd3c789ff72d6cee5f4359ec5745c07908758981fed86ee7f7df5e3af96c25e3dabf756b02a86973580e2474df0410b715d7c79438ce7142d00955e917cba70079944a929684855b200640757a70423aeb6ee89fa20fd9259de14230c25d479b2b35bf807ded2b77c3b49f54a79d1c162e3a9923340b706d69e8eae8094189c8572c38e940e609f43e6040a6354b70895703e9f25fc289a32f4be1d15c7e6c8e00da16821b9d12e09745772b1f42479c8965605e2d47be90f74249da5403f6d623a17ebfb082e7af52a4c1dcd9b94378eb2fcdcea628a96bd7618bd40edfc87371ae257ab8a50fa8a20ba20bd62720fe3df4b68de28a5b6502778abf0162ae22f1a1070f17d4e4ccbc5574913dbcff7ec4f30c1980d65ba5f52ed8998c5cc2dc9341d2a8cce3b6aa79f46cbd9c08aa80e1e6c91900f88b5d4712b74768a7e0203d479f1925195875d1c58e80b2b3b2fd225bf5d1fc05b5b07856259ca41c7fe0500b21c747b1f5690102a09c31fb3403349321770a885717371a96a8393793ccd5da6b34ebe8463cf5664bdcdba8e7f966ebf345bd42282d862184fd6e52747a17c41c610e6717c7d0b4255a411f309da0107a22400133e6009dd5a79d7c54edf1b2a2b8cf3b8e27e451fcef745b8d371f51fd665a65551a12ef8c6fa357d2669a8b09561e00299d2a916f23a7d82cd5e24026d5c10f47420ef7a05a31da78d8203baa7489cb3578831650d6dcd2fd5a0d99a6adc4bc52b4fd136c56cce97361175788499c01bae03723e8f02c654e2bf3eb621d3145b68b94b8fad8be24ef304415ecacc3dc1087b0c9b4b3e103925f0c43a9e3ea6cf3c7e7211560bd1bdb058845b9f20215af041c8397e2895fb8b4c3922385be94cdeec10e025f4a66f717bea0d144eb7858fbac4a42f62a6b34c10b126a306918f18e7079fc614399bc56690c8b01784c5ce0632cf8a3a3d360566220b5451d3538b4f4644bca883795ca137404d7b08435c48e4946e5576bb3817f2d029946b3990702477a4acde1040708bd662d4637882faa2ef601d8ce306b4b875fec4704ebd798f82992e58678686474f8df9d693acff58e41c298d8f04ceabe61d55f7468a12d355e5e8366445568317633dd2c1bf27866bfc87855e74b749855f92e3324635cbc1dc3ecff8ad952f668248143becf90b02cb362e02c97793630f0cb450bac099976f1159c03a9c4712adc05168fd8ab7185050743bec6308dbac376e6091572e909d5c67ceca03c6b34fff6e67c36803c3f528412f94fbb1a7b32ce57f99dc9c596b54434904d9b62f57a497cad5d5a03066ad9f5cb2c628b1d151c0584f68ce3f09599170bd67b30f496c3314ab729b5615a530a3d9725e6fa3cc9418afbcb9f50884fa692c666956fac088571f21fbafad450ec2b2c5365c96709bb7cd008148d7bdc066e227f1155cf28c94001010e286682d89d815058240ccb4278600b799cf294a9d25fd8b7e39f68e9800c71fd6e1f85fa2f1cc43598333c202d5490120f0b614f05abe75fcf1fc188a1cf67fdbb21d6236268d2c161180efb6c4693e945884181f9e98d9ca8e074e6321a39509510a86240b62985397af01dd6758625999040b1da87c23d1c153e6ab9c5e452c9b7687a7aeaeae5a702dd946534b5088b83f09fde0490a5f26f6d63d2ecb38c25adb80cd8c0852db9a296ca0828f257dc0dae3366c37140d87ad9cba84ee0c32e6486feea59d367f0339a1d51436b7c9ec0b9e811196f6ed4dd256b9c1d46a3dcd187ab4d269a026529838b21559ae99a16b543d575e8d23ac53c12840b4afe64a04b6d34faa9c196e8086bd2aa0a9808c0e986bc69f9fc7f05ca05d5f2ddc1f8e48e91fe43a4ed4fddabef7b173e2eff45350ff93fa01d39b68a938637dca53e555bc20f4a446b414f7c1900c9b608f6779ef6bb406f921e60774e4798268dc8102ad5bd13f33e3723e5d03915231898b4062966d50edc7e64963eaf1345ea7a497cf0f22f2c6346791a85528a7d347509aaf0d7953441f3ddb25f85975ba76f3ef14dd8115ae48a1db910e82664a972513c7f494808dfebbdeaabaaff15e89c9ec58f91309e6bc0a4bfeddc53289dc39262ea526855a605d9c9be1466c976d9cd65f2b77420262916497539a1471da9d0a43dd2fbd6e8e4b3b72453f3ce2ca8ed1d380e5f0b4ca2c24d4a3a9da0c7e7f8a0c7c63231497361edda7ed48d09d9ee76b502693d8f8ef2dc09843126721e280222cccd43d27aa4267c0a118942e325903000b7e0c0d4248d4e505fc218402e7967f21ba7db570fe489e391d35f9d34348983709335d7999d2a8ef40224a45338e9a4d5fe1108d4edc7db88118ec1aa6b18247115b49f482978b11520464207199c499b4cc18da4e7291d49b72ad3bea784bb67f31f20562734be98d4ca09d9404a34f87e0cfaacea15135673ff1c9ed58846430070e7f46a86b12ca16cccfe8a4c033b8820510e3e0840ebf7f79ac275da787b1247fe283e40b5c5a5169a6d2aee74626118e6be52e5fadf1ca25ea0582cbc6c84644c6e35424f6b31f737a10a96fd280626645bcea4dc7a226a79c0f6fcb12104a4a348c359297c1e091b21b340508b51f6661813d1fe4738699264f54af010e03d0eb337b68a800aa1fb52e514355ecd7925f5dacaeeba72faf6c06d39096cc533b8490eab9168fe1b7bf8e8f8644b80d3e44da512cca4259a4b4037e7daf918553e201d6e7ff6a4d53073849b582c9fe8f8421ffd42b6b8a76de4469e2db8c331c97912162e77396aba8c77c7ec4e0e3809414d2ebbbb62fc9ec0d1cd382903e3193b7e80a3fbfdc4c222aa70d51b9cdd84caa137c32fefa6d577312bdd6b52bbbe5c9cb67a025d7ec59d23d4dfcaeb684f1fe36afd558a8c99c75f689c26f72f4f1767276a8cb3e80c4e842d3695427590574a946508d75ae7e6e4b2d1ab94945934ac6fdf2410faf68f41d9cf5cd930b3a71fc38f5036b6116f8aad3267363e957367c9c168b86c4434b5a8dc5699fa8864d02636dbce56eaf669e46f97527561d5481bcf45c5d6d0b1478d028f8d8d6051fe49e1e69ee245fe47e250c43cc607a1656e38857ad8c34aa896e208e95add57a12ababee3314c7fd817c06e7639a423c265b16d502aa4b149bf28409383d7c21abc0fa554c6a3e84f4a3e6de0ee50139aa2ee2df74827e03c82127b23b37206a7706f67caaf1a55316fd0518d80f608bb7aa6fefe73458a804e4fd07335d13d2162e5dc1ccce7859fa833bfe8b3a2434185c818f4e2804105b870d14706fc9a11cdffb2a5d070f1fbdbaf1aae19bdf53204ac9cdf649dfb6680be6aff7c15a9728b9c920440c144a0e0b5908c25ed9b4d3e8f5646da75a939fc9790969a629cc1bcf03c2220c353572c73b6caf6fc64b5915c56b5bc8643d96ef0a5067d80ecae01d75a0f82181a9468f12036b0b96c28062bb850428c19331da20d6d701f3f6322e003afc5eced5e5c560a58a6c486c71de1e5a10e9228f57448d86397bf61caeceafafc47763bcad05d72bfb5f29672aa949fa4ea965e84ff8626b9c03f4d022f70cbedafb22f0fcc4e2c8d5be5b2acd0f04f81008601db1f34b300171919f55396f195bd2f4cbbbbcbecf7427ec934d0edf8caa224241be96c56894c6d2daa679cbe12f717b53da634d76019bd3a6bbbe548aa95283de1c0d291bdae4d327989f3647a35ab760b082a2b11d77b7971642f86bd2b99433b1b0323fcf2011ad1b66558ecc0c280ab8832fe32541aaf688c25d5852f8c144703bb6dfce83bd78e9fe5bb8038aeb03ebc9513d7c4cf7018d838b4f69616021c2f8c094e0a3be21e6f1707d3ae00a0ba5b6fd23b0b2d0f04bba2a37fc32a2ca30675534aee32a444c58e944a68393ccfe424a1cbe55873d2fe7b80c49d1ae689a1ce5322f5a91078c37757b4612ee24b5bf3abee2e97bd0e3ccda79dd327439e00ad482f3ae5e88da33313cf3f6e58ef2ee825fa65404630f9c82ec703d66fc5807ab3acd283a5f73e8c8c38bc453a6736219f8c4b40c09ef1bd74f8b35427531e1d908086d3b0eaf7d8fffcdf7db918be3afd0b9ade8a6dd7f77c3f651ef25fd62320604cc5c952bbdc6698f7c9947f43929e9e3d369db9214b6a8707b5d683e7c88025b94260695a9ef54ff609b24e1a073cea232dd7f1a6c4640d8a2812a73b87bdc8abb08313ce62bad4fddd64c76d6147551b47dbaa17a6970433cd36a3252d7061349372dffbbecf88b969ae8159f5974f706f3f511de7f5aee8d2fa22a8584b6fa3f6e7691ccb0774f21f7d4c767e65e4369af153e9a83c0fc98c5df22b1b95e0922a46fe60537dada4c5e7479aa938a3a4dbf9ed9c4a585655224e609f39174b4b7f894355ab2985a75f08558981e428fb45c10d7ecfafab65fb2e1988f1d83c652a800d20e05e24cb5b4aeddcbb83ece3a2c34dad9d0b2ed7e751a36e19087116f843f2829cbe3fe51e48d2651e4acc1c0ee18dfcd188a1c4034aafbabbfaa676f7e8beebc0ee1fab9154a6968df11650bad976640554d0a70207641075609c6101649a03a86aa625fa85852206004f4f1782204cdaacbfdde6a69f106be0995fb57bc2a2621924660aba760c3ea80a7de411a560f11751a666e914bc793a8bc280d4114fcde17711fc6aa8efb8a9cc182821ab3914280532f9fac638716055b713f720aff52f4e1fa7b2e889d3907b572c12695f1937dcbde322090e4ef78bfeb5fb1917879ed7c111c51d199520bd39e9452c8e08b8b231c8ed51530d23a8ee5eb68a5e2f07673158852b65e609d59b2aaf38d6c8fdc3b55971cbf7a2127de441eeab65f79faae20edcaf857a24961298bd34b1dcf194bd91fc1fb6aa18bc6d585d5f753d713893f5afa9836c9a452aa50d109f74c4deeb14ee0ef5497d9893926bcb90c8df0a5bf9198c791998aa26ef7bba18dd07cc46a761830747b3f84e92d1392a7a789288ef46ac5bbc8309be118dd1c2ad73cfffebe50fc0ff7b4f8ea5b6498769f90681a5e29da6d8f364f7ab758b20104c1450f7bb9b6016150cd463df7fe7798b9d2d8cf7a3f1430f0c18cba919cad11d0d76ff8a8061bc1407da618a6f3635758ab44df102444507438ad3696cab38393dd4627102611ea70b369bdae9f646384ac26147c016334eafeed7507cb5fb9107fbb8c7d05028094e43fe9b5c075206691f1a362a408326f624126a8e09163342087fc3899a33557fdf9acb6e03e70c750d2cfe33dc1a208b7f4bf25878722981e6eb1de70360508e614d18fc5528a6f62e895f4c888fcd7621675b7e25c16a7e0536ee742d56236bc6d16e9c88c66476ab9131cbd6fe95ebd4c040338549041500a77742cc480e783f1d932a5a341597f9cdb2e0e017464d224052d47f5251e9db0650ab8e49a6c903bebe48458ead156fb016d176bf957f2d7d1d84836f882fb474dd6bd520e4609a4ca432eaf52008be910007b65517a4bb8a24f5c14fb261cb3dd87a4d4e41f02d78667d09843dca73e6574d517c8bd77b310aebfac5a8ed0429b754ad98ef9779226c58473ebd60538ffd5a68209d45f87af8beb1e706d3d2068d04ee8288eea95f1a5bd8d7a3241417c8786cb14bb1c4035e34de51af7b7968b20e0954712169dbe6ca262aab710d23e9745fdda96eb9750dd3b85bf9d175694e439b671c3039f5aae69ad9ef219f07161a93b902021bf8effe4ad7add4dfc73d0b02fc8cb3b825e967286fa0b58144d6a13686d015241461655290fe465a8e78777537fe14653e3205c870e924962946b923c314c7d3d92ecd6e141f9b98b3745821ff9c5d5003c245665b47e784f3ac97ec9492a0f7a9c66eabb972c6a5e1f01af1986925185863803e0fc8e4b5212c5ef92a487042e7c86b655893edb20b22cedc35e4ab2c68b7abb607c1eb3436874b1f95322c00a87ec7d24d5ab25afc3f8a7999a040639a4d17a85a1996a0c807f4913b385b08103fff55eb01ea5ab0273a5e7eb8f057d0d0f397c5fd43e7e7b5f9de243d7a7a2b2b4be9164685b45cb5047e8a5a4707e7889e3456c79001af6fabf803234d5542613e979987b1f1b1e9b4f1bd0e7cdfe952d87b03cc70dc472c0116dc1dafb72fd0ab4e4a57ef79d29f6520f3c5e013d1ce4536a9d505cf57a2666f60939e7c35540a0563b144f35ed005b3d35caa6e79513e44deb921f6850ba60c4a8afe664fed5b4799cc1293f05176461c02e56550da8a27e542b99bfda1a8e83b8ae52cf32a5d595a6ddbdfe9c6bf8abb0d676798fa22b1182c16c2a4f40a35ad48ba47693f1d47e11544dd83c7473f7b8e106d5b44ec32f5ad8707c34740e498772902388263ebb43dbd0b48c0f1216d79397a2370b550ade08992944a9c357366920711e7afa7a9fc0d081c9b1d1e3d9b16fef1232be06bc502d840e338db212521c60c1ede2137fa2679ef6c8e94a22723edc0b113b20813a4269c1f98777b7f5432a5e9fbf98a36f4951d2744f53293343b9684aab644db15ee7769a11eeebbbd7b9402f151695b88275f347ef9e7f4819e7d0a0b956296529f8d9743220e95c498fcc4296a052fae1bf529f9be596eda1aca494c679d120a3ea5680fa27c6c9c2489432a2a0370a3a9f39921f429c56aff32c8df9214c93ca39aa2b1c6ea2f4e18f9bcebc315f83b0162efeec6097e6c1c5822e7230f18067f48851d4a9b1c3aa56bf6ee2bde3c66e7986b4f34e3c70cf82630eda6172c15ec69442a80b818734ea410d5035e9e0675ce686f7e81ba7d332abb3451078b820590dbcd6c1b6086e0d5d17b9f7c2b794dbee80a3e7076b2f766b8368c767373aa6d79c6aa547b12586ea2f41bb8f045dfa18169a275756a02d16cf5bf05c7f63f359020c5caec0fa99fc6e5e887b92abb4e5804c8a9af457de417441eeb7daa7eb492e8a3c11e7a6668d3e9fa85b52844ccd750ebfdb08ea976d7db3449f7147bc1942e26d34264e4fb369aeaa6ef8e1bd8fb15bfb35898fa479aff60c48e65377ce85a8dba08c45c7f764114f004dd064a545d146a142607de2c6def5757f9289616bbe97de5758ec4dee750dd05241026296d9f8aa7af389d2b7ee83d5ad3234c5aec53900391e61b5acc6986cc5b50e13ea992e7bb6cf8b164fa68bcd0030283a84642468c172f2cf88a5c31c4f91fc7cc68cdf222d855f3c4dd42cc63e01a3956cc6e0af9db918bae2c9a7d46e906d0bcb98f3818b688b04e9a78e71c72a430d2611a4500bf506fe296e50cf661f2abd11a707fec2e865f85c88a34f74ad9135c517a0c5c8e83812234f1f435a078ff35a023304a492e8f4b1f863087eb4b000e68b4c14f044e28c09879fca50296bd7ce4424208bdbc4581bd1792a16d8058856f34f045f853c2e427f23984d734a555cfa2ce3eee83b74ea9611d8b1ffe85b450220e650b46c8dc2e67a51e65483f8dcbd1c3c549934a5371cd578d4c2a803e45cc44016b543b745659e568e158554b4cd7a409b1e88d2002e0a0b7c0a57b463e10800477d088e86aa6c082319b2bd9f850a32ccfac29ccc5a8b516db5ae7affda54d1ec6ec6b7e06083c9ef8e82193ad59d7523d3e6905022ecf84802c95e4082a623a39a52554c1c078a2e9329eac51519f33c7d48687db1100fe043dc464eedbae538d15f75241f6f80047d4aa0ebbddca4872896f69e20bab938ad733c0b83a3830753c1d5cf121bf724ef92f7ebec16f9ab43941ddfa19cb5ccb3527312aa5365abc694c9ac487d91d36de1f73a45f546375aaacf25f70875ec3f3955834e677133cc9299ff84abe8717f91ee855ce0dd01117f0cf033c970958b123a073af67e676b677200d4cd56be5e2277c80528609d0dc7f1c1b0eba358238528af78bdaf1f8c1dff82ecca817019ae372dbeca9469a6b18458f6410a30932171e3f23bf44a171404aac3737fc0877d8a129af388da4478ecdc10667d0835a3c253459511900e10d003138aacf47cfabe40910caf3f7ffb1ca34810d1ce52c6b4da11956234fb1931ba7f0ec07166a1fd7c9ddd48d92997f249e3400fb84755dc2cf00733bbada94143e761a4afb83885e6bc0557a715f21ac9cbd91d41c035ee8ab7487b98808fc059d4452a209328c280f81076916bded31cd0d12c0f7c7c41d6fa622f4b98ffc7ec702071ef873d5e21dd5cd5a6abfa41b5650b943f206575b986236229c19416330e7466900754664922285981882727b3798a902ef922f902e331a858dfce94951abb884dcd2b06c1c89e99dba1a5c0381db4651df7635f7081e33d0faf22ba3480bd3ecbeda08bbda2e65795fbe222f656719d18a1231fbe71673dbaa7d0392e5c6eab7519732fc3762fb80c6626281bfcd580ca0996c62d927bf4eb9f2ab39cd969a356751d67d687a9694c7f46b28d4856e7dabe929a224fa5932818384e14a9bac29a5b78e31718feb023c871f2891e9ec2d3da0982eb22d70a1f1043e23ca13768b3114be8562c79f492c8f11f7aec6aaba1d3d893d27189cf2b5691f5303b3d2bd26549d6850eaa473b6d84587dd48fea02e09cfa9225a13cd90f79230d6744813ff2951bf9e20ba9d52f10a19956105a35bcd41afea5325526526e268bc5f7fcfa68a0bae222af12df5a3bdc3aba9c93be0b88df494919c0039ab2c5ec91805ae7616823a6cd76d1bf2a23f56f2f1afe58542970f9778680481e8e84a961eff64f06517d24786802f025508ebc82967942c5bb13734d997ad99fe775c62d0e7073f15083cf724ca29aad65901b03527a91e68ab5007e27ee488b34b81b908073731b23420c29741381a62c47e0440d4ab4024e1c8f2d3a6592c75afacf057313f3744b9dd3c913880900dd9e80e4053f78e3f42e0a34411115fac732d0c14d1a445475558f0ac7253081eaf44a6ac572e5348ec4bd9167b39491d7ac55d94debc6931a8be5c795ecb8de996d27af6a13952c03a1a9841816d15fa9a7a585a52598c64f1ccf696bfd8d40a91b8c0b17eeea600aa6f92592981490361f691bbc5ad192bbe9236975602aa02374c146c564f23986a16b7691a8a5839ac32735251e8441cc44f1962d56200ec6dc343408d6c0862877fbb720584a34acb8c5678a71d9ffe9354d2331006716891e0c2d64f77914011764163c876857f001398e8abcc0c3d26a8358f062f75cfe39d4df0713dc1593c7e148af17d5a3f417cf27aaacb4cf1c8c0ff29f68166639849a27091b558bf1ec50868a088c6179df42a867e12c43123f0594c20722842020d915ac7bd10d2cda81881964bb8782d24e78922ed1567166e3bbac5d36934774c1813ef4c45f2e9eac58ef6406274eb344a1c65df893e923261dc5a55ad7d7a8363acbaf688a545251aa7b151d943ac789163013b0832234b006b8f43e99b0b19c04d2a2841705afa4c1ab06c15ff5889499eee12f1790cec0e270a91ef8fdd18a1efddb8c58f79b11beea2698103651884b546c4e1eb391607340a5485eafac498042db0d4d5ec47741395e781bec1b4fa67d61b7d5b9bdd2301e304ba01adfcece3bd4439c4402e81c43a0261464529f8dc65343c8e1199f22836159b8ffbc01f70d7d428291d19638d2902f91a29263c303e49d930cd055826673949453c05a811d818b17547b4c893d09d86fb69e8f6a5a3e5c8edd038b6ab6d7adcafd15a54bab8d4062402b4e8c7f1b6b0446006bed53f9d7bc4e8a7e4b42fbb4fe53b9e654a3256ca1e1a1969f40b8136841572f6217e3ab689c7d29a0e41e1da10aa8e6fc56db29c6635f7e68331757ca3bf11e1f50682034daabc820cd40c6d87542e40e37075462d948a25229760de36009a06b4d1410b2ffab1d72018dce269635375b005c3949b14fc1f26f97de416a45f5a6f90b3d723c33a665cc795e4396dc68d4c39bf5fd61af61ead44d234ff051eace3d7017a233aa7fb4578700b77114479c5fc4c9e70da10bd59f84f60ac4d3d1b2d23b9bb1b1813b93b5758b4419f25e90abf8607d725847eaf563cb418cf912f15687e139c0828d6489b82f81e5202ffb537b8a3dfe71adb724f27ce628191b0c13d6da81483ad0cb370db31855b06f8834b66351520dafb4da206103d6afcccf9b13c26a5bf9adf6e00fdb003cea43dc06f2c016cbc9fb7eb67a658faa7806dc541e6ffe52edd35f39aaac0b64a4cfad5dc5f20c6a7009e386e92d33afd96ebf73c3ed3bd9d2cc07d3f7cadcde6c6b6723cd814220f4e3f35ad01ad5d07d919a464afbc8c2ccc6907921a7aec4e7dc8d74fbad224495777073b2b9e50a399afd677747ab023cacef1cc400b30bf0e32b3f9bd1a70cdf2670fb0c91bd4eaec76312e47020a91248d675a917dd7470949a5c3a4fc1f8247632c6c36289b10b6953311f07c385b3b7828c86cd016c94608b55565114ab57833da44c1d99f92a08b4460f14a6dc26bd4a810ab5e281f79c760c262412ac7fdfc813286ff55a593c05388b7e36f49d8285e462eb9f6b646733a1f6e3b6089aef7d9335369db7042a7a49d31833ecdfb4cdfdfd46e9d13fecda4478931414a7af40cdd856a7f0499f38165298fe68115142185f658822c0e6369b81e4653dd6b65bcb717029a8310a9b0cb47ee7bf60da62d98402670bddfc078c38644ba8e520439d00600e4417c68fafafb1e7b1dfe098f3ddf9782e101919c29db06f37167e749c494f41c50a0e6e481de33802197000069e0038c7465de9bac0309d3624577b83ecfae7ce8d62529881d2d99054982acacec5f266fa5f3f526d5e02df08aded539ee9601efc229cbd62505c9042034e452d1230fb291a40d613fdac16fe78c28e8b329db9456a2741bf155b2b557d546bfd2fdf60e1cd189429cff4969d7476f2f86750556acb60f7f5e16005c5f7cd9cf320d422b2010e40d034d30cb312519fb982e71c83509251e0bead36ffd4f99ffd37fbb316fb335e73d91117e3a33d6336f3c5cdd40289293f3da0df1bb8d5b7d21895a52e8c6e7f73c80341927282623df029af91c0655c8617112b9111409802b569a2eccbe065b1a3e7e0db88f6c854dcf862a1944d4180bd70c027e9b4c30426804083aff087608d7fed6f01a852bad05aa17b6ad309cc7e209b96cb2bf7a1f4312286d86fb4fce43bdb1c309774cf9608987159790bf023a260482048b28c227ba5e4a8daf8ee19e445414b192d9b2a84173e8e66f3191b14ac437c0ad666e8d269b765d90d766e15a9b15c740907ec4bc47cb50bc3cff9473f2b6bc925a0ad01bd19bc630489d1ed1e6341275222b048e943817a73d1aff40dac809f575e91199b66b48c887fa43720c485c1a327b57cb0ba88bef72e82b436f614ea26bffa5f0de0149987b25f6291c4cffaed04caef3ef53786c773c8f45797ce470307339cab550c656fd4ced3fcf123ea84fbedce6876d8052f8d22da43bbebed1eb87a3791b7b1227dc32cda01b757aec2cfb9013e240e903148fa8b47d2053b9d987b781dc01056e902b9537bef329781cdc7ed761cc3f543dcbf991731b82a7f8daceff92da116b9b8d9deb7ced051ef74f6a62c9bf9a845e8b2bb20e594c5ba5435a7327945cb4737151b507d3c61efb886c29170d055e6f7c71aa27e264f2c1f0031415474afad116665bc518eefb617dbc73d3dcc22f46b0e449b0ed7c9c52b1c3ed7e5cfcf43401b05f1e6ee8388b844ceca394f205fa966369d8d690e716dd5c05e0ad1b113bc3ff1f480279b3243b8d7c2fc17fc3ca9a8ab75e2055649d859d4da20e1d90c40c92ebe7ce3a2deef3d1364a0221b71e02c7a4cb725974476fd1e05a885796e73184a1b9d2c189386cfb3a415ec9b51eda35ef451a61b51f23efce3edde658c8ca6a10cdd7a27b12d5e8a337ab297223b201a8ef360baa51b17ad19b1297175cf1e826ba90d68b9476cf96bca6e21e8d799f552fadf510640c9385b88767993c6eb0e597bd034f718fbd87885079990eb53faacb42a415fcdcf116d3758c5ed9b90ffcf53d703011f1b0e23e521a42547b18ca21ad560de2ba563c84fddda1d08c0e31f65eab32e23de443bd9567cbbd86ed034d9a24321858924c640f544e8012f199aa00db9fc8fe6aca9c41266e45a5547ee7242b3e661ca54be8b4c5006927a993e4d598cda25b9b7f1c8e31b3e4097b2b77a5c85215b70526ddbadca4ab502886ea5f2bfad6a5ab18fba7f3b496a2bd20645e2b5d01409c82a4a1b819609ea141f7e89e9e91464c75eff3332a306c055dca2241c967acb19a21213bf5f27ff5c927d18558395155f1292bbefa5123fdeb1d9be9da02e30c71469146ffc202b0427efcc7be12d4cb858d8b8bb860455981ffcd5d52af0a38e84958bb30077c329a3a4a576cc84e8ab2787a2411c3b37d0702c0c73af6df76c7840a3ae24a3789a5048fdb77c2a75f42b4c91b38db702d5a5a2321338fd0914dae2c6b4dc04455a20ae9f496b46e3d33efcb3d0df27bf68c897bcbbeca083f43c5203d7752cb94bf98328f2a79ae2f9f04bb384d89ae1dcdc763d5ea0e3026e75d3171ac561909cf5cf6ae7ea214c08bc932e993bb378f3bb85126a7515bc144cfc845b844d74d10d0238d26269d433129ae1fbfad8107cc17e40ad9222a565d5f160b4d918fc2e55413a1e9105e4757533bac857b14679ba58dd76ef8ac543ea1920bdfb51a6d9a73a1fecd8ae55dc5cdf964b6af10850717c79bc998f40f2abd9d3d6b7ab9e85b728474557619ccfca58676487a359a5107f37b3c0f09a16509149366a07875c55887f1381e9f94a06405144b6724de74654083f95c9e879450e4242aa337221e60b35a5e80acc6416148671b530906802da786d4023c19996bb7303c7b2fb766186e4237d260be93e07ceb4e7900be7c2a37ed05955254d0856570336a0c648a04b6a6a44cc1528f940a84de6c5cc1dcdae5d697db61ed00f40b1296fff5e086545a96801f59773ba3fc150e3886320a09d440217c20998810576fbf2dfb0ff48e2407566281823f2083cca5f03d7dfd618937f50f5934f99b798a7d7708e0fbf4279b918c6482bc429005f11a024aa7125e79d1c9f55356b53441b35950f022cb179cc07c0c834321a44d20e3126c857a93aea8cc2b2288076521869194ee0e0c4fb0b633d88e43096f1801cc236a24151a01fec83e1ae896cabf78033facc57483809efee8c0b096d77cf4b04e552070490388f55656fbacfa4cdbb75a741f8b06508857daeab77feda33896899d2cb34949682c468d176022613ac62e5fdd26a8a02c44b420a44e3604bbac52944f1f83c3e4e0c73e4506f5de0bef737f9678035357f01f26792792acf84088bf0d51e88e61ab3982677d5223a4abb8796a29fd717658654916fa6d386a063c6df97ee6d455dd39c098db62194a91d0c9a8e707b15e8f1ffa10300214c4bc9ee967b73a6a561ecbeb53ab9c474fafd39f6201b7d3ddc995136aa5b99a1e1cadfc2851a07dc2f8187702083ef1186c293b140717f05361ea177e1f69c578e906a4718070c5adfafa57923b0e40f28265714b68ad74f63d480fa42cfa121f7f8bb39725af184fd0ad89d275fd44f518bca9174e0359a663891054e94b80bd31c710fd18182f71ea9778be0aadd8baf438ef0c11234617ff99bb22d3e0b5fcecab642cd6354d24ac36b8f6d6816a4c331d7cd00d20a932c5344746a24970e6c1a5545dd0819f5154b2ffaabf04ddd63f90b463a07d6f71f2dc9602ee13e8911aec40ab1e267affe0f2c42560a42eecf2466217b2d720d8f2b8763e4ae84dda4e7d4987a01f41639ff54ca33a14d29e2f17618df90ce40681cb8926e35fb47e0508f9fc07bbb86d8f17a373d03617f5def6b4c3bbaf084cd0eae165d1d60cf0799b5a826ec74ebcb71728f37f8f7d5ccd4fcff8256d3d8377b34b0c3031182ba573b40d911bc62cc456f99417d1323e0ef564c26d0f57389d366df79626eb3e9aeef746fb546ee8bf08941aebeb794c1f77eb80fc1f637768d746b76205c622576839db3f02dde1319bfe5b38a95df48aa819c1fa0edc268f4385e6489f39f38af07d60cf9d6e013511950972e3a10a5997912c38cb404b04405d9b54eee1b8cc4369122462bad92509d99cd8dc521a964e70d76fe062abbb7ddf005151a2ca26dabcf001d03a5495965ebe4eef0b3509c9e67615fb42110033f725df616820d0412b7014845aad6d45658ebfbb715b96568bf5b0d946fe3b0985d91ee2484aeafa2cd53a6911629096d067ecc110dac9ce00bbba46df520738c5e87bfd5655ade01dc666c6a3473c819ce501982a9e922f0c10f322d0bfca031fa989ace703f421f04fbbc5c8d677bd52d13b32b6a9dda9d18d01d58272eaf173e1a8645ed5c49afd53ce0bbe4d9fae670c610cb25166c1a2998dc59aefc3e0c7eae7f2f8c1ca2202cab5664e7d693da03b7de7560b06648771b49de3c19eb07f758ad417461f346b0c1e72f9ce032ca281e94f9ae9a36e6b54a8fb3112f0a99162f882efcc406896e1d5051b59ac2941d3341a2c5bc9e206c275083aacd0154c56b0c06aa935332eff3587bd6103a58227aa6e28c22098063dc838122ec56eadb121b21f9ea6cf3afd37eb290ed1b279904fc0b35120a0c782441f7c0ad0d2d8b695d08261c86e661677085e1660f8989977ad91e0f738976a394622cef966a461826d2b32482a52cb6a01136e75f2f6b42d28ed1b7d4d6c7f8be226b22a27fdab0c6143ef67dd254538ab39d7c4bd83e16f1e8a49d07f15f3f63318257fc06da3f2f918c79b6bbcc51ac61603cad842ffec7188ec5a014a2e392e2aea448fbd9a84c80039f1600175142cd6b2375a39ed4975cf553bdf56567dcb4ff0351c9cd01f570e6efe58264fc311092fb43f0ca33d18065d6492c263a218314e36949b0d30f01c4fd37878fa49be3027868ae845ad4ac05ee2dc2c936041110247f7b4580e5cfcf64d872fd56429ed2742e34ae7d8fd400f5d323bd0178a507472a8f54b53543fe2a476105361081888d62804a18a5d9d96b081176941827d7db4556959bd00e6661ae38fbd737a717a2e88ae29cbb04d70db6feb33ec5880a611e14a3407eb3d5c90a398a0520a5012739e6aff9d5389f2caa34a30a957553f58bf14f5c9f4c513904f9fe89550fd241d4efa9538aedd993ea823660c7f2673d1000d00082b2e894c319c2ac5a142bc56d4812c89a1130b6f9c8e3429b0c5f739f325f8a0d9d6853b04ae955723f416e0bb2b01bc8312a720cd4468dbcc813ccb5580010fffb04206fbfd966f641ff0943ad9430fa8aac3e95faddecf26ea2727105fe36adedcdf00022acf32a6384b26bfbeeb2386befa00fb54c62b54e86aa7f62c314031e4f279c5e140045bd070f9780dc9fc25c0d22a97d6643f84e779c49d64c2f0f61f0390a5849f795fffecdb98e43361758e02a644e25f7c4b54c39367e055ed95a040d4ef410eb9013f2b7536a3ddfd0a25fd5c9464115c4ca6fd4f587abc1a1a55b1424b509722a47d771ff498e3854b4b13b1fc9ae0105f89924f6b2987f7d1a400328992ada6eb0bb8eb7b8f7ba60febf0777af018c70878ca78b220b5e362442585bb8d5dd57e886209c47512e702e56f107e7da09c3c2104ce8b2f86efd681c2477089a3e11066e83665b83f267db57f55a952a527178f4e1549d2e0cbe1e30d17948b3b2d29cd570e39d64ad013472e6333c1c70a3df921f68121a6e4769a503c1f28cd37c565df95fc463d4d4e5aba0ccb0697993be0f100469ab7bef95edae00d888e5c14935b6e50d7bb27819d3e468bca107672f9ac9d1ab233eac3538f3c06a648a5f6dec9e084c495f5994b9be44500abc9dc2607e20cbac1ccfaaea2e63261f697fd91a53717d614e9c1983e7cc61176ce2b45833646d16c5c9ab27ae7c10ede6838bca47879d6b74a16f20203cbd562a17dfae41be4f2c3dd0bea0956a195b9f12d6c51d90ae26701e51d5dd562e6fe2e6abfa15f51e49c8fb6c07fa38bbe5b37ea068099f067dc4419dcfea9d1aaa9490141e058dedb231f7be4b8f9e437c8bf732512cab9cfe155e34b5067450a77d13355db99790d379ed1fdb7d18b5728a28deb73f973c6a77b8ba942235bc07ba8dce7828c6e420ab3b7972d32ee23085dd9d54493f384eaece9b44ef5f9961f53a9809b618f7db5aa0bfb37575020ec1044bcc04e851166b2d710c01e59604046939a1570afeb84b49e055a1106b9b9a86d5e8c70f6d8ed3dda7139170d44bd1cc527153847ed3d7cff9bd89f37e3812491430c071867f61e7ace3afbac0780f65a3e41ad43ecbde83727f40147878129c52ed83e8c5eefcd1d97d59f74d79ada78b6904d3b8685ca15dd276c08ff389b41510fd5002a0476cae83ec366f59e41d378451a2f80ee6e27a4e8b1f9911aa6172f4978f6c3dab60fcf58a5d8c897ba08cdac6c96e7e7f69b013533bc74e443c122c211a5d1c73d60872e8712b6757d331f59982888ba454eceb2005d362503c64c5c1aabe0a853e650d53d6a8ea3eb9149344e945f460cc04cc2ff7c0d010ae7bf8c0105ee6f1cd7b382b067c05e4cf28a0c8c606ea29a229e51038145bb05b72856a7ac6dea59f722804ae391010d09234256b35d8df92dadf3a116c423ace42e5d8b5aa03235013e4a71d66f00a203448d5e0a8793125f5ced398ce2a634754dab6e95cb9351149ced4245c0d5e89ca9840eec9590f8e29de8fc1addbbc883b1b60a4ec2eb1e949ef84f70e6a09eb67304da0642a08ffdcbac56b9f380b5732f648ce11a59ad3be59f5078e5a5124b2d0c22e9cfc61b9b2547bba7775db532d7e38f590eeb77716ddea8c1e75e9c6a947cf94c7f3a731c9bed972eb03dbf9c40514b3478c4f55ae5543650654fd3bc309aae43c4f53cbb4526f302bec86628e69d9a6e827d09688dbb54b72bd75abbc995590e31cd721b0a0ca6e92cbc0cee9eab5bcd33a6033e4fa3ab70191385960dbe047b1f1f3621da00939ae409d86fa5eade66c34a7ac4b0b7bf962d3a7487631da1a42f512ec0c68a3861284aaa27fe3a2f14124c7793a520a8243088e3710044931592885519bcb62a048d70b38644bd139306ea3192d47839320dda1f987ce2ab558e24ded45b7064da0f750678aa6e44a6b0335c083818e8a45f82fe98a54e61add772f333714b3b85f36a3c913305bfdeb4d095ddc34d79ee2d44dcdbc926cef33dadbedf8f9267c468a4480d7178a346a815808616987fe3f2b658a48e39a55808a2111c67ed42caa84571607b8c764d61b4f93a6d70f375c3f7e68bfcd27bdd465d5ff32d18a5244e228ef8feca59145dce8ac1b1276a241ba08e0ca2a0a098003438c63f94fc406004da252640016d51203c24d5abe78601a3a741072f1f35995803fa23248a9212757061fecf622c93da3cf08ca2920691a88a02f996b682784db8dfd98de08f285e79578f34c592acb5677cad5cfa4c8b5e8e69289894c09feb82dbd0207a4dd289cb83f9e31b745cae53b0cb2bfa93f28c0248bfcb6d8d41f55d1f96bf4c3b26a4a3fa4739bde0d3502da05af8d8cfa5b598f56acd0ab32d7daab920b4c75516775e696b33b14c87e3e19a50b3fbe5e4f5f73911876a68a4797fb6d6822bae0b778297d265161aef5e271e40c46cecfb1f9ae80037bee56c634705120a00a92213e3b116860d312a093ab87afc81a5e0a80d304bd1ea3665ee007ec3133596a5d3e3cefa5a9c6a9e06b07187e7c0aa1e572e4ce0466eb38590c2dfa5fca851b4b27014b1a2fe4ea5a867f0ef8309c19fd037cc60d1b783ef2a6860abfad2beb1e68e9c244506f10ab00a7de36a765f7816d04da395122faf426750c6d594931d9358bdaaac1b216afcf54c12758937b99494fdba378366a86455d1b993719756f25edd0f775949c4756dc8cea0e32773d399fb2d8b899d69e6ae9f267bb82359239e38448aa96bde706c98ffaee2a6a567e8bc0c20145054ebdd82916255d1b97fb81b5437c033aa278d73e4b2e29e7baa7ecacc0d4a672ecb047cd62b4a0a7166f0e8f6a0ef049b166f30ba94f1a6c2e39e76a80480f09500a66c0b34abd6ca36ad45026df70d68ca0618057a29b7f0b8d99d5329f0ef82eda010f6ea0a2ae2839180526210df8a8af0012307f125a877232272c9c19077f9f6ee9ac94333d88f477f97e760100a2908704f0e448574189947562be9f3a3ad52f68b9afe877e6ba9ce713cca2ea76afca01b23af3b701fa4901101e311402c1d1b337370bce541466733cf5d765d9513dc854b854e846e245e220b3711cae11c1fc5d9092c858c35bbba385b1356acac9ca9b73744943e9a49b52630f6c159f9c0c394315768373c64289cbfa738b9e26d02642c91e7cd46dec68864937b14e1619930136b64aedc5e88ed0bcd61d345ab4145f90988b5cc9f914ee02fd581887cf97543c950253554b70d530e62a07c861ab06ef869bad658b1e1ac74cc57cb9cf94a60358794bcec8a29d243d8ab8d55ebbdf884b101bad9feee33315bea54d19e7549de0f1b15568f530da4da5f5086aaccc71345a41a297018f8e62ca17b9771aaf4859438ed181745f685ee2d2f773773d1ad60c12d2b75ed377aaed297b711024d88829a45f39d4d938a5c3edbf1ecfb1a4c2e29d2feabee6cf2a9505845b985335fdf6a9335799885478ff6662d9ff275af6708729da1e1d8dccf584c92d123ff1a1b341fb176845b0806edde877d07dd0c7e2d196c5908acb64c713ae3ef682f7510af314d2d20a1c206550e6b54298fcab9eeff9975ba5d532349076f6ae13538173e2adfb8fccf95830e8bd726bbeab01b4110f3547868dea08450ce97d27f85e3ed01e9c70cc7a8c72542fe554b5e3d22544c6c5a1a6253bb75ded15d388b5e7f032bf32bfe14684874118b820e35878e33604d32dad06a67c1909a03eaa65359a90f4a6def10657c4bbeb96ad132d60849446d8ba18c230c5fa6bf5b4cdad5ac5c6674315e51a082993f34982cdfe5843fad62d55f5a9ebb50bd268187c53d0c07a47bec2ae38f0c50f1bde6a4edaac6a4914987b2d6ec692e4748e58f5348a33cac1f497a96d5cc49af075eb32fb5a0ecd5cb471287979fd608deba591d80fa1d6ef242cb3713ebe14bd9c017254bc39c009aa4c547ff019c303901af96c354dd693c0151203cd6737b960ea161efe10692f9f16f109979616b344703cadf629c5e30529d710ec9aa96559d53c98c91b97655cb8ace7bca0c55846956d5630cb6667ebe9e0819f4c28e3cf2ab99893c2846308bc7ad011c60d152cd1b47a98002668f803ffb9983bb894fa0ffedffade0bfdcd799c82daeec7669881029a50cc309c609b7093c16270c040799e9014c6b568a9874581e392ca927537938c3ec07f621237b617eca43320e3af49b8b642331bc30f390a1f211185e9891e06425321c80c40811214a7295f22a264a64853779bc5eaff7fb1ddfe9f399bef3f7438142448142678c425c29aa49d31ed10c33155152cfc7ebddcabcfe4194d4fb0f0683c1e007f9f5515b7c680df7a6cce4e1e9e9e9c1fdecd9bfefd8c7c707fb9c2698b06285b86285ce7805e6b1d874d895a29cd7bb65f15829aa495319cfbd460d994c2693c9b8ee356af0e7b8cf12f06689126dbbdbf55b1a7e6fe2c409d78913058a134e104f3841677c826bc7518ee672d97834b0218fc5369383c762c3f879ee3d3dffff8f13f0cf75efe9797ebb8cdfce067933c5e9babda9e2748d6fb2c0383d59ecdfe794e3ae752a8ab78efba5bd8846b91d9acb8ea3dc0eedc60d96e3209fbe6035bc79c2a9c3bafd092e4e1d16b6e15dec767d1734bc385decdfbfd8393d8ca5bf1c7713c639a344f3a7b88b3f3f308e6b788ca6f8067c83fa36601a848080808080807e42404077aa07c7084e648487188890a721b848081bcb0f0dc74996007fc0403cc150f26db8e46395d24b9a21431dc949986c9e7d6812e52486181870cc53887e52c2b1820c3e7806ff6de52be49b8d7c7381c7e886201e1ed630b37223480e0b443d2a1f2dd48069cda8e968b1d9015d24570910901647724d295721210c01de9fb84f091635300e7c051cdc051c0de0430fe044170f3110fc34840108d821c8b1c971927c5bc2c24b48027674c0a4bce07c901a86781e4212b1e1f9080cec0d363489e2d9894eb97d3490d0f16e68bd431fc1553706bf08bec233f871fc84b1798dc39fe33cf86fae14f0e61b96c0cf8a0a47e02ceac143545a40aa41b39af1424ecb0a41780c58061a968a33e5b8abb67f613e8cddae0fe38cb1dbdfc7b0c99091f4b3e5e7add030bd99f36ef19037f37ab72f4d2b431ee747ac9fbd303ff170fe7e7ec0ededfe7e1e7277b7bf3ba417e623385e9891ec78614ee27b615692330ec00f41bf22e8b61fd00d06e68534325c0dcb8f17de2637ea3ab952b8a6db31726915392da9b91e5112ac24a6077f21c64fa2e4615eca4dd9470e726323c3016280e167f0f13a397fdf9c1199f1e689132850a030539c28f6ef53a850a1c25471ae58214386284386ce5846aef78f7b44b9981eaf957a4439559df1dc81c0192f3b10089ccd38d981b3d98ceb0e04be08634dce7147d13759b068d1a2053ee16cb17f7f0276e1c2057671be788153165c8d4c956308572373b96a3a9796916ea7e6b454a4dba961cc79ee3d3d9c73ce39d7bda787f3db67fcf64fb199e7ef65b866cc988102102802813a63608abb2ac3fdc839e31c43b81a99ca73bf71435555557d9ef22ad7fdc68d96ca9b29a4a0820abb5d5f8593c6a9c2fe3d0d9b0e0be681bbc53c1ea8feecf6f73f356a88356ae88c6be06010ab3cf6a9e9dee6c9890009090909090901010909611c7011190ec031062ec6501a97042fc9b726382adfe0c731c050db7199c1478e4806aa874e0e2fca090dcf508298e17af8c2f5d20b6777a301595ceba077d831e3860fdd18fc369c08cfe0b771232c84e3273c040f350e3b75fc38bc55baa08ad34fef460c0b3d680bec110cc7093f183432769b4289e6bffddd6dee45a45cefd6432929d7bba1e8ce8e6fbd104bf158dfc34e7f1f3fb9bbd9e7a6ec63e985d92903c941f494d00b7194dc231f40a6ae3fbbc1f038b2e1626b381dd7498ea21fcda60b0e35bd8830d30bf1d34f911db0111efac55018094e82952cc14c9470148e1f33323130ffe2f2f7cd16c73dc689b4f0260c18bb1d6d529a37659c31f62ac33c8e58de9c71a2b0dbf55190e1a29a1a8ea5d99a5e361d8de9f56ef190c8a6a3fdfef73db9c57317126af1b20b0909bd299e2d9ed2c92ed46ab5b8eed8076b3d7f133551385dfca670baf8c52a9c2e7e699c2e7e31f074f18b5dfc064f17bfc1e0180c8a19075dfcfed89a0e9557c3b14535351cebba7103455114e562bf71a3e57f1cf7d7ee4d1ab23781273681366ffea4df93cd1f9a9f13731c3c31c7660d590d1300273efa9e6c0280e54d00e4bdbe198013732c0b4000c6000440cc3800b8e3eefaf1dc83c1dfeff7fbbdf8ee7f5cf76030f63df976f4e6c68686130102028140c01f2e3223c33110b825203130345dd32e49cb8bcb8de726514e3294207a2cc1584e332ea475d841b7c0350e8e2f70633006f00c7e19c73be025b809cf4d8e205b90e9e70692c8c2eff8f052ca030804d5ff5fec5656f43060dc62c4207a19bbe5e164b46f9930768b3fedd56cb3a4a19d9a6d06fb18a7ebd9d8119a8bb5b0462bba580bfb7271dc63ec76942163c60c1476cb5293420a2a9468fe596d98f66ab659d2d04ecd36cb1dbd8fef85b8080f2ffd7d8c81dbc34a7f1fef7077ec5fac44f742bcc4e88598096e1225d2c0503dfc42bc02dc028e7ba8d61a24161bae97d16e453822de8d7283c043dc849df030dd49fa211d38c7e326ccf49807def1f74d1f0b6f8a7c245712f748294b1d16d29baa13b3d47c4f365579ffde5cf1d5b85a8919af4ab49b3aac9715a93719ed89783819ed730702f2f1b2030101f97c9cec403e9f8feb0e04f4187db5f0f5cb1eef52edf6f72ad76ab72cbf7271dc77fb7bf3ccf973fff929bb2992dd244f5114b9ee3f3fb077e11fd91c558e7fbc4b55aa5668eb7b7022345e9583c11c0ce61c0ce66030e7603007ff177c1beb8aa55cfcf616cf4f4d3c3b8089e707dc99213af0f003078bc18e26514ea0e45b107aa8975efa8712db0274a45b6101ff7063301078c647a6c1b30c875b260afae9a5c0580e35420a7217a78b172f5ec0800123468cdde23e860c19bbe52fe3ce1067ccd019cf98a142f3a33a91455fb9db0c7db55e9c2f60c0801123468c9e6dc68cddae3f0385d8f354d9f3580d8ef63c368edf9363ec3689c7cbd82d567a193a66ec160f91762c3d0a39923e85dde22112abf3e10dfd7d22a3bb6b79fc74875c2478889bf0026c80fd56a3a3b4d6b38db1e73c329e4aabc105adec7c1111919f3765c8d82dfae68c19bb157f060a28a090c2a9c3ca7d0abbbd7d0a2aa8b0dbd7ab7069883468e88c69d050a1ad87fd8e52a3df0aebd96abf158631c61863b1f534f85205d057ee3c3cddd4e7c853c86e8ae7c8c76e92e73872dd7978de2c55f5c808080402813f4e04f82b302be9f8d37444e2f80986c283e7a57ccb3e8014f97067f0c7a2b21328410c715c2fb586585a5ebad9edc70137e6017866485a4b926f495869078f1a84b262ae07c4a148c72f60c0881143868c19335ea36ecd8dbfd78cfff87bbd3996a8cbf5bca597b1dba397613463b72c3f43c7a3b05b3c2cdaf91476cbf2295c15441554d019aba0820af5d5283dde6dd2e3a13773ce380712516fa5065daa408cf6c2cbe4425d2757eac93d7f2f54fb5d5fb7fe8ce75c1bf4cbc3fd7d9f1277077b97adf6f7cd94e31e35166dc55e3fa3b4e8b7be7837da6f7dc15a6a5459cbc374b659cbc3788e6525c6e26af8556444e3dd602d5f33d3d9767a444331342772b415c3d558b4157bfd8cd2a2dffae2dd68bff58531c6186311a32d552d124720304d33d110ace56b663a1fcb4aac956449939dde2ba5dd78642817713c604e2fd0426d2469e119223212f214945f2a17faad3a8fb80806f00e4b9ae0a8f1678386d8773bfaec767d9f9bafc46eff4bc4daddfebe356142346142676ca2445dae179baa30de827de3ef865b63b2b7d55a2eda2ccdacfaca286f8165f4a6401f77cb7a5489b65a2ba32cec29df86cc7cbcc4fa52796442e99a710c1119e59b10fc6463a471f5f764eca241c355baba8f0d17f26dbd5334f2768d303436bfbbe232f6a198068d9186eac4d934cb95e9c2aa1b836780540e63b3fe6cd0604becf6d7ee36fdf6b7b6662d2850b46032558cb17f5bbf15974b5b6eb6d78f359acaf3fa13bb4565220cf5bdfe55a0bf62b7be5f7159882c58e88c59b050a1ae5755555555d5f5bec77122343e37ae6350d01814348e41416350d03806fd1a94ff667bf964365ca8d15a2d1cb50163a566416d76c5beddad09132776cbff440c058a142954882a54e88c55a868a12d9bace583bd89ddae2776abfe092314287a9f62b7b84fb1ae106737daf3d80f95d9f05d531537136f3f223f2976dbd2bd8adda2af825db1dbd7af68c93d8bddda9e45eb5bb4384185fa56754d716bfafbfd7ebfdf0ff5fd5a26ce5a1ccd95b942f31b1dad2990aaaea990d09aaee99aaea99010904aff15f1ee5382458d156c0c11190df19290a7212a580df7b39a201b2caaf6807ab73fb6e54decf6c46e557f62f6285a52a450b1dbd9ab58a142f39fd8ad8c96a4f2683519124b8f5693a1d82de6302314078bf1a29d1c2cc647143dfe6845f72de3284b5279b49a0c89a547abc970464a3a78ae68e78557805bf0bff575472b2dec8cc746846f433541a28c56fbe125a93d2416578e21138f1d4bafffe11e69d36ffda315ddfa2ed7d8c212611b3b6b19aab9b1b3967104425bb0d89b624a4a59ee36fd7254a9c6d56e577e35fed677b9c61756f1f0a878789a7a048342c16030180cae424cbcdf189f122c6aac60c3051c3766e8c61019e1e11290a796920e1e034ab244e354c3d7adb03cb6a1a01f9e0a84e150254741a171e4987d14bbfdd17c8adda69f6246858a152b5ab4105bb4d019b72851d7d772338c8f703c5b930e241ccfb61473c221eb2915c16eceec6f86666587d1c869b7205d0ea2592d1764611ae291f483da70bc255887eb874c0ccc8b0b2bc671879de76e7f34bf779bfede27709f79133df75e1f553955766bf42afb04ee2b6faa9cacddaecf4a53314d75c66989ba9ea88676e34c2d969cde6dd2502d37c338168bc562b1587ec55a9e758efc8efce2f41cf96539477eb17a8efce2915f11e7c8af0811a3081162c622467e696f625547bbe9dd12bda6ddf838deb8c1c2bea9fe549a37438498f99eac86f8bd29a2a5b6ccd5685df99eacae23d811e3881162c623c660f0261884a1363633344020100804028140201028c3bbcf9dc1cf7909163556b0e1028e2122233c5c0222e4e90236de8d1e483a587839e190fdce524f7563f009430bd205596e7e704762538b904f29081068a5729c62b73f15bb4d5fc58addaebfe2e559b070b98c44b10986c9857573fead66d20b8f7be42249a284893aa4cac153d3ed38b58c7004c5262618d7ca4a9aee36fd94e54cf7fa2caaaaaa678810b0d165248a59848856abd5daebaf78c4881178c44982c48f2e51c5d5c8c651e754a4dbc16124ba5cafd76b849dafbd3e6c8cc56263ec6cd9edfa2d32992893e98c6525ea7a5554c75114455114c57fce779b3e3fd993eff55951261367bb5d7f56ab89b59aceb8a6fefcfcf8c61d14348ee338eea0a053480848484848484868052ac122df6aac60c3051c3766a8a6c340b010fc8487cce02347744346094be11f3010c3251f40f25376c08d07a41daa153e79e08258543c452ac19e8e94981e7486051eb1b2921721a0105cc56e7f2b769bfe0a16bb5d9f458b1627ec76fd135cb8105db8d019bb285197eb85de9c7f6b3aaa3c98f270a672bd38eee8eb0583ed367d58ec84edf5632d2d2d2de7ef76fd7771115d5c74c62e25ea728d230f265555bd5eafd7ebf5ca2fce5996c5b293ddebcbf06c36c3b393468b8911636274c63125ea7ad1358e3c9854b556b3d9769bbe6dbc9db6bdfe6dc4e17023ee74d9edfa2e3434220d8dce98a6445daa6b1cc7977384394799734c5599bd8e2acd7a7323dedce88c6f4ad435bad471545555555595862697db6dfa39dd99dbebeb6a6a6a6a4e9bddae6fb3db89bb9dce7857a2aefff9b9e1061a6cc027105006021a818056a19204ef3e2558d4c8b7156c0cf1588008791a926f452e507443878985a5f00f4fa00c977c007972800e3c401dc94932931c83ec430d97a1d8e050ad4e182723979f610dc0151e41728812e0a305a41a3030cc08ea68dab1bbcd9d97e38efb15bbfdb1d86dfa2c80b46871c209bf172fc4172f74c62f4ad4f543b399915288c7bb6d799cf366cebb6519edd722cbc8c989e900f773b8af7f5c1ea6e1ef6b1a6e8fc4dfd740ee4ef7bac8d53b5c6d44f3a0a1ae0e72e385fa495f406700f75b814c400699b1c67299dc26513738864b4dd80903c141b010971ff528a832653fce192c859f4cc1a4d05e5470663c8c641e32543e9291ccc04e2fcc4c72931c959df49ba5a632941e2507a1877aa95fdde41a2102024f0d78000310f05848021e07c1353cbe01db90437f138773395d5ccc97d365afff0203b35b998781396362783c91c7d319f3f00e0c4626d1f0185ac16083c4636836cb81e77ee3460ebcec376edcf81c72e064bfc1af4f0e39e490b9efc67b133b71dc5b5ade9491999999c134e7cc5e9f06e772399c3b753a9f4ff4f974c63efc63e5a8a68856a46347e5a548c70e0ce6c4737fe10527ece4e4e4849db8ee2fbcc0be13bf1de7c06f4f22f2664d8d8d8dcd7873daecf56fc6dd6e37ee4e1c9c9e1eb1a74767dca3f23beee81199b29cf56e677eac1cd5d4a8319bcd66b3248e89fc8ceb5ea3c6c338eeb4216fe6e4e89c3a3a2aefd4d9ebf37a3db577eeec9860826882093a63136e57733b719863a9dde0c89163a98da3ad177bdc23b2b9ece811d93086f1dc7b7a6030180c46e378c8c35e305904def4fd4ef5f7660fc662cf5e3fab1c77ad4571b7eb8b387ebb0b56cbedc41ccbcdebdde2c8b1d4c6311854555555710482c1564c026f9a604289097c89dda65f02c8c338eeebb726762bf326602776bbfe891429c4142974c6294ad4f5a3e88271dc2f1018e3580240a03ae2308ee3388e38fc981fc804569e53e4f8c58b5b0c991f4449bdff21a41860909a8660c089416a1a92c9b08e9bbf9f63907dc84dee4ef751945e9883e8570fb56ec2392af8c22ca5be301b417d6146c20ddb4043cb5d26e291cb0e6c0b50edf823d4e5ddaebf478710964228835002818492770338bbf9fac9a9bc63bd7e32ca089365b6ccd61ec0d9377bda76599a4203a870f1de4c56b8fafdb66da2ece6dbb609b19b2c90511fdf86eed56ab5fadb4eb16255161409956ffacd374dd3c4ed1422fb62c9232b0e2c2109d5f59350e491bc83eafaf567fd2e46f24dbf5e014bf5a47e33e66c6566b412b2bf5601abecf857fd86c08908fd5e9cb2cf9045e8fa85b7ce2f0e397571fa31c6f954926f7a95ba3caca4eb255d4543ff61840e74fdc2571f7177dac8bde92fbf27ff7063b4699aa66902611afcd7a7d42960094ba98e24efccd77f26c9bbd5eb0f74f1856c17963f485d5e7efd3d56550e9611ba0642d76f5e96eb28ae9de45b2e39911416b3a6796e54e5b256d27b59d410225a2b2cd6f29491c6249591071a9877261c75065837e77c2faba37260e97e6f4cfe9efcab46012b3f8bdec0d222aba3f22dff18857114f3ce84dff38fea4bd6a87c15de33565faede5cf152e3c6152f5fe433565fb246e6af84388acc28df648dc8189e7c58bb0c82257c756e668c2f2e5b7d7d307eccbef2bd19afa042a2eb93b789f2fabc760b0168764c1ab37632ef4c5f8c73d61a09e7ccd35a146bc6310f11e9df4f1c47924c4929cb51a588d4a1f4c2c2b151544585c55a594955a88aaa30f14889927a32a9cb35baf0998a23768b71f8114312246edeb55b1cef62a9e51fb1db6beb4960478f08ef0bab59312350d382893b452943765e98c8d01bb1b7373167baf1626e3c9defaa22bfaaf39a67cd66bbdd7038179717f1e54567fcf262231a3af1464ac2b9b8bcbcc0c0c4c4c88832323a631919152abaec3635d2edd4f04e55251daa8ba9c9e51ad3d1959635e7cdcd6e9753a239a72e97920e55656ac2a238fe56174f1a14fc519574b4c0d4d493c7b22c552b2be2ca8ace78c54849c76a659aa6b97f7feebd51b465d4420b2db4a0a2c262b158fbf72b699ab2b0b45a62aba5336ea96a881021449c21f6ef45b45aadd6b9ae2448882448e88c4900090909090909fd8084846438800c57f3634895c317030cb51d27a3a59fd80c3e7250863a7ab4e8e40ca139f2c2d945398112c48e6eb3c1b275452a387a3752625858698169a60778049bf1f202b3dbf56168626264647e3f434334849494898690924832252565ffbe54a954aa73b5221a5a99e6799e1b45555454582cd6c8628919b3368aaaa8a8b05656d234656161195958c48c59808040201008fc01018133322c8e4707af48ea072074444d432d2f2e3d9598a4c4729a395919ea2522cc7204acd5dce4b005774c3fb91b483d5810daf1b500f40203838b899191b9cdccc0a878c7c8ec367d9971e548b9ddae9fd3fd7037b5b7a3d714f7bbf5d49d745d7fb89baaa6ebfafb090583c16030b80a0583523f0041c315f9d8611b1e49c224063ec45a8e744639780d8b8ce70751eda7970404caa12c20055f606062626466667439b41583d9ed2f66b7e9c714c9c8ccecf6f633349addae4f93c3e972226e66b728cd6ec5a7e1b9ddb63e97d3b135bb6d7d8d8d6863a333b6b151a1be9751d18b77a3bd7cad22a3354da58886605fa3ce7c2c2b684b2fedf45eb45b0b8f0cc7c59f9407d4d510adecd4f074432cbd1a9e0efd560ed76a89d96d0dd1ca0eef677434bb65799a5e6eb7bccf5d9da8d3e98c753a158a3e4c16637f6ce1722d37dbab467bc960be17fbb1941c2e685d531d6f67a9c724c720fb907db2a15ea2b5d6165eb3326403a6f2cc845e60606262646466666076fb31bbb57d4c4d66b7eccbc46a7e66b7b99fa1d92dfb34393197d319e7722a7485b5e0642d30ddac85c35031255f2ddf1a636b3d5aee07e3e166497cc0334d8218eaa51c65ab6991e9c694c6cb6e5598ddca1e86c7ecb6f531abed656676dbfa994ba3425dff4b6b6ab0d4f7bbd15a52df6f1475ec4b44c7dc2c26a2630a132cd5e2bc07f2e379880e3c1c49223a09420ff5922ac3a5b0db8bb5ed3677db2dbee16f46b8ddee3c8ee6f22ebbc53bdee5e865b73bff0223c2c0e88c61605468fe9b8d876b18f2586c3339782c361477e22d7e101e4c35afdb23c209204aeaa931484d435c57bb69c959ebdde2a8e174aa38e253157fbaddd66a767bf3353536bbc5bdcdcd6e8bfe8657fbdd6e71bfbb38220e8ece1807c7acd9adeb7743229b8e16b3d9adeb4dbcd34fcaf56e3d9472bd5b4b3afb1dcf674b462bcf6730574e773a3abcddfe9ed7eb89bd9eceb857c34bd32424fc5b6b786912d23892e46ed727534e72ff3ea53ccbdd1e7d599e665ac34b53d56a659ae6b937ea525151195554c48c55d21a5e7aee8dae688aaa98ac94b5b292aea4693aa6a998719aa6699aa6699a020181402010f80302026764d82520429ef00568ba24c39f9617975b2f498504e4c969c677f85692fc90b11cd504d986764cb91b3d58f81d234b489400816a6c6c6e6e763b1c1c9b9dde4d4e77b3dbe1e0e4e4e8e8ecf472babcd3130a0683c160f027140c36313dad08c70b82f1d831b30d87b203f203f2902334c910af416209ca6e3f886a3f69123006943362c1e6e686b6dbe1e0cc72726e763b1c9c9cdde23ea7c68b3d4fa43d8fd5dc9ec75099eda7d754c5d1c4d9ed2767b72d1dcbdbedeb79bddddabeb7b3e353a1be555d53dc9aa2be96281a6171054a55b58868b874f30db10cd1810754b6b203abe19ea7a6c5e67ed41ed0e6e666b7c3c1c9c9d111717272747478bc5e6f47dcd9d119efecb8c83207c94fd901f90128d4911f7cb1cf365e4690ac422fd88c3f2cf692b12db0d8ebf737bb85ed76cb7ff738bb8d3d4ece6ed9cfd1d96dec75782af427a6ead8f2a12e28431f407c28cf434651857159ba2aa171b3dbd7dfb4763b9cddb63c8e2f67b7eae7e8883a3a3a631d1d159adff56363e22f753d0cfda52e323fe5516dc97c2d3af0104393bc7ef9918c35bbb5d9ed7e9b9bddd6fccd6e3784837373c49c1c9d714e8e69b35bf5558c743b35dfcd6ed537f1163fa5479433f11ebf098689d732fedd9875811db1b41b0b89a5dd5ef924cf1d9feff7e3e1e9e9e962ef3ae3de7d433bb6df6e75b91f0f4f4f4fef3e3eba1c56f5c8e3ba3631bd8c568423e2c178ec98d9922c01be9694f230b7a223075f6b586e3f6abd342906841ab18024e4fbfd78787a7a7a67f9af7796e7ce9a60428912bc6d71e022f802b04fb244ea0720a0e43890de8bc6bb015b64aa0ec5fdfc78769b3ecfafa7a7771f1f570ca6c71fcee5b35bf17d62be17ebbb265428aaaaaaaaaaaa88fa7eeb9af5ba8eab0ac885de6c4f623218100ce0254df22d0acb330b125a7fa2d40f403cc9c3eca389c6ff76eb5ada2dcfb0a7a7efd6359aa042f113d7e8db2dedb75b9bffe978767b7b9e9e1edaf7dddebefb883e3e3a631f1f159a7fb7e3df240dd57233180fdeea23e178b6d8b76acb926fa7e58b5afed7b3dbde7d76fbefa3b3cd5a6e2bb6adceb86d63684ee4682b860b2cfd81beb29d989350f9b6f222be27935097972180f789b2937a09acab621511e90aab04e2f26a28797077e29742b86511ee2ec4eb2f9170774b50295d15d3e5e1d741f08c7e7285d515164e5b293732043d989c14c1910b756396c0c2fd53fefaa0af55fb4b0d9577217ec4da4a19b1b69e9e481293ab6de292e519027dedd94a07b9425d03ebc2bab7527805465a4d041deadef42b211b41c281208e208141e25d235ee3968bab82e411df2a3317aa9e4a298d4b024bf3a08f682579a7975c1ecebf722fcb8aa2579074204a50fed134458ebbc8aec491d7542b110864104821dc18281a09ac946f915fbe8b7d12b36aeb23b030eb4a81cbc7acebfcdb559fd4c97fb3052716bbb0945ab12edc553827c948f24d3f1211a34d2bc877e5db0770a7a07a5e40d746c819899124b820c745b2821cba8e62f6dbc3065a50f60bf5822074616652922cd9a98bc07a265d589a3322b058347a08ac946fbd6bed2e9644598e60b1d8dfabf1f3e3711c4712bdc5f39b2e394ff20d0a8bf598aba430275953f906eb410441e83a082c16c65cf5ad14119b63ce19e3fc26373f73535cbd29ae4671c5433c1925ef485d8e78218bc40bd7d60b6f2923504caa60b9529449dd7cf349299455b1ad9495f8483dc49b63ce19bf01f229ae5638932ff215c9f6e8ccf18f3cef967c124ade99ec00687afefd1af75e967bffd5fb5fe3b47e3fcb6e379bc3ca9f1249c13ca9e722f9c4bba5f1a9802b05f9f9339bd4339228b96500b19b9f2406118574617e03e46e8a26de2ecc175de38b41ba88a4f76433f3d59b1cef8067f0af585c24dff0e30de0195398d443fcdd6d8813733108de80110d956f630a1a2cc92ee490ace982b17ecad358591a2d21b04aa9ff205d286e9325c41d1be942fc274eeaa301c67eb278037846d446340f22586159866085ac5e6e56b8f6927cf3ea9b51222929609f143608f9bf0629852ae513155e4a0581c5fa14982bf1f67444a90b67fd0620b0c8962a77732516c1ec587567b010ee8e75eb985c42d7f84b1a1b4cabd948219053f7a6ff867379c1acacfca104a2e4c18d21b789b263768a65fef865c7acfe016bf5e28f6f3e8651d2b9042050404fe12ef3af4f56e232bfecba8fbb355ffb40f780959f64cd0396b02ca7f20eeac6e817669789dccba911fbe8cf5c1544be4101c1faaecf7e7b70800d2e3842176626b7085d87358ee338e6bd02776111beb844312b8a31532910f88165428d20c832bc58e62406a458a678821db0ccefc9333392013d4af716131db04c9abc94f2ad17ce18c0af8fa9c322af4fe6393be99ec22b709108d1413f77ab73c07a325542217310292071c2ef989f66cd762d20c2e02c9a6336c72c8ae2f8da34cd71449273cedfda6dce432030be9884909c7a7a000488502003f8c711ef715ce5bcc2583846691b8841a0a0a0a058c012965218877cd238fdac240ca16bd58ea727b2484bbf0708a29b5ddb706fda8611075d8f51e45311dc7ba1ece1f25e58bb08eeee7cfd2409ee4ef5fac9135c1c7258922db8640c50f834f1c559a353f81ac1c3d5eb9c436411ebb044d63583d0752984ae5b9ff2c2124ad731b831fa33d73edc1819dc18fd2d9ec29508c0ea26191723d44cb28f86e2658f817dcaae519077186a4954c72f62b7b894c2bddbb5909c22a7a6a6c892d4a74f594add18ddef0878f002b15f281804e9c2cc2408a259aa481b56d320b7db4abfaaf37bb2b942375f3b617d7e1c71381c0e9f7cf4df5bbe90d5f3673687f53d4751e9b7071f39acf4db830f2691fd9225595658ae1dab7ee40618cb29153f79f904072c2923e36b3cf2dba96fc02a57d6afb717de30398513b38b8863321272947bd3af85e49b16114022a06bed032b47111fa7f5aa56698ee398a7c63c9577da0814a8204c1a25952528e129e18cc75e5ebe3e2999eb9ec7a7224f4f4f5809364b6dc48812a8b25c6f09d6eaf19bbc5e0766c092cae4a9ea9d5353535353abd50e0fe6ba8fe2383e169245307761bc84a91d1bba0e724b04f495136d0396b09422a17207ba30338962b1e7c93e0505e18e3b397563f4159640b8aa1ce2893bc98ae759f2516ac5c7a8b2fc9ebce2913a6ecce55dde7efce3e5a12bf25724b92a4b531b599d1ce52fb0dab254adca956af5da081018a77fd585a554591ea1eb57e9e8fa4d933c55e789b70992244992246718ead85050180a6a354e9965596e2d5c718652025503962bfff551b1aefc296470ca5174538e424aad6c8e420356f9e29b3f11d52f204fd58a355920a8a854a44992795419f3ea4d1539468d5163d418a583ac4c956accfa49072169c02263b18e314e28a20bc961c78f5e1c5286219eb93b5207bee9c74f5e1c9207c6e9c7ec8b6fdebd42b55ab1ec16798c22c957ad38b5b849965a4810324829449346585a438d43bb38fc3137435fc73ffe60bcc188837107230fc6258c45d033607d179246ba1e5579ccac2be7dc4e691c6de443ecb694ba31fab5118d53fe7071fa4d56b88eda08107ad97513d67721f9544aad7e1cfbed41031cc82f3e1e0e876314c996e5f531d935f351e463d4388e79ccdac8d45496cabbac850548eae3af30fba2530f40886473345997690ec792e444527e7432468d51a39317cc30d4a1c47400b201a4027ab0921d94d085b3ce6fefaea0df377558a20fa9d433eeb174fd5a062cfc99155ffbc0126a233d8f507a85956f2ef22fd40470e8f85d246b2277f26f093c20a4afbe94ca3b6ca4eb5705510dc938b822fa4b2879774350e4a9ab96ba16aa9abace4e454ed0852aa7ae4d2515b821a0800e5da812d2b5b08c9282064ff2edf6154f4183263c050da2f2edf6a88e24ef84e453cfbbeba4e72e2493b429682095e2e64043e1be7a5db2586c96d238cd009601c62e00fcabcf2ffc9eb9902cb2fa9e5cee14f8575f4a691c728500ccd1fccbbac6bfdd853eb1be0b0d30769315e27f01f7a4befa152792f22bcd437e7dbb369277229b4206a77cbb5df39071ae8f2ea5341356118d93a52eee49e3642617a75f6a2d9f52fa2d41077aa05fc380b5ea170a0623d02f204fd5ca2297400661d54921dc5d11ee0e7dfd2412eeae64cd90c2d4f59b37853cd153387655e5726a17e833cacba997881d9b30a76e014b6352e3904a2f72986ffa49251202e430efc827cd82dbcba9aeb50ac67e43f0c304ddbc1ba59d262741030f7a767149e064d2ceda6ec5376ba7c955fac86f0810b0a3e7167d6291fd4231c1a19f5d7cf376dbad0b67df7fdbed264242c938fdb6ddb2de24a3e45d0856883b19c5fc32ef44bc19e2596f86e0248b93530c608580f23d79c4f7667e0a2f9f645cd9818cfaa8a6b090e9dfb689b1af883fd03ec83d30817bf9e4f2443c164106a27ea894c834f72cb488482000000823180000201006a2301648929c42c80714001856a4724c3c2e0bb3244a62146594318400438821c6002103033333ab00cf2b508e0caa18cebdac9066c87002036f7283195aacccaf00d89c56df7760628c965863bb0fadadd39a8772dcf00a55401fae046900df1e4640ac68f0a0a2ebc02e72d9fea78349c2de48bfc1f65f90f362cf9137622ff13a7864b0e6c27e6b3fcb3a238b00dcc84bc37c8747ff0813e00f68a8327eed8b01e66f854b6a5eb3d4ec5cebedd38afb5f3bc25c43d5573030205bee49bf88c55d134cf294d0b6062d2684be3d7616af5e95f3a68cc9e07c6193c1f042d29d9eb6a0e421c3c8bcfe5eb5f9e0441d032a6ec7bc34bbb94969ab49047b567628d131fbd99ba5fc2c64322f81fdf5faab6a13524325906a0c31eb029690edfb626822c79d16424cf422ae17b9a44087c1b0b66fd1f86d81e234abef9d3f3fbf4d75915c1013fc714f6e01809f5f32ce4c96bd8388c1d9b311772466c685fe82762b10ae0266251eb046515778487c4b6e334aacf0fa2ee1bd4e6003de8a171ee5801d449f5edcc07837556b100090e775ffeecba81156182124c626c00ba35e54c77ba5f70538cdf74628f3ec4c53b72876a5fb4941bc8132e53f3a0e48738a9954ca4fe01c542917e6ef4fc9ad9d615851690eb90f2595621db16fd7ec2cc835112f4973b0c196f8938b865d5fa4c2aedd724fc05ee5336ba2ccf120b035c4b94994b35457dc046cb4a028de2c80d11e056303da6f65fea0d358f0fccd74e510baaf51f5e74eb1b28e7004d7894e2f5ef8c3b136c169f5b968dbc8c328d1689036dd0aa7e5cad900160bacc5af5593493c5826641825842bfa439db0c1e1f9e0bae16acd2600053cf09a39838cf0ad82d6fe5aa9f408d064d0ca893129eb4018efa60129ad552536d69ceb133a135089e236d563687c3d25f9a0f3bc459e29254db52208180303ae1c1915093b4abb1739637eb32813f7f8e69eb43fffb3e4ed4b1338d1053ce4ccf80c3671582e3e0539c8c5f2da07168d68113d295ebf6e6cd2b92d1b0c53bffa6e6b41b2f61a729296e6deb169c5ca67675ee432a16a3aa046b658c73367311b1da5d83c86b80d4adb63c17ff8a83f3603ae04b2f3c3997cb6d5c470a3dd69eda044758e6b002394ba02c97c0f2eec755ea0cb6d57ad1fe337839626099483ee853f812dab85cebfaa94f4193275ce30ceec797c580fb34e25cb776ddaa49694dbf32458239a11baf3298d05d348e01b95f2091538f22544f685f23cfb237857529ecfc12dcc57720397f72728c01d7cf757cf43d070b5fd414d45cf8a76b1887d1db7fb1e6d94ed9f47320a29dc9f54c802126d1332326ed37a9555e4ece173340728989e802409c8e3cfd2f9af70556b4d5ce1ca1dc931485ff0f35272ac09fcd98d158b6b80a55136138b40468d4b7334e5cc8a371306209f90fc3dd5df5756a2b24e5a705e573393949ebf4c122d12cb5e3c4b3c3d916d9fd08b0fde38bbc18426a6eb6cc13e492b14f3a6ed48234ce068201b24cd76b58351e0c0886bad882f1d27d647772420d99bac036ba93e06c876214cabcff3dcf72918cf94e9462b4ef1fb843ee5851a1ce34a43a3df3a65b340a1499243a900d82c74fa0d7d80671fd6e2c707bf39e57999210e7c53264a41cc6ad1e280c6c0acba5add61690c0e28d9745d8c0472ae6b81be8f337e34e9a4751b8ffc9bd9d57576b774c13d31ca92637d1aee1cf649f634680686beb1bfa0da57b46693b79379a98e2e8822a7919ae559365e5fff7fdc129de806737ec435e38a47161e59d5c19d86c127de917496c3e9ad8028c7ccc40c02c5f1819a191845b709f8a7faa3814077568dd19ddc04cc31ea2e2c8d9998162526a55ac8ab6ba78382dacd8307a859797e0d55e6ff1ea68e188d064f045b4d303b428c9630b3a67d6a8595dfa1129bed721f774352c0e01ca376060c8ed7f7953e5975b066496a72da757f9d14f44d9aa5baee9b915ceb8f268da70acb794df7589efd5643890fc1ca4ff2e02a0bf45e591e9e70893a31acc8d156c9bafa614aad74298c024aca74bf4cd6150de01594eccc0ff6f8d2e68106296e70d55ff17a9e3fdc627780c4e6b74cc3c0b3788686492b6254d754fce2453be17f3b3b5a21118c23e9c39ee02f8db7a6f54cdaa205f5061f45b3cf1194bf3c6c1dd01141ccbfaecd3bb2517d51ce06f14ae4c221e20270b0d9ea3d0d35129750a39d1d0314ee6fee5b4497234d353e2b3226911cea72e42096da0bbcfb4134c52177d9a0727c034fc80ebc44db52b1189cc5ba162a9ae2cd85645b2f4ad09d0552b96f2c217523d9c11b31497a3f385202ea25d501309da28ab6fc9e6acbf02e5c1d714ec7fff12b8d7cddbd13ddafc8a8dca07d505b034308749b293435b77097860bb662d5e1d104bd9b9b4b618b9df9dadbdc42fb39ecddf256bc99e229c04215111eef423b43cebd4062df973c18b344873f8749d24972fdeff191d3a091eb7a31ee13a6f51a758cc40968492728856fb75b0577479671c610072db161ae47cdce0714237d447c68322c9346df2c85ecb93dcb5784d1ffa74e933b73c0b33186f797c99933aca8ff51623a358b28d2112ce0766cfefc47567ae2fe6dc7799f8396de70d4c2a110dbc1c0ef3251eee674cd017b10b508d70f0e2a5a93177a4b036239deace0c6b0a8fff98cd2409864600cc2af2f0b46e8364bba2f25daffe13fb7af18d115206cff79fe9bcc8861c2aeff29d6ab9fcffe15abe61f5d1f1f140265865f6c6b0044a03f71b850e636624af33b395c6b89d71c8db13649abf7b0438181af00b3e9f2910c555dbe10e1f37fce7e2fa3c886c7a81106bfe8454b71c93a65fe32a181ef9d2d0f74cbc568b604080c7cf1e60efe032e0730cb9638b80ee75a052237ba4ed189dff409c18d144afc4967a71d95cb101b1b214e0480bc29c809520d776ad552e106d953a496ff8222c9349cee6c0288e9ff2a42a92d1fac51043895bd8201dec611284162cb9d878beec88e5ee540f51053b1d419876c5b998bc27f1277fd879a06909b96634ed9f9645098911d7f90024d163a3257beeb227e9114f0b85a816cdf43a6c272220537abad632e713dde536ca95264acd58352809fa6976b660d6c50b6312f43f572f8be9ccb2ffafa1d6301e0faf80a8fb044cd6f6549ed543b4bf3950334bbd5de6046b83b0dbb1c9138e2270a6f26e84fea06d897e422f88c2f06cfef234f711fda2b7c9016442523ffe79f8b20145257ea4908afe4c2e31b29cfdfc5406034f2ce5356ac33a0442020334cd682f3670135311c4fa42b5cd33e8562dccb84e103fabd71f62f3b60a8b9719016920f62c547123af15d2d850431490afa2840bf369173c08868308689a01e52fd6d2ed4c785c038b22c9128c4640bfbf8684ae274accd51d1968b386589a9d91c95a0f93113c217c8799987c617b3183830fa9e02b7697839bac95b3a472dd0e3b1f45e371532a2e17eb5844db99f7fd221d064988c47833b9613fb00a4d1162520139738fd677e6b2509b8f4a60423f49f978c2fc2090a4e0c1075fba9ad998212222d64947e535f81203cae51e334d55505a4290cfb01391cd357887345f873218c2c97863f787bf6b4acd35e0cdbd3f83fd738a09b3b4d80b482c374f89a682f57605eb471410104492bf6cd539b9b9ba42f82284a617ce06fcfed9e75c478dd3af5580957a8d0cd1a4f21f5e870cfabc84277a37d8512466fb40cfd406aabdc1e8391a4a51fd3c8bf8eeaf5c58a2efa7eee49744ec411163c9dde276800a16842fab0e276aeae04b8523476166115bb9dccedd038b85cb2f8805e1c314f971682cea809b80322739bcd19fddb35191a0bd7a579b1c190914082a80478d60ea6a7b58e7a37a13e3ba24983b487e7ea418720aed201baca431d97652273d73d19d52c7fc3a6d01605b91a05329abab76f603f778a880f60fa8ba0a417acc0b8f95728bec75b522cb60c201b403e3e43df7bd91609960dbd6c22131e94fddc1c90e3b39d344104e0a77dc971c7331c7d87882e7ace3831b30b8a0d1dee35e172183836dca497d94ba3b60260f71827850d8de9a7bd8fdd0c001fc3b2bb376384aeffff909f1ec1ca69987449122a0d0dbd7d1cd059ba6b6ac61e7d6b0490afdfa0e313afd2452cd675a2656cab9af2df3030f97dc8ae50fa0dd081731582585aa6c91e200cc9c66533fc3b06d242989a80db1760524ec776d31eefa13d94ab214db5a7154275740c7d7222ad14cb4d7a55a6661034d10ecffc402845073d5b9b0cc1ebcb9dc48e28713000ed6b2d0991536bb84f47c440ea6a14318b82b37a0f803a30e7a8378ed05baf4aadd3fb2cb1471adadcd3cd3c982e21a798b006729272516425998392c835c119efb9e4c4b501897e2f7e3a01f24ccd1ce4a3dde7ff9b1035b368079e07cdb0d5134c8fd4d64485b35557c200281a604205553f50ca3216da0377b082b9b3695b188cb35d42ed2e3df6e24344975103ddc32678a59fa897130ee35bfbd2bc35ec55abe1a50d0b88667a60cd0b03c57bb63b4e1d851c7bc93018f0d7cef5482df98e0a937274ed039c643705915a317f016178ce557e9fe8335a89d2550e865bef80dd69a76f5a52a833d6652f3913e63491de7eac2d34f5d0aaaa2ddc103ef8baff58cedde5f7d6f76ee094176acd84206c371370b41591e1e1e429f1178c6708ac6a312b360e5d0160a68e0b1dba114d9b38fa2af686da9643ba57b50813fbb89ad53df4f0c0ce7258d235077bdde73ee7737bf30437b69810fbd48631b26f5689b0cbb25b2d559bfbd2bccc8c6bbdd3b112ae0302ac9c2ca9392a16527095f7f42f85759bc892cb04e45d2e4c0094ea23f4d2861437bdcfd2f31ca00c899a24c7e58b100f82d31c753d8fc9dd017aab3c4930e51e93a5cac936a618b728a3f7782371446e3d9bfa85efa58867651a493c22545fd349649f44c36f6ad6089ef4c75e0bf39b6a0aa3f5021fa5022ce111ec0ca1d0452340e38166cd749d673450bab03b04dee01518bf3c34f42bdbe219408e968fbd80e3f968037b96e53c23d0573d5e4467c1c56786eaf0c2c57fa784babdb60208e8476264e31cf5da875b576fe280335602ba750a36fd2513a84d0b1819ab916a9d8dc99d0556e7037e58b4e7dd5bb9d782613844f84472948ff3595412586874c8a4339a6862347c0373bb7adaa2502b5b8124e03052168b022352b4d5140de2a8f8258eefbd4c8b0bce8d95d8d381204f5f90b5e99d6b91e247ca417596ef5fb8b6eb82f59c7e075a750c5531dcb717a2e6d09b26b0795e4a078eb5cc43c80247f721947fa331b34761a41f32a6530630dbe76fd2e1b13f5fa75d3185fa8f46824061c2122a827c2430a038739e0833df5eeffd84b370b889d7e08fdf1440bba0e588be688d50e20a427617d56ba32389d4c8c034ec0b5942a1c7c773e48fa3998f782a7589553ca88e0dcca911eeee738ddf4f7373ed8cd8c44734433ee135952b104a324dd1c2086245ca2a84b95cbb03b03833549e9615c1149c151f7638d89d3990c47426ce54dee3635b1b53e7b020096eb7041e51054fd0c015ed69aa72316f2675a567874a395958616883f00ee0eb5d194e0fbc3fc4b68e08d5cb4beef7a3ef9cf6b0fa0e6602b2769560645ca37ba21ba933f3f10f47b03100f6365e583b4d967eb178eb24a52e45be02e317ce5b4b3edbf881ad439362521922ee6064541eba6bed3b3e77e8be7565b7303cf6adfb0f76be0955a0ee6557b4b72025acacd8212006213432971cad9930a452e8e1a081c7df556885408129684e6fb2d5e48a0ef8d38f75e94d05df3db864e34fabfe5b81fae8176c88fab3ed934c23b817a7deb96e4296d437860090e3f9100aef23e228a10535f9071e9bbf26267b992d43f7ba21551660a3f3c156d1ef5fd1c7b91337e96f607627ef6a90d9d899e4602776cf6d1ef584e1b6f46be7fc0c84930f5e447a23db02b9c7dc5f67db8c29ea9aa2323dca5976fa0da901ea8e6093692d611ced8215b13f44d6b2a09f5be3acd55b0ba400cb504d5e113334851fbabd41c3d82f51404e3b2713db633b6bbdf564d789bfe94617baab12d053e3225d938c21cb71ace80b64a19d7d0ab70b1f5289c26ff4d73ac9f0cb42e3ccc01d9a59243bd68c786cbfe0a843e1e9ec539394dae7bdde1315d22c28f394576a8dc95e23d52519694d5d36045bbd7083b1baf03bba68e53a7b569f95e46ec80b313f32a4a61c11e192ea4a9aea63e7dcef7ae57b87146c7e9be4669afb597533f53cf0ae64b1ba3487b8a52d51168b91d8d28f9d15388c3e62f0093b46ab6303f8c774d001d6fe6f3a91792d440b1811d6d09b910f01e6a0dfc6dd62f1db58542654e7449dbcc46b605b15ff798878aa313bdc6f3f92bdaa2b724e4d862f395bc405a2b6a3b58e032d2e6b9f789fcb4ed23b6581e0d1bf8e12bb6acc0a2c83d7dc0cf487b74649ac0e491db0ec9e3085cbafe9beb2a32e027af688db8dd6d994a219f3b3b56e10df65d9126497d3df1f76aaa048e577bb1ea62e55d7f0780ad5ba798198def136ec5fcbfb8814b3b145e016910c20ad8b7f17e21ae4714d123b3e816ea65ce6c2b5a5559c775e749ff863390a4538f76071e5689459f1f8967b6da172cfd2f69171b2b5d11a188dd26d1c0ff5a38e790127d46c902c21bfbbe05911be82b63d54001d74e9d7d4458652c4e4409d91134287fd9fa4c8f68107b5e40c436f7cbe101d34b19a1a951eac5552e3a8099d9c46b5e057020bf0b4e5a79ce550c2d42dfb182585bb97a928cfbf2c551b46a90fa1f4757001c8f31a888b7d47dbdb363c2b5292bb5ffcdfba8ad66cc1763c2d2c4455c01567dcc9bbdeb8e505ef065aecc177c47717172509ffd67df7787fe3dce82b6c2671da18b026e44f215ca70ca2623deaf6f85f39abce23cdf737afe735bb11c0b6618191ce8daf42e4324b851f98d2bac5efa0358642394b310958f89449a974184ddab38604294bbb28e10ddc19780f38c65ce071f6f4c084455014dae8a4e5d94de4a20f8450716f92b2f5d9c9945269e8aa865d7cc850e901d033af2259f5d93b6379ea8a55523f33cb55980249afb9d0e6e974dfe44013c5cc94f68d117697dc12abcfdc31f314cb31376e2d96d7d834f5f64bff4bae7576666f34d7043317eba62bc19385e3838eb0f6963da9dafc455d678c07a7800867bbf1be564b9d293307d9debddd820ff413de6ea2aac9d769d004525a14662ad0d5a302df572502e8ad930b7b658eebfd3c6aa83957715369f993f04c97fed967a90afa458e189baf29e1c86ba5022ccd9cd9ee3c9f05bedd9ded3867acbb903e15ba171dce5606194574ce53a643961e8319087fb43410e70f1b57d871a99dace99f09f8f74adb0610bd31fb1cd8843b6ebb0b92a95be8aa107c1669a524397c7d74670c9bfe0ae55c73a4eeb7545ead690abf58c63074b6ad1b97d7ff6c1a62e8c70e157d174d37b4234d1897c1d6fc6137993c980568ed371ac6f10fa9d95650bc9691596e46669a45d6c4dbf4493634b3d71f4b0c6e053eaa689c8fbbe0293bd5ef5114d95385933985fbf6cc50890dbc1696df68f988fd21b4a979a41b50bb24a2cf8f2621f372b9f09f51e38403750516f0c756df657934d244e007e4ec74b0cc1887e7455bd68dc8c5ae3f050499d9b2993c7a0762c6cc220615db2c3d1d23880e860868d192b4155f00870f149006317876386e4cd338931c8122b4176ff7cc26efb69e989e167a32a0e230b8a785d4689da879548c35f9396f78da26a541990bcae0b0f434a803a81cb7fe05cfaa9f8ca69987382447896482c874ed7a3c06b9bd54551303616666444579eebc0a8d4e74a08271274b0a90762ad10a82a3a73c2479ae0a0771ad9c950654300613538b197cd4d340acdd02cbfb4f4c141d5e54c36e6a6c6a027edea221aeeb50c2f85248556a382fa287105b57829c14eb3cd24aae711139460701745e3a072789f61d579ceecb1d40a120c417b0f539531f56b5e000839ad95ff70a2c14ae7ed4e241ae1126bbb8d7e06c6eebc972d9445a908112438b0584011b83368018d602ae097fb8aab4cb0a6ba026652ee5af50753a5e82aaeb31b35af701d4d4e07916797b377d1e7605e6abf193273f6313bfbb0ce6122c99ce60eb30446b6890cbb85a45f43e8f25d8e5e5412320c157b8bca6141128607ae0c98e0817533653642d77966cdc160848a26247d5522a9e845d8347bbf9da0f2cb596efc51108e68abd9123c7599761865b278e491af2b25c508c7febbc7a2f5c6ac6b654dae6457ffab90bf39f9dd3762ebca04ac3fcb424ed6ed91476887a9edbee268086fe3073f0434e8056576becda7e79b2bc0ccce5f1129e75227dda520f138703e37dabd86ca888f0bde75308eb28aa69fbe2131fc640beac843892a152e5c0ee950a9d1898f97433b3410ff8292f59b8637f1b24bec8967f3e1eacdcf2521ae804a3ef97b122055becfde46043b04cabb5f3bd0225fbbcb70289339fc929b84c5da5a18e4b5171512dc96c9501a8d82e802d489c91519f6553086bae890a0995f624557c71f90f1f88d1e85e9bd62ddd8f652838f306eb98c53e4946fd8951a86ed48aff4fc978bbac913755bc998607ad8268fa6b5e306b4e1e5d83ede2271277fbb4d6f2bf2204975022216d4c3007fc0449c87bdb511918a7b7a8887b010a8829d328f65f6f2f285d55d1350a8d03314a267747fd3d8e0e46f995c72133e4c86f53a540f911a8008cf2472b8a77c3268a43bc76caa89bcedfb8f92734149002a9e1296c18aaceb2e0b06c654a4a7250d66f13c3c5fc0ba5b907c5d671cd590f8f76c712ef73474fd446660b13f09bd6bc14da5f0aa75ba06abc8362493e9e83b12e5ceeafcc9e8d629ac803653ec9206b80034fa3a3c8c877f285f447fb063a38a0b8851a8917e5beb5a5df972738b3822b63c5b525373c484e08fba9f4d1fbf505bb4b0e8c3fa1c11d683b610b3464751d5b925897f063b79240aaf54f0c0112a78369c118e6c478417f68dee10d97eb458a5ea52f651a62063842f2a84ee17f7f7211c94adc20bde427b75c8487ba2a6425f96898a99bd176a812c111ab2263be6684a11dc23559da2982b879f2254c4e534abd241b64fa67f245670db2d37958c17821925a5f3435afc9c04e0cbc1ea837d667d3bfb59f4c812fa937057101944a7c9d1e01df1550155e0b61bfef220732894073394e8ea9df7be65eb0944d9d9f5b6bf417148a89c56188e3dc24c181383ff2c36b1c343f2c75ee593c7f16d5d6343d1b06362569209f7b4e24a8b781065f46f64e5878c37596664cd803bffe700a943ae1ef67ef99198e92cf8104581c7bf1a98b9f66730a9172e04c2d32843966afb20906c2da3c7c6ab608c343739886488f8a03fe4d43efc267216663a364a053f9a3b7d85eeb046ecba4e60d9a77361500f4199f1cd9c47c40927f6e381c3f149245a8f7a09aaad6d250cc06a244c33424ab9a9a24e05781e5afdff8545d38c84ee76105e38548ea1eabcc4b32a838833a10514d6ceb3349b2e6ea6f08ebc12d17541d56ee198b98fa0c9ac8df262c8ac03edb397dc761242f2191cb135415c850551bc01d224780aae6372c5646226518f2c8785c5fa7e0e5a73d5895ceb527f24499a222decad0db0efb30aa04d48ab7837a06181643c487bef1c6769d0ce2a039ee376a4d716d6fbe10c9fdec0b661c12c58c4eddf6549bca340e0d1e566870279f3d2553567f078f394047e8d35e2bbe3e37f4c70f0a3795e5470f034ad0ebc0738fed02b135d5c981433558e937b95f9dfa177ab3f9fd6e9caa2bed26a3e9912265045219711d35677b6a53242727a37cf07fcf364e30252daaddb95260924b5fc807fae2d6eaa7a846262152b9dec5022d5a4241e1bca86c306cf18c6938f627f8d5b080aed2404b46b0b349c4846e0425bb4eadda0646b1a33ea9b823c455870a2f368e06229e321f5ecf5d260bad83d58e1428890fc3de970418fec0b6f17367077cffe50a4d2c434fc47eefc0f76688e77cfadbd9f4ad71ddf631009d40bd1239df197cced0ff5609163cdd6eb44ea2b117e313fb970ab7fb19ecc5824d93d10ffb972408f0150b89fba1bb3aa9e6721a23c3eaad7e415a6dfd65c3a3068753f79744ce1c4e8414d1d65c000a329a1241bd2eb170028970228a699fb7d87956cce109fe3f9df539072b0c758cd0e9241aa6490b40099268aa10368104bed41fa3c2b8a421c04215e2612729f7aadcd07cf9272abc521924d7484bddc3103d13fc31f608a246d0554eaf3845878696a3983938f0a03ac5c60cbea9f7a16e1684d04f59db6130a4a46ab90c67a7d49011da9ae309c69c7faf5ab25fee101e894554ba9f4a1e031f8438d99841e3afa0e97a1231136b62f33102a2b85feddc135f9070b496fb70d39bc65bad2e16ed9b279255abbd0036c6f53a42c8ec03f2b83773d9dc7bdbf4320276ae562da14c03fea02d034fe0b44998c72767c116c488019d794ae19257269dac3cfa276ba48008dba9fa492ac19d071e8884a6a0c511cdb2f930e38f941a0aa48b318b65b2145576cf78814a6902fb266b913d3a9be0a24793bc81961fd02fc15c8a42de1c7f729cba56c9715dfb091d95d9e03a23c1469ce1dcf688e202232e129aaa6c66b866ae38955747cb12727c47764d13e6b77a66ab11730747f4d01a8f2f699cfe0978e6fa48d228cc830478d8ddec67c87a1ac0c0a3b06de6080306a29435b40f0132213c47c0fde97e0c4fe2194422b46d0ec933357777144217a2cf04d1182f48425cfdd015d2a24ddaa739700ebc48ba30fcdaa0d4e1050adb1b8b4b8f4a455df6c3423e81b430410c5d1ad9d80545e10219839ab472b2111e74277d34e68f86c9844015091f69ea0c55dc239b60fa2678e38c31070254f19460767e3d19ed0a98e3f2c88aed7704e81f82f469702afc546a1c784019f6bc145f4d6d42afa518fc8bfcec2b08ee9bd86a7ffdeed4a3e7164986803c59e86c9716194728b2d12f007468ae803f6cf8fd8140d7348dfa1a0668ee19eef3992f2895d9de882dc2008438d2d8154d9e3a8e1397995d4c51562e2257e28a4fbca2d4e61052fa4113f6edbc5c5c09ca1f3d5a2c4a8c157117aa13cb3b7a9fcf4166947ef09bb7839cb9bb748f3fb12046741efc1e5393ec8bf5c08eb8482d9d81e053181c0aadf27861085a6f94fe09c7a3ea1b2c99aef581f54093f8d0cafa704613517a6004da5f89c2ff127b4e310a96f5a2d71eab1ef71b5aa072a2f463ab07dba7c3b54cbf9bb9057bfde2cece628c9a3b62fb625d9c50ab4ef8be39066ee72fa8b153ed9214d4846f60ec909e547a35c5cecf57a39885c845dde0d96164680ebc4a628537dbd404d82fa7b09675958bfade2d505fc68cbdca6232f3e9f9c1dc05c03fdff76fc7ec77b9835a3e33196f1c544662cb1113c1fddb674c97323f722303314652d24d94d9701fbd5d6623031fcfaf527c9a6f62ab1dc5de7df15c0d6c0c3d8195182a06d0c1f6d63afa8f05762027abcc03805b35e5eebfd8d8e0175bc6be3795a005b08140a81da86c09f24b602203414b35ce06f27658dee02665581a8c8f4d20589f890b484a1a89de9184c691cd2d1ec104139c610a403cd004a51fe2001059494b20663a71c0ad94fdd1420d37b65fc6ee964f0010f0ce1b576cd1623257fe3be732b8879acdbcec8dc0242be103741e077c5e3cc0f8f3b1599040ecd6eb59ec4f17ad0ebfdfe575d7f17175c5e83837e00099182f5126fc5ecb08b23255fd23798f0c3a511dcaa89e9df5e0ca76919771f746ebfb8c156233c14beba56cbf7b05c9bbfe0f1cb298833ff6691ff6799f90127230cb7f192fd8bdeb0c500867aa3fedb3084fcb8895c7591eec19abd8e53fdeb7cb4c3bf37059314b88639bc902c1b2ec1ad753fbf27b77f37bb21f2c302c39292f1e5d63e16f2caa346607f167800799d891bc1006b687debb9b04b342781549de9e3ea9385524bef45582590d3633140c7a928b7ee72b68cb1a9dc0e653d6202aca70584e0e6e010767b760a67091f87aefd930852bfaf3747ecf25b48aebc20e93f1733bb7fd0e589fd813b2125a6126b4980d369262a203aecd4a8f50168663f46b012e75aaeac42f9a3c4cb2c9a360cc3cefcf01d9d1844f1eb5a16628c971f25ee5ffe306327716e3fcc49c0be175ef1e3aba3e3397b918159fbe5b1d3d0c9e70e6fdf24005eae7e14247f8fb84bee6f31235ad3c6e21ff100e1c08587840984e1ce7457aa9b46576ab53944bd6707a2a9696802a9c781bd2b84113257e0d220e1ac86966e257723d95147932f0c4872daea738fe803fe71c9c2b2ce5f707325aaf22315079c5a9b517aa146d3e6718c095b922ac70ab2f860547eba857a7ff7ead23f0231811af6836706adaa058c698b35fc2c274864f25e54c66dd1f0068649d2f793c934d07ba3f1cc4a6b92d376c35e4c33a17f2d020344b4c6d260b326ac39944b6c8c297427c349ad9f1616f03c298bf5e3f98c81eb75934250bab8a9b98c0f830dfc4a63aaaddb1f6625a584bf4261f8046e7649b35fa03359f71ebd14404bc3aad4d31f70ff440d4706d6d76e95ccad366ee1de6ef69265b280a79a91db557866743d0d3490f4e3c3121226585ca2732ecf7eea4c904e3b51cc6e8c9edaca9d2fc83c89181203eee0099a850d9699c2eeb304b345f7ec308f08427409e32bbe7c440027dab4ca79a6f86930d8233a37dd7bb887ef82cae43d298a876638e64a54b9cdc3c6e6c944bdf51b670e13e5d6420bea3c24fe17db875d1ae716fa0c21b21760336a987acc96e6e68a3bc6a27591377b2e6867bcaa80e90b0c6c1d089d90ec3a4e99499a072499f3640d5211e4a7ec8f38a2588660a12c43806084b707ab0ea7abf14184b0e2c3e10bce07181008d7de79901ea9d20f02d056bff145d9bd68cba094b87c7e221265e8ad40a1e53c0290a79d9bc3140089b877b0571b5219dd319b7dfeaf7e75d28ed91207e3c9b3932a7f80b0481fe10d7c17e9242cb04188793a7c3e7f2939901860a956db92039c109bac0397b30974e7708d9f8746fa550832f088716111b3c10331ac8d2b6899910d66eec8ebf339497b9348fb923f10223db46c0eeff98f74670adb26ec451dc49ae7612443f92075b190fd9ef1b2be957e7ca3ee7c410e45cb92ccff0a74081bd977a7293545e73d85cae9a5bb3ede1f66384d45382802df221b375aa93dca8a26e4145080d5980d2926fb706c7b4fba3fd31de96ef18507275b8eabc5582a31df4fadb5efc2b5cb0e1b339ee7c6b1d050bdc31c741929c6cda13a7e8421adc79ebfb83e70a7759bf6ccb06a13bb30169444b7d52d848f82186d08cdce28b9cb6272df5a9e818b7af27e421d35f53c70e12b23737f5d5f86131cee75a3d3a6c899d6b1559f799d09f59b2ea740472dedc983977c988c2019bab539bd323d50704cae99120b0077c50d02f9ba80e01e14f763c235932e417586c342052cc255bfcbeee4a73b08af8528462acc1fcaa8cb0d4d8f193deca83d0f633b7b4af5c564e6332f8210a576e666eb6a19d5cc0aeab126d0bc55d0d17ef6b94e9c84026c36aa4d51a8ff45a1ece814a8b32db1585f6ff653c2b82f64891178caedc46ce3e1c693d3b80093d5668056e7a01a50baba3ab946a0c1726238a67a92efb74b697a87a4e7c3845d23ed58f079171bb07b56b4831a762ed01ceec681f51e91fe594cc8d1c463b216443e6bcca6c986c11c48a497a26bb32a33c091f0820d1724417f22f68752f8cd7506b5b68dc09b38b10620da3982b888e2d7def7b7ea02ecfbb9aa5ef254e71dedc339fb2cdb2f6793c5d7861ea5a4fc1ce127b9894167928d4b9a51de6523ddf7027fbd29639b115a7f2fd3accc1b04cf77a1bc00cb946f6a7842c5a210e47a73a049f180d364afb126525c0421522db666ebfbe425c33af61501bdcebcf0e0d31a939e5c1a96406540a94c40a02fe1dc64fcc0a4c4f8ab01d406606385b558ec2a838a343af012bc36a4f4bad924caa3b00874ebdf032c118dc6206b418f79818a765982b94f5173301e5b897ab7b0fca62126406db9789433737c55dc402c48a1f18d3e0c525391748783b6b7aca4d189a40e8c5333302b557b581e56097c090702fa17a001e87ca0f71f78c0cc7b29ffcec8962eeed104996041b39ab1bc6eaeb2232e594b5ab4016bea12789a8e74266ca2aa7e6c20ffd10198cfecf186b761468285329f6a69e194904f96dbfb531444e4d8fe0216a8cc74589533cfcb4ffb9a067a88202fc649653fa1dd053c00d2945ac7177a938189f1100b17ca163d9b0d860170ebc570166248b3fd7b5b92a4b307931d39b659c215b560891af472792ddbdc58f07f8c29cecab6e5df7de713ab45b037d3620556a5dcba404fff99aeaa11d23e4d8c49a18f1bb81bdd13bf726a99d54b89aec094ec5c9cc1cbac988e9489e5d97d3fcd1f4097e45d00ff46609a6acd276bf4fed1f8cfdb1d0b4fdac5cbb00e0f84e03478f099f35890178155ffac8992aad4d6396a4757eab0503fd64ccf1ac1debbf161332d2ebb9818fe5914915f42bc963a1f633d10bfacfb58a85451273ebf84257c77bf301d5c85e2e20de09e7905589a8595020343264d5e74d8f446e82f100e1b21064aae3e2dcdf5f051270953eee7c166932a6b482913a93b85520e3771ffa9553db73b62e5f2f01fa78b97afa9d89cc4646729eccfa510594a394cf52bb3babd2d834a79c5ad6af160a909f3e2c3d8c72f66f8af02122f378386d36f8e605db588d49ffd5b164cce0aa4fb87a9820d0de26e060d6936fcfb257266caad6e4ea22e50a2a6289820b09967d6dcf048f0ddc7696e19cabe3be8d8457e3e56ac865dc91365d1ed79052738e37dcb063cf4c3818425130385390e925b84ad52daf0883970cdb1847b82a6391ca012bddf464242b29cc744c7d318ad441d875de0ab72f3a7419d05d36069d56d5b08064b53dfbe23a82de3211e9fdebba5232a792e96750ca2e9d8b559371e92544848ac4ff2e1d0ad95b067ce9d82688dbc0d7d0a152be98ec485f81c78a127fa4f2bf067e04481f65852dbe870371bd6dfbb5760d369354b3f14e26b88c52e43022cc7005c321ae1318d08433e01c5738e280ae66f0c3c8b92e1e12b6288183f6603cf152a44db9f1f8fd34a57eca6b11c269a4ee045baec88775e623e6545a0cab1093df86511f23177b78d0442c5e36b203b6980c0ac8638b9fe2b0b5705e682b005b9898a9e3d345d6316c38df258dab1869879e055cb27e5d04caf4c79bd34f4dcc583ec498a7df2340c9fa350b1bbaa206c90f412c50106b7d3bb52b78ca6dcdaecff9576d06bf4bd42e8276fe07a858b77b90552274031c1a2bf851e758e72713ea353af42764a2e0cdf29535c39344ea9d231d6a7569c27b94438a17a8400597071577abee31a3df968d306839668b456588ccb8f463a37c7a9393e84a1b251de83785ccf29077c20d685542fa23069c29f88602a89047073a54bd39b7fb022f5236327ad99277c3c01db382bb9071c93032d38ff8fba53edaeb8bd87998511163b505265791a437febf507c60ee6849a700e5f2cfad3083c6b10432a8a0b0007e626254ab0b6c6f3cd2892f55e81fb7a95c3a6370ee11c56f6b9e7fd3ee39f27de3ff9f0b299516b521d1c48639651c98fccd15a0f1c7453baae2a39d50c2a3ac61cb4a25dd78239fda3cb353e1d55ddb7d2b9c485313b5792b9742f1e6856e5a85e393d643e3375b21464e90d1667cc54d1d2e93fa4712949fbbd1cb1b25c712362e5ffaa7fc58ab8fa27f9b69a0ec3915e8be051dd1277bcb55c520439ec344a83717e89f6ea06f6082f81414b46443b905f3ddab39cbd8f5f040279bd3531e27b57cdce3ba1ab9d270bc73144fd75b94abe7eec901b5087ac5a041b5d1157d9639c518eed042fd2474abbf9ec08c08568aa1e05e718b636b97ff649664340c3f57426985b97a5820c54891ff16f31c42fa1d29a4fc220b400bfa25b516e6bab378026673013863651cf3cf1e41c12b10dfb378bc641ba02ff7aa48836553b21b5ced19a7f609168fb9cbe150cb8a1b5524c2e1ffea3c7c63ff37a8e8e6bf34f38df17fe650873ee8e6e0e64422cb77e97e8d98bf10dd8b630b409636b42a83c3e99b1fce331083d022dba4d5c6bbdc19cc5a1c1fe9a45f80fe330701fd8a8dcbcb8bd65a03271a5c2416ac0455969e76dd5cfb64a6e28bb8993a4b8cc592d0709b7525624c9d4022a0c0a9f086aeb2c5b10452ad153850003a65091cd953a250405e7a758ba0c83670abbba4cfab8906ce29c357cca1c8062e45860b06de070265952c3cdf70d5d5eabc5c485db1064e96826b904c045db19827efb74af4ec1e145c94424ee53594f21bb8455dd047b7f2167552f6606bb39354e89a5803a7ec6bf3316c0b454e7754ac7c19f907052da5f501d709ce93d25534702efe34d2639e4c538b3e2d4d38ed45aabfca3d4c12e7c3a348ffddb0acc485651f6e4d7432094f3e55c8062ebbcb8c7181d19a8c337e2dac8e307236f74a005f584351a75fa68cf5bebba18b0722c5d7b0fd92f56b2540a6be5bf9ea6ffb093b9d59f1cd1b0537b8f5c2e1c027ac136085f8e0523992af9555f8f618eb2b9ce5f17513d6d6be39d15da7287a602e9070e2c20d11ea3a7d46a3afb489b18219e66e60901c9c50727fac6e45d106b715998058485cfa758d700d3d54b63cd18607522d3a9f240442801f6f2bdcc27f00785d9b8ef1e14e99d6fed79abf396e5bf395e56115f2b876e539d8b9869eae5d16d996f2e0dc8628bf42191975eb654b913a8bbae83533b1ca2d31f19bb41e393d7eeb91933327467f9c18416fb21a7572d66959c3854066e007774b61f5fa56987541c838e029708301f9a18f14e39379f3bb2e64721bf1b2099b75cb04575eb29dc4c527168a0943961ff6cd3a939ca798f16f7da2c383dabcbc899a641f9956844c6f222e6b21c3acfba99c5fbcf7822c0d4bd15dd94b5acf4e77e10354cd8fa959c792999726a599201ae8584c49b7fb261c4e7761d137b4cb3ca473d699025d4dcb2530d4b19d758f95f5045f1b15de28cdac83019d30319fa97ae3c29154b6bd3bb0ce1ab4a8bc8ba5d8869abc9538e3d6d78aa2220459f12b6395af4319bb20f09df0bb10f25ce14e76f682a5d1b23367761a03fdb0bc4267878231a3a1b12357ce4ee9a10274c80f405363c910b8f3d8894696621429706564cd76917c1d4c8a82fcb24176ff4996d20bdac1d5d071911d7780bd3834fc493cbf62b482460f575b8d76fcd8ae46dffc271cf39a89b563665f768fd495ad43498ea948e3e4a526e21a75b5138c52848719f381595be368fa2ea4798ab2b179b89e093e941729c9b62713955c8a69b0943269b7e2aa8c882fb3db6704c349bb0bc54232cf6b7043b6a11dbc240ed69804c507ad5e7ee051c33feefa4b59699c998461b5e8850adcaed519a002fac7cdfcffa5d2e94f1d56f153c0f41759da57735ec94dc0bd9ef4ffa59dfa60e154479119054043da94bb9397328f69a999b7461705a5438e3234473abc29baeb46d9fe8dae31c70843476ed3ed71472edf1c4974545fd10d0947c8423631f8978950142e90cb8e88d4066914421e3a9f802af344a74685bcfe52744320fbdc7072952b9bf7b511c789e86efba2c36174e19840e01d5da2d638221ddbe986931664ec813cbcfe2962cf552443c458b13c4d2c6c0d0f8700737b5b6f213db1681c39d6d6783b5b6d9df549ca01f7a02c64a28ee8cd8e998ae75b90231afbf34dc0e71b1c6cb3d2d766e05df187ae5c9e6daf69b6e9b8f6a5834c3cec4c06dba9adfa079acc80ec1095f36adc522ccc0389f33e2b5710fe69d17520e8ecf548e6f547b020d0bb902345c995ba8539c4e4c76b4d61648b39a4e55c7b659dfc69996c77d327a1c1d30dbbc2633e87746d07bf2a6ceadffb8352ff4842ca7c9302f6dbe1046e3e1d6c397a0b068652f1bd20b7f68d66bbe34505c04a1dff155edd99a2bbd86f17cb75d1affd8564151100c44044283354ab8b59da38d60f19ce319a5945235b800c761a330192d10baab006da42ae7a54a80e804e46e5cd3f1da6263986ec2de776ecf8b9b2a3998a46b40d7bc603d7934a2c74a423ebea53313bef4a0bfb5e1f84f1f6cdb2900a9f73fb5522e536ecc09f83ac23d48a182b13f66b79d837da524cec4ded7144094512d61eb90e2ab180a84d5d5a277f1cd554cfd5e55af3350fc017bc68a3803078435dd795c929ee19b0213c9c9a2573a91c80ff1250ea65b8902c507f45714a167a4fb4ad7876ad3f0e704f9f7b7f2d9731c589a17ee3a12dc0350eea98e7a22905fc3b30d8543cda9485be38de7dcb2cddafb779161e042a549be088d4ecd8b4cb9aee1594e170291cef7e0fdb6fcb2ca24e81907756b5ca4631fcd4cbb0dd3015b3a75bf23774c006e8cd9a405583f725b8b3cdb0d220959c8d21bfe6c1b668fd0d4db52d9bb4b681d236de024f272b87b1009d739da4909d162411329e7b2ec273e564a5e91b9648f5b8ab3cffee346f959f109fd0ad2c1edd6698ac04387e6d12464c08682bdf67cb0eda7412f6ee4448c1de68aaae77b393a7a20161b0e40a9200c308ae2466b5c4baf0157102ade80963819fb69f4a59ef026f7225b9319c32f59e6c7b57b9fcd2aaee627a3a8516577dd87fc263302c3ecf711d1f31e66789b683004d691ee47097eb7cfbe50c19b226b25cf7bfe4ba3dfa4c858e91d362b77c214bad2049b380e770b9a1d0d62915bdf09473a7b8573fda9a37a934e6587db4abdb88d253eb9255988ae67be38f614da226cf534ce49936a76e8aefd97afe1cbaff7f03d1cec48a4eda0e3a57014c1f8e8684aeb839f5d18b54514d0e02290100462aeeadfcc246b65bf1b068f054d421d209b3a323cc4e4687e35c8e2a2a2c3fe795592363b3a6afebc92ecd76413cbf68ddfe89fb480af23869e6d111164eca03e21a16b4853f860d0a86fed544f6ed33f1487351488a672bc9f875b673514b2701b1982c1ecc44b2de5ac39e272ba731f70cbfcdb2f1250b872032801f5da54e42c6cfd3eed3605adea71565ff688ceda0468ca2c450734635c003dcd02a6269581ae175522c2c951d09d3d1a1a4fed536976c3efe6e911c74ea6753db31ee24dfd48b363e932a0a9a2e0fd68b97e102309e5dd3a54ff1b69e43c3353125549318e757229b6a96280d8d63b822fd4674bd0b778d7bddb0463ec9b1c52d140fb6729c5a52ba4d20ab7a7546e36de2089dbee6109c125e0b59111ca507c50f5cce3a3976b0a28d92c0912b1f1d36065c21abfb6b24e2d7b76d109efd6b5540a6be9ba9d5d17fecfbe03eae9b6f487315031e8602225dc7b83423e1b574a2a38f2e8650a1c2910e71a77fd2ed5c99886cdc114d50ba358bb051a34cc47f2adede1344e4e1e7aafbc111b28dbf467f776800c4a39968bcda0c27563db15a99843cb066e5c4b3d045bd69f42dac996f7b3b371c0af40488458462c1b60cca21bc5410a84fdc9b8642e44d1bddc409d0666f1406cafa22a1339f2084983195a1f82e4e414c3db80c7d7b60042d3e7c553423a83b69de1e609f2dc676c2652a11490d617afcdf43a041836bfb9e0130d45cbde5bdb877fd939fffb78495139d750bf846e50ff3848f0c9e64899978830dff7f1a9e8f7124241cb4399866f1bd5b38e077fecdef0c3aaf4334894146400d74a825d4adcb18de1f3b3c09efa064dcaf242c35f126cb1f99f8d8e4c6a31876bb8975b944db69dcd265499950b9b4966756321113ee6e6562ee65c79b98a6f68c494426629760da6f31b9c41c6f30521629abb1737a0c4aad8d61da0ec8608989a3415c450a84c79a447c7f19264d41e3fe17260e82102c8236083f36033af55552cbd6c71e84703401c9f3336eb60fb78f22768eb19600a0b92364588510f9e57540f24194a99010b24c2d113216475ef5a6b4af0b1835e5b17de6ad033e7ee92cd9083f8200c11a0b60e19a66f307a3319c118c1e289e982bf10b20f64b8ca146f052d4e43ed5e4b7164bba92dab46cbf551073e9ea632d7e6b9bd61653dbed08b31dd9bfb0fc15dde7205b045baacfbe710bbd54b4a42cf02f726787d864bb38dc82a3bbf58061dc0ab7d211e518dede1d16157ea55c5a557856f07c985a99b88b4d189319950786b10084c1561ee6cc2656da058b8d8152128101b3cc9aa7197489606c0e0874123f15a55c19dcd8f4c360067cc898bd52080c3492eb7150fc50227f5ee42cdd1c063bc06dadd5606a080a2bdfd8c3e7e25cddc3059111bbdac9bf0633c2be2614ef32a0d707c98983cc1f8c096b17c66a628a708d92385998ef45043be89063310628054926deb4e6f7944e4388cdd4718da303b554b0f5a906266f5797d0e7305d80bc92a4ac301a2a1474e65e51294affd09c8bbfa522efa734b7985752c7e5ae07b3454cf887588a7940090a39bbd7b70374f2c69b785b429300ab8c7bb11b6b71d2ca7c3131b3206fec376d2119fa22fc80157b12a2106cd08d84bd2b3c277a8243b812f58471be9a48029c68ee6667d0888ccc0bfaa0d13ae8d05607a46b5ec17a379c364aaa590fdaf3c6dacc0609e153202867705c8d0d5d1e02b8b5578577ccedee2451ff85d09e8357c594f522035fc30e0b063a57dcd6baeb5f507d11a911e4cde441388f805322f99627c13ead5cba2d1dbb564229255514231e0a666d08f8720c88a6917edfbd819285ee420cc50bb1381de77a120228d9b65ebbb56fded6258044ed5d22886e02050fdf6b53762e000fa9bc67256c295e16908f08c000bf889a19e5752902bb72cb21398b3a17412b3a509f1981992ad218b3775c6d4e8105b5872e55b691cc6fcea25891890290d345e45f3d4b6b35f839de4c2a1086dabe9b556a163ce61d8511034aaea08ee29ce85136dccf2d8fee8674e3897ee21cd17c8aaee6a8b44b01ae0dd1463e46e3cc8d6030774fc91b4297bd6cf17f2e52e31f205ac03422e60f61cc8efd6f4c91660282cf62281b400955e2f91d0a748c77d8c84a211d4dee10d5fd466eadb84f57d77a42187be4ffeac23ed512efce40df4a4176a54aed53e196ecd8d0a80287cfaa3df573e0f8be7778a83adb3b891dd0fcbc97781fde1df8b16f480dfafbc32319ce4f69677b2a940f78325ea6e4e55d4a7ab502567a5bc37fdc11a2ef39f45789fd845bdb5b8612154511b05c26f669c1ba3f3c3ae732f7ab14db5db3536a9a102f8be0f32dd8a658e1ddc25e39d3df7192be1f015c93b46dd8a9cf4eb5b2db1deadded7eb71bdeae89b73f2efd71e5d2ddb1efc657fa03c7cb76faca8c6f0f2eebe7f2ebcd4930c8a3a839084f2579610356c15dd362d21553fa3cd7cb08506c5d21c390a3a46eaab0a00fe30338fdf211f181f542be32f70d88eb353240423c4dc73e62503c08a879f5ead46103ff667847ba5ce47a5e263c223a23cb8f26c70b016ebbad42b922f26f2da0327780a4d1f025f5622212b78538dae4bcb05a568e76cb317b17e1fe5d9486e3198053fbff20bb5b89cb911837b98dc927e95ff3eea9b7c6c44dcb70554d7540a9bf87a416511bd5cd68c1381b4c5936e00ad653d6670d8df9987f2cd35298c7bdd8238447bd232e7527b38d3b7673e0d133cba30f6efba01ab5a6e8806fc58aab81bc13c8e445c39baa5420d417aec30a1d9df9e8934459845e8fa1c7a3698589b15ed5e8a967a8d07cacb0977a1963b727a31fc32e197a9b21a20ad28046dec670cea787aaf84b21b4bdc84df08206967f961e38ccb889b3cf9533a4e1060fd3ca1906deed8e5845b02433f1624e92b5b351db3a9a876ee907d534ecdef7d6f46d4b12dbd61400cb5353097e53c970fe4cadc9f70423d8c45f3405cf2b340b6a0124c67a931dc699e5b66c456c4d683f60d97f4f41923a81df65bc3f86711e331f5445c7dbb3504bcac74d4d1f78940d94b6eff1911d834d84dac2fc9f53bd6f546d57e5736151fcd9bef2c1443c71bff59ad2212e08a39b54efe330073d76da089d85c6be7e015e9f66e388555d559fc2263ad9581c81c63a6d6107fb8df49cbf24b0499ba54d5b6ac3e404b5a7579745056e7ae3667fa720fedae869cb360dc77ec19ee6cb4af9e1d5a5fc271c29dc88d22298d9aeaaed12e85a86b95df66b4ea05ee39f8804b233e19866c5e269786d0dd428eadaa4bae97bb1b77d25e29cfa99e2ee81cf7774d149b8c86eab766f4600914eae07031519ebabc7e85e62bd3f4a6cda495a65631fb78aef9e1d517babcf000872528fbf4928e10248882c30c8d5f1676002b06f6a7aad99d47937a6b177b17ce9808c9d355078df3981ccb3a55a8ce6fb223cb1c299ff65fff39871a2e0c9e92aa65313b4a5bc5e73bd5f78ca3624580e10b19b0531c095c7851dcf10d7e4ebd4f367a79b6d788feacc82a81b881d7252e1da89ec63baf6fd294c362b83ace8f9555ad694c283f2c6fd6550ed0520849a432001a0c3a3abc724c0d40792500d35e1c54c1ebcfedc1ea6480105903007767663c012d6f81fe464d3ab13403cc714161a9de45f3c2ccf4a96b23d0ac196de667ac2584a581f459f64fe805e83bbe7284c70080dc76223c66490ec465efefa18d0723507552ec28281a0c246433206fe69c58424d41f8f6df03f22686531ff3769b90b481c23434a7fb1187e40f11198a5e96d1a1936678e00432cbc6918cc00aa88f05fa76f39e985f0266aa3d693b073f1bf10708e0bd522228b2896b9c15b51f86114be582b4d8f05ad17555a34ce214b337e51b9c6f74cb1015e62de2075a33d8ecea8a089b7782c85a504fd71827f675b51fc7e23127b921e874671b89f474ac74f475dd38bab9abc0ef62036ff7176fcd413589313679383b009d6fe9bfe057526cc6d5d2537130132e7252851c8964b677639095ff3170dde08ffc4fd7bb54983f227572a09accc0526adf88aaea15e052ee15942bdd483189c906fc997e0cdfa0071c533804a60afbc2bbb6546e22fc098004092fe72e3172008b5a30584e7b38c21d48f0b670a1b5c2de43a7afbf738d1a2711a39d20027f0e93186a0f89b9005e865c8b2603dec499bf5c7b48d573531e7e6d20f8526bbf7d7fcfb2fb3c46b110e41f0f1696b36d2f46da7b9b8947cfc3878f27f4775f50974d485b020712da8b3f5e3edc46c68c43d6a66ec86ff5ab79ebb37b4f297824712d4ad7bf724663fe8db6d9e47cff30956dc5b8090d82d6dcac1c1b67b93fbec1fb50180cfe58348cdb1e1c28ee79100a1b782630b6c7529827f7624181719021ee3ce93c3e83a7b6d8585da3e864fe2ad3365d1c55167b9691e6c172947b45dc1565dc5715dcee5557ab7881307fb5a5317d23deb4a99b2dca7bd2cb12b3a0ae0040bc3f4a5d35f9ad8bc8e750d64c55451229cdd4621478bbd1258dfb21b8543aef0252b4c320ea7059494e8d36775c6d2e9ecae71c231df71f95c40ea9a5f2baa0873b4893b6770140f4b144e8588031a1760b693a0c23e1987a64368ae7645985af85cbd5752314f7756b5d0a6cabe571c1bb5fbbf793b02138b08bc930ab90ae1a0e37570b253ecf791e08d0448048a6afbab5b30d819a7037d376b45e648d603f262904331ca890b7985939b4aab5dd55946656d3945514a27b5b7d814984f6e28a75e0d08153f00400844ad07f19b188ac61118b99c9d881dff2c25788a68ac3df0bfecb6f7de5bee2da54c5206d40ac10a880af1e4d3fa9f9fbe790e88a79ce9d3356d664a621f3939a46c933393a7cfcfb499c1d3c7478e4c8e91e76adab408933a937c0ce1f93172191f22f2188fff43260fc9e2a9260109a1ce5459958aea046b8b9fa118da344b45655131f290e647188bf2821557bec833af490875a6b99232542009c354e2a767a1ebfead76a533847986b36ddbb66d9bac40534abac9518c3712f1d0bc639d47e73859bb6bad190ba0eed70dadb73714aee7554a8f077d4ce5e2f21205cb797138ba72ce71b9464f47953b3487e986f1c63bd0e84ccec3c8ba8979a9bdf41a126792f35e3ccc1b8d6c46c2c55e5b0e2d9779d8e0e32cfe51717374b82e798b5d5ee22a6efc2731ca0e29f18b474f47d89ebf602d788bed47af0132bede62968f5e0e1855dcd008edc147ef069949d2e3f75ca27b4ac50f1fad96cc72ef4a7e71fd0b8781c93453bf987af4b4cda9633a5df272283fb26adc80351c460eaf7c916d9bacab6da20cd82bc2305d6253f81da20ece116ef526691e3ba74d99c51e14dfe17e0d4f2fc7e616df0fe1880414a0effa35ab59fa39677a46c06cf0800834283fac2ce9e292eba6033c9f4e71434c2597bc200a1d78356cbfbded46ad653e4faa4faa138da33f7773d724f5e08cbcf664cba17d61ad89f664c5f2f161b1b0978f0f2b0a8b15c5c7621528eb105bdf388ea33dd4a25eadacc7da7b47230e63ce396fcc877bd9179765ee999a49264e972cd74175a6260e4e5073d1411dd45c4c9cacd6a99aa90e92122f86336da287b13aa8b968afbe79586b88b1da8354971d5443b5564e02f976ce375697a48c9f274e83539ae07a52ba147665b5cb3c535d4da9b8245b9ef36989ce9621487bcd33d5e0543538934c55979ae37c738ec353355333e5f518f2d237ffcdcbb1cd5497641255167f6c284381a288282ee79d65924ef9cb74a952c2c5ad990545174f5dc5bdc09434f8733997de5a136da5c2d80ec771edc39a2257d00202952f4ad6132838140b0bc97547b10eff827d90b8b298ecec34e9e979b25a4561b12885e24a293e3e3311e80812437cac51b4260d4ecfb4553c45f9f845b8d23b632a6ca74b1253613bd80ea6c29460aa8aed785cfffc5029aeff14617457baaa72b99ca43eac2a970e4072508220240168870a344144135c4278d862054bb8e235a4c1e919f8001348bc62500e0ece111d9d28ae448242857305f43eb473994ea940390d4e598170aa4b85a9aaab02d52c2a5075d16ed369509ae0e2487f395a79a961ac6933fda7aa7e9068327db34e2842167eb6bef346a597434e69b53ea4baaeb2f65e56a4e18384e24a2a7e1a9c2e8970430c67aefa374abf7144e288936f4feb79e2e2c419443e1d03229aea15d1663a86135620a069124dc1555ff525885179496364b070438e39122b1db0a27842b332dddd9a85a15229e9c17698d0d6f5414a991807656246ee73d551da4d533c65a82c46cdc61879644dd32863d30607791ac20da1bae43976e4a737ce632c0c4a34c5604c604f3c3645cc48946581d12dcc5ea872dc4ae72f7d33d7a07db5db57973a7f1e765756a4212b2bde983ffdc3f363c987feb0fff3186560f1f073ebdc87edcb62ebea761cfde1f82c32deb0d6e69bdbf2eda53bba9712881b62af95d564bd582e26602104229e3a1654335db19f5fd772f06d90f4651dfd9f85d15049fa34fdbb76092a68f1f10ad239b75e0ece6238660d77e8bacdb1202a84bb6d2e65b640f7d28328265b524937e76aaddd3e544809a17cac9802232b8e8f1559782f1fa0235d3bb2b4d8a20a4f7f664c781818f77cc56156603c1ef161465410691c18f91d6111c61c89fb6ead0b91aa673e7211265597aa1e1bb747462041eba5d7c38ef832937a603ef14321f55fbc33469db821c612e25a2ae5be384b2649a02c902062082850d0209e38dc2fa594d2ca2cc3fc6da5a7a371c3bcc448a3dd0b69d8f6822335f122083098b8d5b9183eb73a37e34bdccc31106ec55989ec4214176892a0790189176aa0d4c8608147dcea363ff041d03489b2c97a92c58734ee63830010802701a0d1835b6908c0889b0900062730d458d518000f0640801d10a0003a28400c4d6230400e0c205332e1c07453c48d8d1e1b376e7043061bc83003cf4540e6d3b9190ec0e400084800f6aae3f81afc89062705cce05605d0b0d334bc9ad8c0873e3a9763490d928583f335870e19e8d811835b7d070f25b75eee851cbd831b6d5961c42b7108290c2ec55c4afa82cbcdb85081a40c9d319c08c3f49981a8b4545c7043eb92ab2c6356d6fecebebd34c7b81a688e0d8642ba3a8739adca26c54775a54b4a9b52e728a5947673cd75dcc6a9ac2b73ce91308fbfb9919f9c8f12507cd82e2c5d0d5291ae4927aae523124ea66049d101c7b30597d41e5f7aa55c50835cc8200c089c599405aaea76c3d151a976767a7a562cc9fa107b21f9d434c520b0ac40e19ca66755da74332eda1ee912923675d36d9236c5e04cb74abab4d3f3334ef9f861a67aec95e1648d0b2e73395ca0b12bb8a175d1242a9575aa822b5d7a25c997f40fdbe3a429b8a1d5b2cde10805ac99b2b4c30eda514d533ceda42ee57cab95723166e80928dd483f449e7926722327eb8a37b49f99a8310cc3308cd32ce730357c51595d9360756379c473f87be939809ae08a7c898e9f464e978c9c935d278184c973b8e5a3474b70b1201919a0e0a027282691b37a790a2d17218653b3e8527c02abd2a6781ae19c910be1a751e6d91c53a9e8f572501a8a5e8f2d774e8320ce6cc7544aba9457ed3207f3e952632ccc07f3c15858148c55dde35836731f253ec0920208526458e441f048e7b248e6f0d074adf20217dbc8634830825b3b299d6aceb59c345b17952d639d4b6c5f61675f945e1fe80b992ff3125108cb708e107e12659ef6f9edd2d3c179f7c3fc30032f64e625a2dc49f1a144dc50267d4402075da062b0754d9bd74a13419fdd137c86a74a47049f94223ec314657558ac8ac5ada4415583d365d0105cd0060497243d4e9bd04f249975f46b5ce09c66132e3d7243ec3503c3991bad9c0ca9b1dce45a1d5c6ba9ecf0dab66d738aed132e9597941f3b69b1cd318fffe2e5a018d6581a175d9c26eb72399643ba514ab12e6b39b42f3e2281032c8670a96f16db9cd3360cdb30f918d5094921c22b07dde8072ef52dcb681e5ac7825e6e3d88d5ac66add51c734ec358d00bab826d9383f17260984b9e946e4e9ddb301684bd308c55d93cc8e658deb62d63411f622f798a3ffae893c40ba460e2c3fef1a448a1474be201dcbdc41109278ebc084f56f47448cf3a64ee24a906a7a70080049545e152e7bc7ae73e225b870e412db65dc885e6b89a2070baa9ce0d9a6e35540e331c19116e148f1324edc08d274904124e94a0c239654d85b8d23bcbb95af9264bf3aff5a41abed64b77ec32d9d9b11b75814a856d342f540e5471a5d7f654bc2144be8efef609f3e2719a421a46bd3196044c7ec95d1ee52d831bb852524a29a52bdf0bb28a14220cd3b99a245834886b9da3395666ba2e7599c9846bbdbd1c3dc4292f44bafcf66ac05e4eaf86ea5c7b3dccf8e8d550bf33f576643dc4295f7b98f1350b69975f43f69d739e5a5cdb94524aa90bcbd4714ba57bbac915aef49aadab7b42e99c75d9977d5997a5d22c57a5b23e4ac84063c20e0edbb41a9177c5a430852db28c550161a0ea82b8d4b949050d05b184b11a4cc51bd245f98e46ae2422381d4b424ba2a12082d3da7b41705621b3968a343670dbebcbb990e39c736ee372e8bff9b496e3aa735bec01a4f6d6ed5ee82f331664824b81b8f4595da2eec3da80c604116e1c561388f848bd87eca71697cee764ab31f6d1dbf1a23897622b089e13b11e2249cf4173cf73b01ef2e89164c6c173cd73d0ace710cacd1ab29db4ed144f3cb2575deabcbb47e00791deb9f4ee49c2ed30af87f4cee76a5a7bafbbd061381ee12bce5e7a37cc7c8771351d86290fbe62eda5a76365c7e6d4dbebb17996492bb9c775ea3bae5337f2d1d3719d669a4823c33e0fe967587c0c777e71ab4abcc1f9f49ed2a6907bd33b0b3b53d314ca8dd21a95caa8aea79bb4693e79f1c2c5a5eb7aba54bb49b7cf76c5952e510dca5448a944a5642a6bb5ba356da663cea124128992288944a632ece5c0b09eabd0ce283dad564bb6bc81a669eab4a6a9835a412d9f23703e9c3aac2248d163bb62ee331ca168a1048fe1ec5bbea649f6c8966cc9564d4d0dcd682683ca1ed923b70cff607fd0ac73333a0dcb1eec331c8ff012cfb7982742d182ea352f8774f9b23ff73557f3499c361bd0ad1e760fca0869331d091b849f3d93083d36365e7ba69aadcc71f45c654a6612e615237c63ac96799d319d441ad389d5e60a67986cd434c968235db32b37a6e2b871db4b2bd299e4c11202d0326eabd6868d4b697716d2cb216750de6b1bb62f3b1ad268cec9e839403b61d6b90dcf8f5c8cdcb66da15095d730f61c4b17db94f335163c1f06837910f3c3826e8f611e1b5762f254310f693e62f1d46b9c50e38ae0742c731bf773259ee2ed6d5c7c9ade139b58ede81733ac43a104de3a8e6e6c1fe3bee2b844173cf80f4b201c1c1c1c8b290bca0d6bbc86661fe83fb9df7726a1502424edbd04f31928967dda4c7009b7bd458a2849a9b37cd3208eea5d7390f61944a976eb61ad99d720d55b7c1aacd6656b5c23c77133c30de5ba45aa96569390b070542ac5ad999422a11a944ddcf00bba29cdd0a5a6517e3a25a148a82ef5df8f506240822fa84b39bb68c86d5c4931a9dd7ef71f26b5a330a9b30efcd579e2125d18e179e2125dc8e0b98f06b79dbbfd83db1f963db3e3a9bd1df96bbe89424bafa9c94ec8ae215c7a5313346f64e0bc111bf890b2a6044919527ad9162e7529b14659b3062e1f8e271b17c6cbb143d6c26c402985e9302c71a20f4e113f63d5e09cf1a4411bcc58cd60cd587549fa8c2733b4cdbc49425994e5b2a9b9c208460c188e71e8ce1a57b7d3d8a23293fa69f172b4638c31cc7df9720c3f007b13a5f0b3c67581f819dec8182201d144ed1277083f732cc24fe7541773cc6fa629bba6cdbca17981c6cbc1b98d5b6ba5b4d65a392ce7773bf6a76970c32fe8b7a71ad69e93d273e9e5f0bcb1f714c725bad0e2359c3dedeecd3bef7cd481d730fd50639616d8b8a10d6ebbf5723471c3eccaae4c65b68c1950e6ca64345156b489df241d9d11c5b941ae49bd979e4de9d2e6409f4b2b5a5a1ceba5ff64efd2edd024a26906459bf8e92e5e8ee68ab85d43a5e6d5a56d9a686adacc3b9271fdd0d434599a4a85682ac43ec6d5b2cab9ac9a41f5e9cb33582eff30868bc670c59841bd8d3b430a38a3f5d341af07f63340cfc78c1777c40d45a919ac695a7197f5993693c5c3193f3f5de67086cf4f0f67b4b26b05cb130baeb9b8a6356da6f599a61a960f155dc27eba24922bac19547ffad4b4da24a30ded9a5657f30345bc31a54b338b083e11659857441866cd13b12423d8fd353f35ad1aa09ad60a8ea78b63765571ce35cf54baa47986e9c78270b3f40ee794d3e19c42f5298e3e381bf8c6f5a32733a906ea9bc70f45a91fdcefb5336d7ecb1e9e81bbb9f1915eabb5dd0e975d99e368fb637f325b01608f607faadbb8b4c6156fc0fcf4b0a64a0d1779466b06d583bb9d6933bcbd86e3125db47ec3da5b91e59e064c1aef90b5ba9e6e67c3d2c973b2dba20f4e941d62cdab864a83b3a6cacf9aa01ad78d8efa372414c7ba618b8fabc5679abea02f4886b3249b75f45bcfbcc6d5a5fad36ba874292ed185ce4f979192a1a44d510aad9a2a5d8a4b6c21e8a7cf4f0f65e4fc0c6b5e325a15cac0504b5861041fcaa809fae936eb18ae2e855f904f974299965697c2182e19579742ca6a91d2a508c54f227cd832a5477d1ccd5d9c21fcef90b5f217c473bfa08f8b7c71c29a28fce48cb871892cf47c48427d166ed8ed7c41d9e5d3ed744cda3443db34f804ea322c2cbb70d04e9425492812eaa757516aba0cafa1ac1ad7b4b133e8c18270c319d40c6a9a30ff192cdf6043b8618dabc64563480074d2094c818b34a1655971a37352ce2cee34591d202d852ba466400d529cfd94e0b69416d5a5a8d3a03dd2a0cca6a068b6289d98b51a943ad3a2ba1423136cd398fd64545871c3d1db4cfaaea6a837123c1022fb697589a463be75ebfd329b42c5cbd5476b933428ad4dc9609fbcedf927a99e2e8576a789749bea92db242d2398b9f47ad0e75ad2384331d2c8e4c723f3a39765ab433f6077ba24dd32e9927fcda1a539cc82beb30e8e70695066ae2c689a6c2a734d93d58936d2ad8e4d591dcb494e08ce635dd2cde1912d5ca409e3ebba5c97eb92c57520d3e463624d6e68df04a4c634f98836d2670e6d8d8f355eea208994f7be8cb6afc009e0e6f0740e4f1c713be2d370be7e4ee90a67bc9437c66a597473ce395bc6183ca3c7f99a56e0224d7863e316c27318c6d38c5569b0561b37b469dbc6b528e6557c0ee1b6db9775d59a6553ef231422709eebe468d42def68f4a3ce7bc91dbab78ecd2a2ea639c66dd40bbd42f388b98a36d36f122ccc6a33d05cf0130544fcd4867875d07c851d5455327fb75d725dab5b2a99cd700ecf86b9275d3693a315d00ed04ebbb4d35a3c1bda56388ee3388ee338bb6d96769a0b757936b4613acf514a29a5d4b32ffcbaf073156198eea4f5353efa3869c1732c5bbc7c8ce8f928848f3e4e80be0a2e5ec64728554c79e9e1802380d72973523cd5d0e2861d6402da01ed03d6650e990f11ad4e228f9e0f51c6316d6e1a5cc2fc88c4ea0a548896483831228a0f486995e082f38286a5ab4e86e03455cf53a7d9670cd77464d31c6a5c0eb554f68a831b6746e2587b6f8c1c3e669c08f60a2f20ea1052c01e6a29f75053c57091639ccde04c077be1ac07673238c3180b9a36d3719c369566da2a68da68a9bf89a13393ad8b9439560c3c72eb8ac1f1747a450d27a8e783264e55b1a2d41d5a55bd514a69dda92a252a559738253b1bc7451f96cbe592fd5355a2ce4d321ed2e4a02707b5a74bd50905c2dc25b65474502c6e88b1927043ebaa409e0f5e0fa4ead4a3d74367527507c413c9737841758325ba38c93817c3a7673ad334e3996a9a32c77298a1481e66a96ce7b39e6c65318f03e269c637ec6326e7e4c4b8c873469ecde078b2ae696dcd3e4899d44e7223275267120e2227f90f9193f2109ef621312ef2ce3f329771993c64c4c3391192c7ccf868e4334e24c649239f21798cff98f111c9633c87191ff91544645c14c3339f40d7bafe354d44787e641ec389885cc62791cc63f874f943c645fe2306a9330e322ef21c62788649eda376ee3116cda17dfd4c1b99cad18c7b219d269ab21854b8ae6904f69a2b09c3742d6041337406065d65c65856dc1c312ec23680e1749e0eceb69d338471a318cf3c07918b3ccb44787e8c3249ba8fcc1d104f998f3ccb4486f0e430ca44449e39119e1f22cfb2911391181ff98f6c9487f0c8fc63e4327908c9473e44269e623c9e38e9f95083fc1c1a93063d1b144f313893c944627ce4a24c84e7474c264997f1181f654b8424330987918b3c0799ace968a21ca74d962d7de286d80bc3d13c478e6659c649dd2fde121d3f896688611ab9ede2e78b73365a3943d814425d1644c831cf870bc87ff1b850376708f39a1b2fc9fcc5c34b441e8324834f33389e64703cc5604d539186faf85182ebc37f52f9e935803c869fbe4397c2d802d2a5d0ead0251f3fda144f9ab6121363c2de61f4e161c38c376c976826d5aab89ed9d0208d9eb90379ffa6ddd1b31c638c3c1aa44edd078df10bdd156f711b57c449497218ac17651ba867f9c58b477f717ff1e23ea070b14b0e81bc8b47eca34b58966539c49c47833e301b1aa478e4980b16527f871fea9316e0824777c1630e02e32327f1901f7d0146de0537f22eb8e098638c81fa2fce45ec83c707896e834b9017ee0888e161cc3e78f8e852c4407d1764dc673c3b769fc9d8f10b7fc12f5ce6858ce368c72fdc051c64e43033fee21c0c0e3d7b68b187d73d1c3d0c4c74cc331c243ae65c74c95cb24ccab25c5d721833d75e70e8ff52730eed57c739bc5f3d83f3e5fe8b7fa37f81c1237fc1239f193d00068f3c0686817fe00834489d848134485d06ebd020f5185c810669f6c1a1e046d68b3cdebc28acf1a2107c91bb8845e4319a784c1bea226fc1a17f8bcfc87a1b37beb84b0ead0b0693c3d16318f6e292b31c8e1e9c36d479d867f11859381f200001ceadc5bf96161c72161c5efb2b388c1eca42eacda4e8f16443db50c7d11f488a31f320e286e0d39b691a81d364a30d756a37f069932448b8d235e7220e1dc8635e71e85f63f46abd62cd33fc43d5b49885d4cfaa93b20c731e36ac9e7a06644e9be2eb45fd479722142be83cf54869743db54213f409253e8c5c3c8d3f4f3dc36a8d2e511f510f4097faa9531a9a83489457441ae9aa084af774ccfd2390af3353ea58f619db42eaf46e8923ad3f5b063f5429a43ef549ab0ee93d24407abba445689f362ed860001aec1a0db6cbc8706394ef1b796a1aba148237eda0299e78a86ee83e60df06bb4bfe40467036ae6cfb82802feb895dfabe2fdb89d94e973e979e31f1ad09bfe2d2a710e401a4cf204804647532116f5c97ad2ee639457b388d60ca3c9c4940c0f47012e1003a7e9a538acf919e0efa2b1e71fcc1a679e39c76eb2b2b2bbeb2b2f27d9f67388804684b746a9c3217e2e6c4b3a4711009b03847881a27cd85b839d91863beb917c7bfdff77ddff779f45664a411fdc31328761fb7e8dae8e300c2988f36a1cc47c7b08f0608b78f0508431fbda32c4008638090e563d6f3d10523b68835226786022ed2842fad9fce755206d924880f3d96421a70c62c0b59100ef1d4d5dae128b32408e01ca5e3de511ddaf3d3ad0fcd26959281378ba6ac8b9805c5c86df186c6b2d2e23460003e7a8ca5900a4229ce43a9900ab22ccbb213c6c4c5dc4ecce79262c9f6208276b5b23d88a519a33c596ce50eae0c7db333b0348834a6b7605b834863fac59649834d767ef60cb14aac0b22389de3b04e6659b4ab5497da354dd3b49e6fd734d7fa06f99dc32ed5a08cf112c7cc38c96155865cce67c1d108bf82e35f1c595724f11477dfdcb6b99438c8531664b3208b7222c47082be3da43a3a623cc5d1935e319c6ffb305fe27e21ac258277d4e0244570e2204f9ec5a4f6ce8d9c3889593f3deb22763eb1f4240b9aa60e8a973b953c35fe61bdb3ce59520ed639e7ba9e9f6ebb1d29beca6ce33c123e0ca528a5dddd1d4acdc99d741e95fa89334d2114449be92ed09901ea4345a442a94ed5ad7e96fc6514ba6ea75349253b5d9232949a3635773bb953dd4ed5296953e3e0e0e08ce0348f449bf838acc88936f1259739b6839b39c5a9e12c38a154184ab1e4fcb44640e2279491933b030d77491a64f950aae37c0ba56828354d5e0ea540da4cef5ea0c3b17c184a519d100ea84e0805dddddd2808b920348350112127dfa5ecca571206e919a7ed2083a257fdd46179e238db456f47e69d271142a978c3e5a78754f186a6336d26e9871dc2b97523278ec3a41c38efbccb3435adceb49914359db861283595b861a7fa39b5ad4a2883beb7ec49d73a15c6dc869d7790404c9e4e215c20dcd0ae5295ae240cd25f5ad3480360082ed2849bd53209856cb92e3d6934abb2312ab123434814929e2f7793492be614ab18569b6058265132d553b6b4508555228ace3287a36ea5f390c6e587fbb9d0e79c8debd22db11fb6dfe22e1ea32926e43487f3c964d5262d9955cf11c24f230fe29bde402e0e4ae75c60b09a8d645e748dc5c8e1c9dc7af474dc29a2d9a846056520a8676a7e59966559268a8d82a994d66cedcd368be309f3cd7531e7fee20c636de36258e9b65aad164c13eaedc5b771b9951687e93a6e656546bee8ace2b6388c8852ce5aceb9e83560c5b91c84c5579e525f7116a72e62616161711919164a579c526e7a0d7871520d9dbbb84b0e123d7ef4381989a98b68bb0f42ec57f741c8fdcc858c7ef30e935c3c3e0bcb8aa8c561b2ec59595959e956ba959595b073ceb90ecb55833d0d4ed9237b64932e512f7130284731da237b5e4c495df0a85fac488ece69e7643508f6166e3857f2145b4f220d1fcc1f1c1169cc28a89632a3b5e9ebf57a619b16d77a955753d179f4e2639f5fcfa9e6b4b19e527740f2bc713f11691021d280a2a708e1a7d806e896e7f62d8ea759c5fdfcc6f8dca473de4c696e3d07cdbae63958cfe5552046cb3cd283f8b8ad07759983644e9768edd48364debee1c901e17a484cd2bcc4c2cd71b8438c1237aae5f98de3111ec3f233fbf9fdb22ccbb28c4465525ed779dd7d6488084e6f89a225a020e0c0cf18be7c38579fce91de111fcb3e796f0ea967f4a3f4db01f570b44e9e76a5f94c7d7926a919d6d2731bca97cf0f509f808f3e3e78e2dbc39cb3eee1603dc7d19e5bcfc1739b35cf43b693cd3ea6cd74cc310fe1b9334f1e8ed306eb19c218fef330002f9da64dddea5cfac5cb996a8db61c8e6e0e6f1edd4bda3cfe6d9cbdc433bb61e63bc94ccdd44c3277668f5cc2953e75266aea4cd4444d9d7964ea4c9d7964a25ed4a9f37abde48bf4653e3e88d283ea418d80e8202d0a659bf80cf7d78c3ea0a577b77b3a26cdfb407f07b07f32dc2d25dc50a2beefa399cd877385df660036240a8542c9d88ef091cb91ac2d64cfaad5ad160a85a4a7661fcd6af034dee8e9e9c1befcd26bc6b5d4cc46e640f6ccd5f481f5f065156fbc8ca8f0f3093f9560951845f1d3b52043e6e1dcc2cf2a7e7a23c1e8fdf6cf6d3459fff24f4f092273fff494599bc87b9a1ee37ee34635d8a94675aa538d4282427509eb19db2854ab91b43ad5495a31bee9334d2e2ea7b07bbeeef99af57d4e136f48ff9cc6e99fc3f0727cf9e6822fb144451a8db5c7324cbf36aa91d06fb2e66aae1af57d8e39f761d81723ebd4eb255fa9998211a7ce4c4d533cd9699a4ea2cd74289689f944a4311d4bd2a592fff42d8bebd3a550a2a044c1c547e912897a9c52a40c190e1a8800c1879115a74e904b4b8b0e54bc21230de953c2c0d9a45231d26c34c5134cd00c00d6355fcd27d367da8cb0b861b77e26949f9389f9c41494838971cf89845c732231ee79d8a48ec3520a91c614228d2d228d2adde8cbf2e5798c13d13ce4443c8ff1b07ba447c221e49ae710e31e0e9a873c07cd437908cf8f90c7780e9ec7e421db29946b4c9be9a31839c23c30e1058c3ce630ee95e4dd40452c2ca2dc63dbb60b03e3dbc53ed0182f07ccfcd826293fa55ff0129b7b0aeeb0fd151ca168018a97f108ff558fdfdaaeb82dee9265ab255fb24a0b0ea5d3fad36abd7e6a75eca735a5d59af2535d93412fd9ea9e99b616cb3060c08891b1d0349e4e303c8d983d984f66e68a08cf8f905b27e2b9e644426e3d94ad49854b84e787f59013d13c5b7091c6a37375d4e00b1fddfcbc99617a0c60005eb4299e5604e0a1643d91ab263d92c9ce4b25a04c75a9c6a30b475aea74097b7499d325f738e3d18774298647cf4097607874215d7ae1d179e812c9a3efd025198f5e812ec5f8c8a303e9528b478f403fa04bd7a3fff0d136348fa60147cfd03731d400a709068f3e9a2691470ffd5f5c1c064c136d64b800f08b6823c369e05104657800b04b04653800f08da00c9f81bb08caf017b08d3482326444e0290d0d0d0d0d0d0d0d88e5db6019c1175c060eab069e86c648e30510c7978143f92f38c5a191a7a9c1120411944e44149ed2c8239186f417702841f0d2697058648ba7ee02963a3127e2c42131035148e42182d25fe01d22289d842b1041e9325887084a8fc14022287d84231041e9226c03cc9419a28d74171ce526c610a38df48bc1084aff308d4750ba875f44507a8747d125ded8451b2308ca234f7572240e1741555e545c5900452abe1a69f2d4230d4f6f62f8ea3f9e8234fe62e472bf56fa35f730e4e944d2a5b691b660a49110b63da1ad652e77731e0dcaab691ad534a758d336d7b6cd45bb386e8d1878f0c011593578dc7b2f0f1c12070d3cfaa64664e130f2d64727e5ce8f3ba4d39612c8c6e0f5b271f6386ec2e8a34397e2133370926bdafda341e9998f0665c4b6411f3fa257a773c648b10f1a638c74769c4da59763ce7883036806a02840d1a583d1278a163ebc19614464deb1bb06257d415de0edd37b89e638ba412dfb90b3312aaef5ccaba183d0ea13d34a73d8fe837c9ae1259a67d87fb44973ec45dbc80c93a30665df34286fb7631ed62ae74d83555a7b65a5b3ebd29cb37d7449869db5a14ba41e1df67726651e3b2864868d1ebc8936d26bbc6c29b94ecac5be93722b9d73ce48236ddb285ca4e17e2e5d62c9491a1aeceae282abb974cd250e1e0dceec837b40973abaf6b9a6351597fae7f590feb9a6793ba25bd770755b3faff8fbbe1f6d9abed9b48f2e6d3f361c0df2b0368c2cbbf1e892ddacb596070e1a583868e0b14d2f47ad9a771fc696f46a7450682eddc873366ed64373d9af85e4cbcdbf7cbf734ee25108bb8cb24b8373091017fb1a313ca04b3787210fbfeffb42f8015dfa72e81ff2febe3b6d42be3917c20ff0f1a3c1f6d1a5cddb7f3c20a46d9a76135b51ca7729b41da5982810977e8cd26711aecb471f258e9072b3e81deeb8ebed35a24d7b6f359a62db3528bdd00838cec68d2edc1c9ed806681f40744ae59cb3d4720aa9df9e6d916984b664021769c28e023a50a089f812d06273ddaccad6d3801488f2bb2cde8b023a603c6a9c822715742ae2092175da5c4a6dc58ecd43e4386bef95545082131e562d7c63393c74b26616f36ae011b7f8c983e78078f2bcff4aa79a47e7342c4f3b3a34409d8a8ca2b44e3cd2c31b5696a6445c7999755aa4f87bce7236ee4ae74aa0e284d4694891d116ac1338058ef4c6322a2b96d1965260f10a72a225abcca1f5eb24997bd8d12f5d7ae720e175cb49bc237ea5211590af2da4be95a8aeb4ae228d9aa1d821d2a789293da721455ea8bc4e3c5caac8d6833ab93877826b823a5faa7cc95307db72b458ac4efc288aafb5fe20d2986e713d228a86e586493f34df7ccb43b43c4416210b13b84e438ac48c00e884a30d307d48918e899e938b1729fd9c363772e24a703f0f6fe6ce6a9ab40ceb2c94f839fa28b66cf5d339247773cca5f8f61ad0e2a41af163a8010393ffa5d783c549357c41be318b5ba72ffee1252e59c74f2ff15d68aeabd5945a6b9d2f3d1d99d7d5fc8a634b9e42b846e1726591e0ae76dc95519d62eae86060966534cb28a5dda9cc3b337179714a73d8f90bbed126cb6ca412ef06ea324b260d7a2d2e997449aef8ec24951f9306955c0fa592eb2b1ded0f59c944ba5475a9552b9d4aa658248a65aee416c7d1b81d4729ffa32b5886db5b5a7648ffa17e08e485d40fc5cf425f073e6bbc69e1331d984b974abaf465293d55e6faa4c1ce43f7de1c1bacab5cbb5c591c09ee4ae7cba6cef77db5456b56afa8b5d65a6badb556afb5d65a7978619683914004bc4d025a78589eb88d26e8033ba721453628b468771e955774cbb7cfa44bb225cef549dbd4d5050267e362960837acab210dc40eb6e0731a526484c5ebc413f22145b024824e9b174100ebc443230e9633a2427c8255c24f8f61ade2957062049dedacdb5565f1e9554a9758f24f97482c5e3fac517e7a67ed8aad455c1b7732993d0d82d37b0bb30793aec7fffcb3f9fb564e5a71f92cd8e55eec7eb9cb48f40009969228202f852ba4be0c79285132e575d5379467774becc3061ed6a5472c5e7a6ef112cf6d6893e7d37974099348da66679aa68ece0e0f1b24115ce315133c8625a6425c1bb7658d97ed3bd272564787ebba235cd1bbc1d216d9d2d2e2c2755644011d36f73cbcaf43977850604679f230c9cb437686c0246189ea34a4481502d069f322a2d5894776dbec59c51b2cd507d134754e10c17805aa2a519d88a2aea6cd0962a91e518f783a99789f9ebad2a8eccc209a6c11d7c984324d73675afbf74e9dca5aedbc48d44202d5633758af95b5855565854d714402c912a71593a4532ca4bedce1619aaa1141a8110646ab75156f4895569370c5cffb84954ea4f4eac4562895899ff5899f750a0f03a29b3d691bb6f1d49dbab39269c0740944a01b600509c492163ca6898718812ee930afb8a144559fba5a4dd49c5654cf7c22e176b4ebb8aed1a3ea381aa9b437a0f3922debf8299eea93b699b9ae7e6edd8936d36b2ada4c9f73d6545d75e989ab4a9b6040d52853d6293febcfcf8962f2954af5f9e996b6447529ac3b32b5b32391d49d2e5599e46f8859d4555d511d99979305ab3462ddeba30b58116924fba108cec6ed76ffd836eef43984eb4f801bbd89a38f70a5c7c62e948bddb7bf0e75df2f94797b7c0d93b2ac63eb3aad73cfb90e5b0fc7ce69976599863597ae6152bb160a6daeb9e621d5eca69763863e39b76e7df465a1cca70df52c8742eaa841eab452ea354e0f65ea99e6988c1d923f33696a98e4a449921e31a7ee120214f54a3dd2504f6659709126ac21bf2ca4be942d1b8c3a6c3e7370be61ce398e8b710dcb9709b1e0863cbc90f941641c86c320797ce1333d00f9209f7bfee1cf27eea47f4ea8fef3188e7acd65705ef319bd1a58dcf38b43207f9dcb7a88bc2385dcc5bdef7e1edebfe1e8ef9743204f0a6551f6dcf3e9d771cc8bc3eb9977ce45af87e71f8bcf4c0a39fe3029e4dfbd1edeef3abf9914ca9f4fef3e8f5e3d1b360f79f578c8dffcf3ceab7399f418f061168f1e03e46f9eb3e4d00aae97bd7e39c8e6a11c24867f2ea47a594885e15d0e85d48fe1d16770489ff4797b3d62e4d8208c1c0a991fc95f64da20293be6d2bb41c6655cc36191d7be0f53ae7660a8c37b5e5d7a37849d7f1e0a992f934322d5eb71c397a990f77288798cc931311f139343f996eb7ce650c8e4349cab39f550bef7aa5e8f09011d6e64420ad06fee6ddf7d3804f29f53af01d3bddc39e1769f6b994f7c83f69d73d8f3e879378746fefa8743ff0fc66788c565c545de625b5ce42ff7c545a21c8e62b4f95c72388ad1862587f7c359fe417e978378be797b3548df5c7a3d3cdf9ce3e2c775e7e1e879b8f9058cfce75de713874042aaebf23fe76cd7e1cdbd0fc7e7426191df707c183d9485d4df3c87b7616944d5438a0fbda15948fd997f902fbdc74b8dfeb4900ef7c20d7101a614a8a46d3476492d19a281000000004314002028100c8783a20189542ecc31fc14800c809a5078561e88931cc74110851042c620400001038040600486b602defe9a6d8edc7026e1d6b6aac0b5f8e47205fd21fd0c98fd9113654645c849bddd56cba9fa470f5686081ce3ed6620b804d11e907dec1379901cafe7c631e5c9d739a0a67c6febd1cd9323419831305fdf408afc134570ad7ab4aee27abe822838e94f9ea81ee13024e953fcc9545d853e9ff2fbe79cb5aa7859a3eb0315ca46289003a1fc2e2bc403328722820bc67ceff969209fe2e605ae86f083719b757d02dcdc94ed87d6eca9bf149dce1d09ba29ef0b74b6aa56b8ced69787922f1b096c142dca68bc2e40b09aed68f58b76eb5338fc128281d08885212a97232f2b44f10335b5ac69cca30ccff625a1be325f7d84afeaf54445037eceadf947197d6449ce6b59607f5604c01bb68f1fdb29da8d270a386088c9abaf27d630d7b127a22d5f0cb0163f477229e8f1a0dcc904581eb0cbf5bed8a6399ea57bb3743f84bc769fb93f7e1e2b62f05769fcaa786fab76cbdbbea5e1f96de7b247eac80469404a7830894099c5d463de8de1e251a1ae5cbde76f015fec0669abe5616939669e0d7a41bb427b433e6329d0c3fff0c0b278768f8038f57b72ae030729f1edc205bd3f7169081b86c125c3bd81b082d20758c777365d1d8cb9a2133e1cd2494700d27e270536f09271b40c49bcb6ccc2cb80c833fdc2fa1c0e6c2efdf919b541be3b62cd207a788c92d9b6455664545510457cac1ddbc76209598facba3d0e09476c868fe5eda84859707471007984311f89abec0c5c29403d370eb3484b762166aa51a0d93a0be9412f045b98b5c76a982a826bef1d5510edce833e5a1d4713fffcff0f8f9afe0e37c021c61d28e0131e7bd67e9339dce75b30c86b1d09f364c6bcf66d32ce4ebc3869c7751ab8f0206de3c2447033b13542477c8bf4dd085bd056e28b23f4a45638136c87a77a5858ff8e6d086c4b5c8166b7c40df1fdebca39e5bf3b54820320564ed4d2ad53c1650d28b32d5b0695b94817d361bcc6268ee421eda1743666ee60c42cda70498949c81ed3d34c5c189d2552dc33dc122f5073af4e0a03c193fcf501869c7ac783b0cc5a96da8da340fe18448ea9afe5e1e8f1c21b0dac039c0f6de7e57a391a606f595fb73020b664ccbf86b2bcd0d891f020a73af263495edbcd572f046da7dae1078178b2335e5b704cde7b60861c7d1c79be9a3994a59aec3e1067f815840ccdb4f5c279aa704108037e9457f8412109fec392d6ff4fb41d587846aaa76c802a93b6f8082a37c4f0a117db5e38c0183c1aca2b8bc088786f0cb1bedaaafcd86cdb07441d1afc2e8c7b306916cd3ef3ba970d50a5ee308403b496c7a9bcf7411ae304f53281d715698671ffed67c1befb49f99b0d7fa685c1c517f25ddf6612b7f0fa28d3d1981d1f5d0302d986bc01045619146cfdc79102433ccb983fffe2c70d6f571acaec2000c6770b79f27746fb313cfd43e01b43c66e0c05003a1841aee3a4551331af9664140378d38ebd89b3f5151ef19633dddba9e3b18ea3e17880edbd3a9b600a1e3f5f473747daa2571d3181270144334d9520d05b48bf69d714f876bb1af03b831be1c33ba3870c77c43203b90a65afe6748401c2e437e680c5e6efe11d0cc2c20ffe7a223cabe11eecd542243d443e53b82fed0a1c86f62a729970c2b4b46615047ddc75f0eee5fe68cefc6cd54673b84ac681af0aec04895f85f47039f9daea6568be20b8010d0f8ce26a1b72740310b5c5a857e3338673386a7f3280ffea12a919e7cc0cefdf2ab50c7c45aff845be7359ab8fa0cb7abb0bd912737c1568b1caab841cbed37f534372caa8a108154aac01dc6aeed198ae5e93c7fec125a4a0cd66637311188c3b489cc4e7a26b49ed82fc5dbf052b4755f2beb471739ac87f02808ea3adcd639581005365a779d832907af840e167afef2f20ad0f0f0f44d5ca78805f23dc7b0cf9428a63ba33e2ad58de84870af37db3bc4f860694e0f35930b0f6686c48a6a3d6142f48eeeb7e1863be6780c9b7741e70ce4e3aece5180d4b8163e4ea304e39108201d69ffc851135b482edfe950859124117b4730ff59816c0d34115cc1057545873e99424809469c83688712530edcec06f8c4406460742e07dbc14b9553976b77ca98e5565953a0ddd26f9338a55ad7afabff6cd1f67a5eccc240a915887b74b190cb2dc14d8c82f1b06466083101df7fd6df0230311bb6aa53048f628d5c4133ce387737bfe4f7aeda746b4d61e1b68d8aa43a7390c2c9ecccd4045968e0bcf07e67e9abcee601fdb7a12f4e13ed6b21700dae701164688a862a21a0fae51226e383a427092aab0a02b8f686506afa2de9e93a686d1a0fdef3fe395eabdb3931c7da2b3bb4a9991cc207540784aa528ea4137409509fc733f6e70f0790a97370718a87ecbcc0be2f530a6ba6f4818a9737e4f2a7a1895fcdd5e4b9966176c093dc9c7509d7ee56578d0767a73a656d88f792c5488cf5f406c880287f7f6cb1c8c4a9d796025e73b76985010967247ffdd1f5b6a0b5ecfce9dd9f64d98085b6a0f1929c00268e5b9fab10a97508507407996c59729d6fdc10f97054f182027f97ed72d5398cb981707a46f7a595f4f93cc95dbfc988c3b61a92c830768ec04dcbb5b9876011e542c4d615cc3a7b76d97e9000c38aa8f20916956f93c8cc9a643e011a99c76fae82e17da5edb2f6f6acf2086b1c54546e80f89ce370137009ae42fdc427d433a553d1b538b53fed5b9bb8b97ad60ac88c201bbef520d441e30570ef0671214a0a48a93fb0f388a37dba6985cc253fe068e196834fe15a9b49ab24e2f0475dbda8f4d4542ee3c379580fc3bc7e4e8128162c8d34115d296f2aac93820850f85cbef544836f58231378008834d6b84a9b76c44a9ec9a8c33ce5570ed374c1a546b3ad2513bcc18b1c633ff5cc6019205108fcfa5afdecd96af98ffca3e880e9b6e6303d8a9b08efd40602e54083cab186c9c54d0597c717204f1e10a1b0c839fc005bb0d6e9cdb0c78df4a340d94e6324d0478b318fa94902597599c0893bbb2a56094f6ff6e7ddce7cf28478a5fb32b5c761e490d7214daf0729fdcc2751a1c86565f474cec7065d2d08cf6bb394157e5c16ae1cfd422d31ef41e45d6bb6d8cb010dfa45ee898df95e54eb8e4f82c71dbaf4541a331233d7a4052b72ac2433b86103fe9d750282f76f69762d293c711625d446db491189a64799ae8459a7dfe28517b85a70b5e679f25ead1c4495842ecd1076447394c6672ecb2352642a54007dec03565f9a259fae93966d8591ddd45abd5498078e47f77ce91cd34d1e2bf6fdc066e7b1c0c5f8dd75bdb46e631838ee335dae2fa887e3569d85c5d4322b62f8cd20b6c77251320089d80183458a55eda305361bc46fe9f17ed288ba854f75cabd9410e25e60acbb6550fe875c23b90b004c8631712f90b480fb939ac13f30b60b4bb260a997ffb75f46c6804f02e816b30da3ceed81adf30ac002c23b315b31b8f0cfe0bd87287307eee7056c7528b4e83609b12b153f254595e36b11a3b2c45f9f14b28b5d061579767ee0b34f0ec0c5b56c934e1689f9bbe45c40f4051c79fdde5e669614df2970163e72b768aeb64fd6f1c00f402c3c21333851e8213840656f7110d5db6eed4ac3d2673b99c974b037df3f3a6f8cf6cb1d7f452a50e387c2a2dbe3e1f0867ce95cacdb24cdb416709ce271f903a44b0ed3b28002db9184a73f4bd04d82745fef27670ab1bbd59c519fff186015980ea2c42b3c0021423b25fd7e33f087434ad5e81184c00733c87645809c11cd6a42823dae26252c90934afc22ea0f9028d6334184d875694e3d9c0b2852a1226b08bd3a10667cfc4e3495ecd28fe212a856b19320d018f45da516f15a9344875097bce7fe7b3428b82a7d95bd119e5ae7398c847903d9af268fdf1e75adc402eb771ba7fde8c370255149fb1a6b99cbf8e4581c39951cb438cb37b6648ae911a2764e90fc728a0180319a53f984a04af5a84c05988b201f799f81618129488f49cfdac3e03cf9821d21023b6da3e24bf7d91a611613f49e896c8c203d84cb8a0eadc923f458a42e9faa9f41e55cf627e0f9947f2850cdc708e094d955c5cf3a9273e9540bf3472c7a524ff4d1a197dd4350f5f5fe20c28247dc46b1b58df6506f73fe4cca197740d560b5c38a6d604eb094e7b0c0ae5742a498fbcfec73c0cc286c5f3ba6e5302113f221f50bd696aff126d316d0792324ae8211b860a9b2ab75d01d3b0f688fc508174a2b531c65f5b07df895cec1580c56cfc92f883cf2d53e624c5dd92e9c6db3c888deca75a74f94fe483353a74719114dc4601b925fce38bf58bddf98f25a09ec34fc67d3f20b2308b1999ed1d90316f07860607aa6a09cec703c54b6081e80175883c0f12e399e610bc9b5534fd2231611311f67d305b2719222f70ace13e2278c288c840e125d58f20e27fba5fce2132a0c43e73c4108508a5c78e16d122ff999f4968feafa9e5f699cbb989cfc4a7eba14f9723070e9120a6b09bf67bac050934ec334e2eda01fe4aa4a832adcd19a13beb3802e8f28d7fc5db81b62120c8223535a8bb8992af829f2c33e8bf37999715073b6c8a35261108b8d7a94c0a96b13f74f0f7646c044daef8f9b28a13cffe7a2afef345a2ee5ec4fd34f12096f08621964e39918be5f112c12bebfa1ef145a2547ae610ce69dee31dce4c2254f208e0e9f5cfe76578f4be7de7effe1ba614bfcfd80134a5ae6956a4ba6ee149a397790e92df584562f3e12b179f28a978343f4f31e240c861e257dc9ac837288f95bc42146594d25273498a42e3b66e91c8d5002e990472204e25ca5289f296034956dd7663904727a0fdeb966119b53c1e7b1a4f04dedc39f9d601b99ce148882f86802442e7c7300aa8c71df03825d210999b062eacaf832e85617ec1eb5cd3379c64fa7c2d21bd2e37bfef8ae0789f36b9b78554f22e85dbb8d3ccdb911364fc7340561c83a6811b7812177e21fd71a902f5f27df13ffc9d1f335c8a0904de5e7d7da850cf2387530acd8bed510ace5cb49acb07e1bb41d39f5797937de197014d1b0ddb91fefc679df59535d994769c6531f5d171d0dd627217ae6669a17e148eaa29bc2dfe3200f88de927e6327b7d83866aba64546c576c9e8b17c7fb65a379fef19f8e44fb633193663f0ac10de0ab8e1d40d995b84d77340395405aae770ca80dd6631c6294c1be79fcd482f11a37d622d39fb550eb16761b32beef44c2fb4eb4d59fb5ecdfab2f498beeff9af7bd7eba3273a102d89c18b51a6b6bf0f87c6bc9825571244b744c81772c3e67933139ba1ae851a20bf5ddca6fd08d12b56bc04064e0f6e4a2ab6a3fd865be532443c4d353ee44d6f889f83d9b2249cff1a2594a9b4cd6c5d05bac2ec377c4785e14f2a36bd549c24048b16647ae07c298801884ab7bdd717848154f00a0ab840d7204e7800690025c1e141c7399cfebb133d2c3f438b6f1ec66346f6aaa552248e133186ef0aa9500cab36bf930fa22bc1b2cc107e6f87419b2dfe69ad1ff2a65ead796773e683748063c1eff6df6859a9ada8d4dfed8bcf4372e44cc20c8b9efc4e93f83da26b23305525e9ed391de5d1a98442fd332dbac82611c08015f1464195277962a03e7492a5aa7166691c63372232e6bcf73b045c41e50c90a1fe233838fbf3ee019831c5541fe507f564ce11a1c1c0142cf27be680c84beaffea9db7b1e00a26472e4f281df01134fc438cc55943fd13d26d0d235e315ea5aa674abcf7fcaca742a0127ce79849e8423c5401d0704768ed7fce270e5195764ec429eee0389aae567d5255b037723003af692e84e897174d8dd4ec801f7b302f6f7ffe439b96c2f76d44ca20b62992ecf9496383ac5dfcb14bcf49ab6bfe58692947eb2a4678134ad20f7ce40ea0053fb243f669fd8bf14213951618a1768e54a5ee47b380f47ae5f667dbfc4a926df84c9db2486336ed123539459382f10d87ab28500e4608058d5582bb9af0509065b008a8e6efc97dface3c342f1e7a4a0aa698948804d0c2f6553832f6528b24bda245bc8d80d36e64d920a2e213e43380dc30f70b35dd9909f54757ea714d1bf6e1171a1235e055091a0c874e2567c497ae0d54f18ce36af910f861f234a393a06829242977f93df0181d341204331802890f9757b2ee83ff80694a760911e596b7ddd442beed7fa06e29491fd6fc9c0f145f6a1eff4b9c51871ff1564f93827be13aee1fcdd4e4ca7d19077e5f4748a1ecf8bf58b9b86418ba3394786e597469e4a12cdaf7e3af54a6eb88acc5a3c75da850ba4712028df293a0d18c0e563251689953d000383cf1733e73c6387424f3cd64345b29f97730ce2b945b3776acb191113babacd1bd99ec9832448fd149d29f5a6095929b3643979de0394d90b5423cd131b9d9f26f7db39b444c5f93f3f319bc50e0308a7060ec5ce07101696b8bdd52154df866ad3ae4a2257f0fa3a2462d5f6d5d56da290a8e2475d3f117634f2b1af5167f3eecf42b08cf2210c7e8827cfc45a0c5efdbfdb2b033a7ab0480ce103c0b1bc830e64608972f945abf6cb62f7cb4f092f256f0d147c7514c73cb463e7cbf59d5b460904a1c1a7c9a414eb65b8e02a47167015c31cd8fdeb3d49c9b8965a93f10d967fa688f88ede6f3555eecdad0d6290798e7274c49745ea16c8728aff1861a23dbb682d66f6df431a4c0b876124038d2d657d5d9501e72fbfee4bfd18f634e25abe95785cbbc0de0b47de42fa4a65890023b17a736bb2f9965c4be42c65b290c929ba643d42259f6c8fe32fa1db14b771a15654215b8e501d7b453c63122ba0d0ae3a20c104bd01fd3745d669bc50b58644d0ae2a5bf8da19aafe9ba734971ed9a8e1cae2bb6e702f1112ad3a860ef5f3c1c30651edd0549543aacd892606459ab0d907ce17d9e4678370e4304760e3830e4600b1c6fc286e2a5b8643cc277d1fd4ef3075ebf8a13d1a75ab68a92e035a3c85d2966f8bc3d3875b90bfe120f4790d24c0cc9f212155175e62a5c5c429b922c962a96b8828b11599ba7a280d2249de1701b184fbbd191b4bbc1dbf0a268de34c71c26046be8162f796da2bbc87e70841b7f1306cc1b3e0fbca53a4d39b6d9fa97ea2974585afdb891ed46d2d3dd62fa78d1c554043ef418a0a88fa6cfdd52436fe5db8c89af9ae6e01ef0132b30c3241d3bb00b0023226021751d3e2075a3043ef4d6b0ba3d01fc66e4a7aa78a5c74c812ffad3fb3d3926c87c82902ea4711a001b2b222ac56bde722c0bb0af20eeb3d28eb32aeda6014e3d9cb87e6729212494048f4559b69cfef4bd67cd26026c88083dfe3f0762c50f22fdc6b3d46260774ee72bb5f1cc19da53dcc3f6e3b23994f4101a184fdbd987a6c0183fc105f5a5610a750a9bcbc7f57dfcc12f1e32bdd554d923f467cf73f23aece7f1ecda71f0d5212139862d0a862e85dff6eadf39078669820fb0e654fa33a039ed82c4deeec0b4816deebb8c0370236e25a488f00b83ab8b3eb2e5197c1a2f2c2845fef5115af06167a615aab58bda96c98120f3a2a609a7e24252388de76bacbddf623dfc0d387b5cb21695053a321feada6009b16301bb06d0b460d247f542b5b3578b49fe2c1cc5fe31cc9f90acbc9533746a0feb53d4fbbe3f33c58933a2cef2ed1e3967b9dfb04f4136665876593e21667309fc59bf06471a3900a567fa79875bccd37062089e63c32e3e699f6a96a42683aab81497bed91631e682910ef0c8fa3ff1bde8fa68866d4b7b43669e959844f39328b8fb9329f63ae8127e8991b0a700b04ee1780cd702c7a793eb66f241aaf0ffc0d1bd7274d82262033314e5940962456a50026a75aa713b7370b670e6c4836398356adaa22c32a98709bfbce0b8e8110357f4127b55e518d2d35edba194142d3c4751a6a82b21c3b9cb47539d4d61520a4511192016328180b56a5ba24c08db279dccf16309a7e3feb848e4920e37590884066de4ca54f4996e80714b610736c504a8d2c453f379c0272df3983383a4b907ef9405991fb2c963897b942f7b99b5890d6a98e9130665fe868136403e9260358e047a6b4e680729a93a7e8049d0245fdcc448b5f302a5e5b34c5965d2812200bbd11052c1d48c6f651b448ffc325950206624ca31a98d2bd600c273d2d640dc08ce44e43a8442f6278877b3fffd9ebbb3381eeabf0ff191ece0b2746e35e747f978df45a1dcf94348924ec1ad079f23d73517c7b0c5718cabe28af12f7337938a4f0d682a4c92a64f9c9b94908661c4dc41f988460eac534b030fd97fd6142986785948078e8ef7885b3ae3804b13560fb8f2cc5902e39d4c411dbeb9bf80219e07263963133337b9a14253d22d97da13ce5b596b4322b986385f3e61f4130a8bd079b1b28f3d430b15442c20f6fbfe1c2be8c0dee02ef9547f0627c2092f13b8989facf5ffc032833a4e6645179761fa2ab5e53620895e60f71d22df2ba13307e988157e9d734481d28725b6673bc73235ae9fc727aee7c94200b968038e89f1c7d31269cadd375dc489d0b89df6076097a9d3074020397e71e12e8993015a92b130125a161df8a717c24ac6a5d7bb29461d98411c14eb05bd4fd085d2fb02832adc8b1832aa24625506de79532f3783b65ecf4e33cf5721dc7145dc5b2e25d34d802243f381198e01e809f7c0034dc31d81570493c606503761c46a72f06248af100067c948b55c5b3bb382941b72e352c1727aac01f8b5e85e7bb2d62869b8536f7695fae77890cc3bad627b10700a6f9ff79ce7030a16c4af600ac7ccb71fa80b7f6e1a6a3d4bb8e0f0036df2cd7842f808551a2e477bf08d7e406fe45c4c0ef230a7886a11b6241f9c02d55765acb8c352b4eebe801ced1a135204be007d133b9b1aeb1025b84d7b3e2d07cb8bfed577c177c570504c75cc24144a8ff33e484b96ddd8c4f7d55e38036832c804518ecae439c2ce2d027d3d7cdb237b547d9a4fd5488d1850dff13847278d05f0d95b160b5fcffc2592e8cdc8a178a3eff21af488d4728c796c6d4ec1cee48c5a14f8959693a4d9122f52365564fc845dd8b0c9060005fa32f7007b50c699cf0480a7d735b5b5b067e40fabc59c9715626e8bb314d8c7e8aa4d4b9e63eb9fb6d5ef3ffaeeac9d18904aba64a3bd333dd311e3e00753444e80a58ccd02743088b89292bc88cefa2a878271f22f42a09d84b6e2e703783c657b4d1f1756bba9864008b52aabe72b6fe2a1a9f1bedd601f765fdbc698f45dc40acc89a4158a2f0a2dd299de4f74be95ed1692d05e4464b4169ccec291d12a58b21f52270da93eeb3b5d955d6fc9748db5d51b791efc4a12b55c4fb51fa3e22766c04f4d44feb97ff2935fa52ec6b967fc29310b4f1bebeef6232008a3d29830661ad6ee7c330e0c79953dadfe43e491d2e0f82f867e0434c0ddd69cc925e0267c39e6290dc45daca50b12abfe5af7ba981a21e0681a846aa676f01b8b3e67e3e91c5fd965955492f0f6010d8d0c4301e2aae90a94672743c7ca81cdcb23ab9c966751b0d608c9779aa77be75b16328a119fc3e12a1f16f5376d02cb2bc070b45d8d30b8c04ac22179c72aa3af2dcd5453e418ce81e1b971d6480a60614c84b33cb9fc487c79fcda23a3af74a51d54d496237f24eb58e09dfc8c5163800e45f7dacb7a63172fe10f12b003a847850fe240802b20100c7fba88ce9b61801e9eebeb72d8c6ecde8053a028b2523c032c1ce03c484e0d9a666cfa27c6f4cd26b25897086a819c64b2f75072d81002b60dc7d91040b2fd36b3e1bed10193cfca96b7303216f5b61a91ffe02685bacb36866a0cc4ae815383a3eb4d14f03ee6f8605f7bda56605ed1fb5f489276d134457c64003a5b2cdbaa0427183e5d15eb690c94c0f89b0f1c84f905d5f5695e0d2ef0920a42203ccb70fc52ce3a79a710aceb8f01becefbaae59afc38ef9e919119dc1390c3f4cdd710a35926e995e27c5a3b849ccfe344267d27149492080470001a5e090eeb6b16bba83476b3d8762fc8164a8f3c7b038291eeba873542ae0f5628c7443e71f78800aedd38243d6e1096188f7546d1b4e242d6051c53630fa81534008fbd1be9a015a445c92f7bb9025e43dc3d2becf6439f8a4ee00d6e2b7b1bcb1a600a2294e998f857e4efd39f75c89c94b5102be43c12651a9885893d14340c64e818dc7c74f2dd46f6fb180da72808eaad52558f1caab3642270f3ab5eda65b0e792eb8193943824087d84bf2913b0dc9836041b337cac91ea22c19ed824cf14f118782efad0e89e05a5cdab273c307766f759c13a2ee744412118b5facbb802e7dfd59d4bffdf2ffc29c0c8870fe11663b1a7e2101c4580c2c3b0276680b1239f469b3c50491f35d74f89c4a50139a3674abae66b7ddcec50e95a3c015711f708d7efc3ed117f53242ed32173f21180c56a3fdfc32dc29fa24307b4b0741c14cf408fe056db97e7a5eb2d390c90a7e18d45ee62bb6564e27224191d4558dffd38ac49c5701ba649771a0650ffdd3d9331d5874151dc893d5c723c5a130dd93b00784d3ba373ae474878be63e20ba33748aa6b3022f88f18efb5cef1e45949a2ba7c04ab36da7afa95aae945a702be906162616d155e7d341281ae75dc1c5f67252a71a961c744668d992002090d60b6f55a14114f1b4bef4743a06b406ccc7f55113d72813e7956c809567fe7eff0902302aa2c451846bb0277b07d37f0a16d8ecea1e91ce6cb62f12e00cf91d4b6751926d1ff80161438e0158d36d552936029650639936d86d3b849007858a4cfac897ecdb3028ec99d65ae5fcdb91aad2a312917c9e1551103eb08c1668132feeec7041d4baa94e1e49e8ef4d6367af273a5d7ea0d33844f7654636fdbe55fdeb4b2920c7b303e8c69c41a6e47d1639cc9e17c975d9b8c335517751d3f7e0c7ad4c70868373695217821e69dc0aedc3b482f17e986b8a75a88091014be7ab3e1a4c5f5062df08916ec628261d88cd1cef5f5c7874f7cfcb455c399ed9eb2b752dab71e7f53315c33c84bdaa38f5a06284f5cc1d47ceb80c0da297e389304223d3a5af835dbe63c644f55fb4f0dfc27d9c58a1f9d04a78edd132b25c22999405be97d61517297b9ac2e689cf2e3ef8cfd3595bdff9fb95162efd2eeaec1fc4b4048a909ccada78c024758e8223dcbf1ab3661179290e106540d127f42f83469b9d4d5eb46eef476b5712185507d7cfa0e62b29d5941545852d754052888ceaed9bbe66f1c4b8adb9fc82ebd39af39ec412fc74176723e57ca15d1f3e14435880e9bc3b7f4b659991ba1b57a1d04480ade740443032eb6d0a637c05e3a488bc55436f80d61bab8d3c695e637b48443b071a94a118128a89a92f8bcf6c9619149c4d5ebb9de3fad7f5c9b7ac7718b9ed6465f2ff58330aed448cee214606cfba3ba02e61c00ce511f5e70160d132e448b88a5b5da624f45bfb80db03f0624ea6974049e85fde0f4baf2c0afc82ea923825535a1610b6cd370e90bdb068f6a766182bdb249f45df7a4d5fb367a1c2d26da17bfe6abd8352e008bdb135fb18b89bb2ba166efd98c88af80ab99aea5cc1224f40f7285f743a5526a7fd76b9e0924a214d21d0804099884e494f9cd25149100807d260ea46cd472da5823fc5b7dc846727834d022a450414716ca1bad4d58c316068df6bc811cc807cbec5712ac999da9bff71a121855042c43118fd9c7c3b91021efbcbe90c95443d6d9a1cf9b5997cb717fd9d879fc868d8def26eaa7209614cf7e7c6e67f0f44b312ba942e63ef6452025631bc93e3b2b69bafbe2d8bebf5672fe08b6cb0705304a45a59baca85567855f1257aaae47ea96e370b9ce52793662a4917482a616e62d0fbe2025f5d82e94c6fc4510c8b880d0e141aeeae800a09f690d757c6a0e7810cd2990154de7cae7d9391bbca4a05115c53f43f7f1a40e07f90b68e5df91e3f43bfd734dbf2b6ad5183387d822cee004d5e38bff690b21b34e82ac58507c9a3a03ec7099d74933982350cc73e9c18f88ff5546e39d03b697dcab0da10c53f6f4dac6c7d6a799417598061d21cd4f40d64dabbada26eb842a68bf044ec221f8258d80740b5131c2c166b0a9f61578aa2034c53bc46c45df93fd6ef3f40f7b1e8b5f01bc20cc00e743d4d1b244198add2eeea8b4e4d66dd4a0422aad5b36ac3f2a6be276db9dae1ef3eb88ce3b6ec43bb2e605eb32d0b300157d430d53a1c37fd42c02cb0afac76aee32b22683c18a8156b9b2bb61099573687a95a68e8a3ec9dd3a56e8233b454cb1223e588b20b43f3cd975d2ae361bbce6f6635dc922d3e1f7fd3cf1c99d5150883831a066cb96e3a93245612970d849059da6cad204fc8922ac95bef6ca46797124896cb50e84cba84b1ad44bbec791ba8bf9f035090bb017e26d0bb176adf7b2a4132b03c3bc898e974b39540daf3eabd616880ace12f4b1d8fdbc83510af720b34b5f14e8aa1f2aed3e02b5d34057150b6a6a2156b00544ed70892cd68a3371c479cd39e32387dd36bdc2c2e9e96c5277adf721e6513a31ca31f9970d7356503c987ec64ffc080473a34f066b4d2e672f2725a7d5cad55ce5894935fae6af6818f502de1db5eea69e2a9963f285497c07ad39d9f18bba0d37ec88d38fac8b43b87edf94b8930063c460ae438d2b3c88ca1bb31ef0553bc16353f8bb00af15eee2cfa6bb90e7ead9a084f3c6149eace7c69d38c17b418c16fe9d2704c7baee132a9abe7800353d6abe3dd1fae4ff70c02cb21d83a42d54aad31aea119a05f26efee89f6dc42310587f0ccb94e71f2de770a232ce1f77be10e2b79cb1c9614eba55d629144694c6a4c1c77e7c5af2d2f28f52689124980a52dd08cc8cbe7a9640a4c7fb36019408d5e605a075098800148fe0815438814459ee36e6d6c2ef1520a72a504ce2f67fa7c10991a65eb5445d8a849d6cfced4a8ebed37b528a8f4dd11988a8adb091a7aa10b8cc832c73722740010899b3f3acae9c871ae4943fc637ab52f40cd940a64c16423ac8aac261c8d1b70616a4891400da1db2e752dd80592dcbde1c05a0456119f4740c20f104e10494a3658d7f4ad19918d420d241e354219e5c12e18da32da504eac402f806f79f07f35b295dad7a3521120d78b9c27551f8ec792d8cd2b3fe57661426f075e44e1ec13addb30c5b24049d00b56677613476f4040343028c05d87bc139ca91898dc05a059fc387e068b848482552878131a6333a7a4c40daa1ed76f783fcc111bb8264a24385542f95aed47523777e52250332978894b93866500f34ba2b0d3bf7a8fabe5631092c772f370e312b7f20aa854b25cdcfc90eb24b00c0e07214a1442103632f1b05346743eddb6474eea94305908e4c779e76325d5b332e861db41354513ad438a933b4774e157240180d3bd1b4469b7ea5fb63b5ef7f945bc9a75c8133443ab94593ec3f8a252c3dda4c005ff5257b0448069cfe18b0cbdb688a3194453fac11891ea6c98b54c7834e395c1c710d979b12a659c7bb87e3d51ba9ee43365896b447613b55c9e2d4fd9a2bd929fda928d4abfaf4d7f7df6d0576eec795938c9db74adf05431ea53498a26e35ccf33efc07f1fc43e29a2f9e4f19a346940296dd60efa6ab0a1286b0ba5d2bc2510018bc4e860f8c1e24a95e7c5b39092fd01ceb8573393fb83a4a370128a6541dda3dc424d3dc5565d14749f269a1948e4cda36e35010dd410308a830c7100ad21e51d700009120061b03a2323a8f1c4c99f4310da685790bf7f3848b56f89489c32a0f44728d818430daa879b74cba58b1a921ec49d9333fa0ec9819908ccb82e9b310949299d1dc1bb75d9c6707aef6810583c59f518aeae77d0401f7801d8adc55b118017c345514daa2784abc6b1b38c9266eadb82806c42182d4c6aa3789b5b0f3861891d499e054b684c362586f4c5ef2a42723f8494c909d091679537d80f51e57a6ef19fa2f08876d82122a86c00cbdef208cd3945fe9c71939938bfd143f22083df2b30524b9b1ca265b491690b8b142305b52167647f93b172118d23fda0d832736e594e5839099d9083eda12a311deb36b762606c90087dde78b2b93eab95935c6625bcafaf2a153cf1f7b8d85a1b0392218fd9914a56806b1347743dbb5de6e3121286015a541b1a5406564acba2f01c6eda8c23f055eafddddf3b9e90c4919b8636ef0220a2026f08501d864a8882119b8ad1c367f4361a58daf3386df009772311bf5878a6117952c91d66e6b55ec78b5865b4c8a58668698f58400163b7601c1fc5f3edfb84c06839ea8294824c497a393d89062e373cec2868525105adc97ce42d3441d685d7a191f12c68b6ed021efaa37d61dad5a815082325c4fb97f9a57fe23a053efe5fd6d4c3fced4113732c0677627280b3063da3a97b035f8f62eb6175f53e5fe70942e189c60c0366e11ffe3be2583cdfcff9cf7c3518e144c0fe54bbef44786fab8bb75dcccbc560a7908f2245cf03d42c048f1832bbb89047be6face2b66779ea79996f7f13c2b8f8cc18c1cd22bf78e588c887fc39c5036be49b0ed20596a3a152d1a5f7e8acf0283cd8fc361e7fabdca263495014fd8c8e09148f07ad98fc8c4924b9d9c66f5a5c798d1478f4c22cb2eb828be4198d2a6f073929cb89478d0d1d000f3ba868c331e1a3afadb5c8e8940a8c35809ecad188522150bb57f30d24c1f3b4d6e0e03eed606123f4934ed335afa63c3960872e93b4a3b90b3c2be5202db37dda906fcb0bce2475f70337044374bfc297f8ba9a080942841129af4c8a6bc82428621d82d23641f46fda3629c779a5e8ff6a4544fa1c114b98090e6fd6fb502c7b3ee2a7806c6d2f6dcabbaa3bcb5b0b77f442ad266e33e5f4d02a45c921980c24c1c78c75aa97eedc515f0cf6133efd92fbaef087722e06cc2269ae825d08320554131e3311dc1e8c889a516b9345311dfbb415552891889180a3d31f5a5b398a49b1f85910b5c58eaab1ed2abc8aa64649f2085f44dbf843290bbe8160f41b0d9e5fcf64d4d7745dff3055698f37f1d2b97c5da57169cd8c3e7c11ddd3154eb072da9361e3334a1d784ef5c8741308bf5827573c0c9b578bea179637cc98750a3d073e96334ce252fd60bd55c4b7b444eea2d8e94da47f8eea4cc28dc4152b24f951e0591da870fb0620f49151a8b50406d1d9c84bacb6286049c5efdcc3512fd738b51ca57be2448a0a67b32fd75e1b24641114d9afce594c27c70ed444ac88e2dbf2509366f8db1a4669dbf162149d4a7df4c6e1dd524743f78a9a70f3d3b7b0708f70c06b9a384620e50b31007bdf2782527ec95e8e5985ba9831002b8e3ce53c5277f1c6bfb6ab1afda1b7905e99fa7674096755042eb863b2d15a550de658780c6493d5094c8b20003871126ff452b04f1a79da58d18b9b908cea6cdc0cacd5de62fb78f5eda22782421a9e8b44c9bf8c8456ab644965abc3e4168fa79e19725b66b7d68e7b00c6758cbba3cbf3a4f0119dcfdfa0cf252b074af74a5e6d289e80a2ae28d6f8733ac741b88b942e036f97539e15f615227a24712468262a90fed2e848a2f74c37168db20a8826b766a356dad125524f834f8d11b2408e4ff572fd8c524eadc94b26c774cd0371fdc4c50db55cff412df7c081575bb981847a5569e16e7e193686cdd430b4ce284aede90536834d3b75879cb286d141002474e4d6acc7a76eeda6c51d4bcc9b7290efaab639b517ec0a70b1b17c16bcb775b21178f067a479958e402b986a15b8d96f0e2a6b498251a4bfdef06c6a7958f720950e9219e4fb234ff3819e9b2717874628f243c304c5fa04b0b99a26e20a4441e69a1abac70f094c7f6798d5a4491aeda1f09a998e5a9ed6ce9a9eb301245f478525a80b9d3a1a0fbcd9728efa9903b74910000b2afde2fa0f0182735913b95613d3448df5844f3804d2f46854472ab2a26d40f275c771ddc17c3e37368a265ef98799bed52b8516faca7b850a4448bca71338a2e849aa2a78d223a1960e9950dd418914ba7bb3a73a2dfcbb462a189e4f1897b82c382e540ab0f8081bfba8c0d6445d20ed2d4dca77ac034c7a97b57b47fa66adce43e061ec98b9cb529897c9d8bdacf0f94ef4afbaaba8cb344ab1c4cd1fc3a56089a5e5bf9c3215bfa25f4b0741ca807f4266e878e7fbc41f2a9188ab35e23a75d09d9d33a92e27e9120bc5527d0a4c5856b049c0978381cfa7379189758c18a00aa94fdd440d40935de68e095d0b3f249d44e82424868644f650c464a6bcddeb629f04942425adcca894b43e70a5a4f54c4510081ddeb2dd72bcb6205a224d2669377999c3ead9f9a2b3665b865e34b797d0e3793e0d5df389a251fbf14e9475e1d41aedcb543abb1d97d6401383403bb43d70a744e34e6bcf1e5c709409ba3177033c0e7ea2101f7941a1999b868ef7d7c86aa31ebd2deb40def7f9f660a7668eab70c1a70089fb889467b37f0ed6949e3285624005e3b11d76e23fd1b0c9dbe0764f086325e4411e3fc2e89397b392e5669f81a5a16031b10caf367100260db4540e502f70a02369f6c00a3b52b78f948d89152eecd6910461863a2ea59560fc7c1a8108b34e6a0a3320e7163c9443f9b891665fac758b47721ce168be4a2cebfac7c95a92afebc39a1cd8654bacab85f70621d29fd49af74853e5fa7097f7a831f5e9d6456908eedbeef67945efe690fa91c54c58465f8fe9f2228f7f9ddfe50739d8364e61a464587607660f79fe6a01838bfda2f8e0e428a447c3f136a0fa9d1620eb2d75fa8913f591abbe8e9d7f54bedc3d491a0eed874aff783ef3ca841446c1b0cd95c3402cb6041374e07cb1522843aa36dd1c3162d548833662178bf656f7dbfce555347e7de0f34c05acc05289119ebb027251b0b2eaf1c7ace78716e6eaf3dcb9accf7ae8dcd4fc11eed7da978347158a43f8a4d3bc6eb8020ce29a4b590627b2a5c401424c5ba5dbe54f6e705e8eee2547e92e22e4e38c72d6ca0ac6127f62fcc44d52699d9c1bf65be7a83bcecb3e1920e26254eb606aad71b0ad65abe6fcb699b112f9a878f7770778a19272837eb1cf99e82a1e5a6c86a3edbcbdf15bfb147f995d6d62ea549ecb7459b21484a9359bd8973cf6390499417628cd17372922d8afb9d66775ddadbd66508c471f43b33fe90d9f47b2b620a2d068d095f893ecbef282f5c69a0404a18f47a22bed2c15bf12994311aed87a4c37953d6683a69e88ee421bab2c8b3defb74e128fdd784293910f1a794cc5f5e33e028180d0a01eb6829731c0f69ebcb699896e075313b9edd49b4d6c920fdad16dd26f17f73c9d9e3128c9860193524723f84793582dbdb0e2e0828556d3a082195321a2735ea29a0ff51d882216e5866f8db85a1fd2be57289dd04dd1debd02cf81fad0edcd7921772ec1f346b58d7dd1b54c911597f3c5ff8a5c93f043d62db1520d3f1c96545f171a2c11904968e71b72a0a800e58f81b954009b9500bc98a11af25fa5ee0bb438564ca4aa0056fd774f4f9e2bb31204edf8dbc6be09820b5efc4d85cce63c5aaca09c041966fb13dd6df97cef1810e38225c2a1e416309617373d8c48536f21cab184e5720155fce4f387f6de80b6d03b54dc647c749049ae03d80852715839912b844917fc09b4f328b4cf5cbd60dc83a376283405617ef80f485a9bca92ed4d5d962a81987fb50027dc12247cf8ca7ad02ce926a6095863943f4c9c3c38d73cbccb81abf4179b248fe784ea8360e4df735c1b08d60f990df0623a561a210b6a3a9bb75aa593fd2eb6938d2f9079429fb5a0780ded118fd83b4a7b7b5205cd2bdf2042d8e8220275348008e90a6b69263bfb47feeb59c896f1ad592e41fe868ddf2cb38fdf991e5decfa974292ab9fa5e112f26b4e7ca33c6195b115daaa9b3dc42cc821709c354c57bfe739cff95de0f3ffbc4fb3106e1cdd96e6773872c6ca5d0216493d2cafee209372025e4203fd1dbd27ce0d8e6d40cb6bf5316572127c0b00be3faf127329bc5a8b4679e75df4f95fbf170a609575f7a9be1fb717e77656a707cdb4412bab5befd77a53965ca5fac062df55581f8723907835653971bb506bc3f14d38e4a3c989a35eac7fa870fed68ea3ac9c75d9ac48fb403f02dc5a3fea36a672bad508462fb4c22ebb23eb9e1f5bf6dfb38def0f7fa3de679f7662497a2cdaf88dabb696c5aa8acf8fac08636cf189edc8309d25ec92f50756aefb6a323b9ee32e5a40f5d20caaf17dac9b09b8b68ec3e93e26470fbb9a3d32902b0fd47ed456809a960322c2df1aa4c98cac91b2e24cf10348a467944393c302c41e4ce9a09e3aae178aed3216132fef9d1ad8d8b83c2db9fe9d28077a4a35bf9e6e61154645e5c1b25d4341428ef2815174b32f0d4143a69443cdbdda6d0995f67f47539d8620b848780b45fc52470f798ee519a0c06632d6119f2daf04f92ee4b49f32fe8a890f4c07f91111166bee6a2d276fb6abd267eb95ee672ba943826edbb353b68afc63c7c863a4506f245e22e4ec93b8357c491cc9dcb3f9ac1ebc7610d10eef238ad164114aac9f145a6410e8ebd27a7918f5f390b396d50f17e15f3e2efd345f0498e9e664e33934275e14535009e9dac4ace3ec6463d82abc19f2b15411ed50a212280e6eb6d2dbf51a37c8810cef9ef1638a8da934546399441aebb58fbd22c64d4a3f9f292e631cd1c2a437a6505dafe0290bc20b61b2f7e2906121deb29aa8e5b7d6769755353b151e9067bfb834da0fc596d228dab59e4c095af663e682e308fb9935fe2543e5bb8996d01c37a5769c75eff83a61514b5d7849003f044ed765dd1f540983989d5a1d0f6c0da8cfe8737b2aad5b3be30c64d83fab1cc788ca63d2f5546b196749ba55fb41b3de71b56a3da87d272ae15e874851c2511784b656de16b955d9e2449a29c7f2ede3824b7063bf46e63ff9c4bd7a36342e498a4eee0fec33624ff67b2a7cf0fe7c450d1004beeb0db46429214dd2af33a4cfecdf3427045d59610c437322209269452c6f2a389a5498443b0ef5d2efb28a1fe89b62859ee2342d450320d4faec979a137b2aeb7bd55ca7673824d8451488604b530471eddb070ec07dbd504e25d3c24cc8facbe556a5f4710602dae5f1594100d492a49a69d7f53db5891d284c7d899a80e59c2c463849d1f08a3b8aaab242e796515446502aa3690c7473ec5f665d0b81a068ff6da7e6dfbcaa31002e0659803abfe3fb592f970eeb53c2b7e14a6a2339d0a9c35e60b6772971a862a3d68d86df75f2d28d9094b662744c05dcc406e5aec8eadb6d3e89d6a3337cfc71aee1a8c196f631295b2a852789d16efd351d6bfc2be32c31785bf43083a8fac04804310e812b815a52ae662a0b8025117e72ce7e47201ecc00d1d81ddca0ea866cda914af46bd3f1c5f2b1044eacf69a0697482be69978c4eb8bcd25126b125b2b00bcb1451134e3dd2f555a7c90c06614d448c77dcb2817634e35b0a153cd650f9b40fb36b51b5aae401d4c9ffe0f69d0151271bcd835003dff4f71a52b81d186331ca282bbaf427a91ced97d1fa14720a17edbde3c6834d579eded6d11e2f4a0272b8bed5c33cf325798ffcf416ecc3f30fd316d36b2d79b6e6d8d934a1dcbeac6a04e01e441eda054433f8b5aeb2730aabd7295fbc49f00c59d0d83ded0c68853eb20a1c115b99527496ab81714fccb072d0000a70dfaebf8aeef89184ba5179f6040b354236b8d984941447782bb667b547529d8a21d25824e699f26b0a9cc66f3a538547e9518f688b5b24983fe9c75a41db2f359852722856ec6ffe1089a9f5e5055ddebb8424b345b229e7b883f156b4e0e0b5c3c9ca4ce47ebd099c6cd37de5c2f4d0050ebb6557865691536cbf559910cee956bc16c4d9055835b2f71694f22c0eee403e5d973f447b9d500afe02e346244951c9ec5c8b3b99b3a91c1cdab3873ee2684124b7a874da078ef6f885a49a964afd9bdae550c3b9d712943fbd16e676af380ea26b4b111ed38df70ca66c4b38f4f66555edf168a1cca85a753463ace7977b394886bbc9f16c26b06e2eb77e17d5ba361164d2412d20ff7ec7642c27b9563cc3f77b03af23448e221541e41c0fbb918979e0c58bc38e516cc182a7b3943ea1c52ab3ee4747f42098c8d93c141a801342178157f4ec82547e5cdb950b9b6d67b45c00c41a4166892c813632f03b1e7b3aebcbc97a6d3607c5932ddfa2fc137c3e78d596a4092e41f1db280714c98d2fc745af40fb4d3127bfd90061f3a30a7b088f5b0d4f4545645779bb7942ff39632bb5ef0f2a6ea40afd8b125a8e5a57230630709ecb778edd4f21180f082254f1f7768f3ec0cf4a155d509c4620058ceb32a33c429925dd5fed033f3660c6cda64cafea0018948b0a7c2f300e9d96536d2145858951a3a88c972a5f7870d15b9e1b2c73def13b2f0439d12991d8a0131b0aca7406d59357afaafd7b0a43c694c74b788bf564f485ddd9656017028fb4c4f1e168cff90731d8175c6bc9454c02abe0f4c40747023787c6374d159053d8866db1d9fa10988e4b744bea2e3b8a424c99d08341f1dcc07147ebb408a12541ccf56c0d71e617270deadcfac2ca906eb34b007f58c8a9afdf5307ece5cf8f560b62e691f4c5c1e7145d32296686a5b505213bf21078076582753eb89169b6a2b71a7ea9e7de187a1bfc810d22214ff0656390b4b77530ccd3f2c5658e90e33f39c337477bc888e0ff2e4b012a33be06f9e09146b027b9d0b5002cdd0128cbd02632ea0977b6283dce34aec80221e61147bf294134bc0ece86e3c30535199b3cbfec1696abab4fc689d5d3e207bb33ed92fa3fbe7d8522e1c1f6637323e47c56d7e87ebce276550ef44a3d64023e1a1e6fbc04b31db563f6c2cb9a6af870df1b83585880db7866879c12d281926e868a9438013846a6d43baaef608378f41e7736bc1504ef27910332ff08a16eccd5f772814777c91b035712a8e8ccace23624d7dc9051bb66f430187a34d40ecc5d40ce4cb77932ba4f09324c5cc9da90a5b099bd261ea997d154951a1b5ce39c5ba34acc9ef6a795daad4b0934a6c7b488ea0cdac2549ceba731512fcb19e774c1280edc57a4b6834979833f2551b057f55ae7d165833495dc99c9755a7e5622587623f27655e9e08df498cbb02a54f12a52bd09319c3ea3e731058d902832dcddbe7a88e24067800032c306e71f4dac5d26fb879ecc0425de48d75ae3651ef1d3f04ee51134ed75e69c194bec52c18d2bf0e55e9be3fc8d48fe9f86d9ab78e793361d44e72fac0dc80f6e3e4ca6841d20b9e3e8ab6915a6a298071d0c0205d8e406f59ab333cbb64d88b9a12b851f9c1d1215a78c9a8f50e3a7e2a367caee0182c828bf163f14bcfa8a2c5a3606e8d63bd92be1a8df20d6d04f534ad197713e09e2b1f1aafd470657b2b38f6361de58bbc9dd235136f809872564e03ec956709409820a9ffb3286fced55c77434c31d0627b9100c699d79860e66e49ae86a1e3d22ad2508d7f4e5fbea91c97ba45a7a112f1a80e94ea1b1915bb91e3610711725473bd52e3891113b5aa0c20442445037d17184bd85474c1d315825872d3d9eb144bc1d93d942e394c5c21508e19166065c1978d587b947fc81f0bb3cf1622e4db76e70531a4482c6ece82f6f2424445ff4cbb27ee4a2832279768bfa7b53ad54b5049bb785fd0daeb50d77a78dfc259deffe4c4c1f18ef7540f262a011664fba72af3d378f498a3af148aadecc97027c51ddd52bad3ac639f9b574f76e54da49559d54fb36365decaadfad0bb911c74ec2f1d18011cbd94e186784d1a793c7d1591643ede8c71a7d32fa8b7bc6699de0276370b38e5efd6e4c8ab028b7adad756499d7b144e70b20f2910b172fffde4af1b6fa26933a3cc02c5d5ab297f192373f8744330a009fc9dc0cc3daa464b42e79dfed948a92fac4def7f87f2b3ff637b61b35298d504f74739ed2b603cddb493663400e256db8518de5297203e537787ca84067cd1933564e118cf2c0fc088e7f8143eaea3603a779e59c885ce2d463607b325db0dea4d38b13424e8240d176bacef6157ae99b2093edf4aea397ec029f44365140494088110bc1e3984cfaa359eb44b6f4a2f73e5cbf70444d20c37473cb2c56cd62a01b3994f6fbece27d2419fed29f7b8b41d364888fbdc87285a303f11877e76628836dd1b1698fc92196b418b3803c037c249c7bebfef0a8331f3432ee3b3efb8077390b053c673e72b49302e56d0110f68d3627d5c315db8d6a69806138f6cea500fa8088b553600d8a88a2c0b38064c3915fba16136d3496e1872e282afa4f65568ac2005d53bd2bc220842877fa1b48bac4adafba635208c0688cb236249d978b46ba0ebe5e8e1db23b887f0917d7fb25452093b443d5a94ab9caa1ec8acb5f46cf81484b5c2ae682703e884e11463076d23089d69e1d4cd3ca824d39a15f4e9f7659f6ed17759f8e0fbb0be103e56943937f57b5e624fe314b525b4a2dc090f23b7fbbcbfd3105c15655bf2c14805f44bd82c9ea58c677214d84fd352b984a283fde896134a0d1600e90e1c29bfbaa1467b332af4990e922da96b7aa928cbd4758159279d987a01cd86131ec0f22c45453264658d3ed261b9e0ca2d49c5bebe504a5dbb07f5ac0b948e250bbabf38784c52caae451492a4bdff316b868f420b28753caac156f453e4b63e1a620e887caac125cf62f3b6ae680ffd8e51cfb388236e15df28e5a6f0b4273c1de77f26cd7063751cac464b968593488283982cd99473296806398834de95be8b7993ef35cceb8581e1873688b31e44e419a0bb61f61c79cc7996acdc99ec18ba13df76e5db3940965e7d08e81f7b2621c8bfbbf2a79027b0ab2471852563ab6aecbdc2abb16c0587dbc6a668fee683cc11f07d9bcc63a20d712078c3a363b246a2a3afce1f7fadcb1013431025eba47e8f1705051d61c53b23d384a2a97bd579715cfc99cb4b637c422ddc71d12b3a4e4626c4e77e8ff3846b026e9e040148b3de2cfbd7137cb280661d5eada7db7dc1da3a52ec9371037bb685c4e7d9bc972ec25cbd981451987274a7e5a34e9d8b7a5c05131b9cc8729794099e6b2ae7d889d4e0f47dd05e0c84c754a5ec2399a004ba84ff107cf3f8cdff2f7b91bb0cc908871b5b85fe6edc0e22869d2eb2de71b2a23e67610258783dc88d2a8d974ac7c6f5d8deef71f245528c824c56eccac6b2b1ee2817c12b2c7dd4e6d25e2213d29d19e509535e9a6002c2d2f6a4e0020e74219d9a6cabc30ba37b0cec0a44db03d7571f88a7e45c64a25404006a9006b1865badd90257c34505adca58a5f78040297e587160227d6053d17372a7a18b6d602d1df3831fdea293e3e5fa336b5816b96c40c1a8120e204c28d67f87fa5369cce4df2ea991897c7b46fe94ee640d5bddb68d37526476fea72574a2994f5095b4ff8cd21d71f5035b2698f2f11e919dfe3bf4347c22df4350c8671ef074fa0a772cfcf4d030595ee45e21052534ef56460ed0482396bd28533cf1b81dadcebd51c9e918a3b1cb1598c8d7e28c8bce952f01fe0050fc6f32286756f3273c126c6781bbdb03b6a9dc0ba79b423812fb119eef6dec4123689bafb9f8aab3b7b797346b42dad8cd540b804d9d609ccec5bf5bc14216f722b12f64b3d6302a46bad78f245b2b9261152d67c9f5637878893595b0c574ad972628d6316abb9712aa27992ce46035792ba0c9604a733fcbb23f1305ef8922510e5927af2d530d9b110e6b50c50c110f3baa057ad00ad4d94dc7242fb0f7a1a4f793e73847aae21f0663da776247422a104ee2fc61f4f11f1e41f757360cd19444e291837ab958cf290d9773157b5bf75b99cd5d59880743f4b3feef400b76d60dae898594d0dbaa8f1ad540337b2f268ebd3ed90daa62bf898da4a4f8823e19f3b69bc0457b383688f7c39b2e99d2554b88a604ac7e0824ccda989ca516f3b8150f38a58e4a4c592ed77d116c6793e24c0408e760f611ee8ad12ec7ee180527dd9216c212cbdecfc6e7b3789ad519c0f50ee7309e0ff211156241b10f0ab262ba6383b1152b90418b649be9bcc5a96676bbe9ccc4d3f3d2d287d5871ca88bbc902312b74134441ad25f18b95b8e1798ae037be6d8e43fcbc53ddf0c33546fe3a2323436910228b24464e61b0997a3903227057b1c7e1a1b0303bb335d1c3f20691c19fb6661a97ecb02dcb05557d040153586745d8895d13633318e93e979cc8afa7225f3795cfb22e3a619a22179807dda76018af8cb317f68560d3e72bced12432b819b5b3604d7cece0ad76121a90866b135df40671571dcb1df5103f617a1a0be35ebadb62dea1c7b33517751fd62d96188c728c8a0c46e68da9ba064757cec00e4b8fc2864b0190cdfc8e582595633ce8a5088990ef6ea8963b6731d595e9d87ff5c87106528a99182705967c55ef129176f0490d640a8c5cffe5167004e6d6e252daf3da288f1bc8c2db5744e3e3401e3bf2250e55091072b4c40f3ae183036651c7a863d280e921790d4411f2bf180aee6375bc14cdc5b6354b6fd794ebb61f983b4d636d9a24c125ab03e722d7c53b70ae573569acddb459f675a3f4b493c8d53880e3cb6c2e2105b8e9aa33dec09ecffb2cb019f96906db472d66a4f21c40408730d8eab3e04d1fe7461c2a36c64f82c29217a77b9a13731db1060ac1771267108bdcb624bcc9388d5b0b29e677bb1bc4deeea3dbbb5f9e49046483b0be55663be718d04a603f5aadd5221e424373a431c798882e71cd720a3f7d08d9bdde76625b0f6432b69481c2c87c896f0072c77c60c72c16201dc9845a9b44a27e20aa3180c5e3fc5a533aaa778249b9f93978b4fdba3531276095380a594e463813e1644365d85bbe9b519a98a12f51fe1bf0c7b3cc9311a002705613234953ff5840cc066e0f0bc82054174494becf3a235f0281932f6385d81bc1031bc09da3cd3693ed6d8164d284f191bf078c2f140ccdf3819ea9a341bf6230908f4a5f3c46f1c917b27b8554e6835cd047328c54e0b707142da69d6fdb9580cf4c380b3c66a64343684a9ba9931570d7cbb00d3bcf233a3da3455bb0c5dfe69d4882021029d3e7fb2227aacb1d635edd6844ba375fe8ecd443abb4dc1a12f203c06ee5ac35190f55fd1388c49b1d08edd9a5f614e7888889cde7097cf1a8139890b5af164c388e1e46cc7fb20817363ec8436ecf0696cc5ffe08a6627a27fd9b81d518dad51363f4463b3788f725c6bb08f720632538a79dc301ce952f46c677d442ade98383be1c0c47417d35d60ad3a762f7b70e3d640235b6cdb2a26c7ff4e7f87667335cab05b8084ec24e405bd1b9da46c589f26c705fa403ef4128e1e1c87787b06081891a311b711dddd209eb5d82051a8da7c6312c6a0ddd015f524ba5c1ff318459fe10b04ecf4d3afadf246f6952c91f42e3557dc916f20e289cbbb39c9e9540e417894d3a33b16a24c681cad7067453c31b2b8cd10d3ad7697a72c344eea13fc7c5bab907f5556d15cb7fbba4f437802df4e20c991eb4ceb17c0dd1e8373d4fe21c1b82a70099d6b9561a1eb839d484fc59aacd842d4a97a95014ad3f092df51a51e191b8032b10b677c36d5823e3593a462b59508810b7c9b968d953ee4b836c0531701ff3c2e02f819b7666311bc21507b0c24ac3e637e3f9bcd239c210e4e94c7ba050fdf51a0e7e403def9a56d581ede41404c403fbdee9fb91617395dd7aa891bfc44eddc9e3767a0a60f9e4f7807ddc240881202523ae9605d2a400e5535d7a0ed2395a4135f7874c9c12f400f1964bbcac6747bd4f079860a6095ea9023ce9da7bd414046e9db702195c3736fde609d38aa9132ff6fc0c94fa2fd47ad0435166d6b017094bdadc1935474389e5316a9f28ea4f23783b04f932898c1c289d75be2edad3517806d1aaabff29f9e47ab3720b798d57f6e67b8c208ec4ca38e82fb6c1880d2584ba1e712fbf454c7c6506754707747294e6d70e3df42c419b7b657aad12dffbbc93f44c9c7d3303eb2e6a84a72b958c0c6a050be95ca532f3b434a7d05ee98effc29259c286dd8f0e1123ed8e7fefa122c01ad4f4d97de8d00c31d09ebb835230066a55091d7ffa77ffc00296e4da18d8042535bbb96008e4eeb73d13f4da8f6008381b39a38fb32649a62f3278b0c2292e88429a23fa6abfa5ffe6bfe5cd83d38245a3fb05aa737b0f500429293784105c4ee87cb336f9c348893bb52ccc385eb5190e2b5298a70467ea1a8e0f4c4ca258df8dbf7e289159eaf7d9a349b99fb80dff3db4ca20421588175ec159cd3d96dabc26c3d11e6e1f9c486fb0bac740516adfaad78dcc4198fa431fa30d54f41c56c105ccade13e905a341c8d3f8aaab538db1c90d0ca1377826c6feee5855aeb23829a6c4164a6e8683284e61f4c206f2e290863d82b2a3ee3ea4ca6ce6ba2f8cba0f6d31c301dca022d49f75042b0b0f897339e811986d45a6434f51fea84db2dc5c80d46b403158945b3e0802cbd8b0024c405d2f7eba33c21b568854fa2a04a4044672c304142b554d683c17da1089f9ca361828072a9c7994411e1baa4c09d7750d15dea69a3ffb5c4475c2ccec240128e877e5dba024d965c7b9a080b48bd0a687facf761cb119f258413e3fcd63417e8287ed847666dcca99edc01c14ca2e8cdbe1d5256962156ef9fc6b821dc839c41ace4cad18fc24091cc4ad874b8282c36a15f3222b5728e02ba305e1d9b24b1e83db60e21b97b0c1d081ddfd86c805c0ec17ea6bb482db2536e6db3bbe46d8cdd7de5b689d649cd33f8329db6ef0f158184673096a06081a516ca2d1354ff89561fb76e5b50b215cf717d6adadc978879f7e46ef9eb73b83dc3cfe79235deb0d44121202852b1166591b3b896d48a744379c6368c5aa736a7d3fb5f0ae12cd3dc04bfca0638ae4af66b29d23c9cec73c285f70b7bc195565108c0122aa5555bf8e2553c4b58374fb82a9f5fd52e0a9f17f7ec5dd976cb13a5c58ea3bd1f2c9b1d0a1bfd532cbc04325f0e622e9101db6790bbcdc307398810b88a1d16bcb3ce37463e9d3299bd1bcd129a8003a8a4f9d9836741cd176f16ab1a06052817a087c8056c0f1df9109af5020dbaedea4829d20dc2ebe933c3dba1cfc6b6247fbd6b932075d4a91d918d875fcc3e40b53843aba11be6e1a2f47c6925f8ee7cc1a1ea781d1fe612cb981e9b94c889c0da0c8a15b75219e669690990fdf7f92fb4b01b34a07885dc626d0e777d6226e5915875bba06ddca34eca273e87ddeb9b9bf9c9ab1d4386a0a0dab32e7c39111467e46fc6ef6618a81d47437def3a3a4b32bb23db72a23aaa716d14ceb2bf02d775b9a6c52d763905b6196ccc1bbaf84297ea75033a709516d23787ef711f43806f9ff9dc46bb9b4e035f0eed4dbc81e31ca321b79a79c921bea227dd9903cb6d212ff2d7adcf8489e2e406356c53cc5c8a0347131ebbc78eadb2e6bbb2fd6018b9dceeb2b6586f3633accf803a5ed3c24e60b5685ba55a3c2dfe39d322caa0894242e27ec3f3e186439c8611149c84ea12d8a42817d5b21a1191c00dd3c06c15906c129398f7b5bef5afe8ec3b44480c267287e34db36279e14f1820e312e364fc8c4d6d0c44195af9bcbf7ac72370cb61ea04b51b86800f30c9f5d9d68d5e1fb1cdf5d6401494f32af52365bbd8290f00b34aeece06dc24d45165203798665d2ba52f5d317b6e9616c3af068c845a3a6407a7f6d560ec9cfdbad6e86ec37e47312c7dcb5483ee99998f6463b38f27656cc3513aac3b1d5a794cb37da65cdc286a3325f8d134bbdf862e299fb09b05ab649ad365e561c5955846424884c4b8acccca44203f243da11a388c3e2ba7ec679deaf016164533718a6120e2d891ce8168681fb8f101a421b4060c5a56e47b0ce0096cdc73c645ae81e2ca2d45622c283107dc3df73e3c371c0075f5de84867f8bc7a77a41d7363abf930418a912eab33aafdcdd5ac08969af38584a2ea4fd8fed36ee4e56ccfe7c0dbea6c6d2cd4a2bf14077635e0d0f937bafeca16ddd5966e63d4d9cb14a078dd7d1dc4f7bef894884bec842c489474530f195d1f62e86ee46169da998090b8d11a7aaf7ba401b5fcf3f0b025dec8bf460eb72ac6fd67a447ec23e43a3221250eb5be3c00ff7f4e4a820036745dce815972fdcddd90ae0a563a99191796a6e3e9f7b4654aa29d9fd9b155039182e89e108997648c5102a7da99ba99003bb81306e7446513d57949e4a929c2cbe3103d5f2eb1a750f1ea13019c39b4da8221b1f0f713057bba578f15ea7566feae838b4e751b2d1cf02c11989b2eb4b8f5d9ff8d6212eb529562ff984758207a04b2ed82f524e3d1314aa5a2bee5213280cf6002f0a07ffdcbfa89918e25e2fa595e5bcfe607e1f3ac7a4d8e2b7990d54578ed5b462d433e683990b5555a9b668197a6b67bd610a816b47095a98150f3864286602ebb01bd10727702f84e89957396a1a01b6f0e182b3bbee65f138a387ade4f3ac4e994077148e4ceb22ece169575cb67c8bd0750474c19b408e1c8b2efc5f279b49eaca9a24eef8fd96bf796473e01bfdebf73c0b9239e2cfd171120f00f7fba3f5f88111145d4ae9e3d4765e72317b29095bd83c34ea1d4767ef7bdb45adcdaebb49fb73e60e4513c2ca7e37fa309bcf83fb8febc3c2383790cae747852b75c31c01fb40b2b048ce7b8b048a71f9541f2512552c9eaf54f1e356e1870660aec6fd651253e02382d14e8946a6c4999dffbad4c70303b2613598ad1ab36221a78f22459e188168b7cab32ac6a1e2e078f3c703d808a4c393832c3d71a28eefb6e83b81cf80f90c1407fb00c04eec13219a88797f140396832754985dc32a479383a3899e1d6bedf50e32e6e66f0928cbf5a995606fc1ad42b81d591158f5443e3fe54745e258efa2f2cc6ca4e938878740f3dba1ca21f5aa603e79094699f3688b8efeb8dc06de03fb80c02edc1320cbc8797796039ac8c03f9412843564dda94b4f52758a9102e6682507038563db0b2e35c59da4a5b472257fa3a10a9925fa73e88546953c7e0e1571ec02d7d325473fafeeb2858988617d7c0db1f392396b996d2f15f0863fec569cbb610544a23b817580f3f1972159396d64b8922aa7e2e515281f940c75327d3bf2d11cf00284993723e45a5d72c2e7a35acc76dbb44c9a87fbcc3ca3870f58048649abf71907e4e32e94ef71553d9473525f8ed8d7969c69d8f9ce68cbc0f4e27da5ee870679f53788220593bdd46bf39449d037ee38faaceb602d73568d95f55b9da3903c5e69a4ab9d2807c5179b5c76dbedbd14a1466c5995304c618f5660e41baf27e66126bccebe3df29698f367c3d7f6aa4b98c1b1c012df572184e3ab590de3655f2c3c18a59d9906aa013db3b272b30d89c28bb55458dbc2f39326e5d3b5267115a8089b79d720be2e792bab516cada435a475f0297bc3af787dc2ce343d16d6ced000fe8f5a6a15407c1928775784428097451e4caeaffa2b12927764a2962459ccc888992c7089efb95b0290c21dd9632c79c428f9b40a438cc2aeb4ef3aafd09635813d1d1e544aa868a7d24e3f614499cc0f0461a1412f5ef2b0e88ac9454ca214b001f25f4da55023529ca61efc1cb0a190d8b1367ba3f903d935c5621389bd158ebe537ff4474eeb379f8926aebcda211dd00fe90adb0eaa572b7b3b6d07b9c5639e649131f2bd7368be1acdaea0245d98527ef4304c3f6803eba174bcb43ef5d469a34ceb6de0f7df5b98086bf0120d4587e1eb82264a60780fb5d3725b2fc365ba08c88b613c9602c8125881bab49fed2804b955a74b61b464605a70af41699c0ff64c717d7dee2555354dcb7fa6d41164833de0332bacf489534d66c665ba2afc567c6a9422ca3584689939db7265e8ca18a7ce9cfd3dc32dc86c4ff20baae50e179e855765ebc5a9882f0cc76dceb5be798f873777f6a148d73d340d0f2dd86425b8955b599d60d9cc9bb3bdc946ecbd83f88f267347a1f889c87d77b586cf89116dbcf58b2fe793ac02a5f6c7f0ec2794211315f6e901adfc4d82862efbbfa0c6a63c18528af1721b1cf9fd9d9ae358d5f6c303514f23efe6c2e92aafcffa9dc744c12900f55312d1c9744d8372f0519a91699e4081ac426c39b9a22c268a104f968ea501cc21d9986088e1f5ba78d23111563af8a136861bc8686d383f6cde3711c063f049bca1286c5113882e57d5c6d368cad45f97cc22b3283e20a4bb78fd18cbbeb935609a43ba74fb68fe4d3120fa9109ebe5680a56c1ae440e3884f17afe2002614c5c65b1b168db7e32c06da0ab80682790e3541d1b8085fb096fc1c21e3216cded5f5059ec5a7325f47cf7e223cc55ae721bf0fd904857c031daa3d078b378d7c4f66a147d9532f745e28f98ed6ec4750c0ae5cce3c8ecebf22b05c9b745c70afe1e9773664ba5f6a57f8752904ecf75f1d170dc94f7a22edd02df571e076f4bea186049c0fca6bbb2c8058adbd877a37de8ef3bbac1903e2a3efbe18a03fb8a722c6c2835d5822a462057ccfadf4d4aa0e4d906ac44d24049fb1d7c039b84cc205b5b472870754063771e4192636f2287a96e3304190de7c22e1df3d1c693870051903c1b81f4859fee0675109604ce7b35c3b9ffd56baf72e4bd433bc69e09a3e28b9bb5360e26b67da4bd3163de79a2944064d84c9ac187f91a69d2cbc3a85dd3c224701a0c550bd6cedd75a117e71e615b44a27d81e8408044c34c46789bfd0240a11f4c190db671d95252591d8d3c73d148dfc97d0252ae743f28451a87126084b5caacf035f079ad7285a481f7c2d193da59c4a29c579a536a985c02b8bd4bb8c672c990975db906c527286c928a2df303e09f264e855ddaf9fd2a0694f48110467cc4e37f731a1c0356ce750e3a00de8eec5d9819292bc9526c149d20ff158093ce6830df4cd7c4ebc87e0926c980ce669c7d02c00a298d07db5250dfd9e4e33f2e99455fcef83bf5535e3f3a2c1a9c35f36362e194c34a5fd3a26f18d5349198c8f6094a68dda6461e3663c903a8462c966d0a9c0f89d756c1721b558c7df3410f1db468c2c92d2726a6c232a8220d12bcf3c8a4dda8df027ad09a8ad2217aa8e948037ee6027aa1433716225c95092bc14b200602ef87687bc4bb09c14697316c61a48ef348f56edeb85e896a13901b13f35042c3300ed7ab123952679f904ee7dbd9a89e486fcda2896ac625c042a1082d399122e5127a347a802c06c72c0388a6f5c29a584bf54a8deab540d7560cf3fe18fad93066c1790aefb8caa51ad1383db1e697624bea54b8b67abf283729d5f3b1bb783e2646e850df4e409ba5e1edcfe3dabc9e59a5487e28290e2e47761b76cc1d341b94c65379ca9c9fb8ce4b86150201543c82362fd77eddf8a43c4678285b81491be54e10fbf3cd325668d0dd13ec2e0a8c24b0426bbb36866b3be22a964ed43f1f85576601cac8e7e49651e7f34cbfcdf1cc4005037c7037853a260aa49c8d897154fe34e96dd8da477a9ebfedd4b6ad71f8d60c1b42dacf81a9bc21ac6688733fadc0f1a56441b1f0d6cac145fb10e2aa04af34cbc0a170bdfd48a55043a38e0cd8a193362eedf8bd49e8e350ea3188e515b41713aa07247636c3958122456bf95d9dd415b6cac22bbc945c33a1d30c93cdd664409501b4f3ba936647605983e1842e9e0560bab3005450c5467c30e9807feba5606e4b22bf8d082d4ccc54ba2adb47980d3045e5eb8e7695aed40a438a002b50275554e05c1ac9d8a4b3e0f8c6b05e446c815b224e3394fbca124f745f8dc106abc5203dcf2a5d69bed847004616bb214daab016a25bc7d08ef36de6046e7386eecffe09628426ef3f5f76c4de8616b7e3fff32bb1a531d16ec86bb8ab5ace797da384f6d77f240899d4a51aad2b43604bfb652178a3424598a52c72021b83057e8fa390cbe136e7d1b23699645a1cfa9db8466a19b8b6e66779d57d82c8feac9d498cb8adbe768dfb4f4d35344e7cbc342134d30b76e401339d7c471de25422200dcd103f81bae4a592d59ead8c457b96cce09134b6589184e72b4a0a9df990e13dad29ae71a509f9e5235d5d32873692ca67fbe2a0da41d9e30ad2a238e8bb9222cf089f7b8713c314292a9c657205dd008eda7df6a06275e0aee40114f7eeac838a15cefab8200dffa5403e4f4be9547078c197ac5193a4ce54d46a0cfcb764e148fc9dc6bb891c1792f0365e596ca9cbd214a634a576b28809803a8ade77e0435b8310e228ae4a468765b11c1ae3c42834ea63725b0798b104ffe35087d4bc2ec36273a8829a7a0732c277725e2a37d5f7282a5b3aadc914342119bf305364202a7f2bd96a742949ca7f45de20afe30652ca81e78dfa574751d84c3e15460a58775af6ea44d81b2d0f0a3e54feb2341e2483a3d93d18384dc69169fa61bed0b2f7ca2753594113b849ec534e81acd0b37192503acdef910b3d61c40ed4dc935603877bb892226823960048aa00c5987b013cebac9dd9a5c3112508d4e80edfbee158967fd5f4a21498564ed25432dcbea40beec43ccafa979893cd099ae1a0c377b1b37bd759d8215c76419b1c57c372d22fa6f404857bc9aa11e8d02c48f75d57ca6b8ef99244d1c745d5f447227a29c012d07b2d461d704671f267b049490af1987c43ac24285a186f56af83b613430233c1b5546b757503cd6191a0a42eb29bf74aff3f6198fa1546d976be4037ec8fd58be6b8d0f8c75cfd08d2e4e28ac7e880cb14124132c97890b3e17b0bf41c8e7f602e0fed79d74b2f148825cbdaab62fcd7bdb821027eea0130d6a21080a10b63e811d706ff188081e5e6d767516567d205e33a5d1c40068d35d183ddc34f7252a185dd28dd5fc5bc38483a839789618b758bd410b4eb8b4d71340277c0c118141a69b453292139903517cf9948af660996efa226645ff1898c6d565f41c9863327d1c451361a294cf5b3c2d9d07f3552389e0981eab46bca98cf9bf84f17e8c4ce8ac1119da8c221b90911828a8decbf24dfbb960ab18a381348ab3e99aaaf31fb325c64071fc5e22349d8c8c54b872bc80c7086b8254040f429569994f6cb299bc2f7988242331286477fe4f13261b96897e6aae21b08f8a1746cd33af91509d1b3ba2018870d01d6948f8545fa8ea4d47f2d9c5bb236da3b9f96670038a6e4046606841791fdf65bb7253259cabf77664ad0edac8b3cae059387d85a8e5fecbdcbe175f2fa87710436a1b431fadff28bb2ea906af037eed8cf15dbe51528066d951909ae730faaa70230eda66f6bd8151c99d800595d5f04b951aa851d545f11d540c06af94de05e49cfadcb56427741386dd1bdf1747c6ce415bf35ebccee22a11b991104e0584a41e2afa7bb803a2476212e19783dd07cf8dfe6bb7d775ffa735b2f59a558d63e825c01d8161ed5cef09040fbb02f01904dbe92d7a069c59069648e4d5444a3d18f76dafa2b22f668714100b45a4fd5d82282bd042454618dd669f258478cc0f761989866adffebd9aaccb9d4d6d838be4aaa2a37f449b34385f011e0be6677f9454c927819bf33434ab15eaba712e9c25c16880d8db95011c390441036b20fe379607887794023f137c559babb957b6dc3ac009feb2a3828f5328ba1719fc07738f17dac7dfdf18f32ce5db73122098b683f631f1ec52eea775ccea2b7ae9b23cba052c27c2c750de5abc64d20dfe7c926ee3fcb70e848e96a4fe169a704584ace2840f10b129ebe99d5a9b0a2b9a8d4de36d864322fd3df054e45d1754f279e77d47142c4f2b3649780936da0a08597d8831c68b436304e5235ccb161ebbc90194f1043e3a040b0d58301a594d3a6d81bf22d73378ba6d901eb6a86253e11aebb6284b4e2245bc1ec12969db991cb0f2f93e6a3808e82a003bb43d00da6e607b8411c069ea8ecb004ad3d365c0a2d81b0de0d8fef1f86b2d2164136964ef2df70ee60cd90cdc0caf918afbb599de48344fe96cc9d5c41133a113abf1ae647a231012e844108a64d8ddb87988a848d32a874d6ecb7488f4f31f8c5d22c36ff422a15d0d991bd7633bf155b96da53be5b62dc6a12cbb184fdcb2f99a3ed3a7e14e694be1e2a91e6ef8934345fc78092952515969e1eaedf2868a50400f681e42a1eaa20ba50b7d22061a0630401aef461c8c47892823d1d014ed5d622a8738f39ee2e9b15102e6e98798a72a1a134d5f9046beaab83ce4b6f8d1c594603e990adce2c382edf860ac95d39091d8a1d7932222ad824da20fad13a16419b11d8c27075653b15558a462ab3c6aed21c4d526020243dc56fbdff431ad58c16db1d65a2b174db57ed80c6a4fae7237db62b01d288394e5b1244264ea0412fbc952c3813dc5b31ce2ccab7c087a167c44777a154c7fc4cae7210e1396cbb8ad02b1b3f2ee8d83cc5d9bb3fb92a30e222befba8bad603c8da593f648b9f6b579befb8ef90eefa0c776644a0acbdd52ae7db97cb2711a1d52001201e5205c5b4b976cd29ef4e9e1e2d0284836e6fe4d9f1c5e5e72d8aa902258c4e9c0d5d80191e5c6d80ea4919fa787a206ae1caf4aee2a75d29ee663b19d975c4d9fe9337d7c5e770e0dcda075e28b0359be052708c1d4a1dfe6b7ca3d83abee9c9093fa8f0ad56f983a31992c904c6d980e51a199a9935e41202af4fe86ed40191816822c75208dc47a2eb62353d812595e3b62a593f6a40a10c090e36dc9b013625221c7c30e07e9b14691a65924e47849d99329f9926f60bfbe66033b7a17c9159c22083068c20b2d28c2198870e47187439e6c66b427afe5902e7cbaf941c5508eb766c906abbd3635e4215630d01052e537cda97c8b37db60b8ed663976344e095879f71d2beff01024db87ccafc8d68eee2a78087d87eb7dc92edff4c13274d29ecc9a113bfa3777e0b6cb52821cef28d7fb92fba4631ee61d3990c0064ab074708030dee1818909db821db0136489b5204b6c064c7c9d239d5808208d08b01170172bb27540649fec89a2084de47ab15cf129e35e424082223d66548703cba4d8d5aaa13890ebcd368fe3b63c7da60f9481f5401a26e00a6b013121843c031e603f4db0dab9200821d75bc28af42bc6767cfa9cfdc771dc3f6c877bf5698f933fdc0fc643bad84e116ca755241ebb55529d75b62456a45592be94c8f242b4db7347e0c214da2084129c6c7b92a53d0931b6435d9906b95e9a4f473a8c042402c24172ba91bdbee6f44dc9251fe47a03fbc9f4d29e3cb6139425b6f3baa627729f451a72bd3137fe46397bdf53e62e74e2c70ab9dece2fb247ae3011c4943c0a582ec8180d5a321a11c6daa08c9835220d0ad6038c07595a1619268385000b01b683ed603bd8ce56874c575ecb4618d5b2ac03ca7007244639b3732266c40ce20f2f3e786ae3c6b361e326fe604376c318638c31c688314a30549d2ccf6db3d4aea094674dd472d58db28ce27649993282323aab82d542960d86afa5a0fdd892a91e195d32f523532cf9c51b7b64aac628a567af6fda3f3235dbd5452eae5f72357109ef603b18ca148777ecdb255731cba4500a4e5016ca433ff247ae200e5096edca5e71fb74133ad94ba5522ccaeea3d43eadd3aa127495a0ab045d25174c69b775a2146545515a67dbea21ee6cc7a748ab7ee4e714befec9321382abde81edda8942591685b2289409e521ebeaae1445bb7a670bf6ed6a157c67c4768dbb05367ce2b0f8fa1eb9eaa85c917e15299f65a676c9d4e8225100d431c24488a4bc4fc49e3eb64bb66b6bd789c33ab0b8a38fa58c7e043e71efe7e094f00e6af111a48f4ee9fb3be81b0f4152fa90894fdcb112de318790f089c3a704f4b10f113f9acfc1c9c14152bfc5dc3bf2b3b97732216b03e2cc0b719aa7277fb008c34446d8864c491b208a3dcfcb44880c6579222de49229f9298585ffdad58faf3a14899913472d56d8600ff1125e0a81324e31778ed70054459db62157a66e1b51214990f007a3e4f8a801e8c5dbc8ace9dfbddc010b2f317411815127a314ba6cc41d532cf25224c7c7c7223ce0ca641a822e52c492f0e467188513a008d2c9351946f18427642c34c92e328c020b4c6429a6c85c6eb14951247b19461134450e6a92b7cc7d7e3b9737ecb562e71e8f551ca4831c07e94c5ff1f6aff3cab1677285837e658b35c6185756ce09418f7dc3597df62cabf12602d9d27608571bf74cae52cee1afe22f761d8e9a37cc75355c0e23cc5b8c3dadda68c47ae1f665190862af3ce42aeeb49ca59b99fb46f1172f7720441fb4733dfab692838457f0d71ba74d7a6eb4a2e5f042e9231dad601cf123ca43233dde08840883c3a7d1b157202d2b84b8b13de6d81e1f5bad4a127d88e770e7f87a97cb75355a3c621ff12bdf5a54930aec75c3b616b562b5be7635b6fbe0b6fa5a5b60d7b61286b9f2162fa594e6d18d2daf60389ede9824c2a0bf91395cfb975bfae9aedc25e57d55be492e463c3ffa19631c6dcf4639b2ad399748cf43ae587cb2d8c9020391d8aec09fc550a654e016fc6dcfe44a7ec3b33e762cbfe9edd9760855d8b74fa8d2bee1ad9efbc6827170bf72443a77f1a93bfdca81c8d5ad9df1f42b9704031b6466eef4d928bbca4db924fc05b9d6d5e0ee63c35fccba1c5ce6feed9fdd461cfe2e9093e34959967dd4d1c8b0dcdd98ebfd3490b77f1ba0797bbc33c32e07cddbe38d2d67bf3072ce1c694ec6eab72b3b1adcccaee564f4231a81107d8099f648168644e77494c50760b84ef5e325cebc171886fd834018c559866553cecbf76d440974f3c5c836316298e0eaa6617afa6cf56f0f1b80b5d11e16447b182bd773ae23f0e47aae723d88ec07852af77aa42fc743ae1adb9029ec18770905cb03ca28650cc3201b32760e633b193bec2219c3fed9903028f665e376e29e728843ba27eea4439c6d7635b2cc03d26020b0a4a73cfe83421c3e25409ef421e449b87fc487e8a7e0234858bb41763f9b9c9dbbdf979d6e23ae26c0467b9d10dcb19ba4fde7e5d1579347cfe4e823bcc55c5f23088bbfac843b1cbb1a1507479f5d1f3f6cf2f61f36f9a3e7aea355f5cbc95f7de95b76b577f74676eda3fbd9e4d1e837329bffb26fa3fad137ecd8b512d8d24bd847762ecbce1d213d0ba257a463b7d1aa518f4e651bad1a613cdac3ca60eb31af5e3b76977f9a56aff9d03eaa694fc3300dd3300dbb86bfeed9b7ee7aed61cfee61dac39eb19a1d3b8cd765a3436cd31ef6af265f47ab82c0b01f3bf61f5a056de0d1114090c439ec63c327537bd84b7bd86767c9067bac08b9b2c1033b8609650cabc9d8210c867d643c1966b3d4810dc26c4df069519b9084db842fd0c8ca42644a469ff6e49cd3888c3a31ae204e9c43be7852d43eb518394de3a2c6711c17a3f6060b04653801555e8dca05f4640dab46d3004c490d0bc14eff45164c0e6dc829e3e6392ca4bdd261b627a5a4a4a4a4a4c0b4273b1d327401816048e9d2b02cda69d6f08ba93d0983e67534c9f22521ede9d8314fbabccb3f1289f40f1691aee9688fc422b1482c124ba6baee461d214360919056719a4e67354e9b9a90560d69d5bc94a73d4de4265a155945108136677cf3c86f3ff73899c2a2b823573aa01013ede66be42afbac29ae321c592e964427a0271f1434ca601630fcc1228a5be068021baf8a33a7a50a283608f3cda14c63e684245e7ae40419e8e022c990fdf43dd36b8f5eca51104c7bf4457b6f8fc2c48827ab274218fcbdc874e2cfcbf45cab542f720a7b578df706b5aae219345d7215713086bdc17ecfa7b769953cfd8c5671a7bf813260a6afd14ebb777fabb6f77cf6eb4eba8b3da9762775f741b2244b229148f8b3afdf6cddbabad9b86d5bd7d90eb600a6e86187670fa4a1da473305f67be92e47fd87bdeb307ee94ebaa794c3ac429a920d163b09db95959595951552f7d21e2c01dde0abc9f41b0d95cbf9d8ec9b2e98569d6ed0dc9de60eb3d4125898e97431c9f429b3a73d26edb15a654f4bffacc56eefc3be9baef62ca6d4d25bfc954efa56ba93d51e3de9ce9e3b97688ff6b48ad49548d8c676df30cc082f23ea042bc46453a7852663b0436d274ea4ee15cfa0f6e8e30aececf961b56a89cf48a69f3fd3497652739b4c5764e82a020db21d22e87c0369e8a7096c7fbe7bd37337ee6c37eab4475fef90f6e8b32ba43dfad1f5648a5e3b076b96a43d3a7de46aba668f5ccd1f98a2ff662bd3d993299d3fd1890e5c67f8c413dc90bf99bf2cf39044c7ce4818ee78188a7dccdad44505f41006f6684f1ec22033370aec078522f658f13ce421534166ee1b1b38d84cae4ca69ed1ab7a799b7a7b74caa65510df60e29a01318f1358ec114756f4c1b0c8f262f489ac68c448f489f04d3411594dc0960c5d4ad290bd0cd9cf33222e00422d80214bf9d10bec07857af4ca46b66a9465e8824f32fcc12028597ee4026bc4cc5f1605cad502604a5e0b40608066b0912b8803e4ca32880716c5f6317cecc3301376e8b50ac318068530ecf7a53d697a39062194a62fb23e538c13b2c8d0a58427f26703451ee1139c45c8950d0fb9f2a0900dd79f599638268ead51974e30863198a4d88a984a5082124c61643281094c100352080c070922737f39b92fdffd89af63fb2a88b0eec6c42da5b7b49c629f977639e63738580cc3d7eec67ccb6f24c4545c2a24d3e4cae7cd40cc18f641dff2ee7094def2d8dda06f012287b66017763572f269f413e9dd73f2089fb26fcfc9739ec277b7c6bc316b8c6e8cf0fc9671d86db909de6fc5596eba1f1239279fe04f37b067af81e10c43f81af803923ffb153888cc2d8718bd7d4b56d1724b67b95f11d97ee57e42b26d156c63539e82331073e9b4bbd1924bb7f7a6bd8dfb4ddb9813935ba661747e43ba4b37a56b63d382edc3fc43ab309c0199b1d3928c8d3f0c749e38486712770c63a073878374963f1ca9dfb80b7136aeb7ae77e7385a4f297bd3b40b258649faf9f668cc326b2136253647d89c12c2547ceb008239f14d8cef631d63c77e7b316699b571ca9b1f6cd029a1f4da3bbc8197f12524624677582225472db0f311ebf05e743f7aedb5942d9b479452c70e1e3146d794b72157930336e26fe638a33d6933a33d8a6fb00d8e09ae74b820cb4371beb6ae11333d6cd94f72671af4214218b93339458411a6574004049e7df4cf83c77aca6bf883aff15ec063f80594309318ae89d88b38368228a2555996451b458ca0073de8797054c4250202434440a08811c48688102aa20904847834d961035744783590267e5e79ad4cc5774644b12e10f58a66e050fb2733a42d8de86e0477edf4ce21ebb5aad331852d7dbe7f26d586b212096718b676fed81fa90265749e1d459e73b613249aa2329f72638f8ca4f98c72f1497b937bff34d0277d646ade2bcd0d9b2ab884b32ce596ee72b95cf4421cd29c7376d928c54727cfcf9d3cef335b79fec8d4d4cee1f8ea9f25da236a9536ef62ffd5aabdde473dd73ded55fb596bfd81a9f9ed9bbd91a8bd1777e393a9719f8f44b6398ed370b3da9bdae30a6cf7c42853fbd4a636b34cd35c70158b5c999d4376e5f3b3b3d76e2bb953089066fe409a198b7efa877bed46af1c3e75d928e5f3b125572a9f8fac49e7ca9c534a958b44011047e5f6ea50c1448860a727523a49e5429cfe91ab582453f359d6611d5936cabe833ec34390701f8277904a273d07e722d91e345d40e78720bd85646abebba3ccddd6c9da85a363df313a868720b11f223fbac53bb297f090eed6cd747432bd48e0135ed80176fa21b053fa23e4b10f414fc247f4e965e66ea693b738b9a9751aa77d6baeb30b71b01ba3ce4e9ef3719e8736479848866dc8d4b491a9394fb10e22f21a910a2d6c40c4ecd9944d5ed21a488369cfe06a74eda30cf32ca4386b4f4a994dd94020a22f53ca9e29f7340f7166b0113e92f29b961a915da5bcfb73260ec597093bf6149c946fa3cb97c9747a786f64a189e9c6571c6a6f8af6baa5494e2ff3322f8b36333ad5d7ca60e54df226d36f7a31995e1e5d921b4df11ae1382487865e72c6b6d7438c000020e60d83bc47a0997ff0b5c3a38fe9c53f38847a7c10d6c8605d917e946223572baea285e57d2112c2c0685ca46460f05bbcdce526015cde46ae04f0be4900d72453358f11801e005073a14cc1c05f06658a067f3008ca940bfcc10b652a85bd0b654a06c7c8140cfea20e94298c6f8432d502e7805d308b081487e847d8ab6915c54cff30ecf3b0d3e8aa31491b69236d6ca4e9a36fa65be3bdf0467944a9378513cf8993564598cd1557c5bd69b936585654525eb96f6151d4c9fdaecff5b71e99d26e6c65285b1b836d26edb5c4dfe8f4f36ea32cc7b49d65a311cdbae5e93c8d4171a8559fe915a730993ccf865cc52198ea47178cae8eaed848d81cccc5a5033550464b29a594d23b8cf722fbe7d990ab0dd72cd33ccf65210dfd9792e95781dcd4d49e6cfc225737aa90e56d984c2f3550464f24b01cd973c9d61f8085298855582462cc6183309fc693e79c734e39f4d91c37ca8a7d2e0b81fd288b526d87c58232a256244bb8842544e184109860cd22ed499edc4148d3f11053f2a37fd766ab26f31057f3c5e14f55afe18f87fc791fe12f267f5ec41f4c822dc07c7daaed31d5e341457b9a605b7eca00aeec377790e71138590057d9e5270f0aa00c6a03c84496b7234c6920036560981a8134f2d409216449670069e89c33c898b03cc8920a617a9046fef372bcc6d348744ed4d4b069df6067308bd8683401580494c165ed3f601ab2a6450f64cdde4576c196aefd47ab48d70ea455ddb507b1bd4ad13e772cbd10b9d20e44aee4b5c71e280366ed45c8555f33459e3cd2e6571e6bed6f3f42be7e88ed2bf888fe9661128029ed10c345401a6dcacf0f213ff11148766cef1f512ff109fb10243b56ce323f44bf051fb1bdf109c347fa2c78c80a1ea282ad4c699729180976ed3848ba2d46242936491279746dc62e746541891c3b214ef67189f6b8244964ec42a030cc20c34e8893c540748e51dad31e7bdad36ae4aa0898d2aec194f6d940a1d1e5b276ec66ed8d5ebaa43bdbc3dedd6cb637a26f283c5086ac6b18405081c010658b914486af106793dc768b9029ed35f6401aeddd9158f645c8d5654a7b965993e9f7bcef9a0e48a3fda69b60e9218c867d642c9a4391e89c48ab103cd0ca300a0fb0f267caf43c6418051133643ac222f46eccdc3864ee8f223e92c55822486476ecda085573747a9bdd113e61188848f34dd36e810e2a3cc04227849464eda314a98da4a6c9380696136d24239429a353d5fee35431109debe84286764c91fb3a5a15b38adc0742a45744389613536843eec722bd8265e0e9d12ae8c41498e43e1172d538fdaa8dbed893fb7d38852c85dcd25a93e96f08678aa9bde86374aebdee868659da8b2f9026ceaa9d9bf048f66d74798843c33b628c3a302ad888c9510d36facdfeb38169d5f6946befa743fe5236fa1ce8ab0f532596281761d0434b65b4a030b68032e86df4a10896e8c30f53f401c84bf42108892597ded8024372bf88e883900883663fa20f4346f440a20f5127c218e520d18748e40390861ea317829d52fa2119fe9a3eead0a893e9bb1b47006560a5f10350460ca421127d808930463023ee6098d2489b46da34d2a691368db469a44d236d1a69d3489b46da34d2a691368db469a44d236d1a69d3489b46da34d2a691368db469a44d236d1a69d3489b46da34d2a691366d1a1b050365d00d1bfd3a7af48ac4f3a29569ffd0c3fc64da029a0113f2079bd4643a23d36723ac61d79f902c77e4d9ba94c4067bb0dbca0998cabe5a2d69b87a92b36f0505b3d191db1a2c50ab96f44a450727bb54d1c9b2c2bc2494a25505b8fad1824a8a4c834db9ca91d592f6322cd8ba824d32953d65cb81ad589a605ea81d98975cad58328379c1bc562c293f2e57794465b54ad22b08b1115cfe563aaf979cf29b560dc9d58a5cb1bc45c5b3bab15015b1b82a2299ca6ebaaa974c655f71554332955dc5b561f1b25cedc8958a8ee4912b96675ff5c8d5cab3c3940b656ab52353d9e56ac52359ae95a9558f4c65dfbe72573a721571b2ab88e40a7b7655d155af5665570dc9d5aa492fd12a08bdedd9574af4aa48af549ee1d54eabfad90a68050405bb028232ba9cada2c8d94a8a9cadaa90b3951672b622cad9aa2867363a39dbc9d9619eb497d9fcad80549e7de5ba302f18a2f6645723cb1b9e20b02b6f79fcb7023a2520e52b1f22e52bf808243b58aef2234e4ff9102a6fc147b0e0d3868fb41ce2b05ce537dd726b642a3bcbb591a9ec2bf7b47de51027e59e367c4ac068847d051f91722ce5d88f50d97260f15793b37745eca74294558864f6159e56f5215421b22153d9556e671f3de50c183d0543996200767989bf2058aed981c855cab36f302f920cac8a4e865baf8ca810ad7c562cf96fc5ca99c45f4e8a0a94f6b294a2fcad5c397bca5d01c95476ae0a56a508ab10b597753b96f44f8568e504a4c9564090a60b81a55f014929d790d252eca46052d80caf960871a35e7639eaf7c326cbedf277e5ba2ba0f6b27777637bc59fc43ee471501f159f6ecc53fdfc196cbfde1e97071b84a816b839860a6134579016385512190ae57ad2adefae84716cafd8c78623e99bbd44942e046025616eeb6e90f63220ed6544197faba09c6d51a8217f2aa2bdec30ff682fcbbe0a922b202b20b98279c154f6ec5b09e5ace21550ce80b093c1bc628703cbb00588c83e60144019863b20a1e568ed62e9cce0fc842a799ae59bb60dd820dc624f11f4cb6c388350b04198afebb855c9c1748d5b7747a3f46d04a158c0c65190096302a84924c98449aba20c1ac5074926a7c36c4a641039ae0802c5a1e9339db477eaab3c47ae4e8d4f09e8bef21ddd57de5fc1439034deb1b2f221f3dd7370e4b7ac661c977d87cdcb5b66939048fadbbccd0a424f8e37256f2ca388f3c1bce4898d00db9917e26839d35a36c32929519b5b3906d46a5971d3b7d661b9241d8eb09bee0a152df7b2602853d8cb071b9a98d0296a128ad5b86b3bb01fb683f9c815ad1f614a5af5238ff1480c6bed0cc954905cf198766c512664875e593e5e964c6ff300c10d597634b611cefc4d6f594763c3237c8a0fd2f90471b0222c2038814199c27a362cfb87ed504ab1ac05149264842919221ad274f04303d104d6fe6b9691f6698f25579aeb04730f3b1a26172fa2964316871d0d1641b27db4f707977938ec68f0f01d562f2915bfe90d4e0100264d805c45b0286b238833684a2c11d65eed450bcc1c63e788a5129046be9200cab840cc2f2863cb327c0831a6c15ced614d2461f96844b0323006e05d7ea73dc94399c831b7cb51a44e13b5279b4993264c805a15db05630036327ed31b0a7f42322ac6de130efb9ad7c0fcc56cdf5d8e15b749b0d8c3381422789253194221022732ec70587c84057b3647dd20d2e6b68cdb2f18d73a1a30b08d8d37039de36104e9ecbd7635bc5b407a871d0cacbdb42158190e754fa8779e39e69e50679155b2cc3da10ea1a80110f286c242b03566463de61fc68ab9d0de2fa727db6f92435d99656047a38bd80f9523ea980e0e110c2525d43a9bbb7fa6ee6800206a4f0070e707ac46a4bdcea0bdac863f93e9f7b417eab6508eb92c72ec50f874c33b0a85a18bdb0b2508daab553197d79eb4ea5e5e236a0d4aab605c5e2b6a15002eaf45a93aadaab97c2552775a0573f9ade6c6005c0382f5ba3b1af6a81c271cf136b7c13e7a783ccc303f9d2e0d8d0903d199e67498a36949ccd55e281800b85a9116a5e6569d4aa46a3fb0ed1aadc17697f9d740da138d687535285ad1ad3bdc4aa416a93cb72ad15eac811972cc5d916197c2da4b4b62657e4aa14f5ae5e2d2fe3bea9f29e69ff5fe6579e6b067aeb95c5a853597cb05803597cb63e056c42e31f8335914fe6eb2f8f3642e7441bacb9da101d05ef81a4175d864d27b9822afb8a7c6407456f115ef0cbb17d25fdc2fe266b591b74ff78f9accf5ed21891c7373c83217426164e7a53bea1bec4a5b576b8bcb7281883df20f98dcbd1fb3c518abbd9c8c4261ccc7a5d69af3933f1677f916630744fff9ef0b0426bf766b8bdcec68c0f4db25654ef3fad90931f34e7dde5f3ce2cf85cc1bfb00827d94de6da51bf32e7e6bceded8b7f46d72f6a26e3b76ec08936b7de95604d43eea7ea520bcdbc3c67746a69f7279c30e47ccbb976eccebb5477d3d72c73cd68abf1e19757beb51df6297a31e55eaf0d723a3fe958efbb4b311b37754cc0f98fbd9e5f0ded887778b7da47ec074f8074cf6704c9dc56187c3e55df1478383c83cf3fac6df0b3c5de02032cbbcc24e8819fcc52cd3dd2e467b5a7af72883bf236887a7c55f8df546bb5ad52a98ee117f41e492dbaee8f2d26777a371c9e52598ee7de3ec72683eb0f55977a35ffa8dacf8dd5d1c5aee1eef07f39229f9eae20048bde6b0573050a789f1665e1c760400feb21afc591898870bdba3c1da0bec027fd90c4e692f0fcbe0188cc2dfb38c306771dc611f302fbd3b1c2e2f3d7637605e8adf62771dcc85b93eba77b77498aef47abf1edd0dd8ded723d72300e628c9f51f11b976b7732d7d876f230ee6c2dcc5bf3dfbb7d71d2027d71af187442e9dc53bfcfd80c9f52c0e53c23087b92e3bdc8f4766717cbf1e99c51ba897601bfbcf2e889cfc9981985d0ebb1b2d2e97df2afe6afa7e3099e539bcc53fabc33f53ae3a78b9bec5859dcae1c266b9b049effbfd80c92e67f17849dfb20158d27fd4648debb8986b7d77d7fba3266fd1087058d936c9b95ccce7622f97c6f698843dfda63123ad3a610ac0e496b3901bed68b0c036b6e55be458b49c27cbafd894c8f22a6e8dd2d980b9051f6139ed8eec1c87052301838364bb0cc363c643e5f6805dc431c889fde0901624579a19d8906590501c8a2fed957208b59f2c2b10a2c89fb6d3f637adbda08cd8f8eb82ba265f45413d41082c1b348bb557962f4513c64e1ce1042cf2e77547637ec03e7f9acf8f5c693b307bc1947cd47c5e9a8f10a4c89fb603340519e408064823bbaeebbaae7b770d0c9a19b2d4d850395043d0d82487ba89862697724242e66448c49c142c4af1818ddeb4d71c3cf6ec1647f92f3ee3628cb1db07ed59169f35292367e18df45e601910f44659966518fca12384300959d0a835a21f61b8c9d99e0cd2f35262585f98edc85e62f3c30c1bad8252dab8829d6789b1a93061d022b21375a29c2fb034bae6293e655cc62306f19059d4893a5107ca8010cac71064d9a33d39caac8c11bb3cda1b8d3e28347a6c11916576342282477b423c7a1021298d3f42aeb8e4732d59d22a28e52ab6624fcb06fe8b3a7215390053f221f809726c41962b8873af26ea28c1c27348b0f0dc120b3fb1c581859f34b03a413f1b8c618172432d837048898c878e7ada4854e263c44845020fb216d80f0e1101019e960d4f4b06599b4f163800120165c4dcbdc30695957f100c26b962c144c8ac218e65b0191caa36ab2929afb466a7d929563fba5bc52a9682d928c9814d0221003f7ac445b4d74330b6da8b3fad1a6559165ba3ce68966519fc89adee24f187cad1888e4a2525e02072442c1ce281ad2c77ad888f9048d82453fdc6a076881de22f88ec6ed78d7c8c46971d10dab3675fa497d847f1db0ebf75d84baf48ef9b4877067da11008114536c32786408520faea682f6208715bedad69daa149cb344dfbe85b36827104b3d128b6224fe4e1e169f1b4785c500c21471ec9cdd31936f883c50e1f89d8a869d0c298b1b865af32d7af863e628d69dfb6e6eab5eb03beca0e88eddb1744662dfb4d63d72e7608632ac2564d0abbc92561bfd75c42498419e40f06d10ef4a45fd0c9526220ed49499bb6f484009140820889f144405e415a25842ba27bb42731113c728f6e1bb802e22de14296907e407235319cd83967986c8da93d39c2d7b1d83f13fc4dc3b46a74136cafa63dc9c4351ae1199c15ecfcbc84524209a5cc320b6b604a4a69e99c3cda93d98b93cc498f1bb83225a1096c051bec01d611d82fcb3682a09242092150c494120e7910424934042d6bd77469b0b4a7a3bddea16987401906c314ff7a301ebdf68dc6b0b461c4d930ecda370c62411a078c431c28bc06354a43c3597bda0e1d261b4a318a2f5737714915e08590064baf321d1d1d1d209cbec562ecd8d72e8410d6c8d58d340191ae903f1834b7146051302898643144a89222e0410c82e248c239259c5966328db09432aed021c7d1e3218c71421921be0e2db352962b4c32e291842a38619e349a5e24f6c106613eab93e9b70821cd32b91abd5594e93f0dcad032cd9cc8348b22532932a5947e1bdd4c928eccdf34ed0e089b6ddaa3c73532455916e2cc7f25a2d185382522b99a3e4499fe945e3245fbf1592b4bd22ae844942a64fa6ca8554f7ad5d252d22ae844d12bd31a269906651a89a270820bf9cb8432a54051c090bf6c8a4c6dc662d7d0d20b5641287f1ca4022dbde46a9ec21f20284307ca8099ce9f256c632366bfc0bac04e25edfd180165fabe324f254b32edbbb4f7f9d3aa3662662366fee64fc659ab3dca042d1195885a05a555721575de56a77b4b6273996f65537bf04e48139f73010b5d497c32bc5fccf0461ed9b98442e70519e2d8db2836d883ed6f99cd584488f5c0c6fba2bd58e3bd902a3973cb27d8f92db2c10772761011763ab04f4c488ed9b5b16961f4b7aabd117e7b1d447b7d982179e66f488e3682d03147d82386813e569aa69c42c38658477b31c67818638c714239219d10ca96b31b5eda80f89b3633da6b1c13cf5041dcf8a6bbbbb9c00541274ff4a00b1b8c37dd5cece616070b3f8210d66fdbb67dbbb4690f9e47ab36b8c18dc79577477b5047abb8c3d6d1aa98e177f0889d9437f03b78f480b77159f127ef3db765b705c8fe496cdb838710d370a74687b1214edcd1295386bf690f1ede040f21c43ee0101dade007fbd2837d22c94e8656c8f0091f34919ff0c112793ba5a12389c871c07e90289b56f37d20db362f91244a93c792de95f09793374ec7923e5160bb156b572c49858a4a22a9509175345ab08d2d95deddb4820641da6b166e062b2fadbc742405088e3a32d52c6ebfc59d97f74ae92f5f5929dde59bcb8d3aa77f51e7f497aebb51fa4be92b67b93e4a5ff956626979f795cb72d8e16861c15fe9198899e52eef56eecb59eecb6147e3e548ca5f6e24d25127e5729d7ab930bbdceca70b73d46955f67e24e2523a9012fe56cef25eb9cb3f169695b3fc83442bf7c1e222a4552cf87b7679b31c4253667179cb37972b04487bfdd20dd25eaf1c48ab5ace75345a80046955e97d21375dc245742c02a455241618aec076b48425bdbb95ab1496951695bfab0a5c4f7a974add4b7b7d96bb62710988ce25ec99c09230f70ec320f2cb726c5f8c39270ed2a9067202fb65b97560aa8980a9be4e0687783a874322e6345df1c03692dfe260e3e8071b9bec80680fc3dfe8434652bef4be1b1cac0c2273a9a4921263cbe755bce5aaf80669d8fe8a56ee7773ded4ef7ac475f7fec4dfe9f25827c48af76c398be3acbd680121d987c46e9ce0fb5f768297108f4e5f638469d3c3d7780ebdfd015a3e4200c42418a8fcf292be6d42727cded3e8f0f3f034c240dcd89ebdc6866f641fbd468625a6f42b36626e912761120cacc441a4ca6197a3e510fb68f908fb307d06919fc4d374fbd9e128dd306178c241645e71f8b1c04164ee84e8be027f3177fd0d9b93be363cf6d9e1ef88dc370293ca1efd7450d68deba8ac1bd7d18e4221a2875d8d239d2d9146b26e1c6ec25a6bb3ee513a0905a7278e246a4f22d139235ab300bb9675e384e6618a2d91ba9675e348259b22d4126a09b5845a3d5b422ca116ab15a5d09a2c5b22c19675e3583d44452da196504ba825644b24dab2b29a682d6bad9d2cf96a6f8a212755b6504ba825d4126ac559e5c5b2c66235713d212a126ab184845a932534592da1c9126a4dd6a8fec0145b22754129b644ea828aa42b684957372e066944e24e8a2d916cb22ccb322641d2d5de126eab92b2b4fa4425c5964875e33a265247465149b12552ddb86e0693fc499d924d5189d2455aa5958964b9a68b35b52a062025ad82cface9c5d3f3d3d3d3038122787a86ded303d4e30a121a7af1b07a7c7a5a3d4a7a847a7a7a7a7a7a7a5e40ddd3b22948b1255257372e0645296a156475467ceac6299961d35e9665591694bf8e1224d4248849173551d58282828682828296803363b9a68b35eb13582e1db99a3c322581e4925e3169954a5013a1569526a9e5c6751f7a11c95565b9582e968be58a3bb148a7e255526c89b471dde4690854adb52ccbb2acc9a393859a04b5c76449a7809a48a6e23b6e9344a476b9582e968be56235cc93dbeae4892ea1f89323c47132f4127209c9d51412624d2319675dacc9724d176b764e262b114b8847ae6250504f13bd8a434e86a678b58a343b9d56c9bad3aa8d6b157c96c42a312de99d2639f2683c2c9e1e1e9e96504ba825d4120a02720515e151a287c5c3884f13ad243f4a7a349c023e8150609448a446a66c321e170f5096b5b256d60ae2c9b2894ec5cb1d998a4f9229b14b4c4c72bc6cb2c3c3d3c3c3f39a62c8898f4e911d223a328a8422d4126a09b5845a34280ef1c8a09da1a1211e9e56abd57a228964d19010915c75ab7986865a3c4bc099b584e4aa795a423c422d1e56098a0dc27cb395e337ee03f6ebd764c5d7935611b5ca3e5e42914532ca24f259a455ddaa7899a455f01990759982a4506e9ea11dc923571a90a99501bdde01014f85e42aa5a7d49e4f8f2672fca89524c7cb1895e4b884881751914edc893c3732156f592621569e3e393e3e1e2873bd82727c0f2bf3b1a42b8bae847225917cd25e92963c3215cfc56ff155891c2f79722c3289e4f892a9f8df64b22937667b632edd984917e6195df9c229b428145f2ca1eec9f1f165b23840324a7b71eab4177772bc0c43ec98c589a3110f588ccefcd91c81fa2557cd82a978d6ab819a355b9905c10661be145696b0a391b5baaede1f30284f084b3177ccbb6377c786407b34d2877332e89b932b2a867dbcb8ebb608b71b9be460f7c1255fec77b7f4ad74bbf7104e0365b95cabcce3dda2573ff378cf73f9e73df57a4fdc5d1ce6cdf3fe692fcfc5f3f0e7f2d4b98b83bb0bec639efbe6f2e4f584c825f57a425463cd61f0f0172a32743d0186d4935a53dfaacc63771932d819179176345cb8782d214add2575007c2675977ff495ba0f97c70672917f3183b1666666f0e77217df5c2e75f1e495ba8b13b9b8c036565b82f5ae4561bd08e3b598c2ed7abd3c580303f3805fe0254970e1722a44c5b0bd99a76eefbd66ee0781be199f4d8e91270d196c426dad047634e24d3750feea837469eb4add4b6f25b99fe49bde6aff4418fd92adf1c23c840843763450b7950c21c2a8af8f9a4b0ba251b1c6a4e4b2f52589858e393223be595072ac418650c8e00979bb11dff874a38374df0ad18f0712ff45db5ec59a126cd588aa12b54756965c19e0323232de111d7ed39dcb5f682f17d788509744af19544a7b752f669ed1c1057fa8a75077f997faccb7d40ceaa97fb4e523f58ebe52f87b7e015d5c5c30960bfe5e7ce6db8b990ef599e751476306dbd8aec350986a3e2c484818410b7c7239c469818a49ddcc1ece643926a64b0da14826c1850bd475b8b353280905966b32323232ff6a08beda9365650d41801b00f74ba664eaa87777b60a66d45377b6877aea2cadfa607b28fcfde058daebbaa76e1cc2f216d79260ebdb25534032b502db029f74b0fc0896e7f002fc079751af3950d8b6d7614d095a126cc5b03d8b5d3c589ec36f240ec7e27e5a2ec0d58153e02001a7c0c9019fea5b1ce210e0ca3c87c32e478ca9efded7477df70d758bfa6ae9f665c68cc3ced4c3fb332e8b4b864f04610832097d27ebddeb0f9a903f6d2709b74669ef25539ab6934161535fb5b88c918346a4351aaccc9b0cb6fed362773462ec1f31728d917dc4db7f3f62641fdee365bcdfb4133eadcce2ddbdfbc5ec7de67e392a52bfe8eec6df8f17b97bea2c9748e3240104763958bc9b9ef66a1787d2258334bd95ee0908d44b47fd08cb566b576fcc5dad4758628c18b96bed567d351d101d8e99e5c67c2bdd0eb65742bd43bdd4e1232cff661e2ff3bedf8f18395ec66b9cd2a5f98bfb599859a0686e73c01acc32b7875b19acbd4ef53dbcbe050ecb73b810e7a56a4b78d4d9c8b079bdaafe42ce9f97badf1145722a762e343966ee72170cf30cce80cc2f3e3a625fdcc5979367eee2c2116950b4222d4a2582f9b8608c85b19a95cdb8f8a8653fed255332c66757d967b2a9f1bee7cf945dfa3365ebe3c22f4c16768cc9c296a1f9676aaf8de4be009a48a7fa53c054bf48d60f00eeaf5e2bf8cba0e4be0afe6c94dcff8e5c452330d591084c350460aaefc4a6490d93dc57813fef057f77813f5392dc77c19f6d22f7671a6889dcdf017f26256c8b0f147b7f80a93e4ca7fa2c7762c230f08c182f729f44274cf5a1dcb0a4797161d36c0dd4de92f6e95ed229f91e204e0329b19fe6030432d85cca5015559d94cd7db8485417c0fddac83562deaf16f96a135f65529f7c5b918d49de9e64f994ea9bcdede1322ea4aa0b73adf5faf8d15032ea3f1a0a0d95cdc52e63081dce824f3b589ec373c04372380b3e354e40c46139c469a1ba3e509fef0e581d6e8babe570b55718bccbd8e049fdbc0fd4eb3114ea37bda1ee1733ea31f7cbc931973db00df3d66dddc5771d8e5aedbbfb3594afa1e46e28b9df7d935dbcbd31c7af95e4eebe98d763ef7a0ce6383a82fd4cca931911c16a48b03e2250afbd806eba7b86cc887a776147230677b55a7bf13bd8d1a88942726781980bd0dd0d22738cf5f69bede1e97ed3ad44ab3a9c0199bbeeb153e6c608a58bb1cb11f3471c8b50b7759a88fd4808d6eec0e2291a172fb617dd4cc70e25f36d001675d3184629a574c401b5aa0fe33c1cc2f897651e9664003c8ec1c218c9f71fc6922bda9229f94cd2166d51daa2b4753b149eaf4934a1cc282d9a84fe28a140740975b5c78436a14226b0dd402723b781b0223cb03805ed703526570bc242943c800c81b2c0cadd3bad8af1643ef34de6cedcd689f9d73a32b877b6c8c9dc1822282d28f50d75b5a0d4d55ca87f9a4b633204cbb5b0ccd55edc121ccb0775614edd1e3e737ba8cda485da494c17651765ab7a68221a931eee5d985ba7553de026628fb0bcec6374b52a75fbc8a4572cb78f4d5a2573fb28d4aaeeb66febed639156c5dbed36e6f6b1a7553457f170fbe296c5eda34fab48b7a85b0be3b6816aac275739dc1edad338946195c140fa271cdd652e837d9c5c1c669777f8e41d6699c3d43d75efce724f1dd65ea9772eaef7c29b49d91f0ed097fcd6247ff5d6a20a85a83eb99567892ccff5647914a93d1e88e4df64827163e6e1c21c7361ed1b338b293277a32bd3178b0514836b149abbe9ec74f66e4d8c9a18a1b4274b18d52f8de8860f0ac87cc2511f1f61ae380332d78f8ed88ab5220d0a131b736d49cc2bd5a0b09ff6aa7f7229d11336de62cd455b49b4a02ee65fd7b9bad7775dd769419a4b63a2b9ec3597c6440ba23ff4d5cad4b5d3aad2351797712d0141feb49d4a73792df5e29526a1b975a7be70873f93a9defed35eaf27af97f516ff60cc87c7ea1e2fef12f32fc61813738963cced0f6d25c1a143ae1666acb65a15b3aad20ff35981e5a1d657a01957603fede5b15aa56b2f98922e700a6b323670227fd9cb49ae31af3157236aaff44f03f22e8bfbcdccc3fd2c002e8cfb4dd2fd72f20c3ed9ccc047dd1f30b9e6b1a35163a33da98112f32806b647fff1a2aff6a453f2156baf19d84ff349122507b0a3e12246e6b168086cafc6bc6fcd2854246aafc8098bca817a436955e30cc848148be2cc3197b69234eaddd540a1686e819c8a792c522b115c753aad0848ae5d6f90492348aeddbdde1f9c46d48d4c609beba15131c75302db58e631578612a52e7d425f588b65845b8233c2f1fcb40a859bb6daa33f3eb031a34e7f50497ed3aff662886462fee25bcca544f4e5c4c63c26bede78bb571a7def7d535f033dc933ff1a487bc55c985f5c97996bc4e49264f9d40d4273e49400b2d508d644ab1a5a21cb634a501766286bad9945e1cf66cd47a632d713534081cb5d307d4293d0dc5ed27799f997a5fe59997fa68c42799b771b0883818db0cea4644a8f8979e6a6aeccfd4cb97e3d72f798fbc164985c7b09ca43fdb3d9f30e51d88898bd77343c6c639f353070666061035184d22b8853b2ff01935d945cfca65dd0051d9ccf669a6d83ddec8028d9d76bbb1aa5be7d7740f43b988cba7de99e560eb3ca4d7b3266cd08f68340cd6a2313f76f64d7acf6461d8d8adb88113d2491fb1be482d88cfaa623975e745df7a226d7d2b7f66995bcff5e60b88cb15432f6cdb2b77d02ab98a8a40c96755d4e3a4533230000005314002028100c88c4a2d1804024cb82ee0114800e8eb25c6c569d87410e43c8184308010000000000000022c0800100b8270de20ff0272478ec8213a1d1ef774fc9d82953d35bf388826188b1e8e57f8fc661a32a27b3eea5a7bcf41ff6c77afea131f368d9ea9024e95f8c9530db1e7be368c82e60f51c6a152b4de9298bbde6849563b1dc117a3706a7bcbcc947a397e878282e24dc8ce089ab50091413cb4a3d08c0b7df55b678eac5e648b949490a618ab0d9a892866a772849bc620e810a1f0aad98ffba6de98037507f9d1497482c65a95a29435715fa9cb7181bc8cfc5e331bcefd38e7244207ba4d93f4135b760ec705b35f2ee8003acde49b32b89f305ef0d4ae9559d9de92962a18c2ec7761ce587a078af5201c06a7182d83b7a8abd13d053baab87fba613295208c183b3537c898a41fe1c43c103916bc1c51d8fe359e282a708dc5ac42132d6ad424067926d1e7638ca6f16ee57c55b6ee88e6e032f50edb57da17f3472dfa309391c3d0e35791c253d504322665220596f69b874bf8aecb1dc2ac50132f6b5625067922dc020984aae63baba64ea50a1a3a704e3c4aa62c1a4147eac62a13106ece58bbfa6506a74f721f7db4718ea02f781dc33e8cc0bb436abaca44973b94b9f6631ff428bf0f4a857ebb4e503ba7b89aed02d62db38ebbcbe2d6b9a2cf432bb01d4eb13b2d2588d4c89bd7c6d361b48cf419908710f8eb25901c004927d4bed46f3b705262ec77e43948f455ff477884105e8192d4578ea0c634474a87a15792a6508ff38b8e6be80f4a9e96caf153fe95e8cca08e457850d2b02999ef0bb7b1f7323962958fb2a08b989bc531df3f37553124f142c364882c5725dfd6cce76efc9298f842da407b57c601b213d23adb1a708813c379c75c2858a06df0050adef3f3ee45fabf4f8000afbbc15e82a7a59657ac706841f9547e86fcf74dff7af56c42e962ff5924ed515cccb2ef41fd15f5609395b85aa18ef55ef1bfc2bca0411f3916a4eadf8f19fa66e2b054f6b0d33565ded144e59c54a5a3e34f433dff25a07c59a654d8ffefc02cf7aa9cfe56b340e10d5bcbe86d9ae15476931aa626968cc692fa017cbbd522a8ed5fdc8bc883b526562b8ae2926d34b5c4aacbe4b0c278b1bced95868b9faf629c7fe808692acfa2f72895cf3b7b105625f653848bf488f6a54c2af5e4eed6a3dee8121cec7a12f7ab906b3a242a02b7241fbb74caff0d40a23fcf6f3a5a9e10432a4c3e756ef258ef6a6afe881ec46790f8b7239ab75cddd433fa427fd65b59b95de759a551d9772546a988f8a2f6ba8ae9915d9ad2bf9f679a3a06c96c62c5bdb39ad83703272de77c15fdf732c7d1725e433b86f160d1bef4de3758fcf08dd8b861300910ad6e08fd91613701f0c8223635109dea3d29a8f34a452b8dc354980a5d9cdc942737e2bb6b54d2022ad0f081335ad7f6ce7c571d6b84d8b2d1bfb2a145d1d18bbdbd4852c2aa651c2b33d92bb79ab1637273609b94be2295012498d54710433ba1cdb71947ceaa1c220c714e5d377896cd671863935f1a72e9f1258757b711469cea1708fa6f32ef8d925011ccc26505a3e792c8f5a0a421f05b3dadb7ef04d1813cb8332371128de4d75f9383abe533f08a1608cbe0421217fdcba721234d8a2378ef85fb34522af0bf58bb0f3c53dcdc85b0976aceca00e00f7bbb9b413e96678885222c5cf292fd880a09ded70790171de8a5c0d9d717c6aac8510c7c75dae380e1b31c2ce67cc79e6783eb8bb9dba53047f1eb721f7c83c1b8b3ce5f5a06cb587693915b7abbd7229c2f1539d7967c64cfb21e52a4c54bb5906a0f1456005a0cbebb13216eb23e0b187616525b03f7b0df00a295f81417607c6822fcc15bee6245fff0d25ba25e01d4b0f12d766fd6f5fea13b11f7c855e42ae98c4a3c522951c50b37b9d37cc097f33df0ef55ff34bff1948b7310d499d6916109af12867caa129801889d4c04fb827214d3051aee31c558d97bfd96c3bad5b7df60dc33dd07bf9da24a2b39e00975ebf8df91ce76450f9baac8de2e7c000844303001c5b8e10fe81c78ecd912483d1f7b3e9c78c960ada65b4ecc0309090b2ddda6452b03a99a9fd291e9a20a6a9fc14e192b6db6028abdaa77e15b46a3d53961c62b001a1aa9f3e6af757a35122c56363c5035d9eae921fd83515dfb020eeee8996187a61a00ceddd1eeca5ecf60caa5c87dec61028b6e06e976000748c2acd84c6f0d2cef27e3aece913179218d7741c6fc420828acda2628a057abd6d0270d51b730bb77072ad5e6048d07109c170ba89fc4714baa2d70a3f108057603538030db67f72230232641bf7a59de52d18e806b791b6e48dda2495ed01c910977192009f2d29128c3d4bee09833194b43747307635744784231e38fb798f7b9a3e43c236e812c3585e79fa38bdeef18559c20c5bc3f82ad727da85a9707e63f14ff8fcccf5f57f7e612f821813d09f12bfe1756a2e44b013945072d719131bd9c12e8d4b0f0461faf299c8de3852911b0d277a8b27dff407415e77c0b76e2af01b4e078a950c65819b9434d4b9a18bcd866247b8dc7dcc47d4d29ce045f81d43de50f6b7ae847bfbb96aafc00895e3e37fe991fe8be0ab7315a2f32509db207df4c4ea5428439ee169f05f578807a55a792aeacd9c449ff374dca820f5b1c0102724a5d78147c724816087d4daea6aad8e452428848f88e724fc6354b674ad1a6107030f11462301d05aa5b00a1698df57c6978adca801ab1e1b46f146562fde1ef57ed05b09cf068db5e576699bb7ca822fc457626f2cc934177f20810eabf42eaa50d2f37810b1aed7def94f0b5ac14f01a0aedbc073c82a423b89ab6f0f7bac63419c941b392a5908c6f26aa562cdd95814c93c47513b52c298079b9fa28d6a9ee8c3dbd9c122ba8c46c40988d85ecce94b908641a82fe9438289a7de85d42d30814ec71b5b2c71dc8480482be4fd15ac8afc15063eacbbbed448e5dac01397695fd050868595693dad8e284536694d3023aab7cb3e45e9b25c098e24535d71f77bb136fa6ecfc0c7ede435773ab403e4f245bcf02f905d3b83cdea18abc0629d4b74d7d031a05f268c313bdb4ee84664062c7ab309bbd7f729a7916ce08865ee57e90ba476f60121dc4ca71bfac9fcbcce4f109b61546e5f6159e945db442586e215224525713435a036cba934e63988b3c863140d6e2cd2c7584e3ce2894756e8b180e5b27f9ba78a3e75e08428b8d2912391c1cba3e6c0e244e4f9d284e6375e11ae94a113bd22e8b4f97ca7b6cf35b4cfddb72c54e8efa4caf7dc713e2b523b14a4219210265ea20edc57c85640859d0858d4b7db8c800cb97486a9645de01f06befdd5db4318ecf9a1c8af5d440b79ab049ea396ee89a5837dcdd39b1628df4b071790ea8e8e15c780658cb9cff961ca3986b063174eadd7121bf76ad644d009e2ee51710f1442156dfd68f87e858080c2791db06017deedbf8616c2b752325be5aab8b08166c2da1363849f518bd5a45ac9a6bdddda6524e7acb3332ed511e1fdf345866eca2a2a9deab636884f5373db2411f2d2081367b3070c34d8b6e2efc191c9f51132c9e9a6a32d194d3b3aefb24c388fe9cba268540dba5438a88b09b0efda67f538ada30ee8ae10022b33e72518ea3d2d8f0224c54ab8af905644ceb240359ae40c3725641f6d1dc3fe0bbe5c2c74b15a143e837120f31d7f8bd1549c894e33dbfcba6d11dff7d4c30792c423fd335d4c9285f518cd80fb898146cdf8475ce30837a1a1ca9158f5bcc91c43887bb3573a2a303e07fe3c9e0ca1491b76b8ab67279e73b8f0d1915566fbdbfc6175b1293a60b1df585ae2be1d9cb097fb6553c43e72fe5b1f7af46d004d530a71b233720cef231d33c77c5b4d911397b98dd111b4c0e2fb097c177b4ae485d6e3ae82c637edcbf03e2f749625623684916120805fa1d20420dbf9a761f6e925017de5e5680f90bb3502288814a301dcde04f27956172446a69f3e590b76d1b887b978cc56153c4fc533ad4fd07379476e5e8b8573e35eb1f100fde6259876c2dd403077d50de94ed18e61daa8a340e16f59d0ad9f4dd1aa56d0e3a6f26f27ed62069294c29f9f974bdc5b95bac203e8fca3187a9bd1fc603e17a8b46acdb7118dd43d14ae182b49cc60587dd1f562569f19fc047ff5e4accc2421c154b35947c0b1b4d740d17ae03246f23512b105c772043f594572cd1c8f8157e1cd02526357de25a5ab8891d58b5443009510e629754acefd733b73feb19edfd0a6dd56e53c1095ebb4f9780481d417619b627bdc828cec3c587785c0b841296afc930af7b709e1544a8b2a2452e5984882033c26daeddd7313265b4459a618a48e98d88f38ff645c93e89206acc4800994173e2012cec44f716fa64b511864469ec349ff7e6e62c32979740e6ce1233d4fdd84d23c04d4ee609a51db8ab02274b0e274be9e3321a508fff8d85aa852883a7b28aa272181933a2fe9f17d9c318d964652aa783132cd4f71f4ec51e2f04c7ee15c94ec7e2210d292f466c8bb8ab484ede6be01e966414df36aa61238783074d3d9b2f1b357471498f67a9277acfdfee84bccde295ba9e6d7be1bb5bf578d49afe47958ee0c91f8ba2fa4994253fbd211ac70ab14dbf61e8129205af6fa0a27ec078e450469f5f84d8b97206cbb3409f2bc57cba184e379f912d0f8c6d2f6c3ddd51e1d5467173aa43b380ef7524fc18afbe9da4c06d30af0d5539238d7c46793ebf965a22cec6d535d4aeda978b2657599933ba918f7e43c26b693a92fb8375734b5ac7a6528535a1612ecfb24f2f0361bcca86d517eedae7597f6e1fd87b823c001295fc3943b4771f86ac52557dfdcab620921bba10710ede1d340843da259a278b3be3e5e6168d6fb39abf1636f1788533e1d1194390deea0e61b8e26ce5b534cbd08668b0258fd38be8112b5b7aebfd413db77edca832e6eaafdf99c3e0c0258a58077f03cd045b7c8d28d89c690bd304ca7a50519354d204bcec00f82bb391b6d08768b224083983b0dbdcd5cabf334fc5c0094cc86f1b32aae8211a7c235c4b9fce84c32d5e91a0e1f1f322d4ceb0b7514f3ea55afce2d1a32f0d48a4d72267bdadc609366500509f8647622b0aedfd749847e5c20a162e688a1a100dfe50a0d4435b1477b4d44aeb72cf001dc8fb66643521c8b6d51810001400b4960bf24807b88fbc1f652b10535149116ad26d079504c95d270bf527a466849ce7e50e0089ca040655633c706cf5c58bf661755dc9b7b64d928e5266b0052e40dafc697a311d4a15ecdc9bd204690637c3232a04db4862be58fea44982cf4206ad6434d9cef85d45b8c32cb42a5862c2d0b7444850bbe3cb126890faff22910e7f767f5af32505a426b0317c1cd21e8d15f08f16d99ff57d0be2c0b80a9646d4defb3a48c51c90c91969db1a641582e35b846df481ea8dc03ac6279129202ff82fef89956dc39ba4e28174d2aac3c87788177b1d77de5101832487090cd3722bbc85e377fd4636faf60a4e8a9bc2b211b1b57fcd54001d7d83e10bb984f99bd6aa15a6cbc2bd772c404cc787334ee02cd99995c532fcc1cee4533217469dd8263d67867769f3990e82b9ca7177fdea7370fa489b0f93ff88948f7a76dbf021b601357dd3080a93404d3f12051650637c0af7bb93841629c03336d288f8916e9d8c922c8ba4a369d54ad5564ed290bc54f61f64d4e145b135609cc3e058f329ef3ade827e8a158e0ba976bd22231df9d1b16e887a8f22a799b00cb62d8d4f7424dc8047cacdd9e2fa64601f0e1c6971e48241feb6a15c9e24847e0983133840a92b4e0f6ff9d501fc8b547d66ca9e2f00b8933cbef141444adf6009ba78579d753508a294104e3f16954733741492ab6245dca5ae3f5949489fd69b78790603777a9b429048ff1cf1b21141448334b0a37c6a2de5b564650f0be73e22c72b80591e7dc97bc9de2bced500db5be2151b78d241099398877a164917a662f3324e590f5c00711d3277de809491bcf027fab03e6c4bbfc37d0e2833ca6e54b98981f54f35ce0ef5ccf3ae791944214ca9a4f17cad42c3f81b23040f1504bb038a6d192c07e18f7b1be6b9fce31593dd0acab88ac9e99e8019228d88e659ff701954cce19e3bc21e9b10439163e41353984996bc3a789fa354953f31b4671f2ee8ad4395c255579ac2bdc079c8feed338241d844bf4ea2ccff87fcaecde7841cfad3e5c4b95e92ec02476ccf430050ae091ee6dd02dd5c0b02628aa8b29bf848e3c6e8e6191f8b45c19ed42241946a5f65c53f4df42a635853acb478af61d940a4aa661a1cda0becb570411274dc252a46960a0b81c54a23251ead56fa851c6e1d51489b8c9ae517449658fddd3c6dcb52ea88ac7c5fcb668b7174954ac8915f80dc3c2bfd46f0a92211332e397beddcbe23388fa8b28a38386dbe64348aae6aff112ebda62d06631f3faebea1380f50bf6c0bab4aab82e09747066bc56185519607becb7263953acf30d5e78088e6d0af032ae7798466135de6723875662c552e44105e4901031df4e93d30cf07183ef5a391a2ae930b67624acf592c5be55584b3c9e4f9a0b9e4d0c8b39187d238cf5c8c0f4aaf858bba4af82e7f42facd99750536150922c2e6c69200a967e6d58b9c05bebe4fbddcb8c551fc75d2b6423fe5a1c1dbea9e71af80f4bf5daa68d80fbdacf9a3bc7fd3a1625168178246da0ec0d66e821ba247ca56d97c29a15fa7d1a7905d3b16d1325686e2d520c5345b389be8191d175f1d7d49407a80b4f3259b05c52e2ef7f1b96a83a80e23bb183d91a6509533238b8320b93b8f594c3b801ea559046dd092907766bae4836ea281542539b2ede456949b51b58ffde7c2f74a6eacfd660001e02c6882dcad00849a8892cc68bd5059b1189a884db8016a684b080ce0d904102f3be0e4663451be18d34eec048f69e8fa552443b7718d18aea25dad8dd1204a6c8b924ec0b6143ecbff54cd1b9d7da9b4f129bd408e353e43540b26d49921482299d12c8729094871304b6915dc4a48737fc895381d65d7ebdd28d5f4722db99c9113234f2dba097e9474c9668150bc7c830f09a815ebbd2743279347ce21731e67fc68185fe4a1ff48a92eaad4e6503b0dc104a1254d45fe9647bbaa2e9820ba151dff2579253b0473f6d4723b7177439f7f96f5ce5bf840b053e3b4e00e83da1cb91949bfaeeb01f168d19f2a8886dc4e3658f9d0328d5134970af8eac658687f0ea9b02c7be2a799dc76cb95ebfd68b13217eee17bc0b9d4170b21ef35d897f7b1745589af6ae073b5231ca7bf83f248abab65463d7d21256b0fc2d2f01b8c81e7a66f40d0864f948b3840a4b666b94d4866643cd3da7e1c10897058b298221a761d08fe11ee43f6acaa146ed4337c408a686fe6b150e80b466f7f7fae5c8448fb8dc1a2327d46fa7d667dcc2922594851c0a071ececc62c0ee76bd6c101e78a97544441e4ddbac6d08cd15d0e5704c4017293f8ddfddc4259e7253d829472a3df29713f09d3143e548f904693ae384fa3d230e04140f9cf47a01995dcc2287a627bd57c7ce9a56ae9400354d4f638a7d9b5675c8befb68e07cf01b4abec53f9693d01ec57b093d584dd59fbfa6e77b37427469a1aa5ab0e0537275b91adcba26d6b2827c3841a04214f204bac1027f6e8188d41955510119357c7e77823409070788dc17552ce0c32ba101a85ebdd22791a1d276bad4eead9d9f87668c20ced7927e4868c8a6a5a881deedef3140137f7efba6b486e51ed1384bd2b14bf968e6931e1be75c05f62cf001b88260cc33d1270aa0ffd06b993490bab4917a0b0b2e34bc007cc0d09b2fc940685462287895226f35990be134607b4df1227d34298a4482ddd7d999d5684cf659c7f990f0349396d6fe6a3d10e88f85e85a135c659349c797744f8364dd5b944edefa2466f00a74140aa00b69b6aaff1413361b1fb1c92792da85ebb90bbbc1086affa2ab386b2bde3fb71cb7c54697b246a23514ea729f28e794266e7f19f9fc5c556920a6b42cc58efbf8da6f9daa2f08a5153bdb68f4b15be76138c1aee37459fb579f3ba3a1eab9fdc61d2d9c72d4934e6aab389a1f03b3d6bc968673743e966f88b679947bb996b5aaf31eb5c77a171198afcccb09c027befad1ab70111ee95a0ea5a4db40268bf19f3e44417cad1cb150c1f4af6a097e3a9a11da766994ec2c4a89930e2d6072980bc972e298fc121ca2a5690110a784f63cc7872cbcccb50e7585edea2301a22724a5ea10d7e830919b0213ecc00d4c0e4bc172f8e6218edaa1e454bf5a01eb93af748cfdf4baaa9831be3a0eed50f40dca5f89908a875d8f1bb6808c1b7d4ec5f73db91418be3dd1de36b2f09b3918b1fc1f51f13c4734db23395730474ae9c7a69724d84c05a44c4ce85ea0d013c5adc147a6ec14939e8117b9964118d3e34b1de5b32c786c27a9a89a42ec2bc64e6aeb6157260e3e96a9ef2ae291a40809ddd05f9b767386646e8a5413236bd55114350e60ffcdf38a77314bf49f104209404651836cc8e4a1f43ad9a08dcdd8e19f33c08e69798312e9d98d3276f2f37a5794408d6d25d403e24761060aed78ca4b6d3f59b90ad746ab502f6d9642884cc6f18d3f2f7ea612656f1ec2ebabe0cb020b85976554ad030cecf786177e5390641a7926d8f2920f46b7be332e65ce9e014702edb1769a48d3ff03902eebf3743cbd921431013aee4200ac3d6c95d4dd52b8b60cbc2a50a9cd4da55091463dcade2ccfcc1eda1d9290fb8926891e8c72f640c33cd600e29dab28a5450c4c047fb2b6730a41778d12e44d04cdd824b0ab1793c90f54dd9185c1cd914e46c735901edfd9479e80bf19289ed91d218019b5fadcae32de4a7fff98a7bbbbf14e3eb48437ce2002017b9bef580bd851ccb5d6c125b6cbfd1b5e311609eac517254d9d5038e704e897ed91c1b5be470c30baf7b5a3ca3ba4746c85c3df13162e19e656c45253d071dda80e68ccad10c00fede0a6994972d655cf7f823651e00e3402c1023002037dfea20bd3066928a952666670d56900c137e1d295c0c1dbc8b4a1f572f0a50636af29ba4a47ce75292fd526033714f29199f8719df407ea1b59d4b3a3ecde2044570b9e7ad80273a52d5e8ca373e3c34be29e285dcdd6667ba5056a6abcbc5a212dcb93045834afd95cafc1e3797d85a297052c164a885cc69142cc1936435d6252b273c781c91213a10867116a9eaa1fe53361ff17029061f537ee97fdf06380f78e7ed1f57d2743a667d4aea168edab2438afe1f644f9ee23ec637bc22a72884cc6645384122ad260327721c4a96e6ee1e7327d2883934f7eea6ba1fb61e538b774b1f25e5b043d1da9f6b6453d9ebb8ca97cf240f9e97c10598823d2c7276326433d677e12e8548c4f1ab3fca9efe5e642a6908615d202c15a7eec88ab3cb71c7f5437b4fb88bc230f59f9309f72536b02c62f7ae6558a05eedab9b0f6b7eb22752e04bbcc9f6d361521f44bc7fc1b65a1141042e05e57f80e5427d5a8619071ed8ec0d4fec35124ab153be45bd2b63795e2a284b41b47ce60b3fcc21da44fb445fbd238dfa41eefce781f7c5a3c48f590db51a327bcf1034e09f0992855723c8a5342800320ed423c0016b1a6a4bf5a8ae728229105b1d8e4177f112cb525d8d4089c354843f82606856f763d866f9cb86f83f44768f5d140143dbaf6dacb9881587827f659ad8cfd17b749089b663fe977493e394724a2012e69d44d8ca545994dcd5fc91beec550cc3bb09691a8ada384a54620e55d39994966efb1d54e828c7417a4d547f43c090bfeb8e03f84949440fff0ca7f932d463a8d06c24fb23f2bddd12480be0db07ef0a9d353eeca8c368cf181814a4a7012857bda1a6455abe270e48eb1220756c2bcc49bcad5e74b5a7aee26b3ede5017855bff72a38e9f18d64d89350515e0a6c02d6b0329903c20a660a4294e63cedc8376617b66a385ebbbd545d5ce8a4e9b69815114001901382a0a3bc5500b96abc0a9f579a590bb17f814e255899a6f680de921e51e8cf7b6d2cb0c309caf70928cd430e0f217823faf47121ae64b675230c5351e5cddfbf23ae44e112fae4e16ed86fc6809ea4e35210b63a0b6a712b5e9c1ee2e704e4e68e23876f4e407b8e8e27a4659e39f0faf526f39cf577fa3686fb8862c46102f0886793eb67503b3b124ac2f9d8f49c9d9c03bd95862acc6763c669a8672ccaf5d945c1465a6f1ff6ee81f7658791ca4d6742969b43327cc4ccdb8b07e0cae5441f4005c34b90fa2b1cea735e0bb7b63a93069ad2a5abe1266c360dd9d0226fc377d75432ca5f390a6b23dd34eeab07764fc610099fe46766ac39db214a85ab3a46ba99b9ac5dd3a05de5d711fe800743f31712332bcd978e5fe23bbc8f28e2ff06894bdc210f4a966bf0b04380c71c9cb9023d1acb6b561d3afc59d84c08641ec896af1abfc5d8d05afea90ccf44e25dd3a2a23349300be7c1719f2d96acb611bf59cc919e365d230d0faf0fd33c527f4eb6a1db8ca8dc220bd0c25041961c4524294087b349584b209d426d9eb97a7dd385dc5fd0fbe67e10fe9cb6b7a3e342db3a37c8cfbac67765a4106734637a5d602ebc5255da098029808c6c49229f779063280856660691c9e30edc9cb08d67a01b4bb9be64d3d0b52f762bc869d5943281861d81c18374ded0f970d6fc3d8df6c650a253c3f4a27c555417bfa05a71257af1509eaf408cf5ad4be2306ec5ab4b3e7be55a4a1586e73c6fab2961302b3ddbe5460c8dba2c7a973028795732519ab484098d547b9a22a6991317dd22a7a65ac50e2f09edf615a9e9835a35fad27348d29ed367d00985c739a0c6ff3061bf8818220f8b59d4b8d96514d3d6e92e1c73e74175b71b6bf82747735e3612fa56804b648032f2718b5bd4cbf27051a82aec8b8fe3151d0f7249b86ba92e70cb277cfc87b0158a7eee3be9e2d0f285a4f84a4d959f0b2ad7b3be7c88d8b6ceeb220fd446dc661d85b5b433d99c659c97538b68d3b92057938bb82fd4b55e280b6a5359e55fa11e4c21fa562f627fa138cf45960233612a664915cede196b417e0f622c12ea587982bb824a2cc9599ea82fd1f72ffe4ad876ba48c1e5761673a76ab29db4d6c5c525bfce8ba7b43376d1941b09741d387ca55bb06480b2a9c11bb41f50e60a5c98e65ae26c9f07d28b7102c896f1cfedc33a592128ca984b769e432c585d96c673e13145466c2b3ec1b284ca25c5c4f53514722cbebd021f8a88152791d0c94c15c152e8f99280d938af2d647a0f2903d40d68cf06f436bb62fa240b422440ef09ae6f5e67832101007a84672705e8ddfe22c228b304f488f3d664389047ad6fac2e10c049d888f4e7e2c208dad84938d2938882f6712e8aa9c175f98a37abc801f280d00b3dc1180ae8ce3342841e407b1842910d8f00fad7a77b547d6ac165a426d85205e878cb8591a7192a3dbe95822b477c5c6165cbaaee9d8e16d840875919852c836ed0b36de764332ccd00b7968fa8e9f17d8f35e21cb275a8312e3228d34b4132d2c057a78e0ee175e440db6e7292b25467c5412057e1453dec32a08c30fbc4a1b77843e7effa2de43d45278d80049a2ee5aac190155dfcc526ef23d47981a9958979ffde2aa33f12d160df8ad08e83c3d4e9d9df6d5f9e8f5a10272b2a1d971ad36761dd8105926ed4d799ef9dafb12861288e6ce9c391e6152c229555ad31090631c0938de68d070782a3362190956282ca0508a8a37dde065cc8849700df95455d34d583e98e741db647c9fe937a162a33da23a13887702c0e8c94d85265f84fba810f051fcc117854d14c35a382d3c519ff0778d1d960deff3aac74e14cabc34abe48a1fd3f28b183d16dbf57b7cafab38849c2fdbeaa3c9cf619cd0807144304e68a01b5c5366061b6785bb4855176c2295b3f4c52d6a8626282e6553ed205be54d80c59d247f373e959610db2a03e0cc86e01459c173e335f1e2043da2810f1a369e17391fa84a14b8b8c0b8523e2fd8be28213d1fcab1506d35d89d0d0cd4a1cc08c709f0c5d1a4920cb84e648853cbec08e8292286017b101c8ee4b0a5175947f377d04940adb4bfa1ad329cedeeacf5a4d072e9c038d9ccd1a2207e65027fb2983f26ae25a654af79ec78cc61e0acc81a21397b5e87e3f9a20bf42ede9e60bafdd95e0a5ceae4dadbde9660a90f759c39af2cf78c1125433240d845c07d575f8a8ae0fd6ac0e30fa95e76ad306bb1ee02edf15c0ba8f63380aa32445f0b321ef69cc188e13ff8fd3683ab03aa8891a492e7225030cf79143dab7cc1ee0504e6136264eee9084064661927f06cc53caad2b0c0521fd349303d14449dff6384a76139a617db987ce8cd82a7cb7d6537f9f3daceed9f768b0fe0e7d533e27e635f427eabae5f0afab01fdddd001b9d18bbb482d54de13eca6bae5d2d7d0be7d2f1e6051888236492ee12a2b3ffef32000a82731b8b55b76c747638867e2d224fca1abaf0b7d3138393f4961a1afc94b8a65cacd6b4ee91a10983e43854dba0343e68c84f56b2b286bf2c6eac9f3126229caa5c71b4a672255e4253c916cb0c781a00ccb4bd67d26974a66c0a3ea66f9ce3aec0f4789f939ebbb81c5218fec3c44cc55d31c2576a3806236a12785ad61a9cdebd1a505b0ca97006908ab539a586ac4a1574710846a0f0ef989903de5b87b8b2a2b2ce866dc0bb7b3df8b93035f7046caf7b984ab353de5957718d5fdf7b70ad2a1758ea64d1e7f15ac2aade0fc0f8debc59d6668af16ba258f19925c5f4a2fb1e6af8b0625305e7e49fadbce31c37289536a44233e0ac80779a9d6fe77bf4638768d6833ea77cd13b18e42eaab251529d9c78e8924d4ffb799b5d3e477f5e9edbb8bcadad71170dc8c34e031c57e84ae2eb1d4d61ef062f26f506adbbb296b73305536b05937fe74785d7476d693802578c4cc99ec66c8660882f45b1c11f26b90ddc9056b48c88bbb8d477bbada848be541c260ae67cfe2b4be96b3fe2cf0ee237c76a88b269a02e3c840f947b4075be6377ebc8d22149767ddf927f91ac83f1567f2b727431bf1840020274ebde331f4c43408c8074fd3105fad5d038306f541b1cc7ec1617774ffa2cfceaa6b847dfc3a94056d2040128ffbeeb1446971135c5c8a783a8d8f7854cdab1d2dbdf0fb84f024963712a621a33d560b5a91c6575751337423f4bf0d9ff852ff323983aa2bbed116db869f68fa3a465b738d6fcd075c82b8241c687ffdb40b86ccda1ef38640dbf10e60c590f220235e943480d5ba226f7c042894aa957f761284c426f395dd4657b9ae2c90b949c625540f3ae87c1b664a5df5b32d183fd6ac5a736dd5ebd69d6fe9d98324d309d564eb3bb8e523e42feb177455064f7f86790a0d71d59c6bc2a080c024b1da103102d5bd234404e6c7f5617ee5fd4da1861a54e0523271121ab00ae54d45ba5e280df75723d839a0f3638cb245ef069dd2f552f9aa89c85667607c7afa7a844465c8a236a68e6e2e3941046d482aca179089ac451630889901aba083c32583dd20f3bb8aa75e48148ac433176c9250bac44478939cdd6275588ccbd12322e819a5417f8aadae92d4d0fe857b5d1569da05ee6142b7cc9652021ab4838e4fdae3fa83d9a083a032f2bc13c0d4fb3a284c518f44bdff8bceff46d1bbf38a974889f1f425e7ed1bd3aab882c2e0e71bde5124f2d94c36650ba1d9d3527337266c59f06327ec929c1108b53d37c63d984e1322502757adbdc1418e7253193fa5eac625ea01990304c6e57b05812fc385bd1e446e23328bdc8f2e64eeb3ae9d168269a05117302e7525637ae80c8ad65a40a46a1edf0e08de00962581d032a35ce485e4b70856cb5a01d215910b73bef1f7597a5bbd9d851ef856ba7eaa78decc4d9ec43a2b47c08d3a0cad7c825a0d42974b7d2ec0fdb5fe59f1e7c1b923940d86ceb778309e8f9ea0382319ddef0b744b423171585993721a741cad71f8cb7df4ed40fe5113950025bad0b30dc18950ef866026be6d445e89e5adeefc186f20542bd684376fd322f3b808b871136c74ac18ed1aef8031f3a1af20bc075772502b19592d1bafd0dbccc32d90f938c22ea020f9b74f0eb3d1b5dd2bb91d4221c4513f5813d2ff1781ccaa1d464132790430751c6fc986a8a0a09abf5bd68087a7d945f9e9f7e27b8a534e6340a5d8921c5b0846c41d9ad58f1a3216a55b7c3c6879b4225a05b36432c70a53ac466945f9e32b10eed513514065ef99b01a8e3cb013b88a070df8623e941569990760d4873a32b5f5d2cdbcbc9ad91648b13bcedb1bb01fd396860f4df0c82b33f08cda9e3f13e52a26ead60b0e1c6e700fa8d32b4e27b11da4949d50ec9cf3c2f5bea602f2cd4a98ff41e5b7da7bcb0a53cbb2f91a2cabdc855e4b86fdea65ed24125461e6b0f686164b1ab1d0eb2df05181c43c51d36e46f78bfcd43377b579b6173c98a0a744b85b0d70fd95e85974bf64aec91994eeb47873a5390928bdf948ea5fcbc969fb521405e8c90183201b6dcfa3e7f974a9f4d38f32bcd63d50b1a96722d6252b99c2896f2329704af0b70c63e1f5c779518e6e5f82259c749bb8972ff69e1b94c1c0a59d788154e851fa0dfe49a93735d71f2284190709769fd7f183a08a1e3a31c9b31bed68201e131419cebfdace7b3cf1d8911f17abd0e50829d7cc400f73f1e93182af087bb0c21112aecd59fd1dde39efacdb3721cf7aff79111344203fe93b21ff14b3b7eaf42649cfaa405265a0e158887f6e84f5bccf2448a672a5820f1228b33e1eb7257b1e812e98e95414a0d836b405d9c36511a6ad32e24c4417ac4455eb0c94581dd7fa1ae01de13381bba9feb4271c7d6a3e8fbc0f707609befa6181699724a3c3581fedb06e416a30fed8656d18e402d605dd531b479311bff3d557fe5c27f6c359d3b7e2dcbbf813beb6b9ea68aad0ebc048b90ba4f7268fbce0f3eb60ff7cbac1a3053860687314446ed6f8545e236a11582fe7d535aeabaddc2120910869a9cc46226007c0d091b7310180aaea06827a870bf902b9f192e424401941d15b48e6cbae09a4f38c6d026356b45f073518727d15d142fb9e09e77308d6797be9bb85ee87928475a4f3966e36c3bbd1587f7be16c0e77434387efa5076bdcb76268badd3789aaf05e8f1a5a1591d0e1b859499761902fe1e510b4e46725054a91172d00364cfa3383d9d2a7eff4e76bf91f673224a1e31bbd7a1205bbdadba9dea41f887f0efc3438d4522efa0d1082930474755b95140fe06b60d03ac4f23bc964ea72f8d90e88bd3a9626258ad82b0d13aa8585d97bd4aa6c4ab3e7f9b5bc3141cdde40adfbd4fc6cf65e62587faf1a808447ef9d5418eac8398031fff7619abdc88ee44b273222be14a9c09521d7173d10f184f4fb3bf4ded963212077b43c5224fe6ec31f2676b808f77e783d322297ec07fb77b0603223df75804042849b17210c632984ae4e9424547a69398ae81b6abc38a671e49f89ee39d64a816a5b2f0ca259d4c94072461b2763cf549ac6bc23c36dc12e45f6c7606dc8ffcec30090202e4f2e60e6551e412aeb5233a7708ea2f60e3cf5de083106a8df8627d040347eb591f7a6f6de58c00757eac371e3e925278153761d644147a90d4be87fe671001ee31bdf8de788366f7ac3803b1048edd70a62146c9958884626baa93517cdb7abb6b4c2c1bf6d08ac430565e40fe33b2f32c6dac9d4a44f3f0620b2d0370290575f409c347b6300c889db32b7132a4c05a1d745e8d7d02b1d6d5aaa10535a1f961f4bf48689365958115e0c424c9956b849df7b4e2d9852e3aec0db7e393d442e8fc421db126669d897671615b1f868e6f83a9633241a390e76be17e9ea6d6febaa4c8f22f865a06d718be0b48d15f8b37ad028b69fde63cfc7eca1ed88cdc815e61df3813541483a801f5eb0d7565da022f54c85445c35e204cf070477d69513a2aed834f202c2332469dac58e8d595bc42db3c41dd9af4e15559869b1a6b17ddcfaa5a82895e856aa907c0e274a52d046e34224d7444001c323c94880c60c3b0bf4839e8947d76013c531198948a913ebc928193bd1fddfb1b8c5a2a932e403c926d2cd610383ed35382b6fd1c38c83d5290e7aaed7d7e357140f6162533eeea6580678ebd7e0e0b5923134d86b2e3b2b668593dd684dd4a518412b2187454cef0209db1d93d9f3779fdd82d14703861bfb68d64cb2bf5ba2933cfd41ee60e6f74b71030b7cded91e8b7c4beee2ffb235c06f700c8cb13c0456d145b7cec8e62a1e04c2ad13ec3123e5043fb3e6d786d8e06ecb5e1b3ac50ef4805ebc21787bf7197e6f484b9d65983fc23731eb5332b38538826f4081d3ec5edff6edfd8cddebd451d0f62ab593e7b8e3319240f9da8dfff256faa6daa3c066ce78d74c2df2e33b9f8c8c7f994d93ee63e1835a81a5be6c8eb9d5c31cde8c7dfac20618d91495d03fcca88a8486764e3db4cf4cd0ebbeb5549e0a35d66f75395aed2d739b79c2f95aadc5d203a4cd8884bcec040dc99f99f300a84e83001dfd96b48a6396b64e97047ae15d8d3b5fe9c6a3671917f47b7be3d42d81ce069b11bc13312df2c3b6bf704a2cf1849ae9f9e547032aacda601b7990ed13f3000d956d2e985dadd23832bd53bee88689c1a631b527580aa79fe5c4b262d0aef730ecf342e7bd94b3628feecba5c6c8dd0d5788861e53d57ba452bbb1c9a4265750b87e81ac847e8ef78bcb31c25391a99fe441c2f59806dae901085b1476ecf033465fc3537797243add06060051230300aba0d06a19fa2f26d2748754002eebe0db07dd4c094c9553ea5f69c47bfe20aee722d8621b4fc57ee0fb3dd0ac830c36a1ae4df08911d7e484546ce14456040c08c631c3830208c625999bf3e58fe08acc474b1985b423704d63383c3877c438d97fc3726e7517dc226b9507afdd5918da8b2ced1d9194184b86ac28eded3aa3c211badb01b0b22a3b69cff4ac517e18ec775c1fa053f9e7b25c2fce1fd946fe2010ce12d2b5fccc076f4197dee28f824c335decdfc4c9a078caa14dc2b05a6bddd0a5979ee7964e3fc868f934a1513105e3d6d85da8973d5ff617e8ad11ebd597088de0d488478e0fcf34e2a7516ec03baeef14a5d01c8aa642bdc145d566a9e7aaa5948e1492c4c41652ca49c93a1d96630dfb59469931a04884bef5b9d1d4a28b891efe440d69f9629ba9b6cb2a88aed98304e719b23e9e5118b857f606ee154c6971641f8831485006349e8004da9437d0fa6a6bb65b93a20051b6e67cad485376fc6dd2e0728c6af4a250ac67346cfa2565dae4c5270b90a44d23a35586c789a3a5555fc52a28fcd46713dd74ebe1d26e8a1a5d9cbe6d7f8e2dc624cb1a8112b5f10cc23f2fb3f530f72f316b0a9734306aabaa99439ef88b1bf0e18f3630b8eaa52f698670ed64b4d59882aa4bdb95cb0871b48eef2343e81a000381128805d1ed2c7bedabd2bf28950c4aa91f5a585d9c061f9b4c6c7b6ad6a242362b77f9bc06265b9ab59d65d247199c45481992e25edafec1c1930537f2647adc6f24195a03b494e36e60180fd6a3934b497c7ed7b39023f16554ad9458ad24055f9a7ef80bee15722bb6ac70a2f893dbf52873b80f263d3f427e8ff4136a9f1ff8ae640dff288dcbca613766a00a1041addeeace9b8985ef32e2d4b89bbbb0c36389b32b7a066bc0fdd65ca233670a153699156c0a451bb3b80bb86820818ec90eddd427ef545cdeb0dbc07ce6b00172190a83099d60dca0403fef0758a4aa8cea1f1369982a5ace856901dd1d7bb37d0adf98a20d38dcccb46af74d56af255e151dde3641bbdcc45c8b0ed3f029dfa577e192685f9237c4a4401303248e5e33d8f7270dc1905724bc7aa4aa554cc6245688e36e90d72a2d54f0c94cbbae6c62026a4eb8ab5f6c3b61764a5cbf7e3cb03ea129dbbd84a1c729343a50c9f12ad5e804c7393188c73412e852cf087906ba384bbb962179a19a49e448660aba562247eb005628ff871cf39cde8c3e2c9bba18959338e0217e8d688baaaaadae4423b761710a15c6f3c79443af03e6724c39f6fc8139460e25c845b46424a7be0b433e5822c83115a74c0b62b334ad85d9e01d1173d0ab69d1280926fa640f986db8b8e1b313baeb7a177f7b7e5f39a6747bdee9982b141970868ae7a4db65b059be061fbedb2a90610baabdadcd85e4698e759299fac69742b37f40ca432d64ebbff75bb5b53594bd63e5cd5609c091ff599c6aab0c094ae8bbe984daf29c54a9a48cbc4069fabe5c106573a1f4a18d98573288d03bccfaa192c694f0938c75db7702ef20049157d1a18bafd63881f1790026dddf2cd7a65653163b585e9e15a319f33121b98ea5a614f0f78fb158a8fd63fca2ee5fed04727df5aa6381ca5e20ac1ab1a71f10a2b16f6cdc94d04601e8d74549ef8c401c0e88912f2d2d4dab28b07fbe3d38c51767265794e3c2b6d3bcddda7d9c6e3e0a99ccf34ffff47f75236350092edd59c2262d28de6e329663cdd78cf221bdd31c1f844a18f0c452016f0e3a0f4fdc2936335a8fa2e4b496884639cd45749a358ee57382b944d62b9529dd1ad058bce9ce24f329264a251d1f784e1f309521b8a14fe1e84d506419dfbd1c0930edd4049b64c80f0f1cc18a101d3b2995b164dd18e69e2267eb164062267d9d23d79f729d4dd01a8a8fe2c91e35fb60a0072cfb0f7a4b00a766df6428a26ac864e155470828f380e7aa68054e8fc038a75cce4450e5462b3886e544896b048a405407e75eceae6cc4b8b34fa21fda47a7fda4855ceda30171ddf85481720ebf3fe3959ce86ba5c0df3a6cd5ab04f01aa0bf53914d5c3e0af356a4759b7cdccf753fef3825e77e71a074b49f68e4824d79b9701636b70349128ed6c24b073d423beb3851d751cc920c998a011d9e2c4ac27dac35b647d7893485cadc637af1512c18e041ad7b93712ef2639c4d9d17f1ed165449d58fe18c87c60687e4ff6e9ba0b8a0d9a9099ea4392100f330750a0d50491d5221cc23ac10179bd54044729583cbd0647c5b139810ed52a8c5c5d324d526577e108a64098f5e460ab36d0db01cc35e6e81687495cad66da6bab7548b4b23b8a6750185f204980196b334a2b8202abf9d37b0c01771baa1e171f1a701526d2ec41b0ae0eb143dc216cc0cefe2ce7bf292823e63d5124506dc02af032ead5c76665a0c9eca65d2cebcb02836ff4d05fc8b5eeae46210d435db6f0e049c88b3fa93427cd898f9250e5d9c9e7b84f55abb65ac58d167daff2ef4fab51a95d9325c4b2f946c29d5a866faa55796b1948cace891a6969af016b7ec2eab79e04ef87921584fc9a7a7f24b5abd169cf001407cca9bcf3da4229fe501818de8f5bfe87b855b6ab87ba1ae8e2c5213abfec3c9867a9aaca9ddbebf4f198a332f69e18278a367e59518312cfc9fb2129da8b6d8fa779a7dd846cbc4f42e6b6e6dc696a48d8eba37c9854d047168690d806fee80b62614d8a032ce45519885c06dd1f846d0732a0c4ef26fe8949d4f776eb32f61c8f5e3584082f126f60a7343ebd660bcbb6d5360f52d120cf377f1e70ab69f92285d4485b0b5e85b5325fa4b2c0b7c135b6b75257fa33b16b4accedeb0343061002493e2f33a4db6042b9b73d142f92f5644671a5c7e5560baaadab9024c684c8655e234b97c9896fec09a43d958ab05ddbf61db31b04a6aeb8cdf4f4e841462756b91613229905794ae751e8379e3f70404d2ebaa0e56b7167848b2299023264a0f6d05fc6ced14d7857953f16a30ecd921edf56c572bd1e5c534a8044cfd51d6c9f7af38b2b8b1a526eee72cc84c6388a7ee0df58c087be4e528dbddc1a18e293d52c596d91d21ecb594d5a7083bc5b4b8b04046a0ffa642e7b345f8f44298e1ff4ded68d4b1b305b901d0513eb7fa34413457cab931c74799173c71bcb444869fd512d74c8c09b00ab5cb6e2aff5ab6d5aabe93156e4473ac8aca1ffc355fd5c7d3bb62b6a93290cd0dfa4a650e328415585b822dc94739056b5d00fd647278a5f138306fac42536de3ee2b73d884d9ebab5db533cdf0615ce031138f0e17f1224b249365e897f1420441398d702ad15b67fb1ed39bd0c034cd0d215d0c8276ccf1fd72ec01688233e3eb1dff91ee93d8296a2bc14e7cab8dde2abc2590989b90620476bff620d9c2e0821b2c74b6592e3e150b74e6919657ec7fc997c0ca3af730f804505b738f4158d08e2940409c97428f69874b3400beaf6d39b7d762c702fffad0421f91b913d01e961cbb13a02cf1c4869c0c1bc51b6203ca5714fd951cbbbae3c793fb00e7a8ea6e724e41997adcdfeebfe73e187a335fe2c216d713cfea38a47803e04dab161596f6a4d352b1e251cba8795b545fc9bff62893bf5f5cd34831ab013565f3f111a58fb88f0367e26a2ef505287cb4ef7506808c78548e8055c938c0e9033fdbfa9582cfdb4086e160819c7676407eda25e8e4cf73e61b464d2439df60b0f5a5bb2d940f27d80d44b92fc9884074dc73e7405a385a059adb4bfffa824cc12e0e6cfa0d535b1c907c3919f0a93dad2d8456fb0cc95a4616c013f21cf82b07065057b55f1bc5a5e6f69aea95817075cabcb83c3a1f1cd44eda87cadf76baf9078be857d91e624a32e850b0b0a4881527b00bf0cf928b4886b74399c2c961f4e706cf267c6a2b0284753b2d632fd2d5967932288190bc4f5d874382d65e6d751ef1a143097892f0b0ceb53ac3f8c4ecf73a1fbb382a7aa58012228bf9bfa7a7042f4387069887f13b242b4ae86750dc8c171c8119a8715eeccde62e17c1257c38727e42c1825078c40c2dfdd6921f23b31424e96a5961c02146a66a29d7d46c0764a06e3f57a1ce7e9223f36f28bae0325c80940d60447aeb5f6d9c1675d17d0c47f8c959e7c35952ff497646b000df3d64523fd6e06b57418ed71ed3ad04bc75351b8483b613de23861b2e2977d32684c6793779b695d39f434562ffa9ae8eadabba4af7441f1f23754fb73f95611b03821f1df2381fb58816c289e85ee7e1d6f9394d033080dd8baadfe43124f9e5be2822e8ef5743d2daab378c7ee6e88f13d43794c2e847373b55ff22236c89283f40e04c2de5ae9e33fabff81d4af7ec85846479bb0546bfad0d93a7097102d02557db656465bc51b081ccecf4e4afeae47857d63a27eb1229b82740c98061a313bec14c1b5d8de6cd64042e0c24dc6e47f543be02c4a99487fb1b99e5cd0740a791d42bda3944c1400e4f2f98189226fa7de23a0ef670971c1ece24775d8abe1a702a128e357d0bec4b50faf94888be90e2fcce15bd22dfd037c65de8aad96e0ec64bc51b0af0500da22b894b9a523fe135325b61be1f25f622b0a70124c5de53e0fb43451d70fcdebf975517bbe083ec5f63c47659ee3678c8714795143be1565750c5e3573703e30ef1c887280376e90849aefdaf6cd11ebff59de805415ff0f597afde0e7edfdae3873437ef5cd7bc46d3659731cbe39f5affff916598fcbd19a25ca54bbebc3e33acd8bcac2797a1a9ea3d61687eb8358e288c89e35967859bd3a2c267a41a05d63e4a79fc3749f9a4a764693d085cbb1ddb81c82339d48b2568f6d94725652db6eabe2f4642c7b1f952f210bd2d625716711b80087aaf3c762da161d453347f61a07f1604839308f9953879ab4157f59b9f553a8e56d4f86c6f7ea821147d4cd1a9a5f5b8eac9169c5a120a33108b87984fe5a80ad9c204898780674b13bb39bfcff3cdbadc60c0a44c49e2ddfc291c7bc19d221eb8e035c2effe6d876bd105d0e654d7877ba0e499375a3235aa75c3e5dcfcfe5a2aceac5745f6e61f04721a8dffbaf9f12baf42b9f9cff37d80c08ac38992c98ff1b8557401bae4fdc4f5e6671490d1ccebe84d629cada62e609a9059fea14c237d28409f70c9bd1413850bbc0711a995087af06c9bdbaed8a8e37f566a7e0cea93fc0f5910db1d392b21f9cdcb12d6ecbba4896f8beda521c97f2d37b61417f9955f4aa8fc3c911478bf1d68ea7f2924357407e6f883ec41e0c255cd48cfe7eace2461d55fcd5474c2b6ad5c7924abfc608cc30fb9794d8a61e49246f9833565bfe29c821202d7abfa614a09e477e487ac08296b06e9bf8a6d903afdd609cff4db27dcd2a777e1550b879dfc95bc2f6a89fea6f3738bad32f48b41d1ca20168b99bbad3cb8be1e9edc8fb99295c36571ae656361512c3463d22a2fc6e3fa267b617b53fee62553abea3f3948719928efba33a4796c3e05f5cfb5b63e20885e40ce19a4ffb6fe53dd12ea14d2a1144ce85bb3ce6f48144e463718746b3ceaf56bbd2f16f6efb51168f71c6f45e1d9eef774a01dcfceb6c3c1cc86d59a3da3b26daac628bdc5711a5576ca2fe9a636b4e922b2cd784453be3c3a43df40a70acb0cf1f0174feb0c21faa4d1a549e0a555001bc726161524d635391df9d818f3502d2b7aeddb23ea88364d5773391f22d7bb2d27be8209164757778519c30aae7379b467f1538eaf9b49c723f93cca4a58db01e9fbce760b33947243f8eb6d1edc806af03d54c2f5c78e2a4983a38dde5f92cc8f36bba1350990765ae041384168018643890404d1d3c99c4e9ceeac09c7044aa43e12ac1d40898444cf73bd4d8d15e9272e0bd63dd03c692f811e7dbdcb911d91f216a1d184f76665064da1a8354ed4f2fa35e17ffa3225563e81fc61a4915c1f059080a03451224a2b4c9237bd9eb7f8ca4637c85a4de20b24f194f0d3fed6bd805217fe0fc603469ff5e5634688b07e6dfa305a5e18c4b3dad5848b166aae4eb606825dca49e3cea829899988c8726628e4e307bde4e520ac4d0cd2347e53c68ba26d3754ceb58e0f52656c36b3204d791b7088d05c3dfb96e2a29c6694104f4ba9e18333d2fd4218f582c87552faf42ab374a0f3c2793e9e788c791bb8766bf6924062edb3f191143b7afa556827ef0481c64749d3fc427d38c18df3ce8e15b8bcff654c10785c7a60036e0dfb6f8bcb8fbd021f0bfa9cd7543868d97498f68096c55b10c37cf50db5559052fce8a1ed8bf9036ab8028146c82e45e8f72e89f05c29eca649e74c1188875a892c9e76c799c3e31a6b3816400d645ab82183b6560928e214af0a927af68d4758f21f5a6547eb1e4ad672151afe54c8d8e3ad6b88f23c3eff4078d29718f7e76d66e10b04a805e36f7d5d75301720bcbfd572c389927ab58b1aa0f0fc255a5d834e3dd04cf4853d765652b34e91583a012b766e8f734324ae6cb201fe354f9f7297f71763fd26315084920e0555a908ab2e848476cc880519bf033e3fba1fe0ea23c7590147e1e129141233040ec97fc5926480ec87f4197800a7d4758cca122d8ce52948241f2f5022c032cfa04f19ba0757be7c7da17c6bfb29435f103e03bbbf3f3ae90b52ae55bda0c333c7115a29094ff614c137352c3c2ad4259bdd95522c6301826d3193cf8173fbc0c96cb22996e04dc93e3055d5c4d527e8b41a34bd12ae8bee50df3afef1bc5e7f0b1e9f7c4bcecf41e28265e7d4121b2a37cce04c205ca6b7e00d937948cadd025ff7620403a76fdc2455a893b42014c62545a905cf078cb1144a641e49850df6af3537d0c9e84fa63b1fcf0bcc2acde62a6b212c32fff4b8e0c21e5dfa2f2e85324383ac01f07b5a9eb848da815666ca50aa1e29f90a9da0aabed14519f1caa59b6729dbe26c930225547fcff43d41dfe61a2663d717e7cff2919a13a8d14042989adcce47fce563cc0783f794a2838be7e1018c648a3bf6765de7385666ede5b01d3e6913c820a1b46b992c3160726190165993bdafdf46dd9f9bf4278d12c21c9909fbb4e971823e1fa629eb39b98609616816e3c5816a81dd249426f0c11f273a769d2f137c580b8064915a758f87564ee828f5a4b6096769d95621a4891cd120615f2fde9157a54fe6d9e003a97014b300454c042bc2eaa88046d3cd8e1660ec643b7c8411f1ee16ee33f3b80d12f3c2cb1db849c38446c9691211b98817a771ca30351fda2de2e276cf5f33413f5ea90e43dc4cf9e524def371274aa897d248971c723485caed0eede667e0b9ec2b84ff7c8b85a3f00551cfe405bae20458fb612710306ff4ac84b3296d4c85cba314ac0a8617b5ac88cae57017e8475940fdff7da20ba1cbf7377c40c067c15d2a14bde98f9e8f55f4831e06bbc13b7e4bd2e52ab930cadc70163220a2510b9a6b3903af1c7402778534f114d4b43dc29ea84668b3c206738150b9c406a549cc4b54c041f7eb55f849e51c4179f2da54b0f1e9b27c1f68122892fb538d903e6bb22166526e3420aa6c92687758cbd9aadb09e513fae5b6441ef4715a2ea882f02444c2dd459e19ad38c40435a9395bf7c6c4b77e9ed7853b1b54b4d699106399a97981844109f1d4083fb4a6cb0b7ab30c552f18b642a6e334fbd723c375d965493b728ca2b177d0a6f2b5052720893b93f3e688842c88bcadd10aae4aed7ad0adce0bbbad7ae6d3f03f9570c7011dc0b389216c36c72a876d6f3f662d29847ea8275947398b116fc91e07d09cd79544829c6a97ab42b2ddec0615056fc3e1e784ebb54fc00df15985985522abf913b40190ccfa6b173aabdb06749af6a7180e694c9858e0a5a21a922dcca2a6a211b28ce35959dafbf26061175d260f5a084e0aa48f0f76647b57901918525a6e9a4fbd68994a7c42d692b8a46aa378fedc94cc989f04f4f10da8189d573f9b461316ca003057ec01c73abfd801f585f41eb685f4a9bc32cfeed81a16bcd69db98cc294228a0b735156e435dcb305329cf2204394bb21d10addc0e5b220e83b98fa84e8b03c99ae01e5d3d5ca4357d84d44113a900d5c82ffbefa9026530ee783937d3a52b26ec93a76df0a89ab7025891380369bb3e0d97f56d6108fc9b5c4833f49ea00290600f0552c486d585e3fbf16518853ab0cfd84e8986db4521d0a506d60311f448f4f49f7e5e172db42b68c18db4e0795971755e1bb326f814fc70bde815dcb46322e0d0c03012fb8fae35242aa4c6834cc3b570eb70c75e6a3a7540ebd9b067cbfb7329fe36e06ae97129e1fc796b602cbac6b2eab80cbdfa81a325b4b726ce3055d6e52d7dfa7d67f438c703a8a1642c1c0ae69013811d009c03d95fd53e22dd70c799c415b32b0c1261b028d9ed9ba33fb3be3484896367b170aa689983dfadedbd42a3b3c231a29df0799ccb2c4ff19ff3a23e91f6a5121e0a6ad266ec7719e69c9b5f9a6d5e57fb4170da4d2fce887cd6f646164441ca60532a0626dbabd9c9d2199566859d676401ff2ae1a62dd49cacb694f32076211fc984f1a2805be023d3199a768e4980ab79b585b574402cf59bd761f4b3472dfb77974d8026c3cdf2f57af9af4547956f7b32503537a118957e3796a9eca11e06fe35c212e8fc7b5d826b21a50d090d6a368caaad72cf4c1a7603386a67e13655e5fd8cceaa2c2500b6d3299d9bd4c399d9956297cb7d7423b2cce683f53d39741d287afaa5e5295ad6dd5dc1e7a5a07550567aaddbd2dbe1468f96055684354df0112cd58b82dc74457ecdc4407a5d26184c8e77b856625c7bc556a0db35e2365138fad94fa99f9ff78d08fc6103bf826b34d1b381f77d264739b146385c3ec8a5cd880b1f6ea5038a81066a3c94b92ae219c1b330999575198a92bdefa0a3fb29a01ae7f3929bc63c0f5186fca5bf10d83fea544b5749d50efbad57be1f288cae6393aa6187b3e30360b1b55334de17f768ffa666baa7e4552bfc5b9b9a0a398944bfa149e8f79bf58741f18b41da9445fcd0775e7495d7597572ed85c3353259be33a7d8500d3ef8d0fc69917b931f9de09149d801501fc56360ab461b08990750f48199c0805eafc8a83977317e04002e28246b0a1ec3bf17dec9e5152268256300fc0359ae19d83483772344d84251023d1ae21e9c6b0ac1be46f26b2a63fe2113f28989b8c7136674192378500125904cfad79182589b6c27fc29838f6db7336b937dc39854c316c48f3a4f4a14509f885d8e00cd0f05b0bcfa0bd938996bc33e63f90caa0e10cb8c7b49489004021e5898cc5379fe7a4c49753035ded6ecb928ab820a4c10b8e3dad5f3b73ff1ecc8767f0b831200c55d65fd36260678d67643a2be18d0d757199a1048e8010527c9f49c4bb3803b5e188d49d344c25b4330e81448b526412ed8e3b466b5331e440b800bf0f334e826436d5d282076431bfc93a43b316a66b0fa2091fa38ed48f885aa5202b81b60c0ad9b87fbc61e1764b8bf58c1118294a7d06b03b51c78205c2cebdcc1de0a03497f4cb087f4aadfe445349f61d0481bc01fc8c1afb64c47e8f36b173475ad1bbc8b3c5714d3b57bb953941384ef6a902a7a1c5baafaae4f5ea7bb9503dd4226cc7072600f6ad98144be59ce015a9c820be5853e8a4b8d4372044ef80b9afb62381064ac024d021a8060100afbf03fa4d3f00804ee44145a7d67797993e8197f7c8273dc5d0a04ffc60bc74da3c9c3fbe677439a662f769d5c6b16a650386641f02000e3f97f70ff3f61a7170d692112b40a3a1dd0d440dfbfb3531bdf64b9d42cc2cda6873439c9ce786ae5ad42a959f826bda7b2cca3b3d5107d80b9ba4f6897a1f01012727b4498d06df270d87a2a468a4e7ea1d5aabf2ce024590dcfe65d45fda63c86068d5df13df5db9c12d00e87d63460670b0944c6c05be85d552613de795ec229dab78f52968b9923c47ad0c0b94da77f4998e593668f3b44b82f05237c3757271abebf983556645d585518f810807d6745f52d757d32ef41fabc76e7b40018debed4ceaa753aaf0c2d0da138897034f05ef6a0d4ec0da203821b22aefb45e012ec8821eb57b3b669cc3ebfa6274bb1ccf2d561fafe9651620c51e5ed1102be34ed3a4504b6bc18abeb6a415df0a09fd2d93c5b85cb20d8937c094edf85babf9eb0e881c5f2eea9f5d0e040c583f13f580fd0bbe105921a88a01410b6da2786cdd5dd052650cacc815c4777ec3d33572cc9099c31284c781314df183baa8c52888114e06202c03608863a06a267d9b3ada31a67d702695401cf3d7f21a6b952d339eb370b6a84d67516a60744f3537e8cbb24c4831bd17dcef39bda27b663a4646a454626318c93fb2032b9ec3090b520d90e56bbc9badc8eb18ecba32e7a01a7ca952846d69cb0bf1a748d559a42d53d270746553ef200eef0540b6bf5ed015c1d6aca7dba26fba2c6f490817649bc439f844893d22e8d741e394a0a856af4a7b2714c1158393ae317b5cd85e17bf28b3b5334d50e2a6897373455ec1694af35add660328c74c81b1a26d33eed50e10cdf5e97bf9f3e3607e84459aa6ce3cb6a145c37e24b02d2338c04acc2e8d57b4b6718d2b7d589c71780c05f2020841c9d0ee63552940b550751707ef9eae67129bfa84607c9aa4565ec28576283b340cb219e90c8b14b310dae1e4699f8d4a1f88bc43843b0a1630e95c1afcf7a3761bca5059b75aaa260399333300bef083e3d263ffe30c54a3aee07b1d20b3409006fca33ef6417c30fd798e2e0de14b7544ec0a79ceecdf7b128d938ce2c41ac544e3ac34c358febfa41cd29c188573b68f00c584a428a4073440653e3466e1e506d476ea862e86f11098f4f5895079684c11cdfde46e8c5be63657c86c4a430d1438adb3561e43c553dbb2d6a505ff794cfea704bc56ea5ed915861410031fd5aaf56b490138290a5636710d173acad868324758cb99f3e6a99b58719a78cc04f7d066ba0e42e95c429543a440755d92922ac8cd7c3b2d4612db7f1c44af19bfc89c3d106bb66e319234e12cc144631cdda37280128b5f9e9424c15718623c3e40597e0631ae11473e38ba4209a275a4240f1f95c101dfbaa299a8e39a0b9fcde2cd14dadeda21bf6203cbfca89d9ad8d845587d08ebff3a3e91848d51da4cfd23898e3bb955246d64d1513211e68fa8188269979d4685c0a94514a8f2087103be2d5347147a2ba8ffb27b416cf0fb20ef3d0c107265a01061e08682300efea59f57102599525a90e5e539c30dd8375b56f61d60d2897b1527dc877f12d588e254fee72dce0f1eec9445beef5b6bc1c0be6f988175c1dff92967165a8eb3a1f9f977aca0e9f8b083d8b47758270bca6d303b6c16eef80151ca8cc8616c7950a4d49eeb4754a425d039487de901acc09c54ee6685e2d3b742d060c2e4ffda627be2844a798d358014b464d9a65e3fcdc88bef125defab03a2b71352eda0a1abaf06e10e6b608a4be0a14cf81ed4f1e726d1a9fc0868d0cdfce5b845dedb389909320511f2341b2ed166c25ba382579ed61f243ca6b24832516a088008c3c4954abda4747a1313862229c69f159d63ff9dd6de893a3a0d672eb5788e849ca366c0b07f29fd3c7fcd2d037b6abc6d47f41a0786e4860e3f1fc7b62e08f62cf112209ab771c7db65d1293cbf7f3d0def124bcfebe4a46eb0bc74fdc80fa363616eed243c64554567b930aedfc27094e2cc9f98f92ef2c02500eeb8975c5c965de31a6447cb501e798459ba2a47f0cee890f655d9cdfc992a71115309d9621b0e859583a64cfcf211ce6c48be4ada2e54260fa98247cfe89935fb408386a53a9fec8e5a47660ec8e4fb20b3811905b64f9a8b66ab21e3f35aca60ffc5dc53c3521e06e237795db9e4cb2c5c81deae6c048d20ac4f4cfe68e208127c880ae0ff123278da3ad0a636b2b0d6a8fdfbaa556200ca0bd997de0594a4a2f965abd9ac01417fd078db71ef061e4c59a3969f7ee5f94d1604ebe3b782228e739cc4e5ea720e9f42ebd2bbe25e26001a63c9dc3d3d4ab517ee544f97ca17d32ec9c7f789e905d6a62701abc5cff0d2579e80789d12182ce1f037eb9d46697ada85100cb66a5b31a5da8162134fc14fe4f3b55735811c018543bb02e26a2df9a05e976ffa8f4c99e5ffd118673d7a31ea53fd086d64d5890dbc363735e3568e161c9c389504ac198064eaa6ecff28f345385db118504d135e73ef1861cd5382f7d907b635982dc536e5551b355858d5c4e79359609f81479555c555c77f2824f42ab78931650386de0e433c77212881603511c2428ee13a00c7cb127074681ba8bb1a3c6288c74b930d62c857b6484f0d220753b9422eb3d42b4f53270debdf26d5b3a860f14927bd1eb7bf393910415ccf91d5d6bcd68344dad9ad025d4320e057b430fff0b18eb78e317968e5ae78cb7c3adfd8e7c7d2e622815ce4b3d83afb558621a352d290e20fdd80e74947a6a115e7de5a5bd720d748a26a2e7af7f7afa61cf9ac5a182a2f0415f4ed36da2096cc3a0d63f3908251782f71e989d2fa1e9c9840fc4ba22ea96e3b60cef0e567f7587c0829bf56d9632b36ad64ea29ae452d3a9bac18011cca1b3008986a307d318e8bf14ae455a6f993e248802d85f29faa6a976a73357c66fd392a6859a9e75e995fcf196f196b9173d0c9acd4f2c58dc1b4c3e9eb6416c9478dfe3cde5cc74b66d5cdff04d6bfc5c2cf1c1c63001ec60bc32ff286996faa34afaf6f385fff733806296cd5fb2a71551497228e461bd6445b6497ff6f9310827f1053fd6741001c63830114422fa8c255fa564431aca38fb06a9e58b866630a1f572f74699971873b56207e868426372d1aa56cee3ae18a710cb600552a57d8cbf7adfaa0a520665bed1f7c9f7e46e855ef06c63287a8e69af5bfb2732c20ba49b3cdbf13c3abbf41da094ef8bdda67482296a426a6201f4f22aca4c5fcfbc871f0c7cbec5e20f7a4e568bd0a53755328ad6034fcd7d4a3e082098c7545c3a0f216a199bd694d44761aa14f9b5b458fafbf25d32e37b8cdc043252675f33d608c055915f8b7b6a3eab7a24e7dd708bf05686d0723168b2987e811dbc397b989fb40b23a2ee65d1aabd87f62ad7303c6e6aa85076174907307de1fb3262986a82e8e9e1563a112d2b510bd07fa223e049eb157331d5b6d8340ff12080cd46145a209f4ac81b9adc8bedd6ebbdf249db4992e7790d8d200f960583597cbfe407a365c0865308fd213e8026157de4fb0beaac19fb3729d8a8fde35efb0f0f2fff7fc0739a4d13468bd009108cd993e29e3ab349889395a5af9f4ccfbebab36f524d7fb573c37dc3c44bc83e1f440d14e8a6c042cceba3877e6cb6243a5b4af02d7cd199366c090e5e072735f09d10d7e726f0a76b783def85ca0ef5366c0d3dc3472289ea4dae0ac4f222452d47b51a0ba81abb46e4d74ae0f0e7e9b9cd968746e30035c164010863be11047c6064a61c82c4ea16ea6d1d8a42ba62854192f3171e862a7a27bff0d42a777d8ed11a7bf452e0329003ea624feada32723a780ce1e4272f18996b2960718eb624c2b7fdd1aee86c17ef26095e3de6787af89c0849f0f3fb92e4dd841f8ca3e0ea83ba4019ff864125db77072fbc319f2d087822ce76f3b984e78b9259e3c6f28bad063d2a7e82fe057ed3afed23bf7e13f28e071cac7ff24a25e40c233a0ba6780538c0865eed8fb6f404b3a478a310d0623f205ddd7f5e6b620a166cdc3a74968ec4f0182f7d32240ec745201945843caf6804cd8e4292a6b38ce083e56c225c038991b56c60178adfd3c1d5fdcfadd9c9da994dd70b58580cfffa2e47061483409dbe8e019074ea471d9f805af2655482329bcf7cc2371a13a7d63ac7a1acb16b9e963c8b1cc353708e47a559eb24cbf254f15fd3c9a695eaa72ab72ac1884b195f46808b39695cc49976c298422bd9a9715c9eea93be176a50298d9d52c184cba31e28dd8b39315acb64cca2db751ab611180e0687996ea55b3e8eaffaa72e32bb76a5bc0b96e2aaf2ee8f84455771bc354f6887847b71388f7fac77055192db8caff357124c61c08ccd94cf0c84c3d31ed6660405fd5c1a57c28cd99c324c51b48690986092e6734c639002ac310398e4a48a4d42d6f8d224759c07b2b8b7dc4d5b22cf51594710e3e06c3508ff81e7c556b6621225728901316622625cc8c0c983e8edfffb11960656ca635917a55c2215619858b7a808bae74e570f7fc709a3cebf5d6b274a4d21aaadf0068d63a6c661350a75e4e545fec93cc9908141bdfb548a2623a7cb8789eba3ac6a886a8622aeb7f2fc6ed2962a5fa8b1487b0eeafe3d9fab3a4627e409ce13bc95bafcb362e20555778d9f050310ddf3f11263636485ac61753380f63a524496ec3ebea5d739210282adde306e9120dc5299a4edc435ed94626bcbb358a63a86a860e4d0b206e140d58f3274ea2c23fc9f3c26ab671d1394fd833a09e3a84b8e8863a0915e37eff3f13ca441d4839608308aa639d50614d86a014f99c79159ab253038444f94e2cebcb713090e9133653897b5ff26ce5a8b4a10aa4759a3dad6f3100a59f26e443e4fc93f43c08ce6da2f2f6aac1b6b19bfee46a847705ffebdb2250d95c435582d9c2dec0c698956f93f59ed6283d57f0ed48e7a2bdb53d0c10a0159a3b4915cffd76f01cb3fff51d8a97dd783aaeb9c2fe7ecce631a7072af2e296be5d6ef0d8144f8294088587f35580fda9b6dc4e3c73954b1a81e82224972390998e9884ec6fc8451384948ee51f3211abb41889407d9a558cbd89b963b71763502ae6b3ee0256b86277fe051774982b4a79d26d0b04803c63d99a5ee5873649be56688b3139d8b0bb2796eaaa506429e1b7bc3fc946002ab0e24487c7b373085d0d95d3fd378e8faee93ee666911a6fe145e0b273573274e98b225d386ef7e5673fee5e92d9be9b7724951c2278c8d09d602f2c2501739411896af3140e3378691be87b35ff35e8fba9970fa96ec5b074701d763c8f1264837c615f324018a4773225c9378e87a4c2dfab7ca6a406af8111279497ec716d40282106647bfcefb792a5241101b0ae84c9e7d4747a227e78bc5b507077cd84c3456d8b483b05fb42b43782cabade153cf268b5ef36a5cd181e629d49841377c350baddfaff5434c9e81339fe296e4235ca6ba77b29693eb3e31836a2d948eba8333fc022f3812a42bf42f388fefde34d0579f19e73a314f517d16076f0722bb86727bfc33966b71c7502b0881c2929dd5fc3c4b0569df8294eba85ec538e309144085b6d0d689402e91ea1921e66212846bcb4b728bbcb77bbcf2c3cc9c94322b6c6eb5b92c57efd5f28b04eadaf7378d2a7c55ed26897a5444d4daca559b1df911ae57151904c84d1e2f9b192504e05dfdf804bb4ce9c200a4dddf4a9277064754a48539283a083e594a8a22db949e82299ffb91af6265ce1cf95fb60ad769fc51bee3cef840e07b10cc283421b098ad8bb63a4e930d027929a05ce163047bd9c20a9704db0a0c03d65f4c835a762f0aea131297438084490450452296b417d4ac2a9d8adac425ff51c509f0233d3a0d138ea8d7afda0ad9b2a5ca90bee0c6105fb6025f8fcfd9abdea660b71beab35412537207cab60b27e4cfee1a25ea7c901a6564948149858dfe4c04c3471377952b1b70247b86d82c73a0b621cba628a3c8d981d4230fa90c6ea941d0dd6849678383c64cbc5dd192b90e54eedc7c486d06a8e711751cefdb86b1954f0cdf209c4d5710e5b6542f1b155959bc631a9aef97067b7699e9a80a0896361c701bad310287b78bb66f735c8f18c091e9e613b07e683afd40c2b14f240b88e44fe2540cbff125c546deb68eef5b2e7955bc703331c03bce94934fc97f053441cec319d8a83407a5e5b0676733910d55310f5d141bdf91309f35832691101936438b31eba683c17b1688b70d5cb3660a2dfc74536656d4bb4b168b1ed7604905e925efe70cd1dedf776b431eb85aa5adf08b67e21c42dd73faf82477594dbd32cc89afd8d4d83a3ad5c3657286a1aa05893adaa46226036abe6a7a3f89112b82dab26fca3bf4747f99a11606c3cb160cddff030367324579afaad317ac15e2a3f3dd0dc705cd2c1f581793c2aeaaac6866f274ec69f5d6f1f3ac0ab7a53483f032e3983a597cfe9398b9138c2f51d8ba21c1eb8f33a5554c6b7f9a76043942fa91ebe15a09fb97942a5812e73b4519552dd3b71fc0922303ed76b2115bbf1925c8570e9ba44e13204f61bbe2d354e9406ba78362f1072577bebb92d2d9e542c1f5a29ed3c1018a7e2a5438ed26163aa9012736c0b27e4414dba98306094e8dbdd249b96fb5732e6b4ddae67d8cb59b824da2a2a0bc24612503cf731ef79a16d082334994349b3da9c8c5f9bc27c7ec38270f8046a64e261ce8e5546702f02c3491914e46388c7834ae9df3a19c01562491ce17a4035761b10f2848c4a8ea2654bfa21bca21385c0b08454299d98f1ba9280b277a358bab863b90fb50414ae6ea8013d72f3c17228a471d9731b3e02c0c8eef184ba0fd58352a85ceda556ee08e5e5201721f605e553ef056c62c6bccf7fafbe117d59eff51309f1355115a159fa19030ba2d24b5f0991412c934446c550d19680da61e4ae4ddffe5441f514e2e2aeaa45719e0e51e9590cc30f7137f0cd56b22e05ecf1a3cc21cfd406fed4e5c1651de016fe7b5fc744f81d30e0a1dfa59f8ee78df0fbfb123a32d266a4c1d373120ed121407e15f0d5ab75b0cb670f8d8c2224ebf2fca2e6a13a9852d58f25076a58f4588b644fb9b4f03cf258e1e483f8f169bffc9357ca7a33ca007993978328643fbd51c3302e77d55f9e1c996b05cf5d4c5cb10986e8aa9e74a21988abdcbe909680c5b8497e850566d6a32d72f527526ebd815142f7a29a45a6bcf7d9c4b8cf07371a50401a126115df36f9458bba481601c10b1ff7b44daf162fa5b7d2bd7c97946db69258ae09aaaa633bf067952642363277ad001e1a77e9ab0c08110851589fd3b5585bb2696c1cf563b70dc89327b817a79d38f72b01365e8129bd2c556176e65270cd195344e48c2f8e4e8a5439e5446b548dd5e08b9ab98c8f801db5a23363498f4721fbc9a98e72b3a0db9f4e624674432d9a3a8a011b7252d478c7d6f7eb15123326988cf5116196056f2699e514591468b1e4d51f8a84115a7b05cd36d9fda47e876d2bb3b4e0fcdaa04d36491a46327e63223df9343b733096c0483883a158ca9cc1a1caa20bcf063d74e1d648ae9549e72b7f6f0a6b0fbf72c3a4404df01d6b89e1fd765b43da1ef8dd9a45f5dc445d33c1160d8d372426fcdb1ac5303e8409496be985096ab4666332c993ed6fd41e0c4ccd37950420bdc5060dd5af0189fd2d428f015086c6ffdd1edaab39313da99fe5ff12308fe6024cf154069d172603f2c64731a7c505a1416f186a72b92a031aa31ef6f2ce83c0cf7bf18db2b80514947ec8406620f14344cd1483d9b498929f9aa7282b4b6ef7839de034d6b10cd70a3869eba5c30941953525f191265257fb9409a21f2a5b86cff5f3edd1516d67f717acb5def89814a4cd10248c8617da7bbbb16407157bd869ff6022afe6784a2d7523a11f3e9d4012cb667aa9e8ff2adbd0fd97d24451e09039c7c42e736b4452cca885898bf8ef9c208bf29c003bef5a3610d3d1cbfee3f76071f20bd2a5a0d57541c94d7dc5c8aa33b295e43a6ce7b9a53998a5e3bc17d186a48bf4225232836fcae3f0cb8843fa1974fa499700595b10a8da41f51185c2fcc82845c042cc65c2518fa564907e3aa323e02f4a92c1313ae3d0efaead64cfbaf9f785356377fe869e0b528e0eafb69c26cd19a4dacca004537cb980cc417e58c29d826f954670752692e4efa796c6700ee6ffcfdf98304ccb546bdbf14feedbecc5199d52845e273f6e070d13e2ec217a6980d7f8fa8b07a777c29c92f835a23f622d8fc8b6953309de8a95776d5f63ecf0e3db9f6a300d344ed494dbc9c8f562dfee029b093bc5d1d1267f87f5be8d3b7d79b758757a2b0553ace1c345cdcee1ed3b9e46fa527dd1e8e298b213103840f7033fd644b3d45e4fac51c6b4f7aa1ae6b5e6d605d043d011fddbf4d3d70f075239664e184308a5ee7c4c554a541f5c6b5b3ee3ce0cb0f92e280221d77c35c8f171687c6ffac84781086d4bfd7cf6003b751a61482c22f52f871eaef1a8188fec0d79c7fe14342f49b3a7bcd30ef57f6e6b4be8aa1fbb033237867c05644643c3e419028e703da03db2f7b26b1df5a741581f299b4030e513917c2fae669a8c7dbf0fbc4a76cfd8aed0bb872918ee7341da6c20c23bf06c942195d22326aea4e28082c97fd1f5ba80516b433e096f321d002520460f4f4977967f060774862bafdfdd81ab390c47e3a0cee9595c98019b4647c349330888450183dac0adbf2b4da0d15ec503aaf11c3f5e38441a62902a42ca19edeb2981c640ae8ec4e935031c83cf921a72151fc05e53dbc61c73af3536a5de1653c6deaf1903c65cf22bca321250ab9988169bb7651c564cff7d85621bd4dce19b3e0443acffcd0cd908b605b16cbdb268aea5e06ac9e04ce0a73e529833f10080e5735ccb5741501a6b617055796bffa6ce7907ad325dc7ed64293521a1e41f6195aefe5fc427ff7a8d21ce3d32499ff589b6507db6cd5083a8eafcd81ebdf7a945f60d93e47da6c87af1172e7e91d8d857c64dfc9d087d48314af1803e5a711b7970985e7a5576be810892594154dd6e6b81e119890f4ce8d7ac5407eee9814177fd03e17372cd03459ac13dda564aee1061c35971a4dfc5a5a860f29f45b8efca606c5b2614f0f259789dcb31ec83ee7f707adf1ed06b88024b7be28966a7b49e0ae441f909ca22373afe67d5fe82ba4284a3bcbff4bca5359db37cf860a09a47847f58f0cd1afa24ffc3c1e3b19b47409afa4601cccf35a19729c66b14a3b84e8338b2f28610e28c9ede588e87379acaf8730df5e8e125fe55ff2d609d71c0e2bfced2f6599cdb8d912fb70147332d2c52649285971d53b8dec44f7c3c045a3be9f904f611516bbce015521d8bd77c2045174adc20fd700926fe3dcdf00cbad5e83cf1c2e1ce05676a38bc0548c2d064e4bf3125630f60cc1a451e9f193be04d8cb89e4361cbecbc3d411488931dfffd865a91ce91d3cc131aa93e0aedd6cb1d3c16b4725d0072bc1f1df999bafeab0f14aaccca63856cc2b7f3ccdd78d3275c05774cbcdcfcbbd14731210f8facda0dbda66338caf496de62ab04c0f1420d70c7417bd288651ac5f67e4b3f11e83cd68942c1326cfa1018f290009cab0c67ce3afc6a5d56e0e99c393c1b6d46369c2b8b66c2f30269986f5066464857aab4348a94ee89efc9581ab18d9420e2f26c68883bac05b37fad4908fbd2801388eaec3b4c8c9ecc5cf084dc42c6fe04a097648ccb62948616394e312b6ca7b92078058567b333b390907ef05896cebc9f109a11e6bfebc835bfb757f5b74f444c69cc34c4391775616ac8d6c5eeb3316700d79ca64313307ac1e052a68a95b135795c79016b49c1ddef2ab80b36e81a615288ce67c83426eccc0f62438b2ad75b7f384b1de898dfb391cf2592acad595170bedb0fb34fffabb272808d8b9ac8b0e108d9f885fd61886e29d54c07d59c7619b737afe92fa808bbad5fee68d2a20b4853447481fa0e991fe5e448e08f90023e04d858492105604495b4b49a795c1126d8955395802e711924db503f6e25de2aa7fe926ff4a24a8c2aac308b4275f6d07fecb23a7e6cf8f2ea9338b578c5c926f32f2862291861f48cde439677fb7e547b7a90d62e1d552906f0756d2d5a034e9a584ed9484cd69376a917cea202cee3b1045cb64d884a0c54bffc83912a611be690581f449dfe907a1742a2b130dcbf73149174952d1bc0555219fe133177278bec75f474a798d68192634cebce8acb8180a69f9d0fece5dc16748958bc2acaabdabdd9f94c44bab4214ec8f8893892f8a300cc30069cb2bd2be1c6dc3c7bf1abd63a9a4457d95564931d4ff2ffbee328149fb3978cec741597933926174c0033c08e3abd3705a581fde4a4dd0d868e1023b11f5e3656504bdc74cd01b78d09cb7ff20c210fa66450474bdfd9bfd1235a7a95cfd00f7bfe92c7259388c9eb36152a74bed7a9b2ef12dae91e4a034d55b7ff8a549b9d0a5ba4c60a0d079467b60ba715f82d58e1172f522fcb2c7a78e0637483d1a3b72c8c308c42c8077d851db5545120a907f1f1ec94318c331d8d5097db185b4c0e20a6faeea201698bfb96d4ae50c6a6debd8a57f1c27508b00ad4f89d8af7b69166fd105e8e2906db6e2e4244970bacea3a2fb5d18ab69dd0326770946c44ef00f6e864969e5818949d179751cc39051bdfdaf3531456f29179f9222770f8efe53b0d44aae809ec43c1e7cf536f1078d4e1d6ccbbb3297c1281d504a78d81ecd25f42e7efd706e81f2c6e2b7db0b76f92f6acd2c43a26c9723f07ed742c0f95c88e603ff1384e8e3050bdb0a4bef4b69149d00ec217d7c7142839969e9f96a36fd7b6527a41d89b6639cb4e83a181f2d03ac10f467586cf2e9eef2640145fc52cb33ecfb24599e6761cdb85c2cf0c7a5a6d1e6c26fbdfec6d4ee05d08318cd15999335bd1060c165c37ad8395e557e3bf486493359641b11f04346dd2c8ed44349b2e99fbd5d0df0ccb9c4b49f39857098d6c8d5b8addb1c379f41923a2157b120e2b20c500537aed95311870d0210a9793a5a85647e141bce45f518de6c164de01243a785e1fd96a7e7cfa6061c32e4d745dca14becaeabf359fbe80fe1f064782a865d1aba2739602225b6140ffb702b6c18179ece13b52dbe5644359bc8d137eb8af046a714d92672db1285ae32f206e613eac55f52849b6a66e7441f965eae53accd1ec459ead3379e41009cdc9c3d9ada7bf5843d9aeb6b3e4bebc9d92c50293c74f97423c216caad7f61315a42091b054c84ef0d9ff1b6360e54d2d106fafff2a8a77fc7e016802a498e50cf4aef02a42823183408dad1631bc5bdb68c73ca23af0ae38a424e81e04ccecd9bbbd592a1474234eaf0ea86772810380c5cef30af492eadbbe0148c1632e0813081aaa41e6d462a5d4532635280ff1eb685422297edd297da2760ab452787b60a6b1fabf5cefe562e6b1c9b192d25edc5909bfca63f51b71875f5a4d625f5cba7ef11a7003cf9c071c6d1fba5cd2c28fdcb0bff0eb81c66e7b311dbbbc3ec65270bd00dcb701f96b4d5758fc0766f6b5c1ea77fcb563193a14d198e46b49923478a8e04d54a86ed62e43b45a488fdcea061c9dc82ea45737a9ffa9c74fbde4af7705fa6bb3b7f59fca6b81eee3360389f4a076fd5e7a7be97dd05bb72804df038a1393a05c30902ae21c4b51c0e79e145bacf3b4ff11ec9583958a1a0eefbf3cdcb28bd5b756a99335c5f4d3edd3e58e274020856759ea0008241504027889a2cc4fbc07266c5292d6430d8cbe482aedcd9232b901aa4065edbb7f4b915bca2465c509630995093e6faaa1a1a7ef2b241367dfd0f88d3a63eedb9784e1857dad0f2c06b8244ea983e36ee9a5b59ce52c87afe34b2bbe97d6dcc98b6dec7b18e39bbade039b75636ce3e3c6dfc653dc631f37f7ba1581cbdc8d04f1f9cbe5491ce6495c307a851bd976f655e4b2283c2a80ef72f7be8963d3aff7af85722fc696bb0fe4de8b49b38e407072707276ce355e5e0ee7ccf1d47d20f6b9fb3f7c787931e9e3c6cb96b3b9a9fb86f770a192365ede7d7d7879ef1db2eddb5ccec687bd7fb519eedaaee3a5ef4dadff50c1eeee2deaeeeeee15c8753c15e435c8aa2e0d1f55398ba2fc59dbbd8b12b55fc9caf2dab2b8b230c6fed559b7b6ee0df26debf6ad89aa2aeb52a93348f2bdf7de7befbddc286466538edadb67d29f5207b1dab3fabed6560122db83cbda6c4d6c5f50bb0a82c5e7792ebaa33973c2fd900970a861a7d431d6110a97e4ee638eec7e2e2964663b4982f7e94a87df3f40cf496631660862553f6ce7a5d41484eea81368e383f283964bb6496dbbd2b3def00d2dd199aa54d938363dc7a06130aac098a88e1c1d94f47614a263e74c79d87dbf864155dd8ba2ee6b29fba660dfef88a02a16ec08f63dc136754aecfb429c5609c202bdb5e0e5f5202cb01044e675a399bfcbef9d125f7eba6d124f591203be639ef2ed3e4221e7e7c610181f1296920ad8f7d780920ad8070fc0bd3f470ab13bfb5bfb28d0fdc257c04231c308ab6efc75639c1c12be19bcbc354348425ea8412313aa1b37bff199954ae88bcfec5e35f63bd8f5ded4d5c471dc5bd23451cb59fbb97b75af911d752f2f3b5877a423bb231dcc14528364d4bdac909a6d59b0a8fb2e634de2317fd25759a963e95aba95aefbcefb1c7be2f33e49f7ba2bf7234bb66e12697af76b127fea333b873bbbec9c5f4f3d35322193369f8eddbdacaa4671d47d11cc85449a5d6c5fd99e21cdb79623eb2d069fbf470af1f27e277a123ed2cbe0a9eb9413624719a8bc208397b7236f99bcb13c655fdb8faa42b203b5c9e5fb5db35df0f7de67a041434af8bc77fbde7bf6b9d105b35a12cce4097583dd832b8c5eff0246a4fe22bb23c115461ffa058c8a38377aef1e5959759c018a1de333694deb588d85bcf8cceeb5f5cf575f1445f7ea091745d1ed9ebd51ec67b246b1b7db4f8d5955f857bbc462217929ca296a44528a324db1242ccce0a915afac7d3fb7f11de00b9fee5573a4054ff9b7e0291a32895cb89b1126977bcb619bf668e53d1fbb235e7e2ff22ecc9be5cb9b3a7a7274f026cdf6717b071bc79b2d3571773e5504c761ab22dc2ee88efb26cb767f4daebc1d5df0c60eb632762f273eef8f78796b4fa967dfc731d6326879df3456346a793f66ac6bd0f23ecc58ddf0f2fecbe8ac2e6a3e2d7fbfda6a0f96ef48d32fe7b3efb36039d2f4efde3cc1baa6a8eef368bec082973793e60cdb8acc6a064b6934716cb38e31dc3fe2295ff9fb1dcc5bd13b8464f4a1d108015f056ab625bfd87d163c5563b2d0938fee3ce1bab7eee0f29493d7c9ea226b8bd65675e158d5bee6ca26759bf49544faeef70fcf4da64dffc6cbfbe3c9e73dbdf56649b396e0a9eefecd8f90cd769481db1e7942dd99a4770443dd9e00efbbf77de3768400fbddbb8f9f4be8cd2ff4f20e29b20abd69d263a8ca7771423f32a176248f24aa2318fc4b0ef447ba23f65579f9de901a1fe97e102fefb3e0e5bd1fa241e847cf82a76c0b3ebadfbd3c75c4bf2ec9bedd125367d2ec98ecdbb3ef7ba5d109dee3e5fd1b07ba698bf2bf7121e88efb6f55dd101575ef9b2a13ec6bc4be7fbb17dd711f06dfa5b446f9a102e4416eecfb21daa61edc90007010894433a61e5cf706f1953304116296401e50bfd4a13f88905a5f069f5a8ff84a67209eead978d77f80a7dc34ea70547dcf8ea5972ee8277d8da73ad244532d9f3fa42996cfff427bb010b3f3afd094cbe70fd1d4cbe7b73405f3f949b4470b99f6a8491c4077d407d2bdfed27bdd58533e2975b0506348d337cc68018a814a84ea38a005d1d7af49ea0309bde857eae8750de2298d499cac23e74b7fe3a511ff8d2599540d93da60d74ac3aea50eafe93406b88dc91c2f6badb48693f3772cc1cb6a6f7ed737d52f7796bc7619e321267450af6f3abdd7866292669afd668ebba4b5e129c106c8996373da9cf59b9080866dd2daa94315dbd45c1094e338ca71dc473f8efb3637a35f89e421994d6693d96436b7214f348232127921eb36994d6693d9649cf53ce3465dc813654c471977214fa4475ae485ba51a77d32b6fdd86c362edbd0ec8824fe2d7126cee382798afe0bc7f53a6947789225a687bdfef5badd6e36d7abdef46772561021a658eb337d329bcc26b3c96cb29bccc9495f7fa677b9b490172caafebb66a77d7da677b9683c2e9bcbe572b9602e97cbc6d269ed60fb91d96436994d66ab2d8be2f9b1d9787e7aaa8df35e705df57693b566f0b2fe1047b9abf5c1603056cb32f1d9093b6127ec84dd606ffa6037d8ed768361180cc6c4465f7fac5a8cc562b18654ff583408e85936d6cfc762b158b1b3c6f261c5582c168be562b1583cf0e8af06b16233982c2828e805191c55ffab4131994ce67af1b87605bd82828260349bcc26b3c96cb21a248bc1828282826a90cb6a500daa4132994cb6821a7d6d7f4cad5346fb9949b63f980cf54d2d0a74b3d56a2ddbad75ce7a5ab69f59eb557f5aadfa537f7eea0fcbca57b269d2dbd0a25956be52c6aef25b61b9fdc864b295cba53396c938994c06ab1d908bbb2f2e2d5fdfce3cc57253b627e46383c2fa396bfa6b07f31547c786d2db00437a716961c916873cd1e8b2ec67dfa24c2cdb6c89cb686536498de63291677daced5939672f2b235d7d235d9542dd6df930a1e133765916a856bb2c0bc4d5cba240310b14bb2c0be4ba1ab845ae06bc48c67a0dd98c76d652f463b19f1c20315a2df6d9979d99fef5f3134b1283c562b1582cb6c3c95af94aa491ddc155297adaf0b8987c12d311df116da4d67ea46063e3d4476b180cc66aede0a8ea41d61ab147ec1136c9cdb64ed8093b6127ecba6030d80de876bbc14ed70973c14a4cb895af44721bf244a38c7d62967ecca4027dfd9548d9b10d79a2914f2c488f7e86acc7eaffc462b11a9bd1328ec5b8582c966dc786aadebed56ab55868c151f5bd6597b498f0f4f8b85aaf56ab256b9974abd56a39adde5af5d6aab7560b56b262e52b91466e439ea8da2c0c26b3c96c329bccb6f29548a3902782d15a0a5e7ef47419b1ce03d3daabc2ea749ea20e839db01376c2ce9e1fa1d1e6fbbeefb33aa56f8525c8a2d0a02f9fdaeb48172d2c2b5fc93b4ab2ee8946351f1237724b72cbd1ce9acc06b3c960b26e04b2169695afe4895aa4fbb2aaee432d2c2b5fc93dd188c473d69ed0b7c2d212e2482391e7a596d24849a7676967cd4760c457be1269e4227a64e52b91b8fa3ed7884d6693d964369973ba0b8f7a1ce7715e8886382ec48dbe43965a8eb3356fa22bae56bb244e4c9115e9633e87f431e41025f7878424112539a28f7922a38779d25f32c7f4e083e4900e4822a28f79d317592911bdf72f231125392212bc1ff3de7b4f644482970455083dccafe0853ef45ead9bab7135aef6317d490c33d2558c69a4ab3a56ce76e37eb6766dfb3a30cfdaf675623e07914813996d3163feb128fb30a38e8e9ec55e46ba7219e9cabaf0a9ffb42acee5f8c467c6a7ae4a70aeccb938576e6597a73cb7b22dbbb22bb7f20eb9955b79074fb9f2bd256c5dd6655dae5afdde5bd56fb33467414bfba5f75a566e0b974589e46a2c2b9fad55f73a1dcb363cea28c9dd7b2bf762cb8db51be9caae912b8bc562b1b2cdc7bb7375b1582cd6f73a665576257f685c21f3676b255bd3f7b9eb75beadbd59241a411f8da093a00aa117fd0ade934822a3f75e441251923322bd2742dbf643e5c66e5a97db74bc6651a82b4c108d46bad209bd475777ec46bda2a5eb6eb1bbb15bb9acea85ea8d3a66f168d9d8dde8ad30a96d74877d1782bc60557a6651f66bdb5e9214ed7cfe40b2cd4b0bc54b7bdffebdf766dbbdf75ecc85f22ddbb89a26cf1a57e36a9eca3f689ee5193dbd12ae32eac40630761dedd6241289c65d5c3f1c9ac3a57befbd5723a1633aa6637a8aab330bae029f3aa69328a17a89fdf38414dbaef8c85dc1614177644177f8386a8b9c7c36cae3094dddd34b6b6b5686071218396ba95b0585e2245733b32debdabe82f6b81bd8f6391f4f5127364cd996b3f9d6b62aa0dcd353fa091565d2693a56f3f1f274ce695ccd4b8ec6742c16b3f9efe571daadf95e8fb3d99a9963b6988572b7e9b4d8ccaaf20f2882b69963342d8c6c93daac4a9ba0a2ecab403bb16db6ed9d6df38a8884cf7f656554452e1dd331caa38a5cdb1ad1585c619ae26ba28e4ea85b234177b8bb6b247412ba09fb1873b77ee9562ac2690017c15c15e2088fce98f96efbdfaebba2f6b7ab5e79b3c669a6797da3635ddb774df6a3b507dd67bd62dbfa645b6bbf9a5a08e2a917e2a9dac3599bd6510cf573c7751dee81d6d3618ed61eb99e39735fcfda537fb8551f1a4fad55a0ea468db2ed67ae522771776c6114f2af479345d9bf5c7cf74d2fc870afbe2f7cf4a4273d4f2fad167d337869ef0355d6fd99fbf7de7bab8daa4cd69ab6ad67c70a61e140a86f8bc50784f2a0db2d78005bb7352106fbf74ce20ec4a29c3e26b58bda7ea4a05f9ea2d8fe7851a74e9dbeb4cb8897ee7269239e7ae1f86bd77697751735d12054454d6edb188aee8be4cfc1991ca2449339f93b72c890ee8b8ce17da0fed0d3557d2056056a1254017ff72be40f9144429fbf238928c9097dce4fa47b4c82fae90a3f5d75a31eb57f1655bd137cbfcdb7d91cd85a10b19dbb1e8524db38db37ef1843e863e83ebf1d75ee5b4b7313342791912822289f1bbf996bde0da5591416a94aef9126fdf9ac6a068bc25fda648ab5d6b5cf66a2b78d9f9e2577f75207eeee5f493476307acda2f093469fb9cda2f00c56559626d385926fabd56ae5efc86be37a6e9ecafaf1e84dadb51e69ad47cfbd371aefedda2e946bcb17cacd33c9d53277e69c73cef9efc8847c5bf9b6f26de5dbcab795f308c77f2c0aff6cfc1ee6dcdd7f061a448368107e1fc500865a605e7f1dc160420cfa3b120cfdccaa488f3b788c458fbf16185b8c756d6c61e44c9bb6b5f1bfa98423ff6755a6cfef75d0c173234e07a5d731fdd7c1485738c8aaec0dff880343244e0b097adf0243825ecbe794bea54492399f89b435d2d22c0a7f919512ef2d4c7fa4856dfc9e68ac2b1c8445303f5ea0521ebe71c661e3fcc3c659884cc3c63996651b971f3ee2a5adab2bfca11107c562b1582c8683ac8ad3fafb4ca6ffb2aca90962b55c2f586c63d90fd0c6de77a48983b0f7a3c7deb3bc391a793f7a1746dfe19697984553aac24116c5f2a1f758460cc32f2f8f78895f2f7c04c3f0b3e09109a150f548ecf2123f099f8771cbfc649ef21e3ff5f0df2d3ccfe3462678b965553846719055e11745e18f99287ee1d7c6cf9ddee971a7c79d1e777adce971a7c79d1bdf3efc7a14fa3c6237bcc46f47d6c61cccc8c92c0a7fcbc8c12c0abfcbc8cd2c0aff17dbf86346dac68fdba03b300ea23b308e89f1d5c73174bff2750403f72b4f473074e405eae69ee5b99755951e3f879f835955cb63d2e4661b7fdeff7b9ef79f5589de7b0f06e643230e0ca9a343faef7544dfb2ea1ea68381218728e93a9887298d4a584613079546252c5f5d9fcf0671624890fb920b097224a8c2f7713f84f4df73644ecb97bee58bac32cd4bccc44bfc37dbaf94611bff0a2d9f5f16851f3f4cb4b3e9c80410071c3d0c382241154a0ff339a5877921735c1ee661c8219f458ddee58bac4a3f1ad991ae4263dedde8ac9d470af3a5cf81f9123944c9cb0fb90f43528b7a21734aef420eb15f22a9458dc8abe325bed996fefb154aff914494e4d8ff9ec8fdd2aff07d0b49c4fed79546bafae8c63196918a466a51a1118e5993e9fb621beb1169eaef3399fecbb2a6667b36de53abba2d8bc2efbd675381b6f1df9945adcc6bdbf8c7bcf8efebc6f0df16a659fcfa337d59932d6de3b366bbfd006d1cb4f158b7d6df6732fdef5c63b9c67074f0579b45e17751c6f8f1ebd4d9695158077f8df97d4b92b9062cd629312af5d2af6de3a35f5fc7f541e95712878e405ca09f63e3a55b6bade5acb5960482e3f42ba537640d7d1bfa3f28cdb14ebf090994d858479b4e70ec987e547513451b5a785400f5a6f1698aa1f8fccdbbb5fe3e93896a7dfbc1d124bdcfdd7b494d693555e7779d49eddc4773bd403c3c3c33269536ab369b1f5b8552672fc8e05f6795098f8e194fd1cde9b8335e7a8d971f6c01f0d8f549aab2b1323465fafa23e5d1c1d787f18f008e5dbf449f85a66252305fff52cdf2b55a1e2e946777af4b2f3e1d2f4480a62a10b4f4af2e2f6b8ffaaa22d41ef58890daa3c2aa08fe5abfd8e09510d01dbef7115e3a10345591d0f2557b541c217879ff7aa4f6a8b22a02acf6a84baa084cd01dfeb0590763dd756629cd36bac31f1ff93c4d2bdd95345d5e03db05173c3ac1e557be22a1a9ca0212e971d498b19e414b7f98b192516b95f957262a5967404b7f7f214da7a22dc27f8122dbe5dde5ebe8f2ef2977a9bb8534ebb3bc593ff4787442fd9577a125cb3f8b99813c3ac0dd2befe94a59c85f21fdb9cfac636c9fb2fd47a359d798c5505d87a72ae05fd678adb4529e95920a509e8daf6569a016e1ec888947ff3d5a6badb5fe8f5a53a6498729a4d49d56d794fe0d9f7b8d8d63ee725c0a5efa2529376a8ed3f4de12bcbc94d424b57f3911d8ae7cb366d393c3015f23c4067f8426637cb1c1f701fecd0836d864834da244d9e0a700d21a131e08a3e7250d6f2c6244932f987002871f1dd208638a0176f83a8cd80e5fe4a9990f7c1b710909363882e8a30d2f70b0451a35b8c5e8cd6bf08ec6a7755c7557f55a01ba64be52d9157c15682a4b79ea3e3608bea9837b7326bf196ed065835fe329bab38411a16d8eb0c1b729c153e1838f4379d40d7e37e29ba3eae7913a0a75c341bb3e35f506bf0d3e254d21d4b6653eb764c68bc627f3666ec990d97573e225b73cf5e40eaea2ab3afe5032aa68a520882f9cace0032b30b67d6751b16d880455b46635eb551fcdaa7c2c3981112bc40843892e56967e5165dbbc2dcef154f8f681b0b0b2edbfb064db97c153a4212d9ac61b4f10018225580ca1c3cac660675bbdeb8ca764de7e5963552ad8e00c364210658b19d85637486c8b6bb6012a08024889126ce1851b2bebc5b6ff81608bb62de2890d82af3d05bec8537483ff95b1c17701dfe429dac4882536f8a1a768cf069b8c80860dfe8ca7c20dda7ce5a6b4c7079b246d3edf9ac52ae2c81eff7a6adce378cdf84ccda2fd54208ba21be422c8c57ab560aed84b7663835914dd1a246f5decdfd9ffda04ff7fd42c6f0d20daea35cc862dfe15454a532cb77d3ae596556916cb8b1d7eb0c350b73ce5b40fdf03c751b3b40ef8a666812f925a47b7ee06bf02b158db0449dd2235cbcbaa59ad9a55e52a02245be6afa746d8324f4726c85c0e67dd853cd18854fa56585a5c5eded41b84a9d5ac1bac313f9a4cd003c77c820f7ee6f1f2f414f8f54d90cc27cdcb9a69565557f5f3d9c1a859da346a9745d58f79edfa30b05dff25b6ebbbd46f99ed4ad367fd926dd727dd76fdd14ffd106bd7ef5abbbe76edfaf9b5eb635817dbf5ef58c3e7b07da77c6686ed2adef68d7bb79822d6de304e4fa4357d3d0a115da74658ea43b5d6ba73986ba259a4757e3d0ad1b1312ec14fcac3ee949b7af504cc76ab3f2efeaa357e1fcd1f371863c0b5be2e83a3801f06abf58307c022adbf6e1dfaba433326d5a7daee2d3d8afbb8cd4fef711f18a5c1caed94f643ff8d973f345982e7188dcf4bf09446e2bddb18ee16526e3fcff33cfd45a31b7177f96bd4f2addce4eef1975cdd1bf1f27e0bf9a5bfb19d25cdcee5467009abaeab6eb07d8c6facca7b1c759f9e7ed29acdcf55d6da927e92d587db99ac50bcbca527e1ab5fa164b767f5f1128a7eb3fad83459a1f899c98fec3890d424b522925a9447d3feddeb37cbadfdf3ad7bb3de6a94aeab9d7e8bdfacdb8298cca116650a29b7fd6c6df776eceacfadce44dbf4b34486bcf0d73f9fe91ec57d5cb57a024651a7f7c41ccaa6eeb22af0afa9bf0b92a4c965e4b4aa0a645197f47eeb8f887453d61e4f694f44475a97bce6804579447a8f34de782dffc35325f2fef6992532fbb41d078be733189333296d73653bcd77e88efb66687bb94b4f7a3dbaa0ffc74d175fe95128c1cbeb4bbeef712cd96e05f52d6a791f66f418d0f2fecb7d97d17f767c567b502ac2cadf77264ecb2bd699eceba3fe7a5aadb71d9de0f53467d8fa5bf08d6d31bd95d164317194467fe34e2a75231348baf3bef3480d94a3726bb2f68cb0bbbcbcfe82edd6cabfce3ce54cf4d75ab5a769e7b578cda1891654368e4d9b6851db9e15b98f7bf5846241a940a1ee1bbae37e0783cface7e9dee3d71485ba0f0a48c09c2f79244b897e70050e44c23d5d8151b6880b3676d826a57da3a98cefa69e14759fde25d2a8e747caa3910921dbe7b22bdbf72f168d50c0118d16f043345a80c7f3c3a2ee87ee8d45dd7ad6b3c75394962e64666b1f28fb3ea565d2b4b47dff42f930796bd7c75337c4dad4032fc261108470ebb9bbbbff0f1b1f23784a8729b456a4b55f07c2e3aa5f6ea414e53e7874c62cddb67dcfb95bfd7ef7e6cc765cb9bb9778825e5137def0abee7d7402102fad2772f2993a562a01195990799017acf7d6be7561f474151a81fe2222a11ffd0ade8bc8d1877ef58266651bb63593942f8c6d9fcc20a86325a19bf89ad02ab3a4c7a459565badd5d494e5bfe9fb6a957d3292d65a9362f46b1752cc687f6a2f2e265acdcc9ab6867bee1db34debef3399fecbb2a6266653d3b15aad86abd99cbb66bb71a6172dcb36fdd2307cdeb3a776efc5e7e9e5bdb8864fdc834fdce3a98af1bdb56cb341b9e528d65a2ec652e26ab55a59636391881e8f18d018f830307a231c1ac545d73db6ad7d4fc10072ff1726c6c503d2fcd3d66cb6d76cf2bd921fc98b117dcb8823227574c027bdcee85d381f5bcc4c461b811c89237a21c12afa1cd28bc8214aea0f217d25735c5ef42272c8086654c2bdbe9c8bab798ac260d74b7341b62c452f4dd8d0ca91c8f4371e33e2a0d1886bf84c61e5ebe3512cc780624c2e3f5f499f5615f3cdf20cfc562bb760682b2fc7722c86c91fb1245e56d2aeacd013e798972b2c2b2b2b2cffbdc732e2e01f29e0b07ca4cd873fece12ccbb39c99784abffd4ccb3cf42ccbdad2ad9aa7eafeea615d0307b6c983962fc94c233ef1cda2ec68c435ec8281f6bd637c669ecd4a1c649f1bc5f03dcbd7110c60e961f848b0e4427a7ce29b55bdbc5d79fbd88dccb2aa180f4813036dabb58ebdbc7ccb88f342eae8c0bce875c01f7ddd2f235dcd4a248e0b0996de85247a97cf11bd0b0c494449cecbbb3c919827bde84b64cee86148222f4556485ede342ac1ffbd3c075b81f91cd3c3c49060e9491f7a13c991435e48b044822a849ef42b78eff22eefbd89e4601645f36cc6aa2dec537be82dc8a8b2b7c94181c564b34d3bdd65c432d29d679996cf6ae218892c755cc8fc937f44a392736dadbfcf64fa2f4b775da0eefb5a7f9fc9f45f96353492f56a452788d1d2bebfa4a8e5eccadaa69fd054957939faaa84d75cf83c5da76b2472f2650cbdcbe8fd88ae2c4e1430f4faf47a4953eb33a649e4779edb7e5f08f426604da648c244b238fec63d1ca3adbd8c235babd56af5a9d5d4d241ad58cc66da84b8f04d7dea98d51e59f39c168e7425db7ad641fe9655e92057cba563b5d6daa1da3ce5bad6bc556dbada6aed56fd91dce5658d83e2d6559ac566669e61ad69fb8ae15dd1e9ed05fcf39ffe131f66241f1cebea8e5447e6ff75c63f3d38d295cc77308e4f1aff4de3094714c97ff173fe4519f1898c5ee6ff2f99737af24972c8481211bdf8a72fb2ba7117df45f432bf820b09def77ef4e2cbbc48f4a15f614482f73ff422d1af307a975f41f42fe4100780519bb156a27721892811e5882f22879c5efc21ff324f57a1cf23f53c73377357e65d46fc1cf4e4491cf30f50bd7db6665ed6c631da9afdb1362b1a2fcba25ca38ed11d363ff774040378ff3309de985ab32a1c6fdf9adefe655995e8ed5fab6331f62d9055c1dc977d8d41f0f58803923a3ae1935ea78326249992441b35100268c9cafcd60b93354a1df8461ec1b71d35c8d8a2c6351b3b8922108bc5e28048d3648b344b9c000917dc40882a33c0411469b08d66c4355cc33ea756abca67e656eb879f2d3a00051740043102c2882e8070a3c666635b299e3e1045d109d7163fa8a124b1add63a89a2d8036c87e7cf0edfc5890f49ecb00b1d76088613d7941dfe082175f2c3b9435cf3e186f8ccdca2a9a7f0549ec23064028d1d76a10478ac180376c4112d92b8a12433ed7280894d130e54c9a249cb056f34c1a105a630fc6046c34af91facd0d0d0d094e506d8d8a2149ddb16dfc564c3125bfc50bc81872dde30c6931a16c85c2c5043810b8cf8a2e78b296c788fe64443133ef7810fa2490d66ec68b28117184f238aa5288a6e6c512cc924726842841120b88042d411459a31bb6868d6185fcc41163b2cc30901d0dea0526331c1b1c3ff262c2d523a90d084069e2b6834250d136c549a1a4ca9010e44a0434b42041ba0a12949539be167da99695c10dfa877f014a56a6cf1af28e2a0892dd27090032d4ea14f9903099f31c2604111573cf1915d631b697841b301155e908044693750e2467303881b10d029bc42fc1903768b010d5e78408786a45e9ec8318cc2045b145f8b9a4421832d761185085bfc9f694243638b58d4d86c1d28638a2ea818010ad2a8d1209e9c48c137fc43733addf6289ec61327e5e6830d0430171851592d539c4e220d0dad8a123b6aab0a24388ce146134f8208e18d1791460a2af807dff0cf8d579a1a5d3cc9ad700cc3303c391182f04402e7e2e1e6c488337cd426a8c09c6a469a50043b61e818c3300cc3b089273b6c09c3d3781a9d14a10386e197e369070acd7b228d28866158ab70b2c77114476e1c21a0434f103ab060081fd8c8c136bf2288d8e189c43f3424bef5f0b1beeb76f0cec89123ea77495c858355bf5be2a9ba2b1d3b9a7eed54f18300b628ca3c0820fc07b4410001842f41000184a73b3e724084931deed8615864258a20782b7c329683273e50451b2cd0618a95f9e1807452621cff7412a20a2986700960fc4c1200e287315e6b9c6aa8e1060b0d250d4dcd8a530811e8f84a9a5a8e4b5e97863a79a2862931787282316ab8c1783a857fbe8e6c51144fa2e843a583288aa2b8840db6481245512cf51645713c8d271a9a1388335cb0849e469e98e286179c4164b1c3d75123c40e7f041b1fa7079cecf04b08ffc70f3bfc14ce0f40d9218dda3eb74e742cc3cfb4c3dfe14a280a439a0f5bb043198634343948d94287283ad8a2b8c537e9f0648b1f7a2a843f9166dda7b0646213d1fce8740a638b7fc5d739ccb6f8a2ef445386a50cde3b8da7130e4fcc9c66507678fa913c9d4e38f420024d189e685630c4e81486a0c60b9010310b8216850d461a320cc3560c02b045710c431a243b1c618b279a07684e6ae881d2046de34fef8de338beccd3d109636ba7d5c41665ca07ffda6e9407dd22bc796b1bfc7b82b866da16e54137f8f7c5ba3c97e629f0efecca6ecc533468837f615695801670b1c59412081133b2024378f0af8be6c1f71eafd9288f7a2b72430e42407b1da10310112bf01dc853948d0dbe7519b141960dea78f0ed11577df6081b03dfcaec6cc7836f69f604dfd6c09a0f74e08c1a8678e38d3256600d3608ea0d82efad2251a88003593c5943082a45acc0f797a7e81a1b7c9ff96cf09d89d3e03ab7203638da200854aad420f09d4579f0b84af78026281bfc2aab33f02b0dfc8a044d611a2dc906777ec06183a20d7ef0e05723e0e9c1afb01a13e22acd7254fd9a3769950dba013e1010c4300c031a1ffc1fb62f421bcc343354659aef22477a7aa0810742c0c64b8b155865839f5b35a408a40b76f9b72ccbb20c21045c73c1360dcda6a1a1a1a1d9b1c307257ec7872c5ea043473dad4ab37a48b2452bb678832dbec853363b0c795862cbfc95e961035be6459e426d1040e0e103fba43ff8002803edec1074e23670a23fbbcaac0adfcc1f7f64d9e608224f115b4686abc1532752a767873c51b844d8e19bc29d28a2d8e1cf943fecb00bfc23ca9c8a0071c612b41754714a0163a5c6364d47b4c17a6551c492294856e6d300669b233421c11461886f384a78a23d42363814356c192a36fef1542873c6136f24f1406c0a100568f0c2034cb8e106074c4033031a050d646446fc836f228e827fbcac95db7942b6432c00f0a8d79e5ad9a8ffc4d8a86fa35028d487a8dfb962004e7448d871f2448e1d5e547dbd461f488c108da1b86384082e197109fda4802fbe078aa08c8c8ccc0e0e38ea586ae326850b368e4c1963656aa06d7e982241818c48b3534306c0e7c8f1df06768e1ce2e7c8f1339e1a3fc797355645c5c8011334d8a20c259634b1ca91c6cee1a48720768e1c391e488effe1399ee6e081b641123e9937c30f65c697ca43c685eeb83bfc1afee9bdf0241386e5972569867fd22dad1392baa575b811dca66685e1aa86db23e1d33a5e0a3125e0ee90d43f2e94070a7453ba43e6c1ff4e0fbeb6e0bf501e1a047407086ad689344dac2d439afac82a244deddad5c90e38d8a398a3b6c25286442383c40537143103308c8c71031a32ef853261588aa2e83a9127ea2e1a325c71a28c13696236bc48011741e4d00228bc38430648c9164eb0c0c5fa00f0afff3f4ffdbb788a65ff7ff8ff658dcd4dd0fefdffc353e3ffa7f00fe4ff77ce60edf7f6ffffd7d63f9525b6f8f7746a52801ca8364d0960c78c1db60c01b68c4ce8da41ac2ab7386e7409696e642d2a61c5156a984049951e255444717cd2acfb1f24336d8a14a729514a53c8e425a342c4088ab82d3143cba0407c2f1cb32bb7c27067ca1154f8d271c28c2aac294690649cc2fd0b9010c91f1d8def5f0a0942d89192c5141f03c0e0e189266c6a1891b2801e7eb84181040e7c5c2bf3b7f826a549f9c9db1c618f4dbc4eb9f537ae59569569220982608e1ca4293ef89e38e633d3328f28fe9322697e5bfc7fd214c97c92df383a016a51cb2e4fc93c357d8cb0c1e7c9ae13995b547f3b3f460020fecceb99ffacd833efe2a9bc677e66e6cb9937790afc990f5dab993f02844d55e06baaa2ab6f06c7aaf06dfc930d94b881808c0d102165657e195a068aa091c4b727334f7572430de4c6374f89e401bef0f1328a07afbf737be0c17bf0a5076ff254f81e7ce8c1531164715241032ece2aa6e0e2ec81951b8c99ade8c8040f489baf66db589566d97c134e74e2ef84ffef85e318bea9595aa7d260c7969109c9b1049b6d8ed0862823734e018399a7fadbd9e4bb983c25f3e4874f7e497e0df9369e1a6df26facd8e497e0a9954d7e8ea7c0271f08f93f3c253ef92938f9b44a0736f8b749952c36c8b3c6079aac61dba9c110a52a04201a4cd1430d35a8387718529512307c1a65831f8ebad2db7eabca2d4d8a20087631039e2a68e0038f4ca34b9e78458e1c41eb8012358050100419770d17e561777da03166c082eecb52683337340882201a413b4ced90a6810229d250830768053a56e0daa05884091d806a3b4861431055c840535ad55442c005953576c8ed908a0d76f82ee19bcee8d9e1876818b1c32d4a10ac64b44c89420a33745ab0c3ffc27731838a1dfa3c9d75409c9951c6193aac80043a081145ca6c877fc326528276e882efdbe08c8a2d6c2086cb8664cacafc0d82aacff4b14d1b1c639be50af8f774f2c34879705b147fd49042068725325118ae84618aee4b060a4e64bca00065e4402b838a1cb48c347afc9860e787cacee7123c94c8f08049bcb0152421c93c08822018866118cae08d183a038149a454bca2d0a932048c0c1f316add3240b2439b16c3f0a9fbd8218cc562e510866118cea8d86128f321f8616832f50e9f7a4a260c4551146564643e8c304210c3076f836f0a5f8c2136f8334dc4f06283afc35306d860a42fa8740cb85545eb14aa01010000000083150020200c0a0645c201892046b16e1a14000e718c5a6e5a2449845912c428a58c31860002000808c80c8890cc56010ec6f301688a71f3985cc6a5aa2a5517b4de38b917ba0b4124b5709cd68d5bbee7ea1d3598d8534967c743a80e7f07abc6b4770098c295492e3850138b5ae4910b00e1af20b7dfd617ab58c11ca1cd554bcb1ba69aaaaa84899d7379266054abe79d81130aa24c6d936146f6cd57523ab55d938352f6d334b0606376a908712421a6ca5ac88bbb876513b4a51d13357d792ab6b9052f1177302d6874260f9415fe11b6517f58ff52eaff135419127e65efd5f040ae2e3e0f9727d220499f9e1960d947ec86268e4d57e9ed13db74f842502fd0008f20ab9cd2d9d1747ad66e1b1e8fb9214645643c820612758590f6e3ba43826bbac69d60bb1ca1a22c5ba407abd25e78d883e2a8fc394d4d4b4dc3332c59dac38792ce1ca650dc2d0fc33477ec24b67370d908904be27aa6b8d8562866cd93d97a8da32add23c749568370b96cb8ecf62ce3a01d01a6dda23b3cf13d59549d7f3bec5569211e276b1ccd9782b5947f87533e610000434f5507d326441955a728649e041312b65bef576d5c9c4e9e1058e4b9f69083c11e0d1107e80d86f46c18f5c658c4a28287c951c84ee2bcea530f538b55d412909c8aa56b27ab00619039ad32bb5705b92cada0d10ce63ee4f472073776763bfc99573255f7d8ecacb62b1d69fabca74303fcdd2f1f90b47c66e2ec87ad480d6d7d4d96dac378f69c8b717b47d89dc5f20bbf7822bac8a203810eeda4a85184b6bccb932e884b6f075b3bc1c75341f82293d18a10c6780e88f73741b016841c81b20da902803d184b9a5c87b45b09439d595c1f299e97f9c84500fed0557e770e87a099980900d795260d3b1245b08fb4a7554c261c1670ea66b5033310882be51a58a461d026f96b2120c9fa8fc8c52a3e3d20ed32804ec63f7686c4b6f7f775f600f0face3f5e5f1c8bc2350fc0b318dc3b28c2edb24e8e2e4512ea658e59e8a03f8b77149c8def7ae5d781d06f06b14eeb208234a28de6388976faeac6acea02f16d39409ecc023f5c3b31ead43aeb1f4a8de7047742fa27245c51d79c6641fe0ac6dfc36e9a4d6bd8152d19a7f8c09ad30846e41a70a93bf54c75c2120d877554595d2a65585a6aa123764e47d51202cea65f1e7bafd1c3f22d81f6b419ba4086c0a6959674999b0f7502ba105b15118a612995e31574eadf197b3bf5039ba3170ec0c1908465e54c7b3809fa43097a71d705c4779a704085a0716ed2a823a573cd7dc280ce21722b2ab68cc7d7b7694f375f01b29f0c8a0e0c1479de6b8ff5e737a0ea49b738c8cde791b3fdb9d90d41ec32d796118ba7ad2da198a5c1bb90cf45f779676de5b7adec22d1f7116a3aaa2c661f2507e78fb01539cbf7ac23582192874b789d63f4ced942c799b93383b0938867e6ad298e66feb8a0344201e783fc619ee50e5c23de78a6ca1cf3fe75c17e6f74c84e786301a9ed0a23f2977af13f6776daa4dfd9745721ad751b5bf5eeeebaa11567e9dfc3b83ec6862d08efb00edaaf6ae846b1301ace82bb191384e0e53cd726eb7d24e488a8d809af48d6d90113854d04109040e3f5d303072ea571f030c18dfe89e37c8822cc7489db58838f0876231010acb405aa37253351feff853ffd96c59909404b40a68742370611e0c4715595224444f094995ec61dfb1e0559f1fab33852d283eb9ebe21a698e738c8be00a5c5c420031c020b4ccc11337dced34878bc5e3c3bcfac8808391b68c253ae9b5697dccc144f4f3553ec2ebe58925c0c5994719243a91a91db134d571ef291ba11a9d64aa2834f1e978b0f82183d266930436dd4af582b11bf98b8da55bfe2276988b894a4e40c4af1c56c9382a92728d2097f2f7069409c65ccba318df9108954df86fbd31e4bcda01acc6023173ae46be3259c5723cba842c5167ad59241cf32e0bba3a018a5ab0aeee09c66d1fda7dc5608665c6f342ef8e2b539252256d888711cb97264dbc77ddcb18f1a51a5f40e8208305de77b2a339b130d71f2be9ec6400cc3034fe32f6700f2ab498ec2ade1374a2fa745f37709d54e22ca5d5d3802670db2622342c1fc76ce1d05826a565096012af7d977538331161a68a47c14555615e18c865c30b4cbe3879cb0ed0646d8244a2dda5a74a9b09a40987d462d6e9db3ff248c77c58812bb909e803f8d83dd09e428dcc7e4cdc9243026e7fe008e32b0427190ce6aca92cc28de64eb452dc5e76ec26a90ab41851a7b83b21e7b7d43361c81d6421ff059d876123fae9f150558562279fe96043c24d804441ce04a299d2dcb4ce180a10ba8ab3faebf1215f40173a80668c314c5909b6865801cb8343f87bcba494f9d628068e9e427246a22e6c348218d65941095c33cac643b0a5ca08254e72e87ebd15d9030dd15ba1fc78aef8096bb320366fa631ba643497cf15332ed43d9e14c0a870cbeaf2d647cdeaf283142f0b3b3901f589d2e15124bd556d9b360a080bc0b6250327084683432a9711a3c7d858b42c4915e8e11e6e6a1cdf6179eec372a6c8f8fd1cba27b77deb731ee5d136040e40071b3931b20bbee7fde7c5bde5c3f824b8c490ef2490259df5e7b923683813ab13e56b736ffd0582ae419cbc94d1e24277e43cd739ff3ab5d965d5739240752f8900e7e74140be467da4d34921bfc5b78d13385ca14a4678ec1dd48e8fa9a53454fd8b05aad5dcd0477938b723e3a58c30dfa1cbce8f992970ade136d2088a67e6120a6c056b12aeb23c5b529079279d9b063c299cff106dd4513a6ecbea31ec40cd026f8335664418ed6efb44495efcc012231ebc10b812982c2b4fb2fd57e0aeaec89d67c57d13fc00ec2f9be2b2121e50ce70a18ff1abe8883fb46a9d33b942547d78308ada299814222e5093eb2fae4b8d29212f8f813b49e3a606960a68a905aa9544e76465afe042f53e709aecaf566244f40b6d4719cf1c3de39e57fe9b59528617dd84031a8dd0b889640da3b2cda7bc5869a3cd30e637288aa677ab2ef22b252126066282e42b339203a633b360c2b40c1a2f384079f989806895f203aa6cfbac8e42b18370dc6c55494005a86091886e0ab16250dea1bbb2c0ad95800e3bb783b2d1c40ef40bfd2c9a3b3522de2a0ba6c07ac2548d65c76eeaaa5764e29e4a851227236dccfe1b7fd622ac71dca8a3a20b31b64d2c49fc55263cbe764a53f8da3c83dbf7a0d165475d08703cdc0ee6003e0c6e239b23eaa9d706c0d3d380c5eb1148e39c9611e875414b1861339e2d54a91a70db7bcdcb480c4bc6c6a14fb1b308642b7cc8cb2728f88ed023471e804699ddcc9a9350147d876929070fea9411964ffdd00cbb2eda2e8e21e39594302012b3db21dfa7ed451a21dd3db185c1bb2f90ef182085c899c4efe3778de67a8c38c9bf0247de200b5a9668d7e1f978548cda2ea8fb3cb230b349fe54ce96ba9981beeca3f5abf42781399326ff447a4641121c4f5427c1ab90dbaa3f4d38ffd9e63b5740f5452e22ad35abb475c5e12be14b4b9b297dc4aa1f8fbf97210ab41ae6d21f0600c922c88616d3a8cebf2e14e42f30b49f41fd9fe3a7980a2a03beb0001e27e7c3858fd2cf0de495ac0cab5070df348aca80e94e260841e892f9c08220a8b447a4342740f325ddd756769ee8a67583139f1fdbb7c4592c6c449e83380ff79929720010a5cc623ea01a20de5cf0f25dcb09bcbf3afd8f89a1e3eb6a65763890d5cb9c672f71a8f57037939b066adbc6675d86cf6d4a77ea7805b326c4af66816dd0464b1d621764d1cad17b7c6065a4af5eb4d15122d668e929052c3c0033a54bf02ddb98a2f1074925c9429f607ae2d7dbaec580a9ff6d8d911eab66d7c7a357ba1faa6a9fb92461f7d0476ce2e5d988d1a2159a7e5f9054738c5e2808e006425fb4f8abc586a41653787d08adbc5b884165a95e1b98c633c715758436c2de432b8bac780e55ac41897645822b8f4ed7271508e0c933f901b824dc44ffae323aee8c65e2f30d69e619f1b885a4785e9da47bf1bbef98691e410161044eeddca5179bccd755ad8e684fd44260dc9c8c526b7837b8826d00e81c400dcfe6f738947344d65102e537bad4eb7fd81da0d37f986ed127373ccf3c0ecb832f91064846d276cbdc8f6c872f69e864bddb047b88f8a52c21bd43e59762214cafa17fa0d954aba3ec7b525550a44e9d177244acb0fa3b7f78b146d2c9ee05c680b6fd9205c2b766523217680d133a0426528f191c0381ec5d53fc2a30064997d850cd8f9e8816dc073a2657809daa5cfcf11a2276743f399d60c8421f4615f513170990fcd897b140a84ba3748a6908ef418dfea6685c33792bde8828f69574f876acda44f1f9363674175f4276e05fb3853dfd957c2b4ba3badd8287595996b0f7dea5dd2633f23402a4b8ae92d2a194b4d94f7a589feb5681e5064cdfe8f116904961e78722c43c23222942d1e39ba6eec26b31f5b64b1b687b0bdbc82f141697608b410a34d5f3e8c21156ade4a9d74d0c07b1f166d48e38967e72a22524dc1c07e0d79f99cda13020e87d646d0c0415fc0381e4dc7ee0cc03d9d60f53bf1799a27304521927c72c21d02a3f54dc9678aff06e2effa9830bafd049b4c74d6d4569f28d45495eebdae19ccae4c4c17743d02682ce897a3d13640c9bed0eeb3cf51c06b27ce4ab2bd3cd2c0c77d0ca549cbf5e272c0a1461f1990439c8bb12f426495aba23759f1524fec01f2e8c5d26ccb1fef58728d2a4bf3e6a1e63f8e4979793b7c275744bb9617ef44d5da7ff11d98a876b326507ba9d920694fb3ba01f3f7499d1bce07ff170066b1d5611062741b136567ca42136695553300cc6f68a289b5d44d34dbf58d28a4f04b2a277932c6774972824f34ce127caeb74cd288e0f21f28068478cbb6c9ae7c3f70b58222584d64f5ffc56e4d8ac03e89c354715b96f5d6ee3c10768f968e8205c1d398a74387cfdca60fe8a60c28e87cf2d8c95e8bfc28d059455570f74ea6e68c488c538400cdbd12a0f4f80d3a5b9fc78576f56de9f28bdc8b7f11619ef6839194bcc80e470c0ac30cbb57d70ea8217e6f774929fed1809d1095ff3c1fa3e7ada77276647338ac500c3ab345016cbf7d38fcdb79947855a66c140de6926a7d440e4102c3f57d2904eb20850cef56ea290d588deeebdebbc68acf7d50f030e4815dddd2850d6c73fe44038b6ed4c0a275b28fd0b6e60fbdc2e53286f7f02e7f29a86ef98d5efcbe94f59f1b511e787ff806904a541525f341056c6a452ab77323070fdf511b7be3df7f501d47a56f7351ea8da514a22bcee9b63a7d40bc0fdd8f7c7715af154d086da77a694e2c3bb71d8ccc9280477f101ca9788ecdb575386e6f56a745d39614f5b5becb06840a575674c4cea34a5c007408accf8c61d8058dc20c1a05eeb18498ef0b4d210de60cee1c13a1a1347fcdb770a0137573500c1fb29b237db898bd1ea339a7de47db98aaf344c619a01b643ee5c73614b0c0181efb1636df91e246414aff6dba7ee6a542fe50335ae225a23ff9c92151d0532b4e4bbc4e85f74c4b41a32ca69337d6102df6ca3f83c7d39b55d4f7d0a50d24542ed3cf70cbc93556b78cebbe909a786b79aea84a0515da9869f28e9987b5657fe410900af7597a4d8cf089fb459b78e1ca24cfeba7bcc891c072d90cb6902a1d51f2b79f7781ed687c70e5458b6450f5e4824b389e2cdd219f3699a61b7c0ad16d1db74e5285a7f11c4c5ac9e2957b88c8fb89dabb7c7e5c205a28a64c3037d5c07b775b20f7f129bb26af215e0882875743329dc312a54b11961b9fe08042158e1aff587b3121cf039b72bb3ce4f6e57070d456897795a15cb32b66c920ea1370a9c09b1769adcca0bafbfa01afecaf0a750da9dfae6401f62a507973b060681db47921d418457f1ba1da525726c2fc0e146a4aa201737d48a9419cea33bda48127e271601e9d689ca66b8e2fcadf007567ea8944a5d99d94a0143e29e18ae303019f47bcbb65d52612e530625cac49ec8661112f9c94a6eb7e93085f39cae0406c0a0efeae21790f76471bfdb06334383cc9861430f0369183075be84af207c9f20a58a76d598522f41f1ffa980544bc85bca2b03a517ec27bf571bb4b522a1a22df1eae73f3ea3226770143242d420bbe6533c4e0f138a703154b09cb9a55971d26843a9f987e4fda8d5ed90e780929e635c4d36ce60976b9eed95b492842d460342b766d54f7deb49a2523aa96b3196a82d24534a1cbd36834e46633d01599e04e54701d11552e43b5cbdda7b45090c3a37eb9d517b8dcd65f6254d2156cfd5f530100436833f8710c171b933aa6bdefafaf792914076f685c990a225734cfe4684632cc335e6c8e0d8f43c944482ed91d4521f6504c3fe8e3da0ec86fcaa40e90645ed5786390566a4b366fdb864dcd6cfa764459756605c33da4e30be17e72fbf9924bfe54107546da0e5314863eb8321c069e8fb1d125c8b565e80815dda5445bf8c03911e59f044a5dfa3ee44d0ff1d04dca6ff6c325cb792283fa7bcb4b2a369f5ac2d7bbe3e51d17130383762bb5ee309bee01568d53493af9931547220114efb9d01677981d7376ed9f6947b63473f7ced280abe9c1f2081adf5960d84f20169e8f7edbcaa821648f162f92f46625a3069bcd1a9b695c4f3957736d6af25dd531e8318132139db2c29488920ce776f95b027eb74cc7062cda0ad73a45ade22514bb567e305de23c06eadfe4dc6e8e7ce65e17f06a3a7a2a8ff23d0b06b81d3129377e404a6afeae9020a099f62c63c0de2d950b42af5c2045d8c7c088a5f543ee80e49a569a4313a2fe1643342db5501939c6e014b16f1422e4d6fd818f93e0ae5fd3e3dabd0fd28a6e439b0aced4dabaa71f342fafcf265ce442f6beb30c3abafe1880295ee5c7d681e35b7175a67205fcb5d02c0926941ae4dcd96390c0c49fae0e637f3b2dc7008ea28e6e9c90a1ff6e0b990c229e21c20d4c40a2b47ef8b7842e20bf3b636084e4086eb0f0d91cfb238ab1e1ecd07c7cfc4f03a2ba4d209cb12eea0ba1d64305872b14df71f91fc6601e2adf8efa0e660242a2b236093e337ec3f89439c2ae478c5e65f093c146dc325d8de3117adf3f72a3f68ddce8f61f27265d3a02dde4d33b8ea2a77d4771530fd54eab9b89978cd2ebbea3fb5e269b76e0a3ba232f414e3c3b4e5ed3320ea85dcde7768eac3741454cb202a23af4a7e888b41273f0be6f1ae2be1916b81729cee5838efc6e63d34d2c8b130362173739403560183900296e297609a38c0d90ce065c23bcee2af6d70589f2081a8937c69628c235db3f9bc36dccb4aa54ac5c133cb507da32be530391bb4ca275bc92afd525c1cc8c3401ccf8445cabce144538da5589f5f7e0ea006578f15f767db431f61b65cb1efe32df28e47622302007eddbb95d3808bed7ecd521d27cd3b3a9448424e3e2f3ede41af633476ce1cdfe14db2f104d53a48701d931c0dc9f8f8a134524eb409802948a993cea6bc372999a9a200be794675222145d26b79f663c6bcee1b682f334bb9cca6c3638e54f9031370f679947a5cf3c271ac39aa699967a5b8cad39cdc0c7d38c88583858a206eb69685c3f0a8861e74c565c420a6ccad162609140c8d0faf6a49e2e726937206578d4204b79ef6d942634b4346f24e6b2dd56a8ba4b440221dcd78febd63b9af5dab4ff1f9a1c589fa18d39e27fe0266fd079676806e5e15d1872025ce7d2d26e027bbed212933fa5563f3b51c53b07eb0a2bb2821392bb855acfb8c117da9590c20375f0429bd995fe9b88bf791d96e6fec59dd8dd8f62f31faca43c357d03daa82988800dd8079d9a4e9c90452f39a06a3c917df48d49f727432c34a236ccac239a892290668234bb73a7de3679da51ce9f66663ad5fbd4da3709f2ede15affd276cea706a44a295131340e8b68bb4fb4017290f18131649200f8a7068a1e4651209c98ea4242a44a4440b5f0399aabaa04544ba82a8f08fd399a69ab3e2c40350bcb2cb6f3318a2303aa5dda44297a0f03d5d09df641b25254a10dc74040352c4c4cb8eedf32e5f4e3def4e44012543342437b22dc33df9d96c26996504d37a7be217b4108846a4cfc54b3f49c6befb2bb09d5f4cb19f66678defb56489b8011ca87d9503725fed115af98b5a9335c637474188f42bf26c880bc303d8edd08b777115cd186c161606412405c4ac7e5516f138251dec02a69a0ef07462c42f184b2970c8012a111ec0408a9cf60e4ad9bf6cb8cb154a6b164d5652a9c8e7b7ebebcd68ce92f0bc14ba71a6c50ed72e04289868c12965aad179263f6957ffcc7bda4f7cac6a2aaef084aab65969b46f5eaaad414e54218c98a288f78241207f92ac42240856acd986c86d3ff64a27e3a45c7e3855d205490d26cefe925fb4c2a51f2a8fcb67229859a4c5cd8eca108f81bc50a29da964621e7acadbc88270e7c17b442ea83f3692be71dba24c07e22cf1dfa41ce6d9012b6ea5b670e9772af9e95abec10771683206cdc3c37c19e94d8e3ba06c69805e663e8abdc4286c5f3758d80982b4426ecda60e87ad4652dc99fb12754704ba99aa26c6c31559dd69fd8d2c31af3f05195da1e9cef4ea1e5ea432414b764b3091a47dae23a87366de25402daf483b682a30a8d3f47814d1bbc1931d86eae872d49ee7ef9d015f72f80c8870eb47944c05a600110d65f6350ab0df2e11b40e74a754a8cbe70d4b0764d5bf9e42fb5194050a2f1d1b6927eb11b1a335d8d0e1e717c39a98d4b9b5ae847c57c02616cc8dafa507b995f128e54f1db187a0b8387aa189e246da1cb9a7389abaf2ea30941b409f26137d1c56fe4c4c84c2b2fd4553f18a38591c9aeedfd00a96b1bb34c0aa331b46a24395cdbff68e91272403c0f41eede9094d131f0b393f164357cdc92567b2435463c8d8f077233d899f80a8460d12ca225211c132afad2bfe07ff66c0d36fc2fabbee6afe4e7cb5b5ec56f26b5920cf4a98eb0d4d80c00da811ded101be3c7b567db19254081ec3808176d3b331e814aec78d4a014ea0f1c211d1b3fd4df2940248241427f21738bde8dc8019fb4ef1b17317e90ed165a8f4dfe6c94c7592ec93599be1ef2895856ed00c7d0b9a3d5fa7eea857a484b3d21ddc29dd59e7d994ba38473a0eb1752daf7532a9d671b5112759139051aabada89dfe32303b335958d3b24763312144e779cb08dbfa42ea3adf1bb21296e250b27feacc9cebfad475d4a2f877f14a0512354be9553cc1403c0f9a2622863ddeeced51d34c221b3695e1ed379266150227219f128cec5d64727cd6f0d842c826c5ea7974b162cb443e2f7a75f1967e50e25979793acf65d16de6b70d772fd21447f5da956c2343ec975f053ddc12172e178f2bc9177f3dd18e0d52e8a0ec5667d11de98de2febf7a198942efa4d88f02ddbd965c2d64d75d48da6cf390ccb04b1d81e14322510fcfccf05d845f3041e613d7d04f01a2ff0cebd8655b004767a55407e92f74d28f4de947ea3c0c55f2463db2079671dcc91949fd9d683dd584cffc02ab9c21d449e5538f76020bde323d33b39a2de4c788ea6c2822625834eea4512eb2385190894cf440fca2aca74c24505b6d684fb9621a77e6291c2764809aed7faab7fb23d30be8a9f2ead1e8f92132a388711b52b3df99cf0826838bff4c55c4f98752c343eac6251df354461b7ed98bbad66fae7cecd4082354122137e2a6fc236db022e6af4f292762f40e27f3cc4746771de7b4767bd99c37cb397d117ea463711ae4ed105e3c0896a0b802d93e47b5292cf1305dffb15c2c2d6815ace6069f9fd18cd7675e9501354145d9a4044a545a743aa304e4cabcbb9c7e118a5d655f66c907b6c70d3e878d7f9835b1136febada34909302099fcae2fb61d69b9d21c6c44c1e1528d40ae47026e4c61814aaaabf0323abb27615196a6b9f96d093e5348582661448af4b0b43e236e5252ee2343c426393e290d2dfc94cf1f041d815d984baa164c5df3642bf48a78773f592427d9394ec5b1f9baf81177799afd3a3a839799db5515f9cc42e45864239c350badd6bb58bcfe46d356cfa2906824edf56cf633adb2a903e3b2249710bb83449bafc25c810ec4e5ae1c1d83f2606a52d3c307add66498d4346bb5735135abbba389ba1e284bff15033caac62bf13fc38fb5f609a3a191f71fe5371b292509b53842d495202c6ccdee503c17046af1c004008b2c05d5f1f33f854774eef96fd7906173cdde7685046ee0d9e2483780a28f9339496c7ed1cc87d8151b8dcb28cc0f5875f98ee9d98b294e74b7f4cc8fad1008dadd50e433c77088cbbb519a53bd3270c71acc1c037f108fe29be2c3a990d26bf5a63ec45022e93c9892de9d47f5390c2bb2d945d4306add9ba53845d92d067002d220fd9b21c75091f2279f3539c51b57b3341a76a7bf11d795424aaf458e07c1ce261ca943caf0f95ffdfb24c79b7ca67c3a37f0fd533c11a5bd39957ffac1d1c754593dfc2b8293fc59b7b172a5cc91fdae8be606cb90dc7935af564cf3637e83f18ce281808c3386e345f4a65430821ea962d0f4a960a82b4452fbb265fff1c1c93a8e8074ee3b2be05e46066c76154bc7becbda87a5f3c94c92c1bdd0e22d0b0c73d24072dfd26dd715788a2e4916fbc84f344d02d8cf563ebb5261a7791a391404da9efeb75684f651522df598542d22c194916396cd5ca16d922d9d9f5e7efa69036a86a0ce32f491c76b06b07aaf6bc215fb44c122a0b5003b303654a5ccf96e266fd3b34e88711ed3f1a0db1a1d6e8887e25a185a88e5b4aead8e6ee3959674e3b4575ef1f2f0960561089f64fa37cba6907c6c17080b9a025d8eda4b83193618ea4c6bd342db5f012002912f1b2e5bf1d6ba8e02e0c0b657e5ecaaaf972d1f5e14322a22c32a0cd3580ff5225ce2530bd6a63fbe75a93aa28816993a6214e14867150bf1f464d3e90949c377f17592561b899b93634949e1e39a43e861bae5a40ec4620eef9f0180427c87793db514b73b7285a7b4832da2202b4794e229705445d6aeeb41a837cd02ef4e8df36c2ab333ce5f1bbb45cdc6047a7caa8687a1a7699a4741ab9c8b7a2ea9e8e9cf1cfa76298ecaff823dbe42b162fb72ad34c6bb17df4a818fdf1b47c429b6bdbf26c9c1d190bce129cebf95de9d54414b82bbe663c746d578b5cc67820dd364cd12d3e79a82021a23af6d0e93f96f8efe87c9ca26e8f6d46bb1d64639faab5f59f1dc525d080b5444c55fdb66b04fa0939ddbf94412f24601a0bdafe051405e1db7e9582e697a605febde06ed812f140d49c398d79ca5c705055dbb81f8ff7ec0346074a3e0b97fed373a375be5056ca991a09102c379ac9733625e4c925851c6135917013703fe22fffdaf2e3b5dd299572ea5cb6fbb283afb690425b02c41634f4258dff86bb4d0d353bd74693935680c2aeabd074fa68574eb6340c5d8da996db32c15aac655d20d914212b4172eac06c9e9df50f5bfb3eb5be35db38d9ee0c5514b0fa189434edfe8770a15500ab2bdd25a6bfb29a14a48bb11c8b62615caa42e51535d0caab98357d16f711f10d9157290af795aa45ba7f7bb1382912e8cb0732d5ebfccfd100e74d7f71b96efaae75f35aee92f3d2a157a6bc0d313a447f999041732dc1dc923d6083df3f09618b862f6b5648a00a739d1d8caa0c4f7e77a48f596498c9e8ef298201beb709975625d1945066c71f98af38782a712e168908c515457132ef8b900e12522fd189c224e5d68b4dbcc48c301c6cf6921b221e0e53cd0826c1eefdb7017fad61ec339c239463689927bca86301d639c7d90751437c851935ea1e0c0fe5127a1982ae7a449228b349f4438fb0910a04e7bd0a5a011a40b64f416b94bc865ab874cbd9d04afa0a9e0121fae4e3ad67bf55703350f0acc5befb61e491e8a8c2b627b62608d6a1888400df0151a512d3457dc748b6a1e76611112bc1440bc97659a0d7d08e115b5414862b0f7c68fec9603774ead6677daa7e0ed0864dd1f4a2ee4474268dae30194e654d10a2ca0b87144f7d51e64bbab7e5eac2a4ef06a3fed9d7328aec330f007e88955ad8ffe8a60545194ba3b30c6d864117e20561a54cc2b984bf83c73aca99dbb3c287595593c717fbe78702b3977d550b2eee08fa47cdaa6fe43abd623c3e9edcfe822e144b930652e5298c0eb16a37a2b5428587184994281247ec715cfe8a3f8914ad6763a3f9226a244d5f6db16ec481dce39498e2c640cba0084dc196698b3643e930995229c6b3097633a2b0c0aaba599e7b1aaaae1fdbf377bf34cb0c4e203f2b0c8b6e21267635861806008b56c2be0a076579f9bc652ac1690957a782582fe5b25d1ce0f48a169bb3c91893810a2d65dc29e1c71f2222ca67d1583084ed0ca1e5aafb4a22e82d12dbb9684e2748e86537736fc7834ed8ebbf116d062caa553f3323fe5b24254e951959911f91222c9a466d5b618683cb9cead099170a3484f41a64116cec16be937011e9ddb1691e8c1e4c99215af2478a7e919f8c5d201a9c8fa71dfd5ed2b979d93bfaa78b9b7d05ecb4e1b265b2469879d37e58f6f0d1721871f8f8390d864dec3f20d7193581f6b31b2277431dcbe3667718e12b2d1bc99bd19503982e1268b77bd55b56daaeec65168dda90ab16d6c19ac8d9c4870322560c7a79e7780e41c726908946dbc48ee6a262fddde927b0bb752da4c71a044c55968425cd1b2dca8b77957dc2d17595f72920d7f0de1e9c9c6c7b2f6d4815fd0ba78db16854cf04758f2c5692c350d3b5f6c240e890cc8ab55067a1279d1d50cc5863b6f8c9a350b549a7fa3e2c7f47d4d0fee9124f3a8d2f28d842b6187c86f24119ec1d533ed16ef93a0d38c82112088922a8397486442004aea638a12980c1b8d395c459ce4cda708b8e7a0f43ae46392453b59ff76cc48ffe41f807085b61b1488a88822e297bf18a42414841808e0cda22a02c53fa2ecbb790c9e8bd04a17a4f469780505a0d911612ee1b7ab93096e411d4809e2cbfca4a0c44fd2432b9404c3047fbeb344550bdcbb60455e35de24b8f20bb7ac909cbc936e86573c11ba87ef6f7a9097afddbc127d5260518794968614ab895acd2aaa1654a2fbfafa641f7cd1871a07a9639f897a64175bc3a682eb084c70a8b5b9009998facba28a9a50a3f58a017074d5a4c24b9af84152607206ed04bb8c52b95f8cbe37b633d2d297bbd5c5f67c0020e93a8d2ecd2b2c7577283bf8457b2511e9a498f020f984f5998f715fa336100cd789c62a162ce71ee59e4cddd24462ecb39e8be8da43b83f1c9dc8b74d826abf36eb6c84dbd69e2480e6d6c793f1f065ea433ea1d830dc8ed266ddf05f8da1d42f6877242e86002380910bc0a2ccf60a3830ad713bea0c3b5137cc3fc50cb8cfe29cc9412009f013981372bd27c58d75e67b7761af084a4d39a6b904e7693fac8f9fb0c66698822a68344b19b62f68e283d3bc2096274d4c33ba700457d61811599f3aa2f2cd4b61a9fd451d02198ac4a048e8de22245bae7b7e01ed0d3ce460c15e3521a43a67b69e356719c4f3aae866805b48bf12026b8cba0a5b062cd6926eb2d150e2eda2c5c4b1cd2f3e8044172eadf67332406177c6617236fc95d3eeba1438b3c723c636f98b001fd514df3e0caff59a6d10c6f84c54ba1d000ab2a5d816f141a6c2157300a1191ae99d4abc453d61d870970b16edbc309f4e89bd4b3c83f133bc6c23168615371a946cd74acd86e6ae59959bece10deb84e068b970ff77b9c57034ed389e7e9eeed9c94dccbd87dd046ba38be1a1df03c9384fa9c0f22290df58140315ff09a4028f5d34afae48f6e1747acd6a5a19a1544411024aa98da8485ea8e00cda6a393d778f2dc079aa776c3463c818725b60d6a9424773f983aec61029d52c40161c11678111dab8df8e96b543d7a7e12594ad028aeb27daef3e09a56ae74bcaaaa5266360f75506145ba4b30c3b95eef130f5f0517f45a855df3d15523a782ad3b10a9f4516c5c43a5166b7541030c65f7661874456cbfa35a3d39c3d097016dc6799503589b48800f0ec3799426022697a2eed1e49b542c1b970e1d227f1e83d6b516b43695ca2ac44499ec585b52ac50dc45a33e851c61627211fa4a4a182d59b5613715c0e545a621d3a0b9661a2b3c273edada1eccdda7176678cd73a9f7f1891edcbf99b78892856b0d5aa69e820627cac8a978ac8a86bd6106f742973e8a09d20689d7c87283b7b4faa86886bb8238949582516413a1140293b7751d2781718a848ac91aba2582b96309b8dc73c66a9ef9b2956288617c67ff9863b5a19a44ae23a5e41275c533aebecf5fa4be53ea1eea92278c927c9dab56353b9910b83ebc79f3e096dd1a9e29e41b5b8a87c19ac7bc7816939ced541a49ba2947ecf9d2ec26d90c32fe0cbcf38082bdd55065473a52ae221cd3c7f1ba5e79763735f52910d8c2fe18a51996b891f2faaebead87d0f1c2c29e963574d52b081d9a30fc73a5faff5f0b9831c2f64bdd0953ab4a0d4f0203c16dd7ca056db95bc03a978dbbfe4b7c854f36809a0cc1d15b1457bd5c623aa642df85e158067321552097bbc7500f8897ac4b4e02883b4b1e1317895f269dc9ab667a2a8fab0df965920d605b5bc7c3bfb6def1da0c035ac67c4cffe3eb26d1b0b339b9e7cb13bb742fb2259678a5e1b4da8d70b0439c15208585a9a75d886d61fe6ff5d3625a0956360e020a7de04eefbaaa83868cf65e344164e843a961e5f5e31efaf1e9b9af4ff0acd6ca175f46817b8e0df6763cd95c5ad66cd9893bc778653f655819cad76d68e20a8eb779e99681882ad6606366f16385741490f1c199cfbd421bd09038b88a128b6039c130f072b88f4d10e6f35b87ab12c7cdefd8003dc6212a3df806ac76853ea1b20626f40abada2fd093ce9855c197154bd6c80e866fec9e0aa4c45da55bc80d6e7e87343f7819fa4431945f7c2476ab85e50383927ade9dcb4a6d68fe22567cd62a97af41590ea317b41557f32689f7974d082833d558063e5864d700650811282b4f8716407540bd97009802b2f1ca7e189f110a58076797bc3b2755cf3a8b18a4f2736a64e90795e6c1f8c5810455bd946167f0b7b9345b73b0d80676aac76e9708b2a66e46d72a0384dd4e11af3df9bc4f8fe78ce6cc679ce72b002e1904e4c7888e5ecf0c2d46e4b20f5a85d4b624bb91403944a23c8897a14242508cf050929f3c3fb7d6c469814a24d22f595b25aae890b65bc88182bca8f83bf228e605424283dac43a81b33ebdf03c48b43371cc8b78870c403c422d4c11c1dc92287b705dbd6b28eaed91c2311d12c9bad45aae6fd46c22e878a443ba0bb8248e3da07475e83a37ef1671220ec1b97bb4bbd3494e58e2b33c14f8c5b81341ec403200eed76b524d110e70c6c1e2abb1b6982c52986685e94164adb2576ebdd49b6e335883be238cfe642855cb315f06fe049f13f3d31f7dfbd4faed6229404869da587da86817fde773454856ae914c2e26c1f209d7f1dfa37e9a51afc044f5447d4e12bddfb9154839fd8984756485497063f69b5060256430658f4a0e97c3fa4286f9b97269624925840a1eeb8f962dd58354587d9c31a59772067adba9f047399b4695e4d2093575f539397fcc9d8d9d004715a5c51fb1749e831b7883b16f5e480b157cd7f0be237adf31cf33264b1803913c2abbc17bb1e8dddcf81746e4bd07a23e55761f2163d1a3d68433a2a54e82de33995996e3673d3afd21847078e87d7a597d9e3d7f02d3eef9a0486b7432a6fae15f6ee01ea9c964f2e9e3f7a9b19355df32c981183ab5bffe82d6c1dabd392e8deeda6b071496706eb3457a0d87f729a11426c0c6c9a1634ec252a5dad60ba07b2e29310ddd0fe2a2a06fbe841941cf2eb89fcdf1f713dc5594ae623146cac9d2a5ec85704140348a068c38f0c45eebb9f4450f8168cccbc0d18a03c787047967d6fa1d2ddeb5171eb713594c5c56bb214d1a98c72b5197c644972058bf4cb7f1f61a21c8f3b0000061cb6023051eec70776a302a5a6971b667695d3860fa26d70b4f251aafd443647125f54bca2af32159abe1ad200acfa67e52ae1629c654255f642ee9766a2353f7f1922051c97ee30c25ad579857632aee4093bb8b2461b5ad3563790b6cdbcb8d4ef800a0ca1a6b9efdebabe703f9409bf97de8b608d6232a9a3ea596414b4e6c75ec8af57989328ad841eee5a4f9aa981814788ae0d5cf6196052bda5c66767e0d36a1f98c7bc4b12a24a7860711860134dd1c8a607fe23d6d7bedfe5ce4ba51f0c221ff5743db8c4a4b8e2cfe099208c1a76485f2f8af98b87266e5f9880a7fd5aa1a45dfe28458d90b193ef14a3348a66bf9da9cdaf9a60c5f87e04c757b1b67c159b41b9a8579e704ffae25a2c7606c9668a8284940bfba0c7be18909b90c120f07b21b5c144cbbf6ae138285546b8b3180f2426c853e95ec9eb5fdf9e49b73ed1f9e5ca3e37e5a5b3811187ca6482ac6714554f99a25078bc5e7f003f6bc1ceffd1121e0ee24363b1766b083ddcb0555ff77a44c0cd52676427b7a43f6d26a9f08950fe6bb82fa8d51131b57e0d5f5c34b206d3c3235fe58198dfe12cb2fb25c61c6585c3ebe321a69abf2233fadf4c078dff00b21d0f1e5a2ef1bf4309c065fc63dc0e59c2603d37bd9ed6d5e1bc873080690fd255e74b83768d4c7aa8d56f7430abd17b027ecda63196a95e0ef935edf3985e19e9a106ea684492a5ee0b8f1ac69862f47868bc160c75894dae3895eb064f94c101cd977584175071c7cfab8746f170c431fd30119290b9c70385c6cfab71da8dade1680127b0b4aa2c04ec873c9e8ce7425e23eeacdef9401f1da13461685c099475fa19b3cbbcf39a247c7b38530ce29efbbdb9e2c18262e24d197a04ee01fb823da60ecbdbd9774218f0eef5e91245a9e7766b582822c0b8084681e0efcb21123b6f276065a5d7c9490ef22b082947b45fab16c722090e45f203f4efd1c04fe12a69e150f2f432385851e0589ef0493798206cfe05999274b7821629021f8644f4a6a15aaf74962970b5557b861202a9dbc6e2b650bf82fea26a90d2fba3409d7b4748d6c01daede7ad12c7f87943a1669a504630b04c85071cafd8ada34e761ba8ca9a2650c2b870014738fd3b9cbd7c31bf5f9573490cd563c2a73115f219b5dc022c1e5c060ab1be3d5726ec36d476b7aeb454d7e8f080274596cc07b97475e9aead87111b3be0d0bf794993bef88075bd227ba07d3e358c2165f1a72160aa769b4146faadcee0c5ce7184c652f7c691245e0974613502d775e3089bb741365d884e70b4d4bed92e3ae20ee2d18e84be508cc2c80ed67dabf4923849026ce5b5568704f39616b8fccc3cc204877cf6578c75f2ef232374050b00e5b3ea35c303e9e82b85650bbaa5897349ef03b596a3719de284b2c7899361a401b7ecee0dc91ba0df292dd30450f59ead2e6de3e784173e5c6307ec6807715cef8600882c8c4d0ac235f95b97e7dd07691e7be1c19f0819acb1e00023b8028003960544af4fe566fb68e6566dc33dfa7fdcb8cecfe59f288d6985f7141cc7f0318915478de2b7c4b75f409a82dc29a8087b15c5f6d685d0424b8bff5d2a01264a81b14ef2eb697228822738eec435d9a7c4e9a2f51a7c2c6f635c32f464cde58eeb6ba7f46e07a7ad02b156d298b528bdc0cfb57225611c2a2f8f83709134fe62d6188a0a29ca1c36c91055ce42d4c2dc8f40edd4fc59942e3ddab0ff48ee0cabe025ecfd84c042e42a0868882427be8c9290a6ae67461f35db1bda895e0b181879ac8aa812957668215d0f511bcbfda4230fe89c4a69893bf290afb9640e0255f8b84aa4107a27da63543ff401da774027f3d946ac86705da895480f41f620a28a2426bff2f3c5071037392493b94be1aab0d9bd56a19dc659d7bffaa971f649f10038751ecf140445b97f4c0200f2af8b7de2861ba9c72823f19eabc0257cd74551e9d07d484514502659d848a0c2527ebfbb08291474c95105ac1c48df2e65bcaa386e19cf1f675f85c8d72f92e9a82fc86bb97a03317df4946634dc730fb918f4b9b97d51ecd215aaa06338c9e12718a2a3eab4315031bf96041984b7f681848bd06fa556106b743634f27f130702a850a19d3bd4953b77223fa3e7f9826492e0b7cddc1c173263d73a188c1bc1257153e1aa0976eef6b57681f36752e886cba0e6fbdb95bb02279053bec9d4e3ea270d0b63ae904659af98a369d41ffa42bc1a562558737e9f7a1c1725702f7d8a9d769fc8ca34fb8a61097d16f83f226153e1f95ce2c835a91521012398f4f74c05b11063443b859441512b911d76ca030a36eadcca0f9ac868bbdfc0232161912a8e9fca31c80668daf3e095eede926a5d698e18a38176950550fbc1dbeee974fa20b3d08a19ea02048b67072f5fc98c621874d4579b2724773c25d6521c1cd6058d1c10eb2a243cd3bc955488b3e27532c53ef28887756058f7ebc1c5e6ab942521c2a425e3994de49be33bed994603f02118d80b488299cad1ca1e47720773c9f8fedfe5b21eb5c47e6dd3dd2b719564e9248c756cf93c120f711a39d5e216ca502c0f2bb93cadf875940525d05920fc5df70f97de07a9eb395939e430d1540b6684f8f616459e594f25726b76cc02977a3b46c197815106eef0af6e5b0c373add1785331e0576b25380ed8a986bfa8ea9b42835efed2b261c889d35d4a3c6f2841faaf784e7fd4ba15f286d5bbc843eec14210cd99340b2b9804d74d3443854e311876a9a196da20e10807d0cfd30dbbed41c058ab4a720c093e0b32d58805aca6191fea9d2af8794844ada450297b1a084400085b81bb9423da1c74d8bc549ed3e32b29fbb06766da508f9d11e20ad51c209d4621ed8b2834029b468643ae51e60003927980f77af08847b18f28df744b48236433cd1054c969994decd07a46e911965ed07f4fb82e59393a34ca9cc2c50ced6a7bf26c40918d1333b0ef5d0a79c9c08203e845a91303fb531858bdc0424f477de90d069685d760c32fb0511fb4e5369c3642541f712dab4c3f0b853d5bab556d33bed0b331aea73f56e26d05bde2374c28d5da8daff8762a105751ca4a582644a0ad7a63db41268ef80949f784731efacc09b278c16c9c5b8010c9e2b33ea7e6a41b43de7b81b84734f41133e4b3e36b25dc8a93c22ea0d4643f4e76b64c290c949d9f9298f6e966f1b8f3d549c1601cc6035604bd08f4fc8610c2a5a32bae3c39a37dec9f5f81358f2a2b8fd5a3185966b111d583256c1f86c08dc6596768e886949355dfdb183a94848e592478cd1f33fc02ff52c373400b236bf370bf9a8338bfe7626f643588d81f5c53106c65e5b2438ee6fb750e3c8fda8442a88a61ee146413a2902966634503528495ebb9845ec891b29c55433bdf528b37b6a8d5b586f7387d8a86c940ed971b4ef6539b9ba803c4fe927052d4c54561fa1d3d79cd4b6aa46d6694a8ca68ce08b2c0ed63749b4d5ef353fa8206bcb28fc64153d4f3722c1e7f44c51933570f4bd7e9567c817ff9e13fae68ff5685ae5ff8acd71f87ec9b85c8ea5f98b3fa32f2991d638bb69a09cbd15be01a0b58fc4555c84b27b97174774cd674f37595d49036017555f8cbaae62b901d8ea1c24e4b7f990259c462d6e5c1e7ada6bde2ecb32fb377b8ee7466d16665c7e05a7c5b4d6c347ca86b6d5b11736818fc5e53a2bdd0189bcedd35176f1e9a9ba99fdb8bcca1b941aeacef1bd7f4c63534a187993901820db89283dc87e395605c58a5ffdc9927fe444a0a1b7713162cc97ba644f7ea1b2e802121260b5a0784586e5916b07cb6c05c87d6d3cdf73747def888cba25530448178c768e5c5a495c852d00fa640369223a8ce5270a3772e16d0ba0978870fa6cdb444dc6783e6d74f7048423b7071989dcb9999453b2377e5b5305a1130a05fe84c35bfd9d9798fb975fa70838ed903ed5c0ecff426b8fd2f20546ffa12dcfa21151cb8b82a0e59bdd741e0d0f67134f4c7694aabbe27ad1d0b08bdfa4b3a2a272b617ce09fff1250c9c250553b284e55c8c09ac4f1004ef5e7d1787a8201f974169d4ca8d7a2e42d496bf83670d5f2f0a196d727a17233a2fce57ab332f11e56628787f27163aa1fab3859aaf65925002e637a353fcc21ba2d1f24ed6b12bf3bd8b21b62d1befe6e365d2aafa83b538f3799d9cd15f72bed694fa7f32ce57ebfafe72db59bee56cd59d6bcff9dd1bb6ada5ebb70591861f3877b721a4364912696b3f9bbf8fbe0fcb6b61a219b27c2bdad90f8b68a64f365ab3d89397f20bfc498df5dea5af9e02aeee83d1043af5703aef55ea7a9315960f42af2319fdd29ad39b68665b9dc67849b1e01dc55e4039c5180654d7ac149f2b52cad9cf402ad5f9d796f32bfd0f2776da7fae686a2eb90ab261abedc0083b4feda41398f69f9363543518dc7e3e7c461edd2362972f9e5854d1ec2799ce60a1faeb83ddaa88500390bd7b76223869c9d01251f37ad14f83ce8ed550c3247ca3f06940d30d389805e214ad277e0f44cf45f400ff2024a7ea5cb1401071b8132c4f58035ae673bd7d3387311a8f6756a05e7a8433bed297c7a26ce38a4800040e7ce02a6226f33b1d1e348a46109a0b466fa2ea0eb4ba4955ca2c3c8ea3b366188a053c4bf4c594d9ab284abf39fa04e4b0c5c33a0d5dcb1c71da23644bcc685d2fcb9fc448413849dfbf03de278a69c2fad08ce698514a8c2093eabace58bdb6c9fa407b3cbb890047db5700d0d85b22d173bc48a59169c219ef2b4f6738b64956709a47a2c781f00f85211d2eba74b1af8b6ba1bfd60f0fa6d2d0aca8fa0e5d406f30bbc0e45e868fdbb00c59df444d436df32db09e348ffb91ca5d1bd089fe88a6f14247a5ae04e157796775e3510cb2d5855a394fb0b38a29322bc38cbadd8d1f81a467e91a6feade985eaa8c798cb6e6a82ba4b83d8cf6567e5a10a286938c83887b159d224ffc8f69ee406f61d1d04f9cf191f710c31e9b403b566540c9c860b8f84e376d4a240911b7b1d14742687f2eb0ee60b6b5c6f84d657a19239c2f6fd0549ab567e8290f72cb2d0790ce72eb94a86782c95a9e11683bd318f7d320daef417acf1effc8bbc19de87d996be8f60c3dbe7e2f2ae49a714f82a3662624d7ed330806719572f158ac3f563bead8124576adcffee4ffd99f6eaa635addad00244ec849ba4800cb3a6a2868f23f0240cbb2f57fce88901e2a704f68d2d154e3e293ad06ee3fda55cbe152a3a51fa26446a540557c3bc778a08db428951fd304083c380d6396102a95485f8c99aab8fbb53a9868f13932f46095eb7e0d469a0ea39da7c6a971f0617d05589898526599e5626ed455cbb3923b12ff12722f171df3666285a57b5c50234d15854c362d8b3b5308a58e6656d0095b101c33a5b6b714e993bb627d216a54a3db6611d24304c037be40ad63fcaca1fec6edce5739c288b7eb5559b601a3b9344393caaa0e8503e2e20d8fde4c347405bb3671251c6e8ac764837937f57986d7441bf98afc9da7508265b17018de7896cf176ddb823f857747b448e1f7fa61dc3a6d2252682ce7e6eb3a6f02b3be30a918870f0c275210bc844387b9dc4dcfea2219206e1fcab9b24c0b15ad22c107fdbe892c1803b5024131cb3e5097b8d5f2347c5fc1fd8c039d31f5b790c061ba68a333315603dce723c119749453ced133bb16c390fcb4fc4bdf649b3afca80cc28c69b7019e13b73ae9116e0206830a2520cccc9575f18cf1141eabfe7c1c92552b1b86eff701791a1b867cab213fdb3f34d75ad37702956a21fffe69d477a712b2967546178ffad7412b31b59026cbb99decf48fd78472783ea263eda04c092961cbe67c57051fbbb223d10ca09ebfd955774552a764fb3727de2d739ba0bd3dfc404c6cd799b99d366ba3ca1b252b78b19f722c632f9c074ee592615af26eaee0a0757df41e3c9b4854904c79a5c8289ff4ac4fdf7070640c2b52f4b734b82bedffd9035e2556f84011bb47fb64d75b905733add17bfe7e1f305504ac0defe9a55c17b5cbf580a0a70214c95bef16dd8b6207bc563938fc0a4d29d445e8d07c97d918ac4c76ef60d44f4b79c89d4c89f70f196acbaeb09f3153399f37200b752e27e231ea83af10360260940c154baac3c966e4607d03f8f9371b5c65f797c3d2c72e4336c8abfd33e7008bd9df92dd2cb6bfe5afdc8601a4161332ba60958f7db0aad303fb65f02a6bfee31d9e2be3e4d409f948c193192fbbbf0db6eaa3a2159a266aeebe20b547753b5ddc9ca8c72889b498b42bdefb07275eeb30492e1ec67b27369c3b96ce359a7071df327b5fc98655a0159c1654d6904c6c372ec306d052f91671f5b334deb01c6a0f4bbe200dce4810d5333a9e88befcf7ae739c17281a7b2248f7bbeaf2077c9c4dfd77e90dbd4ee581c8ee3528d4cea8a4ecc66154c1d962c0103ecc4413e0f0a09cc6dcad981f6149852f759cec7e43209cf678310def0866032c6fd305e07bdfd8813a2782a8e3941a6a75f5af6ddd578c6939c5bf854d6f55b56a24ef1760bd95eca14e66498843e1df6a185b8d56d34b4660126d15134b8029344b4e59cd3279be8ebd333cfbc72c32344d7a67eb538650d06da2ee2a3b11a4ec6fc294bd2b2e9fcc4132eb0ffebcf83f4069bef3b2f1d41808175a2ee79d8489d4ac0db8df311b97844c9148b009dc68ec54b8a3dec3016e82f92716308b337b2a97e2d29fb9012c43665329d07d6744764664d69e89c44276a06f7124734d240a89a9e383734110513b305adc49407600e4d9742f2aaf059e5eeae946901aa834e56a65f9bbb89ed48df444fb2e76f60ef2c34daa027e5853eac845e6c2142445e5d727c0a2f9972d94552c257be65d4531aa000c953228c919a53f9c53c70b32b1a64042ce5403bf44ae5653e8a2036957b3fb3a5deac0c414b60ce754a0b303e9cba078ba53f02f49baa40eb89b0f37790391ef943f1a92ab80327e88ce42f2c4db03da3fc88cb7f37a998ffdf001fad71624788ff8a11e39d5109d44e1c4973c6436b3eec8a782e6001f9f622bc0215fa2fce7df3bf8e1b76a6535a187c581324531202c097fa53921300dcb493f822ad942ea59759e91381415325971ab23b811800370dd020f6df0010dd9bfc233cdc199c3fc9b26f2f2894da146edfb48ff099bfc27d8dd45d96975b79073216ec20abd19837688521f8a2fedfc36e8a3a3a7b28383289a19efcebca29418c5b3ce1782de4d2f4b9853d2249d4097fed094ff5c46f7007042d2a8834a9e8efb879f0b0ac50076b4a0fc375ef31893a000aae961abaeaa36a6d019ae9abb82e51671109f4196ef1eb40192aa75db34f3a00f5067d1ca37554e6b69332669e08d42f6ccb949f43be5da85dcd80a337bb100b69fa605660d6b9e9981b4a258462c4f22ba841f537516d76acb1900c81d9f573f093e38a291cebdf0bbd4935bacb98330f99a99393b247a53065aa250c43ed2db7775df52569923270698a5eb9654c8ce326eaa25f2f59e8675e693fa59396fce84f6f025c277d117ce3d586e989c3895b11ecd00cc0cb5eef9c715a6419eb2506feb73f08d4a4ca39f2def49f1424785ea05a585ddc0ff3f835108004da41413052e4e7a179541f3972285f2275f01a46905a76cf99d8a6fb6aef0cda0486949be91ee013bae17479b655edf2a2f774ac4c3a85d2100b273a2842a72965a81b53d35f9187ad5ef3520840c4ba12e7a23532d93f7bdef6417be02b444350e65c3bfa36723e8e0eef3d057079cb6d3cad21744ca88844c64285bb0e1bc88595bd3c117967b44f5e48520e76c0b34630e9c2cbfbcb1795e64d6fcdd1abaa1d894bc968b8c629a694dc0de1f93c522d205477351a28682868d6185ee2b657187223107247af4a4436356060b8ef0b72e7ab89c438fbda39cd2ed10b61c4947d72a30319192385deb96a5afc5d579697f72799f203a1b4244e7c18497e78cf5a490428e017bf85f5a962cb35756835c750120d6ee325bd0c910413de13887d45e5a44054f1e9df497a6940b58993bf449fa65a523cca759dff5f1d50189e8d0836ea466e231c4316af5f1557122de8da8034dba07ad61f11f458a85533c1176bd6799ee55dad5d2dbb82b3f6690c45a24e7859cc9405f4c47efa506d58cf3a743c2f7e7f7667254d4966e0beba3feccf5b342944589706fd8c1590871d5e093c3c49ca5fff7d3412624077955842cb2ddc072a85ef15bb62b5c20a229b4799863f2dfb611b1389f81e835a0a04b516f061447362e946d4b2137ecdf2367e18366b3308e37708eae2b8949104028e120308d4c22f07f48adafba68338d2b3b390e313976908c3343eef4046391f0d3f912de897c8835cda44648eacb09ae03d506f5263ded1c655fed9f60a499118e1cdd599a755dcdc3912c947090b3ae0eb02f4ecd666cc397e88b0618eef93448c95ef9ea3ee42f02e5b052fe69cdeaf7954b8b7ba0e8af6692c6ca5d3247c7e215d6c6718631f3a686fad5385ba5d1704d1a8188ea9f5a77e93978f819bd0f994b4131e665ae0f7a2e575b89b5be10565d9771c929db215fe0b35e92f246fb973d390b9427f934f137c3fdf5272cd91839913126fce200bbf895bff8f0ca1122887e5060acb44f46d865c5f5969e6d9b7ac058c0589e88626914bac2efb5849ee4092b51b08f5664c66be6ea88b0197b33e52a9da7e23c5d1d9fb12f9866f06b158b85fa1b56bd89d0e54f9ef1c6230c8c9e98260bd17f064de40577b0f01e8cf60258a54160b6ef402fa942529dbe6974a205d399a122cb251565a03d8cbaa265691ab5e10c980d166dbbbf482dbd0050c907eba0f9475ddf4c5f1286b26d1bbeb801a970cfd6b421cea90caa4ae369f086f0f6415f39dcc8581f646d716a7b44c8c7b8978c5c9b768e199e12e8266d9a40eee3af2d0313a831f86c90ff9a93c744e97a38a914e4060b494b96c8389c06b4f7e6dfe44e4ed6a3391fb2a458dcb06abbeaf56dea006aa2e6f1a846d5e390227623f9685e1c12270a7232c47f4d1eaacdbbe87f9727d75ff9e65370bdd1a4a70b7993b413d6b6ade64257d78899d6bcd436eec9539f638739a4569b629a1d38ae891b2bedc681270ca7f3a3d59f46f1560dd0ebf24605ddb8e9ece72cbe67162e738a832bb4ca294c31cb8be72c7753f5e6a876826ec0dd34523a9187168dfe1320bbbe7e8bd53a1246d16a7c99577565eb8485952fd69d632a1df8667963db3bb60259178ff8c8e677c59bcf322aa77bb800de753e59090d9b6b011f2c7be1810b6c09e1d2dd7bdb0e20d07cd1c14021f770e43b7de702117c3bf48e5637e2dc0aaf42b89473cef5e5f525319b55e8de51fc5987d8fea07c32a0018da66fa0a9610cc2d1ccd3340eb47b80e03ff377cf78d061808b8a66127c09c91a291ebf5aa444573457c41f31c50abeddfda38cccbadff805b122a1c634eadfff2a375d6bb1e01a3f62ebeb364ddcb0cabff5cfef3dc20d77f3eb68a9b5efd5cb1e287497aee437d33eb247105677b3d3c7adaefba79e6c6e857736f6efca7a19fa01efd4a6bfa71feaa825c92d93dd10949a4f82da90ebc010c087d2fdef51041b731da8104ce082cd7cbf8bc52abbbe4a1ec5d5422945c9dfa9dbd804ab8b8d5394b7faf21b2a9b6389b2ab5bb90e224bf0c4979119cbb4e24b82fa008e6ff76344611b3eafc271da1b6b4e8425f6030aaf8e632eb7443eb5e5a2d8179b51197f6c602caebd0a08a62618a06ae0b789bda3bd51aa6aca5a702295659a6cdb57560182f35d35ae4ccdd45b7976c8f14f139225d0bdc60c95274832f6b09000ae7409fea11997648ccd57a77871d2eb1e352ace9442a33e7804f6072a83ff90801cb8a43fe9ba86fe524f1651a8e68387013c840a66128c1a208b6320d9ea8e15df6fb94239089c74f7263640e30e05e157f750d3bbf11c9873e4f3012681c4bfd1ce1d34ec96f1b893b848c80e4fdd4a96b94b8db2cd332c5a1f830ace5b817f27b652dbfddd10d5014d7e14ac98acf845c88584859ac9bafe9fad253186d570e638b8981565cad485e62b3d63d1356fea8162b0d5fedff6a4569e6ca0c31b793fc6aa875a2ec02ae96a902e58d43af5254151b2b3f7a482f722d192b1efe6a0d62e10f55f27b8b802b5759e98ec99924da5cd86e95b6943e56ab66895ef203c41c54422f703a1888ed25da6c2be8051ac70a97562e2fe481148bdbee4a8a1a3ea5609503ff15ad02eddb250fecca0a57c0afe62153bb9fe35e4f4969119664743434902597d9244cacc11abbd4297462c2574aa991041aad65fc7493da6ddf766d9616a6008ee9dfdb6e8fb63b20e31935f25e8d1f330a6b8077a9523fce55df43775560532e50523a47a013d08eac9cfad48fd2a3034571c0f996469f588e29a5568a869d682a634708d0cff29bbaa86142a7e56b5baf954ace728eb7beabade5add9ed9196a9ce258796c88d75b384aa58285a6b8dc596624f48a5e59b135b195d52acc5edec12a37cffc8b40850fe5e59e4341e21f3b2dea31a8768b2813aeb965a76d47bc5a978802acb0a821375b90fa8b77969f56f1530ef3e81f234212d198dbf31c1a72ae2f616a44133b6a7e210fab4455fd528211e7f587443658a2e3f1e48141d7e573ef6bd4650da7fe2370f0ef17e971eeafc8a0e0853ce51c9fb51e37bd903faa1c776ebee7a3081f951da0912627bc696e6e9dc5081d84c47740961625b2c07f18299c4f69fc1c39cdc87e10f00d7b6b39fa6b6fe67cb90e657d80622ca22f1391ba8f19b66ed7e6d8d2a39a1dcf8272912ae66c6af04461ac7178ea15a455aebcebeb2d3f614dbb9ff1d0fdb3889474264b52dfd38cd95a6ce85ab880855d81af2296fd1b6e33ee45f9cb2c74086e2cc70a276f832a7aa2e2c2cd2c6e3b2237c20182e6b5bf3c448edcd38554a013b185af6754c80d96941e75ae1e5cfeeda89d41b652883bfe3e9dbdebbbfbbcfecf6f26f345f43b05e858cb0727a77e942b3427ac2c0707483205ffea384cfbad218963cf466c27d691f2e6f0bb27f882ffd4e2cbce7417c39985c3b628602cb65cfffc707afad01699fffeaf1732f9f41c4620a342efaf59d08b3f8d115fc451f50407a153ef80c7d7f0b79da21206527c816f28baa9cdd42408bdf37f1045d74ee3cdfe46a7fd1489d28eb70ebf23bcf84d0a940cda347824aace8df9e2a34eb73e4190f3375c97da527487e2bfc1bda87d765a2c1eb232e1fdaf1dfdcdbe6fd87a48283e64a0070c0ee9d6bb456f1031da779568f1e14f670b3094c6fa4418aabd00b645df2c399846cdf4be85f1afce318fd9a9bb152efe938def17f86dee4db75107f4eb14fb1a4f173f1bb2d1105502730f46158dc416f03964310180252813db0c6f41906cb56b2cf37b9e0f0e9a01054b615ae8bb1db043949b378eebe522d566521ef8696be87a3c40750f29ea30c5f4c51083fe44a4676a300b316343a5790fdc5d10d8017dc09181e650e14f0c11a74507aadb7cdd09b837b79026c68c96e12084136c4701d570e5363cdf7298807f18f71162caa0d39845a0dd670357d5bdf60b8e064ddd896088a1fe212ada6ff7a41cb876527a600eeb30613ee6851448407a0d6a9e8f235b8d6398637657eed1d4305461668a3a83a7ab20d326ccc428101abe28f83bef609982bca376eef6882ceab76c834062725bf97a04f3a4695423662d6d3c0acc0c07ce225b72479b935b5c850031a78eb15c4047efbd0f452dc95b969ea725848b611aef82242efb6af2604fb53de9a808fdc24efe2d084ace09c1d6b6259d986edeffb50011c667928a7c57c3ff5416fb499840325dec73d65a2e716123dc86479881ef073b4f0899e927f5a16089bd4e45b1108575b34370770227bed8a6ac63c7f7980179ab89d1dfd7c70113864c96f2253cb1da4238a7c40f01083ea1b71de28a226895e35a77443a3c8b54048208031d3f66bf904a9b20942c22f6d8964890aa6562ffa242b2ebb222f631f281c646864b49ad560bfbc160fc524af99c9cce2b5910f70f35c9cf79f0040bc129912c041489df0cb39e7c5e52c914d22b454768ea4c748a95e310c22cc493a2a5143e84dacd6edba6989a1ce1989834de91b7ed79728371057a00d91dfe101c730eecdef4cbdee2965763de6d4ba8262ff08d3eed25a540d276a8cd658cce84c3a1dff752728fdb9bd8845a27298580d64b0039f4f7d3420f4d0882c22c7c34696c3b1be17458ad52788e353aacc788f219aab5fbd1ef7418621bf31828679f822e9db3e2dacce793f166e8c6bf43a00284e3346d7df5fc13dc6d8579d03ff21e1d64df18e1da28a759b2ee0f2a3c4213fc618b2c5309b310634e38330fbb6431ead0cc8c1aef0811de3651f4b152f65eaa4c31840562c48c3cc94da58c43b353b19239bbb315b84f381e9f847b02ac728767580c0efb5eff8e3f2c002a131eeb455eaf9a6f2a0706ec5a5d04a0d5a53521e0bf28184ca17f8383b8eeebd01c5bfae5cf0ad254357dacb7df42fed72d25e9df619fc08a1a417cbdf947df2229c78393ebcdaa2e9f11cbeb885268ba12ef046f78e7b278e6be30b7ee3a346b19887f0e2b39d70a18f2e1d631364b22bdf5de87448acc3ee77c680750ebc878f77379bf360d937e806b04b211aeaa711133567c651a4f2bfdb1b8e8c3d1116a15163aaf8f2b5765c6f71a5105dc92dde70425b8207c494da13736a4cef4ffacbce39f049f8fa804855dfb45a4c2615ad3d92f72a96891908bc9f4009274cf219b347c99968bac4d869a45ddc7dfc57e89d5a698dee5808bacda6cf9b95108b096d914f904ef8bcca98a6e4c63e4dd92b933f4a7423abe7747455a67c23975867fadbec3f8415d4a46395a103d08d02db2ca12089fe90616f5036c61ab40bad76c5dd3c84ad1f02ff432fd4df4771eeb2089f7a5eb0be895ed9ec01b54c224ba5c72a5e17f21fb94bfcfabdaa782c68dd81d16450bfbc8fe3174a55a8c7232ece2c7efcc558227463cd7bdb49a37967197f4bbb58b3f17d094b3e3279bff5516fc43f353434f779136beb4ffc2b4c1ab8a3d2d96b1dea18995bc6145a770ce0a848d3f4e631f000eca57ab5e1fbddfc9d9469e8eb9b43dc5fb11a805d32e168870a703497c3717600a7945757eda78c2a8ff22f12155528a4a6d1d1b5fb215a3aaefbebf29573545129acbfda64c9c3a7ae44df53c7ad920eaba78e1a1f68f07b8dfe7e35ff5eedccf591f034e18f9d1c3fb5e1e2245ef9bb28644260ee60fa55838091ce9941c84195bf7c33fcd135aba557df5ce594cb5cb31637e1ecf3131ce7a49b5e0e9186ff0d7d3a7c341af8abea3f94aec29a7fad976ee95474d77b1f3b57d776930175abfea010a42cffab4f3bb58be4db10e21e0eea9012e0e5d91c2e237f78b3c00c878eb79c3dbe61015552daa0ad9fd8dd2ab66e6a0fa834b9b8a86e233a2f5a8e82343545bec81f03cbbbe93b76faf24f242f9e136a1c7685ad18651121811b0bfc49ad9d0b624439444c3c5777a9166d5d31655ad7f7434b785c26bc795c21ae25cd1bfffc13fc0791ab126a9c035348b4a76277737415fa57456d8476a7127aae100035c68b956da7d496520f4648518281a339cab075533d1531922d87f490847ddd2c3b8ef38defa5fc58822cbb8beb6928a9897efa86df24c2d28e771d365acf0c4a77c7fb139cf9b8508a610caf4b8f47d4db983247e40929a76b372c26851a1b61f7b4f751325d8047a3559d2dea6030c11e8009d4a4d78d47633bca5a33af21e823088734e44c34cf252506a8dd7940ed3621eb12b290df1929f78453d0b5f73f80007645554f005c118e93423a0af8a11eaac02a02c30c491aaa234a45e61cc5dc5453b82ac3f4342744348d4f296a0f53b86ad639af7443f9ed1ca8d03a19f9fcc99eac627844e3c7c234bd32194e526ad92454b493283b5f34200b0302ebc439c6ce921109c58757da83d8bfb07fa09075a1a1337de20c2997c94c320e736ab902779deab744fee5c54e26416b2162c3370cfb372d6cbfbd24ce25421c1d15b66f66b17fe729e9b1108b2e89cd3709edbe7370c0207c5603fa04afa85520ccb89b0ea9a0d689554ac166d0775935d0ee18200d33412b48b8cb2e71f48305b136e5f8c5e9b72bc624c271179f0b90f70e7b76ceb6fda510871954d3d9630a6aeff733956c46fe22ad870fa86d7bef2d939401a60a330a0c0ac3c646be3d5f65e18d5347cb0a122a3888600d1b6f6de1be1b57e7b60ab8666f6bba2d6a73bb4bf9bbe922db821655b8744561f9611cb67756b7b8c8370657616a4caa5c31336cefae6e31916fa7122c8c54d674c831e2356cf7007996ecb6bdd1ba45bfbd6bdc3629a935787b4f75d55dea6f25a5be53a6a0b4502326cb9b8a61e3e46d5b21a7db1eb7156fddf67c3bf6ba2d86bb62c7f0f5edc35df82a0bbd3d0b0168d4bc6e28b102060c0ff90fc478b1648c941352538658c81415ae8afa2ebf273c760adc76c25db1377a75d5571a747b36840e128c1534c30ef21bb8a1e1e4065491629e61fb50b738ebc629a29665eb787582cdb0817c1bb7409ddf8e72f021f9585fd0c7025936c8b26c185d50ac8b470832b4ea34f911e5e4816c12f632512109b7b11363cc0e31438e0c89381f41dfd7d305f884192f289ea045d9d03054813464c8c8d85c8881822584c5c6841ada09a3053aa0187d34d1e38142ac396a5c8859016163599665d92496eda1eb818494c4b26c305842cd03716c30d82d1b94808454648f24c692c7125774ac910496465252d20985e281570f7421e0110acf03cb9cad525401951c12459583655996655996c713d767d172aa2b3feee9fe5896bd4b39187c7af3409665599665d9af26cffeb02ccb26b1ecb3b8e3d395070281178ca130a34bf2d4d3a235453167c2059eba0621d234ca47009eba0a3814d3ab179ffa7c8a81a78eb55a4f8d478cbcf1e9854f859e3a4643f2d4f11a6e4b1dbba56151473ef536a1e4a9b754ea4dd555a99f58f2c16030e8ba351f0ca208fba0860f069594944cbc782424242413601ec985904e1479244fbbc53d129250282c61fcb66d31c020ac8489e7c08183bf0004e053d2954f719e6575503c9e7521d687a0dc3ceb294ba2ec592fea9600eb05175c90e7c703bd04028179d23cd085803ef424e4819e02813ec3a4a4a4f43426b144e08cb913c62becca0e2020d258d073ac8a4ea1c5a4a424258e8414c29d0702811738929baf38556631b210f93124fa0f5da1c027f68220928f88c3a57ea69d6b439c3495857708c443e6592fd910903ceb3f2cbbfe7eaeabf33f0afffbfd58fffdaeb09da6f52cfbbb6281e6ef02819e63812c8be44be2e47fbf5fd0f105bf24bf20e8034bb2e27fbfdf59049e4524df0fe9fe82bf244c4cf5f67a818f78ba25f9d8804020d083be19548fe4251212d09764d6840d1a94534206d903ad2435a1020a3a304902927a264f241252c93501c9711e311f5fa220a1ba10494a8d521d69100ac97f3e2424a4a08ca8070281484024f5f69a6474c77071998123068a245f7204d77ebfdfcf993a29671ad1e19e7a5deb16a78f8341aab30702813f60d0aae717bc5480c88011f54609902238808ee43920121009582c16c3a8b68a5627e2aaef399ec25977e9eae7205cc4880da4847c2fc2f77abd5eafe71cba9df0bd609afffd7e68d147c4f972e0f8d4cb3465b7de5c5bfb01bd6a0801df4c646151468a91315a56fffba967f2d76f7452fffba968b1e8a8144e7de8145a2c9ed16181f1cc18972124b207fc01fdc7007a5d5f483f24a4239914ff23fadf2f45f21a7363c408d6548e2c377ebf9f03d5f54c7ac01ec7b049bbb2f04476a5c074fdc9e89dc833c9b2ced4c0f3a9cdf77a3dff715d8befb9504f0ccacbf79c251e25d10afab140a0e77ac05eeff77b0a7b96657bbfb3374ad31f3005b2486c904df25feaac8f98f44b759f4e893d697dcfc2f77aeb19ee0903fd87e4a1e7698ac406f4dd5e7bbd9edfde512aea59963d3a127bd2e38f8e8e7c3df2a16e7b7ee4e9914b59f2a9f0d3b4cd78813e1c994facf9d4ebf9edfd7abdde912942743c59539c3224faf77a369eb87eafe73d0f76dbebf55896657de8d4cfcddaeb1d1db148d3b0b12c9f9e89d2d5618d22e7533f22a3721446e6962c43fe6e199eb323964f5d03699859904f9d83d443d0419894a74f5d05dd0a9f9c68e8d8d183078c255f2786b8c6abaed3f2aa0b758b7bd587ba3d72d55355f535a8ba92ea4c5f5e750f20ba5d5d750d540fa1ba0855553d04695e7d9575d57151f51374fb73d555a0ba131bcf7ad96d06cfb259ceff7e5f3dbe807d8590ea565d191a4e2dd7d6582f0f8056564dae6b131cdf53d5f54bc74f6ff59cbaaa2acb329192b2603896752faf57bd54c198b478358aeec8b1024ca089e282a222868d21d13f65ab4cf542297304e6a523c389ecf68c97bcf1bcd5799ef69ce72bcf834a4c40fee7790e42831022783e62831020791ecf4fd0ed91f35c05268a788a27e179c724d8f3283cefe73cc75a3cc75cddaace73dcd5c23be4f9bd2dee7fbfb6a88b90343d7639f3699ae267592e65be57267f5d8d5f224ba404a71f707ad8014bfaa04382c61357266f47472c0be779c72d52b21cb9589589dd372d52d854ac50e1c1133c83e86311d6266ea7d1b79e5551399ea905e9d895659568c9adb8754d532c610a60f53c17cac2e6799e1eb5803dafcb7a5464fd685d5796c5d24403eee2742cdec8c88752235f8d3c68e44a46c636556fe41eba9df0461ea2dbd58d5c849183e8b6e746ae81915fb45fd7b5a71b73c486c5a7fe93a642a3b22b0bd162d9a56447500fb346c63566dfebf5d809a47833068e112a88980c7325b1ae69ba80a9a97a9e9a51cd1bcbe6d61f68112daec6344f9e87bbba323232328ba1e434721a0284079d2b309448c1a04a83c4180bd2a58a10ac303121670ae0974e4f148b7f903903a2044c568ca49b3576858d81f3f968f23cb11f525c74466c92206f27767c997a8263a0275888199538d9f2644874186bca0ea03cd1587670eb57d9a7696a94a6583e9e278665a682ae2c66e18974d2660b0f54087240903324ba84174f5c85ac58ba134e0c385fcfab1227c5502f5db9be2a18f5d6d573bc95c72bdf68f99e916794a6695ae6d901a4a9d1da4bdbb09ed756e54d560086dada748cf13851a7cb933a43a24ff1f2b0d111cf341e2f8c914f09f06998369f4af911d3c58a21939696f6a6fb40268c12341e74542449d3d405055e9a8e21f97405e3c1f3c024bda4699a9ec0bcf444f67caa89914f4f4f2cd813433c1eafd7ebad349272b87891920bf3b2e5d3e307383ef5a2fb81da4fd8076d9f7a87d499b44408fb4286cca7de34f6e9a761685a3e750b848189f1a96ba0db0c6b77ca17ac156eded888516bf1636403d9eb92e697a40126284dd331379fa6696ac425ccf372615da4caa43c1e8fc7e3611e8fc713e3f13cde35320adbc2e453352e393ebdc1dc955e94162268672ac2ceb60c19197fac4646589e78c942e37962c2b280a0742679697a24cf8e574664c58aa91b45deb0786432e5f9ce647a7675265960a1913ab2a5815171e71469b3a3071d63f2294da5f08a0b3ca32327b257dceb191921a790a0049fe743a9178521dd3cefca8964e21601685dd97c20a6a30c7726bb35f2ad3c166805669c1cb3a6a8419246c513d77545cfc888f5a538e880e5e8c260286599647822879445168b4529ab3131387a48c889e1e0124bd162baa6699aa627d2f4449e49232393065ab471878cc7bb01f6bc2a62562dda3369c1288c6d5d79f869c6152c34ae3ad04053aaa20a530547ac06f28a8e9c980d2158ce24eb98ab8c1a3074be80347991a64f5cc7c858df995c7d27f2449e6a658fcacaf3d0c46408095324129be18335f2783c9e3f8ff7c415038f755e59d8113a75a4a245d3c8f4e19e3c031def47d42105dd88e7ab8f18f4dd5e8d1cc947c4017d44ddcf471c7a9eb3ac1c1b6672ca1445f1e6f8580a9b23e6180602100cd0a91b6bba4dbd9da88dc8ed2edd2fdf4e949685a79168eddb89aeb2f09ead39b296a78616180f86ed4459dde238df4eb4958519acb0d494e05185e6c9b09da8ab5b0ce7db898c596841163332c49068e30167d84e74ec16bf419e25bb6d274223aa71dbf3c87984c8eadb89a4bafd793bd11451557bfad642dc13d0894426be3d3566e10dd305c32b460b31697386ede9b15bdcf6ed29320baf99aeb21e77bea0d292c3f634d92d76f3ed695a165e2f765ae039e1c48d1a2dc3f674ad5bdca6ed8a9c16a2c3f6d4ebb6678d1ae9d7b7a75ae956da7597d2ab2c3cafd2ac6fdfa565610370b0cd9902d656e7ccb07db7d62d66f3edbbb62c04c09a2048c0c2c4da7019b6efdcba4d9fb2d082363bacf8700b41899c617b5aec16ab99a24aaba27c7b6ae5e5b627d409b543fbf61d951d7297bc4bc62c3ccfddf1db774f59e8540c83b216c5460e9b9261fbaed8ed6e2a0bef9a1266b4b479faaa2a336cdf55758bd9be7d77958544155c8c65505c61ba0cdb7759dde2b52dae5d57936fdf7d75eb53e7b6a61d3b6f575978c500f17afa8ae3440bd6b03d4356b718cdb767d8ca42232827c0cee8cc60b3366ccfd0d52d3ef3ed198c5978812c78b2e0803971a41ab66738768bcd7c7b06e4906fcf70962119f5ed19d032b46750cbb0a6cded2e69f8f60c356e6b8e1993c1eadb33486598ca5075977cdf9ee1290bcdb50cc563b2dbbbd6ed6dc3d005ebdb3160f0baad696686e1ebdb316861d8c2d07597d46fc7709585669b18dcbabdc56eef1415862a1ddf8ec16ac8cb6d4d234686d0be7d88ca1072287997fcdb878c596876751dbf7da858d5edcdeaf66e710d75597dfbd057b7b9ce6dcd1a35ded6b4b9dda5deb75f48cb42f3ea6aeddb2f5c65210954a4f860890a336e4186ed17b2bac56adf7e612b0bef1ab01e5e82c8788104ccb0fd4257b7178c59e834f562c79230382ce4e419b65f38768bc920cf925daabefd02da851ab7356198301e3bf182d5b75f90ba3075a1ea2ef1beddc25b3bf182896fb760cc4227acac2241aaaa42107365d86ee1d82d1ef3ed169216d2b2504494ae1d6a34427863366cb7b0d62d4efb760b6d5d8adf6e418e05afdb9675ca3a16bebedd8256b747de6e61cb42d75d22fa760b5759689a16b2bebd425a16de0f66bc21a26525850c24c3f60a6bdd6231df5ea12d0b6f9b09a82741c66c90d01ab65770eb1687f9760b4f59a8214d9b580f1638be7a0cdb2d14bbc560a6a82c7429f1ed16ac2a78b96d39a6ac50814ab7aab757a890bc4be9b757306661b9963760aff0948517f96586e6ad6a0714d6b0bd42b15b8cf6ed15a6b210288cc90a216b5924b886ed15aabac55fbebdc255163acdc05366c81210a6c8400edb2b64758b3fd8e2aad055e1abdb9e3ab72dcdcc1ebbd09a6e79de2ed4e676977669595822915759e85495656685da96195c4d86ed4259dd622f5938828ed90b1d437e8410366c17eaea56c898854e37d8503991a2a3890f2dc376a163b7b80bf22cd96dbb90508ddb96464a234256df2e24d5ad91b70b4d0955dda50cdf2ef49485659750f1db2918b3f004554f7490dd5801a4cab031976fa780cc42a71d5fc2b03cc19192e769d84e21d92ddef2ed14d2b2f0823047cd8f1a59ae0c89336ca7b0d62d3e6b93e3d66d3b85370a5eb72d6bd4a0f0f5ed14b4286c51e8ba4b18b2b0bcbaa290b5d69685370ada54d81b91322bc3f6096edd622ddf4ee1290b3d10a54c12a93434b8a40ddb2914bbc559a6a82854a17d3b05ab095e6e5b42955013d0be7d029509c809c9bb3494856539e158aceaf666757bb7b8ba8d50e5db277c751ba1ce6d331bdbdb9a36b7bb74212d0b735bdbdab74bb8ca42270fb69ee2b8f001828ae4b05d4256b718cbb74bd8ca420b47a0803d6dc1d1e5ceb05d4257b718f9ed128c59a81eef644561d5e8b21ab64b38768baf20cf92ddb64b40ebb6c66d739660f5ed12a4244c49a8ba4b16be5dc25316e62ca1f8ed3a63163a9900b20348151227616cc376ddb15b6ce5db75c82c8c6004c8549d2f2049f20cdb75c96e71956fd7a565610a3c70c32589591a1c4386edbab56e31953632396e646f3aafdb662f2fddd7b7ebb4745bbaaebb54e1db755759988dc6ac6f8f909685168042c304859b216f9e0cdb23ac758ba77c7b04b76e6fb1db3b45a5ab12fb769d55b7f9db2378b96dce11d0be3d029508c808c9bb24f4ed118c59987384e3b74778ca42a71b517aa8888a2a02c28d617b8462b758cab747a8eaf666757bb7b82274757d7b84af6e73756e9b6dd8785bd3e67697287c7b5032ed5b17b4f6ed415759e814848d080e2a2bc48ea80ddb83b2bac566df1eb49585370e0ead1f46c484d1ba336c0feaea161fbf3dc89885381d79ee24972461831ab6071dbbc565df1e846c0f3aebd6fc36436528ab6f0f92ea9668c2b707e5a0e2b7031d93dddeb56e6f9b1cb721df0ef406e475db666303fafa76202da02da0aebb24a1db80b240d4b822e3234d96b5e3b0fd67ad5b4cf6ed3f6e404f5918014d9e30723e0003c76bd80e54ec164799a2eaf6a71dc8aa5b2fb76d2c587ed0befd87ca0ff227799774dffe63ccc24efe3c65e19d03e6a5cad91121567e0cdb7f8addfe4c65e102c8dc6063fc1245099661fb4f55b758cca90998b217532ee68cf518b6876d71fd7475dbfef395ab73dbf66aafdcdbb7e7d6e4da726e7729c2b7e7d2b2b08d6d5cfbf6dc551642200ced49913a506ed60cdb7359dd62b06fcf75757b8fdd5ee499914bd4b7e7d0bacd7d7baec66d7b47efc8e572b9aabb14f4edb9a72cec2c1f63162640889b1f79d6a6a8c0326cf739768b8ddfee934ccb42a72a2c4ec8bab2b27eb419b6fbac758ba1b4c9e916c8cdceb7fbbc75eb75dbb661c3e7ebdb7db47cb67cbaee12d0b7fb58b5102dfa60adb9f9147da6d27cbb0f550b75c3f61e2fb7ed181de3b1137bd0bebd874a4f4ff22efd7c7bcf570b4f24ebc49eb1625556cf56f2db7bb85a3861d88eab735b5ca7cedbb701f0765c9bdb5dca7d3b2e2d0bfba91d77958519a83355040f8937327c0cfbc9b7d30d316f6e703041f2c1dbb01dd7d52d7672e770d971abe35587cd9d613beed82dfe429e25bb6dc7a1755be3b678cc18ab6fc749e1a6705577c9e71baf3502c456704971c2861b30c376f4d82d6ea27205790333a50cda92616326df8ea665a19311e38a156a59a0b47019b6a36bdd62af3639dda258def0071f3c76c2d1a3ce8e3b5037d2b00ddbcfb56ecfb62cfc60654b11146035e24c19f692efa03342d2ae9450e3f66588954c51550941afbadd793b8ad58e6a754be4ede816da75977abefdf4725b0c0676a27dfb49e5449ec9bb84fbf6f3ab85f8788e15abceadb26f3fb95ae8336c37ebdc160709f2f60d006f37db5a78ddee129a968578abddcc72fa41d626e6c54e1eb3e2b0931cbbbdc8b324946f37d1cc1ab7c52ff00bd394ea7683b79b66d55d3a1f5711cde2b701ca749173a626e488d8b0cb645a16de3828d2c2ccb06151a2c6b0bd5ceb16236993e3d66dfb7c7be9755b14d479ecc4f2ebdb4badb2ecba4be6f7d3d35a769ba2ea76428fef09df9ebddc3603631eb7672add7a7b4edea5f27b83b5e6ed9813230ac9b585cab03d17bbc547be3d4f65e12d43e2adaa4b0a2c794a04d99793ae1af5b09063262566260357ec174c54e8d848807de914e3c48c393a8c2801e3362cddbbed17625372e08214fe8a9120f2417fc5485c9958a05e1ca5a89032052ace54558e136f566c26c8a87051045484c944772fc16107cff7fc3ddec9fa81c20470dee6a465b1e3a4d8c2a96b875671ca973c6546166226d44c7c80a24497588ab136364280233526e6389f7750c295a9371d662850ec18962ba448f9d2857c25e3e64b3fea1607d70ffa7b2433a69c51245a8276cc53f6b9bf664d34d05d33256b947879f7a2f5a87df519ab81ebe9f19c2ed7448deb562fc22d29a3c49620cb68e1d271a5ebcab264ea087fc5a24a7ceeeff14b0c1a47d73ed4ee1d16acd2b917ad47655996655996655996a5e37c3a2105e8bc683df222097f8f6f60dec2df239e234ff460d926d7b8ec76eceb6e54c5e50db84f629ff86fc63e22ee73116ee9d3651fb1f4db4cbd02ec647636cbe10b8fb1f0dec7ae005d77f61dfdf5b3890ebb4e08fbc5b53f1111358560f270eaee6de14c5918ecd1f0a8137fccdb6426c5ad7119f70049cd78e15525e6cc102f192aeed8c1b200dd35fa3cf42a3c1d3765e1e963c22aee58296b93628b1b8f61a7f8765dd4f7f1adf8dd1de4907d223438de497ba1bfc73b549e88339f4a002979c343e6cbbf473c619c5a64b50062254d9517635dbcc99bbc491cd31df3bce106831c943a042f85326594ea86891b1453d2b6d83a6a2a08d5cf8d1f272ea184842c4af2e47a729ecbe574407a58842035246a0895160c0b665b3e7fcd8498f8a0bf6641406892bbdd763e7399cf7c5195e8e3e0e7b33375ae2c4bdf59b6b907f0a6df0ebce94b658900fc440eabe9e6bd6d76e9bd9e5bae8f88bbf7afe3fae624506ebe49352c346f27c26074a1d07102c7a536542ee11c566f82e58833411706a6a242ce38ccb4e4f22a2932a10c2226aa4c45181c4cdc4e34652113ee7a38ade4bcb945f71ba8608911e3c58ab42243a2bf699aa6699a78e2faa6699a5e6fba9207b32c73ae0afbd3cbd3712bfe3ccfb3c6d69f9e76eb26fef4a213ccc6963ffda8db0c3828b5f8d33b30dd18f3a77b381d8415d79faec1792e41e15345053c93b09d42afab2d3ededa9c7c2981b2e94e2f6ae11de279b3fdf1f1a649e3ce9b8e93589d46d01459bca93145e29c01f6a612339f21231445d10c74a78bf8b9e88f4f44af1857e6193ed2b30ce2f9f32ccb326168a90299398a181445d126ffb62867195457ccb307855227e79ccddbabe9272eff64a01ce46690cf817c44dc8f8fa8c39d6549d5e651003c8afa40d38151e57813897dacc9a1e038a54c101064a86535545388d3b32fc4799e3e114d4d22de7cc4a33f8b7c9c98b630e744a13fdd4353989758504ef5de8037f4b8d289a228ead3f58af187384f2b6feace306d9698498120058421d1ff4c1f43e0b618cef3444f57ca423fcf7e3acfece779967e9e3ed371bdea4cac735c8fcfcff34471381f11454f1475f4548b5014bf8a8b7a3d7dabcfbd2c6350fdd267dc33354e7887d90997391873b788984b7b7c660516296c861a56dc8f4ee82f06455df654cdbbace6dd05e7cf05526f12a3a92ad1e955cf65a0eb39deed84709ea19d080cf083eb55d7739e4ae4a0e877deeb75138df0a10ecc4ba573c6d7bcc727722222676a22221f91030edfeebb34cd69a7449e6b4fd59d6795c8cd347bd9f6e615cf3b75a2ccf3dd5ed3acde4fbd554fdd9da95dbd6f027d507b3ea2d3f73c4d7bced427d087d47319e88a58f79d4a74fa9d889dcf47747a9fe788d4fbb912e8c3ae993a63aa27ee88b2ba730cc4538191764ee459dd79ab3c47813eecf0d463e333756ea7ba13a9b88891b2f344f4aeb10a8c949dc889724eef9e55c7547ad7be1d46ee76bbdd6eb7f31139507a235f8f54baa49113f11153c159dd5fbb51abc6e4ce316acc42f4ca6881ef034af871b8755d9f30d087b58134706aa5a1073b05ecbc773eb46b3552ef5b3df633868e187c22071c883b770b2cf0b2db760b3c47d46ad9464454ca79e2ce3be8e7ed9c48256222a007f0bcd59df3d4720d466a275273fdb3dbf9ba0d466a1fcf87ebd502dfb5df2ede07de55b717abdbce3b8c729d69a79a5aa49e6bd4b34d2ddb7a6ddf11b9d3672752cb361869977a567bbe5353cfe11f5eea3bdf7aeae9a6e14416d1aabb54fed2fa19f805fa908133354a0500dfa944be568958f7f99cd2f188705779832994eedcfd764ae45b725789439ffa9e3a28bf078052a152270c5d071f41f944b4d8c151a96eb397009d42a91e7b978f3b28bf8363a004747011dc0e6e44bb4b60ee00d0b68b841d3bb9f800cc0b90ad2744c80c719e5f728cc2119341db011339d07319e834e835dded90a90a42d0c1ef762a717d0d7a4d3dab1c04d3dd2eef7ca90f48a41239b8699f1de817e883076edaef7c1d007a013c07540be018a81b3e778112500007fa4e05faba3a062a113f064cabff1d007a7591b0af1c7ef5a316a24657ea76e72bb1c3afce74970ee0aba7dd0a5d8313fd572fea7683af0170e2faebfaf3ebea65b7435f1dd72debaba33ef48a77853fff28ed949ca993b2f37ca7e6a235ab43e91779920731b25b9efb884defbe5389c1a2cfce5389f879ddc61e6a448daa1bf91c2d669f639fbb05a9baf3a5c415f749ee6a51d1f33c077da726394fbd7fc425744127e2631017fdce7191ca41f0839ecbbbbcf3bb3b8b861e043db741c51f801e0e8e377010aaf835e09e7c1cb78e59d583a35706706c00bf6a11e0f826ff835fa00f1f9ca973b90c744a1d76bb9df33cd73f28b25b77ccf39d8f98556287cb0e117d5d7156ddfe5cf50d6d9163ddd1920637c23de990da883c170015ffefa8881e1551fc538fce291d11bdcaea36008ed50deace8b34a8f7fed0b6317cdc115923dfabbedbeb4e1540877757dd77aa00dcd5fbe811694297512a1dde1dab7eb30bc073a8ea0810c0ce3fecdc07c47414a8834fa95756bd2f6c555caf3bef517579c3ce7f54cf1b769ea46ad0ebce0fa08ab8bf9d73506faf4aeaed75a8ee90bfc3401fde17ec75e7409578d37e87817a7f5509e03bb59d4925f613d12ba2ab449cd66337803a8252250e59a0127f7c2ab1e889b8a702a8445eda0702f8947415d4be83ea81f507e0ebc09203e05cd3adcfcfb47b078b0cb62e3b48be96e0101e7b0e002a71e74b3b1f71fd9df7fc5e2200008008003ee2ce979c29efd4fb3d958375c9871323511c72401d1e693cf0ba4a3382e771389d6e68c8fda95bfcf63bf791f53b2f5a33c50d152b73da241912f930896357169f1400c972e6d864cb548e3bc6302a82a4f26059e10943a4c8d18e11949f227686a8a043d6860a4b9d1541bf9b0a018463d4158e1273dc32d0ed1c87dd878688baf7dc491dfed4a793701c6344b7c11c2839aa981803e6ca7047c7e7534098339e9776220feddb7954babdc0db79485ef22edd32dfce336621dac6c189bce3b7f39eb2300564b0a2a89043a30b99613bafd82d06e1db795359e89443abebaccd0a963753c3765e55b778ceb7f3aeb2d02947191e74dafcd001a3c9b09d97d52d96b3c5c5eb3a73fb76de57b73d756e7b7a79bd7d3b5120a824d1d3f43969ba470bdd2402194204084d59c89491c1a1121fe04c56de707143a69aaabce1e2864024c140483bbdb4a58d580b631af3ed65779765590631918348e520543988550e8295836805cfa0e9024eeee4a014454d5adf6ed1f6f2dd67699666d9d373aa6a90a5197481e707650261f40042cb94962a2d575ab2b46c69e9d262d4722cbbd8dd5a4c9469299e655996658a2fbdc4097993086408116c4fbde1167153baaaa12bcf5ab77ac365ebea0df78d2c4a80a644182c265c5ce158b2c6a66c0dce4975c12c43f649e1ea5e8902478b8c8bd49c144aca905ca2d80cb95096d93a3221c370990984d10388b4bf6327d6f4598e9d40539a5937624a4a9089eb201cba7bfc1be503b5b24fb344940fd0becbdcdd23ceb3c4a6699a30a87ac3b5c261e9b47ac385c1d51b2e6e3d55182dcc943031336e2ae95326a0ab2ccd28262d82489921b1702529eba2719c63223381a0924c6b7327a5ae09cb0c872a4dd98aeab12941ca115f40251308a3071025a68c64d011477ccedc24021942848aa42925b606c3b7c1885ef1082620b9b2476c90a6810d3cccc81a91854c392dcb89558541d829e60df74dc7a1be111b68c0a7811159e8e3e31bf1226a840fe74d6450dd082c04dc78ca1b2e2ac5c6c606131658480071e3fa6e321b6ddf27130eeb69030d8cc8c2a6b4a3972b4fbcc8b6096ac67bd48a5036894086108100315765130a7ea32b6fb866d00a51378940861091ec0d372d0124d6744830186a32e412637d70a3d51bee3365615369bce071f044be3e17681eb2d4725308a1f471d1f748e60da72a224453f6e1703f3a211c16fa0b3645e6cdbf6660619e788d3e2850a0e5e1b2028f581592314eb0644181d646ec088dbef74c4ae9b0e98dcbbce2de6b9639edafb7897b0d904b08d2e8226df7983662ca3c7b7a7a7a7c4a1dc21bd3c4bd08c09118646353c46afc30724c533545469ad964ec613a16a122e02611c810684f7737dbf7e963f2d0e3eb39c95c94417bd2cc2664331da3eca019edee36f3dde3674fcf39458238623cc840982366cbecdb87b67ca3ce94517444cf0c10587933e48cc9539b1845c6b418a5d841d39ec388a60dd27213fe96d1798a527be245b6058de5725815a2c39e8bd04f227087ba6ea19f2b2454163f77372e75f7feae97694e20248a0b3c61c242c843a4c528318796e81b5ddf7b6f79c79a05d199a9217672c03983d31e88f8ecd7d76f6ce670eedea5c6f8deb2f1cd45288aa23ee2cdddf2de5b72b0fe3d7166b28448b06c61c44790a02b05390475c11512bcc272260b332f5c5d6312a272410ee65f30ae3a3d578c268ea9a73ccff334dbe0dac8956f5c7922b9985fd034718830b9827ed0b3a68d6cc99c1e348a89056543a62284263e17d9e326cd8ea8211ad03968c4acd8a8eaf5b0a9594153d4f1d03963cab85475296112a511238605869d9eb40d1a19183538b81d1b2f6434ced87a32b4e112250436b3f2420f1b1632123fc8b205d4cad89716b15c616d4a9992345d3921b44d8a8d2793421ab3312f293a7e24bc21834ac205c679eafee4e0d303678ccc2a452e421b18d909a41da0203846b12b2e8e2ba6e072289b276374be60417dd634c183f6a06bbacaace048e273bae12ab6b8596ee04a94cd91273170546836cb3545ca926c4a1fb17bd0153de6599665d953b6d18a82e74e69e234f89c7f3a4ec8cbb22c7dd410bdb20df131d683face262135e7798e89c91282c9031388f2eff14cd91371ef833fb0e54c23b91b391b994b483f09008b0bc7dd83410e4a1d82a50a2a644a410ec14c66960bb60cb3284f49f0905a099fa1365fe1efb18c972df7ca0518501fe39c73f611b3fa39fb77a039503950fb0607980459828446093861b4dc8bd6239f1451b6a230c981b1f959f18486041c67b8506901a348d1078f1e02a50c1439194a5a9ed2e24ca2c55db77a912f069518b01d4f54a6c0201392060eae27059b121de54dcbeaf1a3a012937b00d124a2740b749bfbb2f4fd0da3e1f5b8bf6134dce8c464285492265a24bfec500579a2eeef500dd6d760908352871ebfa78930386e389c120ee74c1dec41b7b2e08268d496aa60d083fd9818641b1a438d6c678ffb6b64a372e29120a1003f6366e6922913cc7804e95812e5e76f98190fe0e4b10e4a17bb37ae8dee3ab1c887ae505689fed9cb8cb677f9bef25edc91098f92346a57505424c972baf1561433458b8e1c6340a4cab6c773383397b87b661f56891de46f2f312e330e378cc679d430645d906296aca5c8d23f5c601f94ee3a2e7d1d98657996450ed45bd9121d543e8c244ca2e720aea5979c733ecbf24895a2236fbea9207132c14db3fcf2e67996e59112f9d836450acf918d579db3b184ca285072cef92c4b235fda344dd3344fd3d4f266ce399f3472591e8dccf8c631e9b285e2dbcb3e6ea17db7eb84865cf735c42ce2e2bb48190d1ce03184c5963536343a7a0c9509396a79f0a6e9b8a837fdc7831f5c3c78fb42a48b52c70153b3718cd3c24c777777378f16eaee6eb2aaefeece9a7ad334cd2cb737cd205bdef4d47417c2f5a617ad2cdef4a32007571ad2e34def601e87bcbd99f4a61914c5081036a3210913c498fc7892f2438a17203dbec9ce0db069b3ba1a03a70c4eef30cdb22ccbd3d770da78d80167edc8e383b41e4cbe07f07dec31e75beddb1dcbcbb717f918f2bd250815848bdb8c1232c8745cfd6032ada65e45b0d1e5f3dcf1ede5559cef1d517e43177c51435123cdcc982e1d397eca9c3ababefb6aeadb7f8486527772e12565eaab0b079456e7882046254b8e3c190c992659540e21ab04c05449f2e62acfd499699aa6899a2c8e313c6f966559766b8630cdf3c471e7fb1b579aa60753c9347b83699a74de34cbb22c9b90348a7010f9f6b21b03374a54d47873e60d1a396a56ec052af8b2cc8d3be81363304f451e48192bd4bc4973e3e85e7cf18feecff4f46137317afa8efede8be23ce344101225bb2567462e2739dc0c3730a0d6e6a838b1c6898d23688ed8a16075cbbc8cbce82a51840c961a537e784580815348212126e5054e2734d48488cf1850599665922f71391d58150a5f45344a0f31b909551caa88f19981821a59548869e15833d5555b2114cb021c492176844559966549c588ee7806c990af47c1f4eff10c0d20ae1f2727a87a55299ae4b051855cd334be6e7cf51802c0dfa399379fe1efd14c971f18d470b9a11466703260d14541025159c0048605291b9a8405d5f932c8c8da8515b80b87111084a0ecc830d603c3969721b32813c6d07460602a18211a7b2b2a3ba1614a9d1d591a0c655e2c7045a140d6c582af284549ca0ca100f2a2b2c405062ead1fe38b212551e90ab1301f922b4553b65c7852a68212b21cce82133a13b8bee47a7a7a7a80a6bc8872f3e510fb17cc47db4bf80be6434c2b2677bbcd1bc68c5f5d5c5b5a5958bec6185f65ab5eaf59e2f2628c4dd39c922a6213bde227159ca0831070b081067465e91bca1baefbd0d3b3cf74f38ee8d50238e18943f30611219a3400e181a983630ebd5eb3ecb2ccbd82762a7b280c1bd40c3c0481b2145af0d0899ad2326368f7d72826cf03fd358a8193f190689247098a28594ec0649c2930955a1a5d53397921e66447599665599625a6f057ec84981c6ce6262540670e06392869d83ad16602e1e1e2906663fd9c65ce399b5d5cd9cf6c6633e31cfb6dca429c8fa9a1c48ca065f466f9b9faf6d2854ed343b064f2004283a3da5bd05fb113303ef757ec44d4138339972697bbf3ed6b9618e3ce1297b72c4b2c370e941230329255a0d4861d43f586525202eceb8e1b0f943c81c136a23b77607efbca128fa0fc0ecc3bb99c73ce18e7d8ec6b5ed37422ce54ef0331e0e6c963fa300e9d4fa8942b5aca7a52226348600402000003170000180c060785c2e134ccf334757714801052984e565846920683a2200b511cc53008c3186308210420620832ca395507012e4f39e80144176f2442c2ddec55acf49fa334cebb9b81563dc08c0c323ab7c4f9b62cc6fb270b47447fef06aa98e57b14e8ac24ade344023ce5adc64cf3fc59b5ad904ca5fbeecbc4c73dc779e7e9e50e7eabf771ed5252264d48cc0febee607c8ea8499c3760eeae9192f03fb3928cbaac02b5548f2cb1a414992aec848f0bfb69f13c302a876c037553a1d3a32e2a02fc26d710c022bcf342cf90e25cc5f7d117cc912a7fbadfda85b52dab75d7d3f3437b258085d055621f8257f805a396ebb9e967725e3a4da9f92d1b89fa77c1b00a9c6463809487343f3bbf4b95192e4b67f92662ba73bd60f250ff524613f8430677b931603391fbd87c462fb50d0517b512da349abcdb805140d7ca69d5775b5830e60bdd7fb492f81c4b249fd6c477ca0d27fceac3c023fa2ea5a531d0b1afc85bb3c09f0e61eeaab4d9d8e9e82229cf2784d0ff2f865371d1fff21be6165d446ed6ed1a2b90c4fb6428f2ed72623192aa5875d53f3fe1f6a4112c24cb84c13cf749283eb266dc804ec9d8d838325469a5ebc8dd577ea017f62029a5b6b9d51b88dcbcd6240d49d2ee4024746fb99f5fd9d306a3d32f7b8d4141a73967eba466c6c1cad0ef94371db890123d3bbc05ed0d2c09560dc705a90515f24d705f7d8d47f7c8441236244a9c7c989b4f40c6252637c109fee9aa422c7599d2b148eb0a2bad841195209de173d9bc10fa8267d8d249d46243b09eec89ea9156fc0821e717c25da6487a0faf41356cc9cb37fc0b1677b5a1546c58887a93100e92be25a2b7804a457ec996b56c45e8d904ba1df0f981a48526b975cefda794eff9e0dd631d40ceb32e20e1270f9e88f139a4a022e6180fd2ee05472994df5c8bf5c4aaf04ed2eaf140350b17506434296b892b7a467d6e13a059d78999f161a6b1e7b32952fb76601658832c03ba2b5997e39fb65b7fe144beb62ec72ed3dd1792392ec35262b1051c810725b1bebb901e772b13a5058033e39a711119a0892ac38c08b9331f228c62b184e9e89bf0146fe3ec258900f5af543e8498a3462e5d2cc1da50060ef9d275d0da3820ca83cb09e4ca04e4a9c5cc0381684488b2be6cd9ea2a9987d645e0390ed8687794c1e21aac96313c279a1d4a1f3ff74d512e9145e9c849009245db10339bfeca5a2aaaf0c1e580d9183348aecaaf5570624c41fd8cb86eba2ad9a0f11d24dee153e76423ce0f06111f3259cd2e21629037c846646b028a48d4effc4124d300ca85435016f1b638b9a56e5829311a5f65386f0862f805eccd6955fca8fa6d8167a82c14ef10a5dfcd7740e8782aba78cda333ba25532b113ff19e51715e4c874e64cf59152b60ce87aae74fc6ec3a10e014dc0da78e4d41d86299f70b69c324bb6f72079bf9e59a5f2cd902ec6914e5ae6cefd86c7cbf3b14d5e1cabead1304ab52372df0cdf62a1add3dea1318783289125c318982f151ad9564c3c111d54514fe943df493743ce78bec209e73a8ddfa28e8fc8be5e95d0a7d2e5d2fa8ec9b3ef845266804418936db6c8708ce91b67ac4e3ca07261a1ace40d7f717b9762356dd0ef774ef798d5fc5840bc84cbed84fbe8920482a00cef8a8e3a5382b6712cfe93f6a2fa9469915871914751700b17098b46abfb6248b62a241506d8cda9aa9d73b51290561b1a76c35262bbd29c59ab36262ae2335368eacd164619a1c55db54842d37b3f4c438abff1f8ac910f53fa105dd1bec5a1f8c2f6004083dddf2229ebf4505a9e4ca3c8ee5a2e0a483323879065212474fa820a1295850c30bda34d5b9f6bb6ecdc8a6fa1ee7b5416d5786cba5536e369ab887c7e0a60aefc0dfad260552667236dcaf698854777f50ea2830d3c37a20da5b94fffe45da6bd5962b214a5403df618e5985b3752fd64a07e1693fde3627a2117a57e0de42ce53d069a13f47154c322a8ef046f3f1507380639aa3f350a0f61683f7872039e6204254d8f000a0b9a0af3df4e9e356e7e4441a459b5075ad645307a781e0b862e6ece827468689ccbf4afd496e129b902c3f0d8d952c5c2c6defcb2c5bb03c49e94ab0f71ec7fd121cb853d087d12a5c3d3c1cdffbf8c2014fefca3569c2e0137ef3926922e4c064163c3b8171398fdbd318b1e67127eb7ac3e2407314bc20d78c939f6ea4c2a99a61df7073140850a04fd11fb46c3d6200fd2d999fc344cfb481aa42994a7a2dbf67d2bf3bfc88bfc6576e0bd74aa6a403e2488d2e8194f433f3998371318ec968ae1a4d99c523264ff0c9af4d9e2f67b8b1d259925ccb25e19256111607ba929a39323df6416173d9ef5e7430936cf937ab70aea6f7ca6b6ca770826477de432f911456907c889026b5dfc02baf8b8746662f5b8e845edd8e84055644012e5e16dcace23706c54d8e21189a2d793519a2b0ccb8af678ec2fe5c645cf93f664b527e428b812085e432c4e4990ab3c40c64e93c757619b274c6556b9a20efd4d172d690dd4903f2cae430f724835ce313165bd0b2850556190c4f86a02d8582b9acd248c29055a6c6b30fef429f88e002517fcda4f9ab2f5aa51152f0bbc88eefe638fd1472ec429f7932b528fc0dc6adea4e360f144a0b7825243b7915000d47d5d21997e3324b0746ee17c1c93ec8abbc0e90e0ce47f94427fac09c85fbc4ed0d8670a56286900a9162bd0681c6ccbe086195a043d160e86584e8ff291a987a955e664a5f949411e8e485160faa40408b26d5fe480e2a80169c8ab66366909f95b81513e03d286d2cd63a08ebe49213d9025f432cd30039bc9e34d5286069a3572822a947919b68582a11cf608984c5347941ed09035015cba0edf2bf28dc5293fe5f106eb89740d3911bfe23f9854ef9a59f44fc2fb7e9dbb84cffa5d6963aefc1788271b66dd221732fc3419d1218e4376627410e63b00ca9f1e211fb48564a4a447bf37131a19e683230764b0ca7d525d4787a129c3823716df1da9b1cdc29afd0e32b1778cc0a12dd3879304913ec5d32ca700b1ea3c391504a4abe49d6df5e6e93a9f423ec25fd582d899462922fa938809bf86b5302a0005ee4617e1f8855a611e26d155db4d0984fb0d762150421665ce643c09f60c9a03a8d24e066bca51d85f9047b2d562009c2d8a247d13ca1b9be787f7bb99bbcd20f145dc271562738a45f0326795357427917173598099128554aac3c8e421586dd528f6e6eb2e8bfcd4b220edeca7bbc2d1948ad16c9709d7a089a8dd02f4e211c7acf323dda7f4254452f04690f691177ef6283384c0cddf87326052090ac6f38ad94495a499c2e8b42091e048f172dab9a3be5bcf38b25f25bea0485132a72de79be92e61df51d14ae88822512636524a021c862f72194802ebe47ce3bb8b0483c801130ea585435e01e4c44a6cf4bb44173e5410f4602771943430242cab2c5502f164b7c1c9212d6c2094fbd37892ad52c8f71b4409fd40f53ed4ae7e664a3c3525e93069e8de7204bf297b44d1c5ddff5a0c748f09ed51d9b93d91c0f688ed471875441aa9ed1590e7cfb7c90f9d1ec1483928445ce1881dfda6e48b20221c3daed5ca738f735ceccf32b09d226891e8b71d902e9f927f52520371e6a0803cd87abb8ebe167e8243f881eb0f4b824ed0ab90a5847fc1fe71f42240ce3a84e46d1405f4e8adfc87ed62769debea22a7d705cfb39e3ab3602aa186ea5b4459153171c8ecd3caf49ae18ea30e1e2eca121c8c656520a0f2fd4e10683b057b12d7585e34a3df928a52f2d764045d74c383b1389e774ce51a4d0274c924eb04f95929c790acdefdf77a047967058bd9e17eeda3d8cf1ca3b9be250db90bf8115ae691695d5c3d253ba95f5b93e865ba6ae73585fb317df09b56a074526c35d1a4df6e633950e10ef9477fae2f81ce01dc8b4ec94b0e19de2c2210e159f83b6b669e4fba96196c125de280a39eb120c196cf3f9a69400eff5c7a13c170ed5f3f03206b640e6316941f91752ddc088f2baf813303a30c89087cc7bdd22ef67a88b2a48b095d8c362ac825d18c1b854ea908f16fa98b945038790180ab005b680af42ff2d0b4300363bd4d4b8e1ad73a35df02e5d6b0e0e14289029a47a508bb3e26a058a2c390cc26958e29ffea87ca0065554725ee5d9869467d4560567bf141becf9aa78ebacaa7af678c68c790265c6a462f89f7cfcdb7a7a83521048e6fd09445351103c50f2ff23c2a4156c1981b6b7677848b8ca235859307704204e31694bec8d1a094f35708b1c1ee6740a11b79b16722caaa4ea4f8d88c86c529e6b813059118c85103dfe9cf349b8d5c7f93d1ab5a5fcb264df669ceb6a3da01df9fc6ca3a3aa970eed88de76d840993def51a5863f20d09f5cf4eca4fcc9c099b85276efe38d8d0a221e0ece739eb3792510d25020038b154d1f72383a49a250fe02247531e9545485e7a88b3860685d505d8e181b5d72278ffed95b15cdbf337767ad03984634e81fc1f636860a5ad48129e7d334be0c43485ce985b6dd252743ae10841690400eb1241343f80500441e37258d74c019a62cc66447f50feb67ead01b9c490c911927e4b463aba3caa58a247c142757acf2c783d6c001606d53f7ebbb73ecbd1ed17b4b92b7f0584d4a33dd3a4cc704fcb729cdb9437744af55558ac28b639d07ac1ab662b07ecf0c43cf7c54fa2cc69d30d8597f33aaf945993d5e1da8d30b57d9b5aa8ff8a6186d2d4d99c5034279e59a998f74fb45b68534dc3193b1ac04c85388c3ffdd0cfd32359b686ac93c38be98dad84e4dd84451e1b4ec1d67a799c7bf82acfa1e2bee4e03d3ce410e3a20ec9691bdc50455e1a386b59f5e8bdf925d9e214caf2b96c1f2f17327e931b4b6cc842e49503d3f8791c1882c225aa5d234c346d5683965ab8a44fadb12d9df8c77ae1338681443f191cebde3dccb78074198376fd28d09981c7742b242aa8f106a518efd8d0b519989a3101a281554ce798b2d4cb62cfea33c56a07cb8b9d21029fd3fe664898759171c11151f7c82f56d83e83235ca4be5ba718ad5cccb1327774b2d07240cab61a7eb652a48ca86aaffdbbbec74a556f1eaa6f722a239834ed393c88e3b6c0d2f067820127bcfcee1b87debf0eb10ff27db801c2be1eb8ed7ba57949a2f08cdafb8afa16a21eaf2ea3fd21c0ddb0baf29fbf8d3db54a1e0c9e8850ecc19503b5ace35cb373833fcb4e7f7f5b759235f19566c8b6d27d303244e152c99c43e1dab913a854be86ce48769839d8b4840fe246a47f1756bdfe88c4d3d5ac423743617c40942e791f60da53c5bfcc26069942e3337cce5d0d6910d47ea6bc0f53ae559141669a909ad8068c8c5134ee692c43100832abf328406bdaeb192443e7f1876c0267dccf536ddde0a0a7a1ce05092d4382638c344d9c75051b5f6d4d5c5d8011fc0e9aea90185399e3a045ab7b1526cc9d3da2109b4614b3bb64798e8c0ae3417591f4270b9bb854e925b29f9725fffce4502606a6ee85c55a9676663a1726178b5611cc6f76a16a62f8484a1f738378ce8843f7e8d27f199da51fd3e91504b2741f10a15bd9230ecebf316aad503582e47b9eb3f6b8100c361280d00c13328905810d4a50ea470882bfd85b02d7d1e1447533119f94ee72c1ba092979fd0cdc3891ecc7b1e1bdd4d663365ee14297c964e109a8f5174bc76c435297dc8d05d7c91539de9986f8fc4debbd6e159515772982334cad04d21e0673966bfe6b83c49f974b0916c76ff600322004d276e723d1110e92be7c87315d5b5e02cf32446e1654ac1cd044f846ce87b38bebfa3aeeb2adc8cd309755c2c422fb0afea41211f6055980346c32c21612291a300a9c379e7bdf83cca7e65208b308ead22f2ec08f788407909c10b00888c1258b3710292c20c472982b480f21cb2c4c5feee95e4b08d9a51816b53c554c4ce4b619f623fa959f247e3846d0339a3400b0627a14493ba3012d39d325007336cc413f0c61034ffa8c45fb2f55ee55ff696e04b04ed4f511e93104c73591141ae742cba3a17451b24e9a2e29c6c0da5bf03559f419cbc0bf349d4514338945c6ea06d93e9008ff0c3eaf46aec18e0e63e5a9a7109bd099209a30df8a300e961693172a4fd587a63be3536dc327281572f75fdb17c760dc147ddea54058742ea6187fde615b4711068a26839f3e6c9ca724c569565151cc1101bd3de4bc9380c594d94097f91c8a23131b9bc9ab08049a25da5c53be9111110cc04d098aebddb2f3508aa79dd12d7e14b117c326f08238156ee0aeab541935498f9e2925c698b89ad4a48d07c373c8550361101038ed50e9a949a810ff8ef6831ffaf90f42f8880c4e5248d4a3ddaf7b81e06cec52628c13ba8f08d645f616636db3a073a6b00c361a2ce401f30c9b09c7d6d7a13f0207b8e648f01aa1e144c287cd47cb23384cc36c69cf7233ed56b529b811033a6173638aefd185af88f68512c034769a4b6fc4562787704404655882186dba6c64f387c3d27a4ee266457ebbb9845973e96b20faa94515036af0e50972ae4d2d1dc4f519dfd166642ff076ceed2df207c309dd67583862cd7cf41760ca270cacfdce066cc961bc363faf9c3003287145aa77bc17e08c1da5e14f19757478f182f4d1f0b05189c4f4c3130510900545f173ac5d450d23d2b91da5b05f25047611677d40a0918c8ad46972c2af8138cb66227979ac026584383cbd6606214240fcc2c001e6702509cc526c051d41c7d90642b617425b4a42b72a34891ba7361af1a7bb1c6142a2bb5a4dcbc852ce66b043ec620d5ca38232a5586854741df7183d60963c0b1b23360f18f60cc4554b99376b4a1f53d8abb791e2bc4d059357a81c085d2abc317e0f5bea394451d661211d9ae3fe719157c8eadc2912d570d31f392fcf4a752570061914a25439d3903fd284c30a89d25a36c2754e053dcc30be5afd58fe0d4438c6e0205ca0ed9eb45e5ac84770bc20a9c42471176592655b6f07c4efc44588201090fa848ce019c046f0488b0f8e3858f8e79aacf0cfb07701003bb3d5c26060be706adce2fc319d759865b8d685d3a69d5aa3fe137a4896af8c619f1113a9274ae1ae6dc093037dc7fcb4c4c935ad0f1d601f9bafe8620d50f71419f7533b18da2d78e28be3b265009e2f89efa8f5ba40484e4b4bd647e43c2f309f8cc583794040154f697810dc5820bb5a50ee48e14174154636b8b7c5d6d7fc199a0df372770364cf62df4083c7d99f8af6c310a19b565c6ca16503ce0728a4050094c19615dfd3118aad233cadfc03d64a5e0bbbc8c19851e1ab96f70af1ae78050b018812f635035a8c6d217dc83ae04beca9721c085c508f8320a55f474e3ec23c0dec9626701ca8ea25099d288a3a61f8eb31cc90c62c1f5ea3d841fe3f1d453a3f460445b319aba759940dd58260a40d0885bbfa0fe8cc7adac0c35f6cd7808a873dac7ca1552386025e91028829c55071d0de9f12aa15dd114549e23494d922b12d9828c340da07b879c4805cc783ec8bd3666c11d4c2e8f92580e4d42688343c09b4528553a08b280f9016030e971b2ade07752d0f83f992e92191656d6097cb838d0158da528a17b94e9d4edc305600811cfb088246b10af699fce14fe21d32edded2b5dbd1414f930e20d5876513d6a34d8a280319eec44084addbef7b018fb72c8615dd52f57babc63499e48434704adacd3182891632410a8b14994a38791005a2166dcc37e4c768bb3ddbfcb67744086e6d28b71bc563258684bba5530285d1bd58b1422d20124e8e2f3d18aed9f712651297de7cd4f8ae7ab26e95eb800ba1195d2632052a8d04ca9d2105101cad5e6afd694e8bb45979cdb19d2ea778cf595e37cfbc0f95df17755310877e7088b82136c21f7cc0b363537534e98557cadf3a6124387b7a16b547f8bcb2c9799c0fe045f30af2d0139b7d8eb69d7e07c831371a7c5620cbaaaa0de004850ba58cfb88e11616255412154edbc9f5c1e87166b471bee6616c4e42015b780d910f16123566131c014cd1b640e23da52d0d949f321b98d2e0def8d431dbf20499721f716b8fb6d010b25349be41bf9e6ad18893984eeb3d2593cfb75d36627a3f524e2f618e03e2d6c073341b8b788e86a1d226e740c9a9bcaf0a2c287f974901f64514e78865e42b147e7e2301c9c39e1ecdb9b2d5b4de1ccb4922b311ff0f4290e92f30af55e2e9c7cb6b7c6578c13a8cf1301532be6d92743addf0745c0d182b1303144107606811833acca15b4ccb9436038113cdc23cf3f1520a3a2938d57e50b693186c0ca13093d3c14341df741c36839320a40d2323a3247e67094269efa8074bbc8264b7c7233c3618090984ff11ebda535ffe8fb1a0c5c32f91d26ca51307ec94286eca9f6ca1e9352bb888945d76130cb1e1c448ac8b0070b2d550bbfe2f44e4b70b22e32121b5ffc3530e71c860dd3ae6cc6d0c5424762c888c506b0571fde13cafde4c68a81779ae1c499e0fd54723f553fe07624913858f1d45e828300f55e13f1404babb346caed9a198f582a12aafa0a14736ccf77385a1adf260ca3c3dfa0c66676f7966274d925ba3885f63a24d0a945e6386030343676609e626c5af7d071d868c52a04b3230c002bc487aab408035969525f71b240a569803d4d272c98308759dbfc2f9e8eb26f846420c7e1dac6ed6989e3acad7b08857195bb4978692a7d90a2d6623e7d2467c61f5b7b8e181d786db1fd7f48e16bc776add7f78f5bf69c6115dc94e9416e015489e6b3c5b5ba44ccf41b1a0c38194735f807bbab5e64da1687151639457f987be21fd9bcc562e66444c0991d52358597b1cb9cc8623c8ec983d983739c430b9770a0cb512b7793793d68e91de750aa1227168e2a2435a1d32c5b2a95afb6aee45607cf1bfdef69f8c6588d70b121aca65a6267651d08e3b65a1e194e602dd27506a303b142ab7a25759551af5316b4255b2819295249041f7fbe34482bb4b1b6f6f848ce0e2d8b4560342cfbb66933be662b34e72acf3e0689c574c5ecb83b2ff13182498cd439ae96ca552413cb79823f0ce3ea9edfed0e068284bef4b46ea3d85b9592966efd14e07832a4cc1976e0a20c73ec0a5b43059cf6f5da3f11306540f7371c2a78d28c4329567d3e9b52532988ca977dccbfc74cc65fdfa87353d64361780b880edd10aad0de656776aa4bf7fabf3b3159991bbe09a67ada9746cdc2c18895bdc13402d52d16dd04be0a34820dc11bf092006dc4898058a693ddeb0726850fa7d5b6e98e2ad8126152c0ec873406752bc36f59a7cb261b4083c535a8aa4066e9a66541d8dd166f51a42d641d125520af46f728ed4043989703ef76d8971c99305fe202327b95dc5f64fa5910b01a16d50e96141f5901000f73e400cbb319045473811658e8208a0a4d5af7ce180c3e3d9c3c9db65e6532a1cf0f34d3086b5a3dbc7ff228f8176fd74ae4336665262adbe0b6f6c19e547cc04e264808820ce4eeb035c4b8c430fc09fa3ca1cf02b770c5ae3cc6373db81e20c100ee3622200091e3bfe3998d87454824c5419e1d79630e25c26a7e2288a3b41df43cb70e49507666b0ab887883fcb9a0a4fa957107aaa11ba11235e2b45d742d0219252b2e90b5755a2ea17d979dc6c9dae80916581beb20d062c3e1ee3e23d8a425f7496dab1a49154a7fcdad616232c5a5440328d76e75ad740cbdbc7c9f7f1c1af8c6334321b8b682b805a0249e8c66c8faf5b2b2b794cafc2b4323f7dea35a1c304dce22c14598d1ffbc9b466dcaa6699dced4da9906b67d8b53615439ceb70cd6a01c3a9ce7484f91b4a5e1f1730770b82706838e719b2b0288576e79615f018d57c649f82ec01b91655f8b74f2cfe5e460b1197b4f80eb4788a5e348fced17751a4e740b0422eca03afe5de1f3f93ba47ae118afff8158a007d8a9c9a3c47c22404e3cbd4fe6ba797af6afbd49d93e3502cbc054bef1a6152aa60a64f5c7611f9246e6de70477d8d39218aab97b94e72d9a1429e49bbf741660ca64be8c238651cea9befbb4076eaa3dc3aa71f575c2cfa5f17a99a30b7e2443f3d6495ed56201b843eccb81707a7636c287aa9582f98d904b66e32db4bef2f9ef7914c391c84e372f8bc6844cd49382f7757d5a4f6a5fdd445a7f97cfa0665fc1dac4ddb838d4651b4d47bdcd0ef65bec1b6394494eb59185ad4364c7a9e05e1893b0452f142ee86d1a7d9b24251a2e122088bae3e0bd156f9690d9ab6b09770a8fae8144d55e82f2106a06dbb31ccd1a1453a0c80be4e72eafbb51b91320eba001eded06d7fe306a8505e4ad3393bde6b6dd2261f6905851851b0d2961876388701a014acd4f8a458c37ae2eb0103b225a0b8d5ab8461c68ce906466eacc4fc7e978578f16649c0d987ccde16e81ffe4403742ffae0f30207258b70ca388f92db514901f068610c4b49816acacc2f1f7b210116470b5aa6f479917a0281494a3886a1dccb0e7511ee648ea0841970124337b5273674810c5a96f20f4629db01bcba9d367d4458f5e2c4dee16871aabe112bfac7a9fc86c1cd440fd77fd2e246d00f4d8678b2c21d8b724730a56579e094cbcedfa5df5e9c57d04182f20b09ce387026f51fb31157364d35910b09eb520369c4cfe39fca198deb88dbc7d2ee5b3f7ac6c343fcb2d0d8be13a6c9dde519c0f4d6d469399d96a78249d1d1ea744127f65aa6c202e53ee1a24f9cd95a2b1d2787d6fe52b1e21f653714a6cff9fca767c02b7e5472fcff39d954fe9325a75610258d79cfbfc88220cd0d222cb7a201a17dde07c7d35b2af60f6b0a40d7f4814f5ab735b3b56560a69726eeca6f7d7d2ca5bd79fd0294fe9a42f6b9d88df0e794fbe76e847d58dab3c3f43002f8998b4aee5f2f454168a613de7df8a0b4bf40189ac25ba2fcf2a7e39f2400291e93b3022a154d1a00b30347bbcdede06286d1104c5bf182565455465142bd6954f2a5fcdc12daea26916f783e1372f4365be1d442bbc65c54df55a31b06f1ecc1fd7c3118cb10a59786ccbbc6901230e60a0df43fd26d7dba9601e1ea296a97d1394411ed49f1f467ec861a611c716f1163eb7a87f05e28f592ba14eeb26245918dfbb9ad5fcefaf11579f2267bac4b5c430590c571656bd9aaa579605a89f66b268ee22e092fafe2cdd14983ae3c79e0bd1b5add042a3a9253cc0d329765160f958a7cc121d446fd1d69055bf9b50791750359b69caab7c18b8970525962232f996e85c502067c1e2ffa18c23270246b0d83473ff31ace04073403a48ae7c6f69660da5bc01ba9d57fa53d57f9878394ecae539d64e55c4c563f2d96197db1c6568e90a866268484ab2c488db78176e5cea68d81ab1be553d88fe34762f344f8b71326555dc4e2ea7c05637bdd2337532262ef01cb5d1c90937711e0443bde0daadcb6ac3632122e024fa486596342193a1373aa6db28981941b207ab5e5fe9ea44eac31073ca9e8de8f4c0ef9f97d19d7153e7824f7f18143367e7fc4d34e063d33e159ea92f24ed21258f42d6521e6688f448107fbecd0fed10ba34d5cc62af28f3c4a47432cff4de4a2062baf3eaa2ae45048178e9e7523ec306f18576f21f75738a59e025499e1f2d4bf8311accbd5281def8829cb44c705fff155910f0c83fc9e354d574454bb3104cbc7d2476e73c4e7da135b514e881fa823888e35ba7f2609ee0582e9fb979212231eca8dd5703e44c0cc3423ee76f53bc5a65d88bc2a25aa3fc79f4b648ef565a842feec6c6446d68f59cbd749e2bf28c8b580e4429aa4e9dd37e14cb91a80e96d8eca5caad2009e83ef9caab94994e9aa34c377930723fd77bebf4fd7b82b9211130241f8319952f83888f49c957ff9c6f7389c1348fcd4bf6e38b42630b6012d80cd1daf388a02776e7ce2c074fe10bb8b9ae86839d57fa0ee572040a57b6e7b35c30d0a06975a30d6041d61837477c381c0adb94b60e976cf68af18d5525552b3dd9c8f853fe63827e048a5ac475167c6326c13e8993e8a0f818bd214571cc16050a33e2ec9ded02664e3b84311e5bdeb7aa62d53705122919e7bf5c6c882ba6a82b128d006e5280550f6bf18a2ae46f4b3733117892bd2fba131e9022dfb0154bc7371f7543fe31d2f8572f5dacd395e430fe2c459a3b5e0ed9ec5d213ad8d263c50064a8cf594330d8dd8ec60a3b193779b7d69ebe7c77e33b110354fb83e6ca03faddaa00c4309cefe291a9abc50581a582c5c74b90b9d4e1f0b642f9960850606e5ee37bf23f5db59a01f380b67177fed5347fb42d5589569e08fa43654396cb81746f4a9ebc9757cdd8e5edebb22390f979c0ae9d228cce9922160b185e6c126190d8c02b0dd17270e1907ee2dd652bf963163306dc9b3038dfde615b36e710100bddfd6e2e3c6318d32aba65f506dbd2f35293c6bd403545d04a5bc511a06ef108997633f5a7379861ccb6dc6e9ca4ee9efd42c52d31c249c190aa8a500950b36fa742f3806f986773e4720d7a6e4a6575d5c8b49d14d1383ca0cd1a70a5cb63d0ab9960f95c63969668a19ca45d2bc841194fef8c4a16238504197b153b543d87dd0c8d3b9d6c179e24373b5aad1b57379d1eed34e9a51e37d8afdc171abb09493d35ff171d6b46af1d634929d33f09624b184da1ec542ebb139b04ce88b91b5abc53be9309ffd19a6804cd5e59b6180c47c9efb6128d3c2a270522e95bf81c986878322bf867461f63291a4538e3202383f2cc2062bdee0aca5c549b3a1b3a55328aa3690f6506e013fb73996a32b52ec6c4059448958a4a80b8c4add575778fa99b7e1fb326596f3a38ee6d5d727a6764fb96e8e7be77fda16dfb3ecdf07ff79527c0b3799658e3b9151bf0817ef161c7a4cfeedbccb0f826d8f9501007dd5faf75428c7a9a32b363663fc08c312ab9152e117294d74b03893f32bc582daa6c5b0af9db0686ad368002567c71e56256208067b45b4c12c094aff04b94a988179b2e5341221e37227b9dfc43a19db3c3d5aaec7615e790f636707ece99cd6d568c6f0f8bd8ae5de9fcc7a68d9a8051918c6c2e30370ece35e920c98724d5327757fc9f471dcb470b061401116a2970cfb3805d39ec020c54e56d71d41a13e9f74a52903f1a23470838a5077f82947bb50432e638c0d7e4432acda6500dd02ca55e6fcb862b25fa1e64d75ac4c96d2739c7221cd7a9ee16af826abd4aa1094f4aeea4bc0aa6f7b0ce571dcf67540fe8ca5e831a7d8c1704419a82c72f4b98e7a72187d3f77b66e58c261df2de1a926977d2dbb5f6565b3dbed6d9e69187b10008b52dd2d578b8f8556671a09252da36f6988608baec908996b518a37adadf3b1ec5db4230a947de7f08be2b8fe596a9430076044a35ff053e5a8c7023e5973d8efab7059e1432bd3bf06979ac72306fa3e810f3cf87714d6b1f61a63f29816f83e5ce63e11d3e917f8f99614a64c99c3af10d5ec0cbdd6169d67a7223b24768a906ed524a3eeeb3a92e9dddf4989898913d9e41f8570fa705dcc109a897dfdc0ff67b04b0d85aeb103026e0a44212fcf6e1cab245d6f1653f817f3a83ec038ec0d1c949abffafbe49a195ba18f5119a6579afb5b6e8e65a4c631b1b9698bc3bd35a849852ca3e9df8a58d08a32139216ed75df01aba014a38438a5089204aa805422a4dfb35302742406d78b152029225d0bee83ed7103538677ff0be3a3c050de0866ed680c683b6e63782c46193085ea2150269e8c2ab92d6319b58f485a2bf8260c21367a129d8f00a402a7557db78116406f4934cc7c72d2568e84822bc3e9bc85653b8c1e6306bab7f2c071ec6f89cd91af00d5307802e65520a9529b3bf6161986a47758aa5f96546ac8b331d859c7f4bab0312fea6776b88ec104a5341a2a7f203a75ecd91c69d0ee26b1e8e9e4b11f53be8c05bd0a0e1e56137049658f3fc0158060586a2833b23f37f843960067aa9ddd029df665bacb86dbc1b010fa70437038ced8dc0d19adac171818e185e9e6b195329c7897c777218075a6dc0e2ea5c6533c37af8cf4754577cdc579b26de792647c5572ec6e7471a159df21d67b21242eb17667bab0cf73701b9d1e90e50c224cc2c60dde8dc513968ffc9565a0d356e83cdf0c286df8a5e49cf34c7d6a7d0c330a95f571178a80c510737c5c9951f7579bbcf030cdb3062052e1ce5204324374ca17a4313ea2d3ecd68659306c29c03aa884df88c752fac6c15446c2c93fead77bf03649c30745443e91ea596f36d2381e52dd26833dc0edf636e5d4a7ef0a9f72c38edea09979d1d4c2925d225ec6df995148223c39a85264f23da06ce1663e0d01da1ebe66fa3808a0fe952b6796f98ad490a861d8babb5ffd5e5d592fe8252d29c13c3ec75add6c840c61392bc5033c3ac75885a878890f0de620d699790abd5f15f89e9d7a65b3eacaba2343d677501b5ddab4c23c6effa60fc04f848264fe5d8aff111d9ad229c536057017a464d1c0faa8a81717794d1ef6e6bd9c77e22251a99204cf49e07619b608e46c33512664d283b20fd84ed85124a713c044d00d8e7878883e6f31fe1799a49253208a07168928ce67f8b8a319885a5c7059568ac613c81d2e7988f6f04a229c1903de4556de0e202b089b059a4789b378a8b8818fa251c52c87d403368110bf8053026e12edaf2d5abbd1d0d8a2ddde04488614333cbb5a4548ada4010c6072ae8df93e96b23e369f8bc2e2968e018323fd6a2e5bbfce765d94d9e86905635c271581812e2c3960863a6957a0b2e41aa067cb788b2c8744d7310f13c35812890e46315b896e353197743a5efda1da376ab0aae0fbaa9609550ef79f6561cdcb70d5dc1b636937e778ba59d40209ea564059fb0dccd847bdaab0e25f7ab21469cbba765c315245f7b89046ef016f6f626a9893515c3d0c5b0d9e658095a36408eb61eff025e1bf9879caad895369b3f1ebf3298de1729f05b075c918cdccd8102c22a17daba4e046b59616ad06ddf7adcccc5ea3088afa525abd875f52623cf4c3496a356853d64a1b84cc85a790df6a58d65a010cb7d8ead7dcc82a5abf02e50ba3d3ef2b6998ebbd9a69218068374e97fe353801cfa6a99136e34345a222f2061877320180fcc9c2df538ae7cc9a48773be445355033729bc7b1d9aa6f1d51017683089b734c0eb7ed5a0863286272292583c0250100a025abbbac592e1bfb654be7517b2c6fae354b559bbaf4e40fd7e46a617aa91c1f6a7bf37d08fc4392f5eb868bbb7bd823fccde0ad42f34312b447726bd68c196e069f0913e91137ee3051b1fddd1420982b8d7c4133342813f6fefce742ab9eae16c02d35b344623074fb9f0df5f35258a29c7294f72bed6464fffda0f17cc2d6da9872029b5bbe1c6991d6fa87b5cf2a769db1a54299bfd985e644c25c0dc2de7df72857202cfa0cde570fa1e730c90f6d3b9804f7d2056150a329f8ed743e6db89f88cdb20d3a92cf39556c31934e6f8bb18ec1f2dfc81e776640e6708358718bcfaf708da5097ca21a2c733db7ed3f2e430a07d527103dd0728620bbbca8e546b8c2f8b611189c2c6908b140309cbe87d8a6489bc1ca3409ca23b448c48cc3f38836980809f8f1401f8d21946252dfbc4fe95d1fe6c52c29c99b42fd0e8599190fe52d6e1653b975f9b070aa6a94bbf723a0d09fa5aab2c40dc3441b6d2cf8888186eb1e71d7ea60d66ac48cb70c6e0aa7551c678c8a0acd0b9d82b69f6279afcf604cda63f4dd004d29b898918398536551ca9a67ec2f6506f5cb29e8f93b7047621f0e7f111a14d2d2c2446b13fa11a530d5b89c08405cc44c77d68d4c3388f3efd332194480497fef869c24262dee38c79980faf925a8ead70a16bc291d5753422c6e71c9291cb08b88897039016c4270b3503b0b2ca7df9b5f29a2993aba371969c0e7edd51e7980025dd4050064d95b61134be32d40b60f57f1a347eb61c1097847f9e12bd49701a97fbf6fa8363d658318eac5579fe0af027beea035db76b15b013605c300b8bedb9d716a39ec11e93fd90d676c8e434cd87bd6ae1f6b6131109d4938afe92225243f1aa969f73dd58b7c12e8dfff58716c1510383f0de4a377836167a1bfc877555701b15213ddeb3fbf1085a062a210850ac3539bfe20a0da12ab49677e641c47404d2d74805b5c40eb32bf79401913c092e57ad067ed291f27d27e9d1708cc90be0f51c3bdef67d8c4573037ed29778f2415614527833e16d1ad94c672b5f8a8b25e41ee9c9a05cea28e63f0acb5e4e39edd939e8e547df0945f5d5035f838d65d28689235a8d0cb379de67d92f78a6d74d3cdd60af01dae58fa436b602140485d37de59ec78ee2c91aa3ff7d73d1ea462f33e94b0f7b3d609fe432a352fd35a6bb289db275941f787e6be8eea1e1a11da4d5a63bd3cd1d49920f93c1d502321c34e5e0195ff787087fe0fc8c8e5eab80644347005aaa327b025129e5062b91706b68937faccd89befa72d01c3ead05e1474e92768c52086814eed30a7e2bbbe30459d2f236d5f2eac9f6b60ac6154ce46830e26f0f5e63419298ae9ae4c293d6cbc2be5a8e789197643c4c83025ec210d5c8c9ac1b5a44bcd8c3f0c3205a44811f6764006c1f388f0b36e08c22bc50bba982237496d44e216aaff14986e317646ab5d8ae4709311d15e6b4f853f20b22f02a50cbc023486a960b0679efc2dddc6caa045d869cc0f31ce9517347a526887949fe14459fefbc3e608902a02025e21948a8b75e40e99797f703101bca685383385eb85b820ba8b3d6ca5129266218dc95f3240a6c1f3ae447ed490eb41961a5222b21a9d71895cbf5f0b32bf8798a45a3422f9512f109fcbcd8242e0865a9a6b4c7bdfe5409e396e247c51efbc230c614a2dbb904f36d43ae794d10e43ce88b9881843f01faa9b7372e51204a1eefc66ffad9405c18c0e186b9bad112fe21a113013831affbfb49942ac8ece43856f31cf08e995a0417fc10f8385bd5c09a93f014a1195e9dacbba7412a78734558f9503c34e4983b6e8c79e6c881f3794405956e683bc270443705206e6e003a5c2ff0338d07cc9b7419c631f4320848a0778961c15dd5cd80db716db8cd213cc2f4dfc1775d87ee7754a11feb4884630df467798a1669b261278a38201cc495f620c48563d56203d428356512e24986803bfde4e61fd05e0a9eb329b3b7c48916cff67e20990fb7adaeddfab1f7cbc1fa63b157803b8611c2230277bef2e97206732ba508dfbd9101d8afb551d07b52f26456d62471ebd54e3f87417a01c1968e72e3f66c142e49a5536b1093801013e9a7ed51072cca0f579ddd8f30df1245716dbc3de91a6b2fa5951d4f2bb257aa766453c447d3b834641dae8ea5cf9f0d44e14b88740c3c8778ccfd5954a58d54508ef921bf7358f70fe53513e0c0d5eb570851af669852add02972c738b57a884fc17ea1e848c706196da3739414a8f26ac5a912267e68ec138b2c3a95058d59a57362fb721f00a30d2ddee1c7533f9494686491e4ba5d9e0e0193f81a5c1b3ec90be2c191be33687254f22d8c60a2457403b520405924dcc459ba4a468180d92d5dc135c11867c04c0ae61d9aea359e13f473befea616f95c8af002ba14174942b22b9d831990494953749622e19954036f6c24fd723e3c654a2584a0811c332046579849018cf6cdb6627e711fdcde3019b8bc2ce71dfac1cf109f2d54ae5182e1766eb18202f4666c7f7179d9806d574f9e304dc03640c94f15589e71c6c4e9c0bf323851243414711d4510e85602a131622c7e99f5b25160371c65dfa189600c090cc5d2394b1343d1f94f535128837cde210e86b6a37d50bf675b7664c6223a11ace31639bc12b3d9c591625b032ff70bec7f0fce0173e090007859510a11ce29f303b9f312033d59170c2005fb27cc978555deb4026f37672a2a0baf396ce8641171704d5056cc5583faa5a8b5112b8291c476a4664041c149983be9f214d6577442c1784ac7feda8f9de7aa02324a69cc779be44fb24c1543991eec7ba9b9f7b3571af8c17ac70a4560dac3ea0a23ceb7c15220e7fb8c5fe819480a1576593b498180e2940c3b624ac748a09f3103761a977a2efae9732207cf109c608cc8fe76750702dd024fdac9c1e8e6a6148b67c43f108276e88b468843a48a814063cef2ee8374b4b05767c6f2338141b4695177c8af100c756b75f60e0c68fd0c68feab9c4796b78247e94575820f00da5e75bb45201e61af84371856758daeccf456fe14a9a05b52ec450e4b7c12410abe51398c7e1e0a0931e7b9e7c42f77d2c0d9fcacac2b8ef3cd9999725ba10dab5b838e5b26726106066b0174f4472139184ddfd7eff0e7561af4250a6a1e977a3584349a8c87c9f07f43c04160e8c9b457fc03588a468c068c8d3d19da5f26e84a78d4ee7e307a9f21f78a4ea34e8d4d2efec5c1e7236f0c2e925c79f2827bacf0dc1b9b2de32177dfb7b993e8a68f3bd32c3d4ee57effca541bf54c2e11e0535347a73daae45ba01976cfb6a2856634e091271c092a2dd0d70f8b23023f57a8bfc2616b741d77527976c739091c4019386946f72f6f374383b40a60e09cd657b61d30ce2c88238faf707feb22a6fd8971ad04800a434d2b303a8cf5ec9692fab1ec3db4458fbde87da70e2d98154e1cd199d3015ea05f7de79c151db8125482ee6edc95c99d1ef5d082c515c1141a94d01d239a9fc4270711cc78f885dea8444476b5d57f86a4fe9bf0e7a84702e4678b830bdb9a5f0fc0a9b6cab1f1ed55c633c87944b2291112756cbf7325dc2b0b413a08e3308b1fa50757dfd23b401a3beb23e206db2d41c045763287d1b7c2dff0c700e8def0d663a0a0bdb3bf071a00b692f8ac11017151f68d5872a31afa5f670ec132e127dc94f974bcb67567ea0f187471820a8b3c7d5dcfecbaf895ee4a65a727d027567b09ec7913638199d530e1b4ba5d99ab5a6243294da8c4b5445991db50bb54cf5bf69ef5cd9a4a87d2e7d1ecb743e29df4dec070432b54f129ff2578e292f807a1c31b6481eae63063e388746b423c25be61990b534631e1949bdcae27386182703238cddf24a6828a09a6e87cc97bdbf9d24e529b11fc8c0daa4452f47316dd3f4b4db1bf3c8c0f3109232cbbc79bcfb8961084e18823c20bbf2a2f91f96f3ee27c90cf242751fc12ae497e43e3a094cf1222fddfd56c5412eef736b39acc4757b1ab2bab79e7bf8685e49ff756f77f585fda2fd49dc14871db08a4ada8c7de1f9691c13ac17686b7f6362c6039bf902501d6ca691c42cc4249df6e4c893761ef5547a95608f1454863660c418f8ad92193d590b6b145c04f58022f95548066039b58e2d41720a17566d054c7868c04991347512ed2fbc70a9805b8ea2b34775c96a7022e480f8551f738ce44a623cd4d8470e3cd700027002ca79f2f4a4f1f9a139fbe765fbdde3e88e3e746b1ff1046f4d11871c471714dfe058c12d9853d66e59bdf6e5340d04a58c33a194c6a5c8ba1956f748a2e6ad86752b090cd72eb0f71a374ad9891d3e8c49f98050d6529a47c84e6847a883850c67feb6236cfa019c9e0843f7105f0c70eba4a2c173155f12f5d4601755fc3e48092f71796e5617806028bc3cb3ef1a63e8430051c3c3eb88e7945e40fc65c42a31f475cc26cc6bf95ea1882fba4f0921c4b3eff18462c02916547a1ad638d809c2ad41fc6c530f038d37d032a4a8a0df8753ba620ddb9efe88799b0bbce354487d01d342cb580bb7ea5e5d65e39115620cbdb780ab1a65a61b4cdb4208a03b6a3a86893bec973d2d29ef1fca0f0320356b3ad870c16c7bfb0414e101b6bd964532a3e4e753315c85c42fac501fd6a7f8a2f85e9e153532d86ab36f91827bc185691fd1276eca8e583110bd4abb3fe52da53cd6e364c2a5a2b68fa4614fd7380f66aca8945a9ec566106891e6fbb9d1b0d9a65f98c0bd00fc5915251117ed779f27d5f106bd21127b26eca7891a5a0bfa0c5052f38b388a670a769e9ad5bb59b02254d4692a7626d602376a43ab098bacdb5e75bfbdbe2ac2ba55b9356b0003416c2af87b5e080cc6bf9d0b5832347dddcbc16390533545251afd7e788c0611a6781ea05a7b47da0c7e9a346c2011922a85e96c92df07f17f07e1b3b1cfd73d0a65dcc2f7661247042859c82c1aebaa847d7205ca45a20cd69d8af7695b8a8b84ee85a2adea2dc6a76aa8e2e02607400aa44e9f98b769d12de1eb8b6131ca2e9ee7d99c1135ac25b044cf2be7eebe9212ceee95b6620e3730daf82d156d63269618c38cd29d2c4f7365630623910d25b79bd2419671a871da7c3cd6760e8ae647e78162ca86e0f2a8660418ce25782a2b827a0e9a12271ea3f86f903bad22a71e84542d7ea78b212f9ac046ae8591765cd01e1d6e85f71a97ed4f6f1dd0a2724ae89c2a606a464397eab0036b86ae4608c9ac2beec79688f258cb481488f6aeb5c1a67f00915f1ca98a09e771ec39a488c32c251c94ea824831d0c6675b114adb75a5be6e5c883ad587ff5711938a5581f626d19a86be7103fba8288273ac3185197de0828ea5f0dcac02e27df4eb2825e63991fb6323f98d22c35a24dcd0de3f2febd1233f1d9e0fc9401c2425fd8b416d1f723588d3ec45e6059ffa65320e9478ac2b106369e39ab77167c3c733698b1052af797136c4194d420d154d30bf603a17e9b17b541732e8aaccec35efeecb3507b0017a53297bcc78cd7736ac75790b59964b490a3d5535a0cf4ec5dc7e4adef41bafae162fd26f5cb310f35b748115eaad23ac93283d0bd03b20ad77cd2e0d4543c83b205ba05bd0eedbce294bf1af838a584bbe6f078ba4bb054b6d948812aefb54945fce4cc41bf1b26aa912237dcd9f8ab763041413488378827e0d0a5301c1844dead0494412d4e583055dc037034b0f441f69bfcd8ec5f828a5667a9441cfd542b0acd4bef20e6f0c572cd5926c5bead6c123205047ba90ade8372d6891adbaa1c405d5df910a16df8fd568e99debf65785e02f057c0d4e12843ef730214085bb5338d3c81b300f24ae70d16293a379aac8a196b3c36b6a27f7afe4193e0f8dbc48088d36b1a8319ad6c89381a2b217a57bc24b8d21b036d37c13a089afd8bd4cd4175b0f7fb03ea6e37ede09093c0537edc712ad1fdcab42a03079847dbb27a4372fa31553e3056a6725552c3e44807edc2fe565c2476b9a4b4e0974150bd03ecd1252f15d960ad872317e6219ff3bba1320608d955cd20fbc8d099a61729bfe084a1c7687ce2d89048907bef2208ed1a8e51e2e1f48cf03b8b18a481ca072a67be8472bd71ee4dcdd5cd5c9cfae2011cec270ce8eaaecbba38caabd9385c42db8ad19ea57ef5860ce98393d7171a9e34dbbaee13f6751cf731663b3179ac78e4e976144e4bed4fc5dd752ad02cc0b1c967d9684cc18b3db8caa7e90f7e2919130e7814a855d3ee9c8c3fbca14ac8ca3bedad3144e788be3f72ac12fd573182a662a6b730ff84f63ef36cad6330b6bbffaf27169fb6e8c06549166935748da61c0b8c7ac0c59aa9e26b86b00fbccea37e706d1251d437373b4b64ca9599257e06bd8445bac079b5dffac612e5b15c28bee676ec69e7d38bed80c440ca772cbd8385b4651b64804a4288e84299c09dda285fd6cd958ecc34a1d5a28ac2b3277f334c86238a8b4c65bf8f11d0ec16cfffc7adb22154180f969640247d972688c364dccc0dc1433bebd5e8fa5e7c0081d28be31913757cbaa245e9c8147d92977bc56bb57a5954af06ba46daaff88bef10fbbc92cb3c75b9261c5eae056098dc01aeb095428680ca81c0979e85baa91d2e387c92add2cfb0de01fb2baa6f0f53521c8636e59595257e88c5df316d9b10a444db05460ef549dee696a9117cca212d85f76500b366d60d6c630d189b9212160b54d6449255dff848ddcf220ee8cb4c828d0769b9262f2b59b3297d12b62c71e9306c5d26a7685a6e1e5bbf1c859f754b2ff2a550c9176045a132e613ffa710df69c70a45e1c74c984d404a67f919f32f3ccc9aad1894219103fcf364e4cb23398e275e5c32e72453566a1181bf341728df6837092ed9143b9c53fe1e53002ecdb06609e5171b5e4ac2287ec64591659270633802dc37c09142ad174b1c2a9eda2d3b4a89a4bdc72a8ad5704dac5563439eae96517d93aadc8f4502977ed41b0bf5effec60d32b9941082cbd11ecfa68cc041e0cc8e6d71d4facf5c134c929ea5c110690d3ea2ad8684c243b25a81b4e04dd55ccc2b0a3e0f97f181162c0f377d798ee4b1c902fe31ce1c0ce91ef64ef41d7f3a5a0fc91d7dd5d9f8f4e022e06e4b9f6dac48dc715140267f3169806c26b615be4bce3a03b2abbb19c142c215bdbe21a0bc040eebfac63f4a12d824b7e2295be8bc4f3a58adaa0a8d11c47c0e72ce062ac915fad7e11f8bcec0edc4d4628e590a8fe7f88a689d7b24e0b6e656a766291ba30d525512e796a925bdfc4a071129c80f7493d09503dacaab5a89f70e2bd3a5d2423d2e936cc48a3c3591aa1fb82bc5f11b8ee5a9c1d579f76999bb4659b53e9ff930f026385ae20734cdfd62342d5687b285772ee927bde266a0215d35ffdd7d72cf3514dc17996496f55cfbe4799695b33477d54fb2ac1151bf7c7af3c84127aa5e6ef6f70b5e1c3573748735b920772d2cd9afbfe7304a91af5fbdcadbee0aa5db5111702939f9d08b5a3045776fcad1e76b29de3501b97e422ffc257bec0f1429d10f23ac4a4839adf6c32958b8bd66d939b4934d5a3808117b8238ec030444333cec7f7f6edc23c5f2a415b61bda3e8e5ff16842401032eff95a2d491fd0fd490cfd74fe2a54623d8ff924749baa3a8df2538fb9ecb8daa94fe787bd055c43f8942a8ca4ffcd791841f3a80d0c5a35c36ed0270645fc90234e9f5f36793c182eedac4c438a2c4921793110738784bab114be766c70103845b1928d8a326c7eef1b6beaa00175c274fa35a95870039aa2ca655f2a844df9fca0a91ffaeaa1f47df3f7738a905b6661296f37f42acc59abbc790b161e4c3cc2c5f3ca99998a91a53be94597438d5b9cc3938df13e7acfc710a9955a352b885c8a1fb16005e19cfe9be334252e7819f46b1561932a536ab25f6dd6468544d3d7b8f9edbe3ff28662120ecc68e12bc6deb82a34f0b816fa063912c0c9fb8232018024d49a548f7ee1432472635879352a6d73b79efa9db03f5769c13d69506cfb8d9bda427271a27fa07fa0f7ae5962b20de8a6c5fa2e1d8ca48d1ced819e266627fe34484b501ca321d435e7008e15507cab59783f6e9c09c4f462ecf54e3d3d5dde119d2f9ddcec45846c6f26ee8cc9f4dfbd348cc4c7f937371440e40b83c488208836b92076e49734b94af69d9d8444fe23d049f8b85023b3d857dd4880f8f0abaedbd654ac9ba0311044b040204169c6c40b9bb0fc65857de3b31bf905396b4a982a2ceee3e737a6a85612656ed45568f4c0d21093809a1a2438a8ca824a12a3b6efbc2e498c084615bf3cefa7cce9a88a50f850bafb91697b3c9f0b97019f2b30d01f2d16849bab46495d2902922b19fa896b338cbcef0da1a62696bf491197f92e89fa6539221f34dc2e2dd3f8439c52949f063389fcf230c339170043fc71a94c40ef5cad0986931aa902e1a0ce006146857943f2b97da94320213c8b38dc158d1f23e595558955b3e0d78726940a1e8d182821fc220c2a8f79e120b54e551548a41431ba1d4c3a5e6032a39b9d4ae844a1ab846bc4aee8b3654547a656a34802c35351566a691c50d97e2fa3a249827be6e232edd66d4d3413c73f6f347884b76f596fa666653cbceb0cdd9be56538bc35d023339edb4e948a8db7ff576f7d2477a1866fa804121edc830cd4c4644e0c9f2cea8a449cb99b2c86eac7a4b43e89918021729ebcec7d249f7d14691cebcd69577ef8cd0dc4add99d9a40468865d091860810ba4871fae5413ec23483bc3bb0dbc97b7dbf90b08a0c891a44615271e4d48534be4eee5adb835891790f252e9a0c89c54480c33dbaf51296b4060dc80a4a520234c8130051501c63d66b8898add6de0bdbc9daedd1b960dddddc8221e5a995604c4ffffff18638cffffff1f7f4e915255d0d3bf657743ced3fdff7f59d530f3f4dd1225ad34abb728cb6ce39e53decb7bff7f8c31c6183fcebcd83be5c4869928860d18e3ffffffc7cfbbc2380a3d9f7eea1350fadab50654b733b17bde7af5bb254fa7a7342a5782638ae39961f7f276baddeedfe6adb8556a03ef0dc007b22b30a70e082f8bd592753ca86a8d5078d98d556f36846c944a856894d181aa31b3e672350ec00924f4bbbbdb80ee7f07bf97b61d591cc3181b97ec98e15892202f3d554659f6d3bbbb8f338eef4a6f7bbd1e8a172f67c7726238394caf0f6726862033bd26dcdd65b19c77d6ec8ed75c8bcb35c1106aefd68dd0a661560b67eede5245beb36261afd73361a4b2e3fb3c8133d3490856c6b0836f70098c31f67e77c6a864654fcec73839c8aa7f132bd6334dd2ca2cb21babde960d73dc8adc8a6f70312810445ca79b55c4122bd61caec5a11ad00cebdae26238b10b52391cebba5ce0b24452af0d0127d0d2b21babde7ec426bfe67256bd0fd07e77771b0df79f4a4beb2c594e9899c61174a44e67fb1e2b0ee9ce676f661e9f08cd307e0c387cd322223094cc60c8091cca153c9e9098e127c019f6c6c9d458b26666227528ff83bb67964d9122d3eeee45805d24d845845d6498814caa22be2ac9f7b673a7dd8d81d1acdb066d1b9b165318662ab1c2525b64f5fc541740697bfba7544a183ccd9c6686210c338b8ed419488e218001b24a463c7a0469b2a467478f20199569b180263d60802004f8b4a3d8c2776c3141f6575f56736a08ffaf7bb7776238320a29646b934bbd05ed20b931e31827c7d6d3f1ecb8ee3b54c299eeeea7219da72212f81774e6acb34959aaac3322f9d19c9e1ed51fc9eed6e93ce8da751964ba76776238322997a647c8b201db304801a011061740a80658bcc664140b1c0c7f1768c32103543ee3531306f642cd455ef0155934a0a37c7f5c5051081f00f618403a6063622d08a71ad0c1420ea922a1ad143186cd4ce350d205133d324d58c119465a29713561f96a24c104f5808a6686daac2246aa274b3d295c3aaa30cc7c551dcb8c01a7832a36338d21f856e89618af1dc87ceb78dc1d9e18bf184031841a030fdf6cd8e19b95c472a6d75c8bcba91d88dded3dc202ae816031c618e3f6eece164c389d45bdf92c1b6636ee10c3fb1be98334c15323a2a34c462ace9c7720a27cf0f4937c27c47801530ba1b4e1f28178f9500472a9566c052d5c534b251b3f5fb301f416c31dc80c8a16d038da90d1640485038577dcdd6d03c2bacf7cb304098386153ed8301345c0cc541ab2d9c952a714d3ddad4e19b67737c618638c1b7fec8a1893661a8837a7e7e9b879be6341680173a652588c85e83006d2de6e77fbd8c6bcac22c7054d94397aae9088a0f1d2acfb284538ebc6fd32f59df10029f4c2356baec5e542fc42001555a060d3c1343381e654f52a6b24f428df57024d4ffbc166c608864ba6674381989a143119f3d221b234f202639b8ae264e645ed05a3588971b14096a0e01242d1020b2db50fc3224cabc5728826b55950853c02f4426b3da5d2ccf9f35d45b9f2d0f20a89cdb31c687c860fc5acb14e72195b7aa1ec6e675cc06eaf634032b4edc48bb1016626cbc187075cb4049899462a3f300fe3054916b899e1ee6e1ec386998e31c618e3fc44bd0704e0a1e74416c0fa8159130db909801aa425a2820100495c19c11b07d49ea20c56001954205686070d60c0c9a14d11168158c046bd7150c68a5e28d03839477c47805fe4830203b51fc22e8aaab0004d46b1e8c9cd85e33b0385050bc9e20ce2050574a0047b46b2824e94194c2ad4d86ab0343a284081e683a521746182ed8748a34823a1c6624923c9008dda14a4d1846646b5b2a46125a665662dd4b309f9d02f018b51b184358a0abc7a35a00a006303d1d6b822f3a2234524fec8b8707296c417165cd49bad03e2777737f1474d8b7ae4128930d0a2212189580ba4b524a39f0be8ac7b334e1b556f892627871298f0ea91357af2f29a15a5d108318d9343e3808cf954506fc4d7738cfc33dc77dcdd4bb3b67194a651d6386c1fb41b67483e00042ba443ed06f10033d3f8c28366d29eb2f4f3994360cd70eaf2c1491122ac048a3d8c3f44585a5524a162c412a2b4c1082fb05215184c218870319cd8896662b0e51d7777b7ac3b050a7061d461c7d5939324cc1e5b17b8f5e7f4a70511d133c79042bd986f94e6c4d730b37d30531329f97132352685b2a048dc565664a6a64379a26d7d705a123d0b5f619c6de36d9b8de58ddeeb86afe606d0e646f0e686309633333104019e665961988955cbcaaa8dd08331c618fffff376bbff260011ddfa4309f39e46bd0d333dbfecfc2734a3b60fc2ff7f7f77c7186719eb94cf254598bce65a5caea8cae78db1f4e4e94884153d18795cc1c4dddddd6ba4ff485fcfa1ec6baec5e56a55aa5c779e88691d8fbbc3a3c430d3455f1f7347a02d6f7dcbddddddfdaf32faa3d772bec7aa56cb5bdf72777777ec68ca9e79e72384f3ddb5352179ba1d5f3fe77707a2e4602223813683a894a34a0c4defe732539322946183323126864430af26ca1d2e304896e98586414fc7062d2e1d234817171b12d6e94a11978ae44ee8112ae998d2c27270057d688c148b50a08b9814ed0d18a4b186866259c4824edb2a1541a8d061e813d336aa3026b28101caab0bf1921bffff4bb1c230134b474a96ae35c4fc57147d362d61cdb0cdff746eda4497616d015d5dbfccf55bd240f7ad03612ef14044220989580107a79d1695bf0e29d872761186994748479b4fb2310432c0a07f5deb24f894e82c535f3bfccd3a22d799d75c8bcb3141c247f4d5dfbb222c5aceafed58d678f4feffffffffff1fffff3fc6f8fffffff1172121e3308a601cc178d5b4ce5e732d2ea732b1fffeddeed013cb6eac7af3e0c8e601d26aeeda0d2f0f63bcfbac634f28aecca2e371777868388adfb2d4dd97f353262c86994895497be60c8402e5fddbff2393239e4c5da55e079c3278e50e41242eaa70d8b239bdc8964a4c4d58f4d99a145b1544406406443133d86ea48e17c76eb50272feef36bcbc0d56edae35e8962b508c8bb0c23013cb2622eb6593a0a7c646e7c2f09ca6547afa99a664ed76ed6f7b5ed0ca788707890f09b08624f862d1b96b82b8f1d258593d3fa01a2be4eebbd6db5d77fcc318e36455e75de65db5efd80928a1f9145202b324376fd794248565aa052497a1f8ffffff5b5a472ea9068f406dc775a7cf4279af5088ce0c18638c73ce8ff3598a75bb45aaa56664d82aba3850c2f8007f5eb42757886b055228c9851684f812a1858b9a41102d3699114323aa727552116376ea831924c63234c8deffff470c33935153363ecf9e47988c7bc2ded073b754f9e8c5823ca221915e244cc0884225858b57d98484e129956e49c6d08b55312c11b4fcb0cc5aa18115a3083013930a20120990a9303b2e702d73c8388d490ff9c22fc615f00965c34c54f6220a857e77775a13e4ff906f81b611150b30338dcb1656aad661b2c63bffff63619839220bed79fd6a683f209b9bcc520d95d4f4afb91697eb11c4305338547b10d7d6a06b65c66116857e25450c3359a48e92d698ca4ebcf2b7bb7b1586992f0a64f9ead5d882f86c6e3cb7b72f64643756bd6130c4309388165f2a066c8d4deb88c18aa0f3021c359965cdb5b85c5149d1aa889582184091ea754f13f2999e4c4b5633dc56586a754b3dfe7902aa0f2518665aa93eb07e7967c5c9922e050a823fc5a54d2173fc5c5e2b2fb564af8de2ea7777574170ff7174d0d23e7a522d296418a78fbbbb75a27cee1863ac74646586f1e30ebeee56c6091d1907cdf8a9e37177784e260fc18c81876fde657e12bdcb6eac7a339986f4706fc78401136f77dd5d1e4474fe58b3bcbd5eaf440d4f1b27c75cce4ca71e3d4b1e5933fc243af328b87162d98d556f2cca997924029c611b771677efcebe2416a760d145c291484f773bca42c80646365892b6edc05eafa762031e2d270b72661e2568594630656f6ff7073a1103183501d2c50741385964b46b37bcbc961f098047092890a949960696c8a874412ff29935b0d2006bb781f7eeda0d2faf9f45f1f26b2ea9474bf2c93209f474d98d556f542c15d29d0dead0d26baec5e59451ca296f4f11501d8fbbc3836cdf75ef5e65101e27a7c6508da21a4719fe8d8f1f7f7a953fc513d405128699c79a8be48893b723f1667065420fca1b336fd3ab76444904097b4466f9ba80c61323b4de10303518bd14313ea01869ab375a8c634a1914bdae8c32162b243c4e8e911f8699403623421e835a8d2c46ccf411c3cca4ce5414eec494054b534497a9feb94618339e59f64e78e750e57ee68742d70aa668b2926d98d92810632c270e51337caa1d9bbd687ec5372e2f1a63053f2ac8317380c99e425adc36021607d46098994a6d32c6c224f632e499cf3e8dc11976f7ceeb4fe944d55b939455c7a0be48024b7737cac416e5ff566b4553a8bcfe86de678a1e91c819c60585b898e123c119fef624ebc22463247aad576fa88d7b7e190b754e69e51f7e679c6cfd45f96f34833a64d98e93a9b19c32616323b266147fad93083dde855a81382cf411869948c764f7ab7dffff4775ba77db9dac03b6144ef7eeee2b440c338bacd7ae2057fc884872e18183291c4184009baefcb8ae811e60689505b63e1b2cbbb1ea6dc86d76a84066e9eeae2236ccec9cb6b9753fc6054e4fd1b3c4109021262032ba5ba656d0f102e6ac9560591bae20c61863212bc4e56baec5e57a82ca970e3e90a420098d817e3420a00e6280ff4254605a15d13a8580745539330f9877775781a522abe70724449b6028e727ffc700f26a11be16016c11c16e4f5b2a8f21d5725e015d095d0d5d155d7d70771760083b3a29ae6bf763383c3baf25506b566e9c9c0f7a1866fa803a1f04753c3b6eebbdf5dedebacb4cf4af41a0bcd08255d9571ccf8eeb7a72f4d0a2b1c6a5ab981baf7148c5bf50abd1917b9f3b3c4e809c083919caee16cffcd67ecb1a899e87c0f06bf2ffde66d6bf77ec25a35e35bbf76fffffcf239addf7ba736794ccf9dbdd1d4711c34c16d9aa3894be3e148a9972f43e67d86de0bdef314f8d8ab47072825805c14a11001512ac8801c481cf122041367077fff42aef8c94e43395b3a804cc5f88890602531a040c4105821c89d2daca890114800815b86c7cb48c704818908621414034100743310cc4500883300c04610c4801395199030261bc0890efb4e16295ed91b6dc31becd6486ca33e107b16c738aedfc170ca585ac09cd2c8b49234567d74fa149a0189d89d71187e9a0ba819368b88aefeb499d1cfaa501833dabaa99d361406772b2427b53015db2e9c0b5fb413618456c43ad7a5bdf345e7603cec7378f4d96669bf068c4212784e54e8d31a7bb7f372042152500b8e1ebc561536a409636153884f7e81cd510e1ea56cad28901f3a30648017d7c7b5c0b8679621e751d4d82592a45ee3348181b3f2a8c81bc701bd4bfb6829cc5fa0eca84777f51f6a0861828d3079c809369238bcbb46a32bf2acd012fbefe23a341079a4bd1452245a253612755377c9dff2dac8edd101a068e715109c37aba9f7431a4e23df28e8b4fc837a7d6800387308156a52218cd5bf3072687faacf8efb7992f0cb921511b689c3d414dd72c19d52ae0cd3e942ab04854c35e54b829cdf33c40fde8b372541e7e663d2110a5ad20ac7190499f30d9d25d5fb13310d5a2808eea2ba9e39b5d61e061405463e339503855d5662525388a5eb37da40aa9b2500e85d722b9a2bb7ad385b76527f7be044d55d725e839b48ce71442a9b9b8aab5ab28c0c44e9e36faa5b67b7762f3d232d0f8a80b950aef03538b942844f2198ae17fd08b3241a0ebec2adc10e354142d5146c1cfaf2c90fd089108cce8296fa9037e335aa08e6bcbe0f2e1b420f66720dfef9ab5f5262ab923debf1aadc961ee017c909d0662705d68303f6c66f6f37326b4aa6eafcc97c590713090d0bf9cbbdb623e003874b7f74657dc766b762846d04e485a3440cbb6593525b5c310d94c28d9f49c1b0dc08b788c5cdeffd7071b9995ce795b5e8c1cc16b318500afcd826b2dfdc4ff76d0747b7ae8bbad7279ea012a1a1b5c681565a17cb1443d5e60e84d0395ab1dd4ae2013fdd9ea698c5bfdac0a6748e122b352dc7c318d115d6e5b5a1b9ecd7616b3a7a6d78288d0d2f1f1abe4702791191ef92d6ed370abdc456b1d590e18e14549d65da6057e9255f07a628737c5ab83509ec95af01f9ac41632d8c5d713e16bf1c9f9c97cb9d19cf95643564e609edc4919461fe0b6c061e032a49dbea5c4b6cb23cd704b94d3986908dda91b26fa0cd7b3038791aee6e5ddaf5c7d064222e4fd1a05ff37ab36e1f437420a718f3f54f10941df291f854d963d9f826edb299d7f072ecb69b68089f06a26d8830ec5f33c8ccbd8620f2cd35b3b41aeec4492ba0313309fc89176846ead75c0a09255e4237463f56a74abd0cdf8b22a053a61eda1d3faceb42a74d2ea5167e2276d5cebbe5a2f20558fe958dd478941406799364c83350c4bfc62d8f49f001b5baf1dde002820e4fa6b745685a28c8177cae8467ff3991d68440418d1890a62ca43518eec6c1485d6d2b7d63f9f48456e021369ebb7af4b4af8cc63cae3b8dde12f8168fecf0880eb6366e33f8b1825d0985b97b74cc3bdc8e80e01ef1950949d3ae7d6b97619faaf1c1218debd00d774229988da5c7b8dd34e7a0740bbc760ea88a4b8e9c812c3cd1e2c648a5894d882ffaafa31808d769a6de48e6cde4356d7875c9e842da2061da3697fef244a4fc27e84e2a3c087aa11ed3987e0dc726d2328c77bce6e7ce6966d328fb444d22947cef620758a196296a7cfedb722b96904ff7b6e88023fa3d031c5a2818fdbddbf26dddc202f1c39cd40a4f4ce735d657a74fe7b43639c9044414d086524c578f9ec7ac58f2a10113d890dba377e35ce724b4940049d49eca0d6b0d1d91f14aba759cb7b089a55aa94cb12c7b9dd1f721976ba975b40a2df805e97025b6c92d24d86396c36986e16bc87ae607f64f917e75859ddec24a0b89a80029befeb323454080947c3fd4fb9e93534ea2c167f959a306f69d220a527af293de32b39d3b8aea3bef039793ace0a811b4e3132e0f2071b4077b33fcc1c1dd8d300cddf0fde757afa5778f8297c99dbe989946190b37dd06a179fac100dc51380fa0cc24eea5a41efb492edec6f205e71b1c70e3c852f9d29d809489f0266b280b4b7741b9a905cd8456db7bcf377d9e81f3a563c729211215e0f817524ee169ec34e347a21566418e549304b4ef581549bd813cfbae2feadce34e939b0cd7a4d093fd54f0e11240d527d29c461a416fde6dc6f47d2a694261f062ebee719e37e4ecca58ac1b701fc040e67ff886610071286f89bf12cc8456061724a1a817338c15afe0f791d0a05e01c9631397b1e025fe98f73230f3a2a146ab197659e8d05908039ac3e07b0d745aeac92044e4534ff454c27aebdf11fb2c8403808d446026c7e6e571bcd4d2fbb23fa28311b96132236b2fc2b70429f18060fb652c722b2ffa16d56995390cc24cd67e94b1906e4ef4ba39e991447f575da60300c7aa1b16aeedd9926623ef8ced6bc9f36bc4f17e460ad4ab69c4a3333e698306e9a667cfaeb9d897925b59b0087b049106ee08e111c7c2671e82342fe31a7068aa61273e1e489f3371475e28f3e3eaacc00b8e5a8495bde8204b2b5e95c7eaf08b2d5cba677985544f06186d2cc59c5cea9c889589ec8ffdfcca75235efbcfa5c217815d0d1a4857c9fb3f75b1fc97a18de4372d45737fddb27d792208a3e1cbf91983f964a7ee52c388d236cc28524a1fe988072c2cbf21a2c6b4d8a0cf14e818ea4557a4ab0639db31b10c24080465d5eb03f4e3086915ec7e03036b5d568133b4523e1a8870b838271ed39894d7968b93a78c77388c771dc7f599d80baa88e4fc569cd31b80940987d896a23824903112b34f4130a4905c1156493b6500d2c7c2454a44244d209480bbaa6ba63a5c0442ca28291d99849ac1749b0213f37fc72d0d8102bfa710430090d92655bac4f518851eb3c3f982f3da3d59f189b253255a19b292d9a15a8a3186ea9d52974c740a8320e6990518c9943698fe6941f00b48c136146678baa92472a1b96d805dea118cb917e1d046c27e466f01fce2f81787f1cd16043af8bab8c3c2aeaa2d29b92e58e5b895167de2fe599180b06492fab2b536678d1a665a79e9d16272287b93340bd62cf26f4fcd25ed35f0c74523834b728c10a6570951107d6c5caaa45e0587816ff0e433ca955d1249a03c153279b5fceded141a4c002bd2e72ed439d0b99ead43117a3d9156ef7ca9e3a77dc2d7126b5d63ba7825b3622375be832cb67e4aa684cd26da03af0d82761c480233a8b63955d561cd41692faf984b884a3675177c13c0179421ebba5b35169be5c2d886b036753bac4d9aa95c1b5fa39d0e32c5902b7deccabb86179429765596c2456e137eb43bf25aaf45edacfc46aad6c4c350c65cdab37674b2588a17fa31f465f910e051fbd0cdf1d6e991cbfa91da7de30cca0a6722e620e37fa4d8131d5bd0eff3bd9b8e424a0178c3eafc8123b375ad3c97b58a7d959a0aa20eb98142b5c5fe8bbf10417b5e6ed73be0bbfaf83c3d2f59c0608d93ee6d890c1036d1863e6136ade2e36cc3d37cee336e49fd888b813834e6295afc5b008561ac3c8ad744df8128300153b7792b9c8874d550f23e258a3732a4f36e6e43e4c99045e98581fab8b045adfeea24a118d49809c57576fe86ee85aa6d4128db558aab7541c9b8cccb108d6981027e25d62574bd7dfb557df8fa8d8895a3dbf404bff4b05f893e2cb72597cca19864120875b747d4965510d26218f392080be5a06cf5fc3e3b4a146f13d84265efce6ca40a378ab6707b8520d523a4034e306ac3228ed077cd999542f1ecd2ef02c3f4b4dacf80cc97af4738ea25c9fae6f053a3a920357893c8b1dac2739468224404f66e70a9841e2f6adf1883ee18bc2f30b9fabfbc02a2e20112e305afd7b428192cd356200f4c9c1f963a015b5071b63b065f7a632e61109102bde0668f1a41fd8f67ad40973c4b65684051be185c6f75bb9b8080ca6fff72a20dca0959ab162bafc8aeae78eb98919ce731ece3095202777b508ff037d2ba66aa3609d0fedd8a02f542d749b6c2767374a89f40d200f0e69d357c3c98855bf844ba04e13d3c962a9e4a3bc4e297afef46d851ec20f529adf107099ee9105930f418219141cf1aa34d26ad42113bdd99425e15e0a9725075a9baca74016151c751a9b1f10d70a81b8fae426a6ed83ea480ad8f70a769c8e21522ce058727a34a9306fdc2b2efc44294fa5c56bd50f48f73852f870a04acd10820f5919b9500de6425c670c7486c99440fa53e4d26ba6133284156bb2e308c0f774b8cd3d872ea8debcb67ec6d964302bda8079b6b5e83c4e6517108415a2da66944ece74ce5c44541ea21ab5721b44e07f860a00fb19a9650051eb804395162c7883b5782b7f156aae8770c59277044b589b24cc3716b387be9d440b87a4c33151928af28fd13cc48d33ad915d068f9ff8e8890dfd9f2df2ec6e0e29240a984a272a8b29c51fe360eafbf8ea3fe5aa0274f4bb19db57d6ccb2e70b01aeeac93e70eb48d27203a113f1bed4c293a7036fc25a91c00da18656c548612ff00566fc4fe4dddf8ebac55eb78a106fc4c4e38a4eeb215abd6a3b752f1621a66ac631f1e5597e5a79d744de0cbc35a2dcfeb832db4400e87465956d41ceb3c3e7f54de88210c5367c04749ef979740849e88ee9134f859e066d9c513243e8ce04683280bb7b3662d00d11159808a1c2264d2469f872b2820a74f21aecb8edd78ceeab3bba03746316a11d62a4b068ba8f13c74876246d381c626262585e781009ddb340577808ba8faa7a82b4b04eeeea3d7a6fa57b23dda0efbaebb803d510745036ca3b08ed6c564fc3701f93e3f2887804a3df84b2d2264bf599996bfcb76fef8039f9eb250d1946c3dea799b553a246cbc55a43686cd62c63193e5af61a75b68327202652a1f9d1acd0a538c9a4344c45fe95675b98e4e26cbc076361601dd61454fa2b30c5d504d3b240acc4ca8ea50948c365c530ad785893c9be3a0a16961bbb2531254b02e0800bb3c1c89de8a5510b2a1633f55d36b1abc61a2e0944892859842a8c413aa4d8a90593bbdf15e231f2f5a5f07615867062a53911bb2f29817fa5cd10c6eea37987a50d52c9c2f4990a621ffe8f221b2ad81404e115370c83876a1e9cf6790c55014da6f6015fda45576d6a7e0a4ec42d0111cfc1523e525deb53920b111ec2d6a52973c43ec7b9b42a16e2a99a03ccdb95039f88212e5c9d64875de14bc118d244ef5ff26e3fb32e4bfde632bb6c78946d9ecd92f26c4d78a2ff73084c067661ac48dd7ba9f361daf2efbf11d4e831b2a1e03d31c2f5c0d50b2d1e02c44adb5c21ecfab699b140436e8f717bd38c17e84826d8d0d6c84d41319fb23268082dd3944c20ac894111ab8707c7e76259ea81121bb3a7f4b8a210ce7a25823cb1478805cdce3e6c6bfdf851d84400bbc6e7b3fd8663adcfa02342a6c9d178c29112131184efaec7da179d231c68407b6679acdb628ef43ef9e0e8577c94fd4c07a4589f12a97711a5b68956ed2dc88772f5d28bc6e28d723f82e7a49ed195102cbb11175f6b142d0d6326200c2b2a9244528fc728ea9aa5f5fbe29905603b5028626fc3baaa335a397a88639e87f11d166eb51c0e1dec603e2d7a27e4e17acd9387297b3e41cfa473d4a09877d1f9af7d432bc21a48803761d8bfb4ca530aa111bb3de4d55233b1d24d5ffa8db7b86d89867f9f829e31e7e20d47a859e7024db45848899d93a0ce92d854582a4941f5f1223ba3614b85b014092270b91ffeb8e17141516abe4f3ab83dddf5fe70a386f6f6e6be3354e1261c3acb904db3da4c77de3d12aa6a07388300530efd0fede2226305223949088608f66415e92c823d00759e0b04baaeee9f04a0dd6b8dc85bdea2eaf8ab3c71efafcaf2a54bf95cd22b90d475b350ded4ebc51d09ce3d54c3a8fdb1b52e4204a31d71c8654083250c3257dcdd4ad0ca71879502aa7472e21d03adf771a0321474f5c94f6093928b2959284f6c1be361bb155a282bd2534116c27a6d9849a0921aa9e5e94e1f2e5fcb3038dad9d588e44418572438a8033b878c603837827afaf8be02bae14a9e4b6a22023651483272b5ef0d397bf019c6f78036b7c8a19d38cfb714e9ed5b4e96bae61dfa93aabee011347c83f5f0eda9dd5b10a7fa76abb16c74a3656b1c7dbac6f34e16d0aab77f4bb873e5ea2f37316eb5ad7a0f14836e95833a909ac8efeea11c0c9ac2d97fd40e7449edf045ea4f3510e7aef078cd24ddc887a695adc298b0ba0d4495188bbc3bdd8ac44877ca9db807711990e80ef6f956a0d4bbdb63ab1edd1e124f4e280abb47b37e24146aab4bcf70492887ed29ffab6fe11dd8e7d090d8e2bb90f002dcc417475b18cbb68b18165b966e92ac5d2622efa11cd0a4f01bfcbab96848873d9be1fb771ed375355df744afc84018812382ae402a294b77cc45511d8cbc8f5398404f63cf33eb8053117bf90d225a671e497ef1df019fe17da0e900c8f5b4d228f0694145fbb57818fedea62b5b6448a6b4574b999b3cb2bde7d0139d35eda59703c4904a1e1c1c5389712828e0808a3957b3267db3c0ea6b3b7e1f453149b60635825dd7ffb7e2eec99254e88405d82135749db8a52a690cb4af7c0058d00574ebebdd2db35a209ce02dd649050605866f7377602c03a43294030f57e69eb04d0081088a9ef1d4f4060a73910d10eb401c550cf3d2d850825e542390c93ad7e1f1265a5284690a5b4d3281cd4e713297e2cfcb2f097edd011c65ac56a04f150aaff3d3c1604b594cdd3e2e56f538989c18e0a733b862a3854084ca4b90a970af6e979a177be89bb8ddf4df81231b5c846c67c2b01c5ada0d104b408dd3a78605ab77e562c3a96ea5907bfe6ddcc5f7023eecf8638dbfb88d3d0a10ad1e3d31d7bf34d0333f310ed4017b66175ed5baf5b0263100846c0811d7b792846fa035466d128a540be5ba93e7590f559a0accd3f13a66f14d39a11050981a611e1cc300f40bb7709a3ea93b04c1afb9752b9e0fb2c17812139246cd1da69fb885df4c70710b3707af6ace756cac2d3fd44fd7afadd773ac3732c2efc742000d84c42c12f44c05df114d3336a576034f8b7065da412f607b3abfb7a19f97152dfe126b6d92a62de8daf9ca4a417a9bb1ed6cf918f96afe60142caeadf7d427d18d2cb74c6f2edfa04c5f17a05d14800f86b220824c72a20d9e26ecfff15c03913f26f166a648a4f056d2fee61a053243f6f6671e280a26870f52f93f7e26626f3f4e280a4576dccf6722570c59e1e0f8d796229b9ffda7058387a216681a40d5a30659e7ec47d1d94f8b39f2710da8190c8b007f4e1352e70c39f7f8d60432474ac125c2daa7424447f646d9a43318ad018bba281f4c88d6a683aaf261eb48c1da70300912a1eac0565b4234384ab8858912c03d11e349e1a79c4defd1efc5b0f2b379ceb19262f238f79618f54d97a89a6bfc1b2a1b71bfd5505e501e3405b65ccf941400f50f7bf40cce0932dae5da83d4443c808648bb0e14c16aec2744a207ae588770657ca67221ba3aaf0d85241fe15f4c4f1b8b24391d3c1de6a233dccc5f7d5a868676a2647a5952856d0167ca7a41369a6002d88df70aacb02b42ccc68ae6eafacb09a810aab4d779df40b021cd9fe5b3621155f805fd47a6e0dd8aa705640d47aed95477bd6fb5230d3224560cf817c8aa40e245aeddd4f96ddcff51358939dbe5b1cc5a753b273bfaf312dd972c00afe944a2dfecee0e682cd5283298ab34ce9b5d0e0a13470dd0bf2b94ee7b19962dff3b5f20c2104ebd7a8bf3b7667a95508fc985148957706d6a5f846e0dbe6fc16fd1c57f7aa1228e50778cdcbc8c9c3b8cc43114821daae1724b936e784860c3259617f886e29efe6d5ebbbd0d023acfb0f1566d783109ddb3c7576e08ba8f0ab3a0d50d92012ad08df5b7f3dd802e08ac050b5323fd7f231217ebb0277a7235ad3cac28e0f2709d0b282a41816e2cb85d77137441f082f0663eff7570d85697996aec8815d36206a4aba07b88f6352d70d82be0877cbd2bb33e310b24123acfec5dc668d87a3d6570f741af515d578d06487fef8a3b26408fc2c30fff59bd70c7a255aaf789aac39d3f75f2dd967cd4720508088d79e807df1cb4c39e717b3ba65e2c869b1efd08dd5c86fbbc5de6bcc985a29c78d6cddf697ee0d6db2e120aff1d3bcd3a0467c73142281b4a689d6d44a04780d9c7c9957d06330b60992e82831835e63f9e28e42127a9fc61882b0578b4d7c30b01a234f6bda5366516f58250a00e91bbc3c369de9dcec6bf95f493e4e4374cf533d03454320f3134639323e7a045c44b30c3c28dd2ffc95537a0c3d1e2ba1e95aab427ca673036494305fb58d931f833c0746564f0a85e6b5c969ccbe63ec40a992b6ca3fbed4e808b25e934cd40ea27befed110a873f485ea02250f804f4ef41d3569f46ce29c23255cf4828b574a8d8b6fa6efd0c947c8077d924826b143a7871b87fa29e2b75a1a7938d33d25809aec50fa1a87fe33b200a42c813226754d5bc968fe6f15baef2761dbe28676646d744e56d635f4cc51e1b5c7b342332120bca097c0f6a0c3640ed4a6e82f997e830a1552444ba7135336e77533192474cfcabdfaf8982169c13d6afbb7d6e59834888d8218d3620210554bf4a59df242077f6d0674d661d7e220770edce906d1e7052e73627bb9be10e66e998cbce3153c45ed016057de6ee6cedb70d73d7ce47a9aa51da076f0d689b23ebff4ba63ca21277e426682df54896def8acf1251f4301c26f7d41d1e84bd2055d4f22c27a53a01cc2034e03240c2126d1ac64bd5b10edd523389c6824c48e054ca18365a1f50ab94b95328109c204f181412a317835d1a894546008ce4d88ce72930a935dc2a2a46eb92fa3d817f21cef7f4933141041007e7818c3eec68fa29ce059e48bc8d981ec7c2ac961b045f5d14bc4308a28c5407ca2929dd71296068d31a0586d8caedc1318edc24c39db1708228dbea646de93c09438efb6b6de37cd99a0e4411e5fbf558de3effe8435f2f962e2ff6010fbc167c50bf531513b2431d03b0d0f1bfe8cca82b13582c309deca0666fb39f3429c22df20dd30adee36356abaaf5858902804b54336c0d80e78944eaf9d8971c568e561f46ffe59a8d0124889b299e20e5ddb7bcf69ee65b09f860fd4df4f876cd4f8cb9fb164ebf1082eea1a68f570382e5879ca4de17f9e6032652a093d696028ca6b5ffd23d73671f467d7ecbd68bd759c3b5d51549f8b89c4d015d12a2deddccd339e3020b2a74688ce90f1d4314717eff0cc5d9eb03002de1fa2bdd0ac1823689e7cc9638746f4e72f0e3dc0bbc05029c949326432fb8b11b82238c0ec20fc7750764869aa66e1554b09ac8e4cfd4324f3fe6e4f263f2e3e8263aa5c4c3f4059bfeecafb302654b16a85e0fa11a2b9b23734c736a0b3709d8e142690b0e428c26079d873634495ae94dc5f930ceefed1332d956b8220634b6c4e3f43273440ce6acb7f1705c058f63591a223bbe4b935c889050982ea94e9b40d265568814d4c9add3312791771cc3a7760c9b5d18a5338600c26f45cc9e52f6f7bda68fc7504fc0d4dc004068d695706ba234d35182367e952876e8191e2e3abf07e82c277d9630a03cc22c5c59e06840fec397406cdb18c6f4443711372b880f287f294641ce19246660be7806878e85d24f1c1c564a6f70e858a8fdc4c361a5e89e8394d05215e61ff4882fac5ad2c0aa3d6fb48325117b15028229998a5d2a2d15d1dd9f658a2b8112579832efaa749133338418cca7de6e26abf4fdca5709676568df8cfb606cd4224d932f3f4a98da6af3d37036a29944c58d2fb1efb32d04c84db00056ad4e44f787e8099f9defe6259662252ab68457936a984efe2701ef16159d0205a74546e17d4631b600318877d72793e83d5ede9dff25eb56956cafe9186bddb7749a5098148130fd04f8017d97a01320c82271dd649fa6fba2987ac8e78f304df39cdd3cb5d727a6873fde44eac9b00b6909f54a19b81c263e43c68b69e38d448c14b9a32f41ec39a3884ef0d537278e10bd56334dc83646c3d98e390205c9032c4a046c51b16f27c3c6f6773c3da82db51a6840cbd1d7b92b193a19f17ba199305d95fc9c0b08b2acc30251d0a4a66f9452274e649be65eec14190939b2225dd7866b070ca3bf1612467e7e4d8a83396c0fc7dd5f1e397e833109c39d78d7c93122a50605dc99407562e1e5681650e1580d0904718c0e221895402afe220bf9b3c3fcd2eb12a1acd28ee50499e67956801284c2c7facb8a76cbcf3a1749ad043206ba4d67a58023b9f69d06cf6e1190bec910a2a7ad7b92707bc9021bc0a145c483c61249d27b093f0a13c925af0933ee763394d926025ae0d286168bacf7f3991d2a91a256dd6e6e6cca8198096e1448f0ace79e20cf711cb98fee69172f184c0e0537a7009ce22e7f8f87ee7ecb0be64bbf15c4a675b7665696389c24c9141990fa6a50d673a2d6c65127ac81f7229b1093e29c878f890de802c5a73e7c853c3d24d16f972d23fdf57a166653b5cb1b1cb6054581655404ae3c8fae2bca3a22054c4216cf34a9503661665c039861d3e48deae5027b225cbb52af7b49878e4100143edfcd08168dcd8dc98031a76b40bd240565614c8ab21120d182632ad8faf23974f55ea6ae53307804e1ecb45db07e9e8c7758350e8208a5f521782a19a194da09ff9782abb0a3ffc43396d657b7f320f560ce1910b84c631dccfab4f76517cfd035814ea89281aa7e49ff2ab9879abafa3adcd8832032d161d4f00d9309f05d3e8ed00006d523c3178472af55eaa1f0ed831383f83104786a05060cb09c9061953536928ce241562336532c9c2b3b28afdc56c94439a2845d9590db799edecbf02802329a30de7ce83f6d1734daad25f4f32f194a05e660ab8a4a20070b2f2ab1d568c983de579f5283a21777171dd8871572080c7948daa852d1b063f0571c1895f8e6a83df592b1d990ecdf890f52522f0e0d56011389d7f5f516e51e25e67edf1edd75a335d4ff5abc7d77768e51cf31c38474a041b58f85f3802480ae257fbbea5a8fd57c74193ae944cae7641ca0d3569d66e337f57f3841c3ac04f2e8f655a2618c19eca454659fedac95316b4f714a8026110c04645ae0c2a47e32a3877b2556ad4406944be46c5ce046b7c6e91157a01909995355ef8f0b2e32c725f7a52f796f276e1fdcb185f7827672697b227158205e4d687e5e23a4dc6622fa8efc9390f1f12d93748103c46aeb15fc12731742b0cdd90c6939f1dbeaa1d0b2d0d043f800a62042c71e7223f3f08380358f73140afe435b83aba5056953ca6a81bc1de942be35bbc430c50389750de08c64c2041a8c3c41408246dbbdaa2084d9c6c308afa8651343560c04421e963970c4354200334cf861458cdddf3e43ea97bef0bc12331c1bc4cffceb9c0c7a6782862ae2464b4db2f8cd956146c1120c3d55662a717f891e55ae254e483f5ade5089387beb69f6494ea8b1f7b67a1ccab86cc3b4716cec165bbfaab8fe912fa11567c411bc092d1bc62bbe9f98eb1f3021920dbeec13a847e71311880359fd564bfe72d7f5e39427da2ef784dee06e1718e3df766d9aa47cc36e3368f342f74549c5ad5603c9cc4fdf57408e0356e94290eddc67a01e0043dd5a49d62e05cb4687609a23c1c0c68e340a55e378690c538b840d89a7abddee008f3c591abd04cdcbd1890edabc4a4bf625ffa27513a8f02e359c0e8a46ba86d7d4caa5280a0bb39736849d7f774fdc9e5ff2bf59cc127f4c3b2e15267883730327b52d8d0fcff420c064adece35c30410d968af62d3a999a733602e367146e1e73974f9001c94a8c8a5c01d161d1d56cfa8688ccd30668c9aecc12fa3bbd5e71c1961633e9160d68fc27811c9a0f63f2f665f6d5ad6938ae5ad2f016317fd5f0ae7bbf30d7e40e85fd73209b036288f7f9226942122adad3121e255390fe290aa5f89d0d7726fa51eb83f4c44f56a9a4041c72534f42b1b0262d855f1a77d7152951a031ed31e1f083a10d9d304871054728add348eb302023287a0da10c38986b13697b8105ba0524206976af6342cfb92887a548e801aad903b803dc362f7bd8da01128f86a7e473c81a231d1dc2de848d5a7b66c713479c5533762722e9d26adb69d3ca36486813cc9b23c38555f871725d92ba3f13fdcdf02b9989f4361d263a5773e240df40a6de3ec13fbc45565a2fe23cf475898d61828f2b5b6f290816d14b96e202a9a297c44aa06f40528b33d41a03ae4a74eeda93a788ab1066f4b3c0c315711225cfa59f251f3571358d02e763a2611487eb263a01be3d9126cd608cb2cea3c11477e0c0f628a58961c4510ae04c7f2d84614575701b80fa03ba3951524d3c9de47b0d7a9a404a7529950606d6a9b23f26a31bd01d7ff1d35b96c25623f50a531ef6296a75f4a18809b64301fe08b6a4901e83eeeffc4ea4476197d43f42275f97dc91df19db30ff44f09d12c0fd953944f0bea55f163bb9827991a839b6c865b953b29c8e3e83c73cb17ec681ceacb74acb1efbc59696edb6b2aad8e16f3faf8108d56835efce56010e17f9853ca7149267a3cface46f3affb2416ff54cce96eab017baa66a4562fb36bd745470bf1d69e4154ee7d4fc70924c66224be6cfee3b0fcd8f142c3c3d67c6a5a87ee103a031fe9e1f3ffd77f0f4b9df2cf2f76fc5940928f377b0b47f070fec682702a467390f80ab79c7c6ddc0ec7675dda2d8d6e9ed8b8ef60b30f19c916aeba33e9e2849f89e56299c21a11656ad838e88d3ec8c2c89975f37f3609ff78f6a1e4ca13f04b97f12a108cb4cb8fb5da15e1e9545c4001684d81b9b7bc9c3a77d96570dd9174d23952cee6dcbd8130aa59997208c503fdcd1e2dec2bd542ba6e16724278b4bdab92b04f15a9747077d7ecef00a7d07481ebbc6cbd34335ee74a9943cc4b5ec91fca39fde7f584dae2f5226be18d25aaf9b139a8d174f765518b15319f27609a982ede82c24ca346ebc3d37b9ae284a0d1ed6882c0e8d58767e00d421cf30739c9e4e944653612b8f5b5bb59e590fe2b1a3ed52e9d45150d8ae911e130f34c82957e078c1ae3314db83b8d5685d9e698bd5f8d57b3c9dcd3a9a4f5334f0b6920d61da9987189076ed05dd6b7f4208e603bae4ef83bae3956c30a7a6200ec88b51cef103f87f24650a153f100fa95a3ad9593fa1194101f1b48ea5f9b9f0b702cd284e35dca8786f30a78bf05e8ceb6de95fca2a52c245454752cb0397a3c62a156eb612d10f69453ff6108e7d6699afba1e3eb1531ee265cc238f10d4fd93b54ffe30ff33966873f020621631d3b1f681cc57250aed66eec862c33cfda115385b28d3aac21dbf4ec7f1348de60a71564891c5f348472dd06ca8e18fba3cd12ad9a76c4b9ca8698adec872c8238390490a379d2de72c7f1e7c5d1b349c34f68034096218fd1bd64264f2d8a4a0515873d54f34395e04e64a01c36b8baeff9b988d957926c9973a9ce871cab6c73dedea8516aae396af8b719a3c8053cd1a8c1af15cc99dc109ed2ca45f0b6809ecbd7aeb412bfd4eab37924585f8ebea486ce88895907734241303fa4766745a30d65da503cd429d06d8114e3ec91fb28b84f4cc9239ec8ffe9dec4cec32f899ecc2b2363cafbf17287df209ccfcd5c0701000f34c2cf30a4493601b30a59ba2c7350b40b76b2fd4658d44881042b6ffde5beebda59449269902c507a00605073964049d8b78737df7857eafcf21ad6a869d8bb8c3f752baaa663187ac8b43f4611cb5bbdd4ca48c63c2c036fde1ca8584b88a71c819cc6651318e4632733ba3114a8d8a71c8a0973a27ec212e9d1302c1b94240cfe3afa509e09d8361dfdf439dc3954e1db6e90f51b78b2830bcc0d53efbb02fec2e86616f3ffa5124ecdf97bd2efbb67bec9baf7d405417c35093aea0c33ed4b0b7da0d7e2d67767e7ebb0f48b3fae3c783af0585f8c5de6e32601f4dd0d5205bfdcdade45d3a98f6f5e8ec87da0531cc47389f629f3d9d58f7e135edcb703f741a68c17082423abc406bc1a87d969a0e30bfcbbeb06bf69513da5e7bef9c8f455eba4d060f7bcbd762d84724bef560ecd8e9cb7e7ef44d1ff7dbf7837a22cff3723df6857eb1f70114c62437652a1277aed72ccc024c60d8d73e4c4472b56bbbb46bbefdebb5c7aef91a08e37afa19863d86bd0fa0b883bd06621896fa3022b9d97b1f6a93417b0cfc817df7292da3299066f551d9bf641426fb988c5aec9bf7ba30bf574741ece7bcdee330d047b3e6f7f3f2449e677baccbded2b798ed40fb5891b833434c037fd8af8f3d18c6380366edc72d011af614b4180883fefc0bd37e5e20e7a41322affd5088ac03b87efbbc07c07da19056ad2c1872a0be8f8f45e20edffa74eba9f452ec62f5231299716c2e8c5703613cc07ffb06f86fe0908bb9f685d8cfaf7f3dd2c53ebed7178bf8288292419757180293430fa939c41c625b03fc60bb0ea59aa9978baac0623ef12caacb4be800a404149f6b2f2b21832840ee9e64c48318dcecb21191144c280127618b1d98e8011629a070425bd104142235ac1aad262e77b9288b225cb020c5d57e103b94110aa460e4bd99bea3224a35e3352e1b112189dbddb07bd9504c2529ba7bec80827779d42d464acaa2b4443d4989a6878f231a7cc04009064b31f08901107655b19a5092a06481a2046549c8c7eb157437141d40a9e2d49328c64498f0aae7e051a48307966eb111b470e9f2c44fb718c3b145ac1cddee157437d2152198b0e2039f72d639e794e283cfcc880cddf61ac4cd16498854714203249a5421650915b77bb6cba32831d4860e133ad0a2e4d393dc6d9163e9d9547af5e185623a786881e4f6d7c97952b4d0614e9f3ea90f41d08114226c618b7c5299032b9a4a5c89134dacc004505c9973cec9848a2b36e8410393aec1c89215951f2a47a824a1d2a4bbbbdbdd65b7ec7164e407c5d9d019e24ab7188b11b4a81e88a95019c209e9d2991053371d3c88b4107121ea82c48facd26511524aebe1e388061f4e8cbac5473a9c20c9222ec5490fae4b29dddddd5dfa3ca255b6ea3a786c29ea161b5d3ab61c75aa24bd0328394062010b84f0c3952a507ea49452b620e1b4a8fa60a356bac528b872a1004bd7495b66953614118aa1d7c5022457baf48953a487ee4202d42d46722de982543b9044f9c95222650e8600c2142d384214240081474eb1c5dddddda5db6054c404d5eb9c7376e916ff1c4962802b9acc39e7166943270829dd622b575c4710587cfa9c734e9feeee2ea594524a975a74d34851b7d8e8084906234973ce398924653edddd5d4a29a5942e67dbb0c31557b5a17365a95bec033465a00289574a75b040148aae3822020b9670058fcc81d195eed2673f51655251b7d8e8484712d20554e443103f0c41491352e071299ab062c47529a5bbbbbb7bf798924ab9c30e4cd589bac545464748cf427242ca9e475be811574a29e59c7332216252c4c4689e40015564f164cb91d1148a00e14ab94412707065a5d4a7bb7be6190f4386868001152421a200c1048feca32b651352b05c295d522135605ba4943618ed40036cca242ddd622e3d4a744922a5fc4bca294a5071e5ec0440f1ba383a82cbc1a348078f27449953ac121f25404799114a3a8a584ac28665890ba7e307443a4c19ac483a81aa4b14204c522e092ae2923208691e2161a594828b145d8aa494b28a2606a8e2490f1a5235985ec31341bc542c078f221d3c6a97a0db52ba74296b987226cdd9634a2925d155c4924f8e5ae544eb14243ede638b571b9ec8e2c22846e50741b7bf4e8c072a5fcc39dd9f400237a734e112846d41533b8002e8d393dc6b132d5ac9c7c7a7071b9ee082b90e1e4b44c188e8da50a4450d4f5081932e411c7c08496edbb0048511ad62ad8307129020e16ca1de0356b139e7c4a40881e5f6bb674548b88e68029d5004cd293438b24493b4e084071d9070e0850f9ad05110718429443c61ce39e77425a208c9a1a3070e420480458b1abac89650e0d293dc3d9b59b08b760994dc79988204c9556b265d1e49e914a9ab1eab40d22dae62c955455027875029cd24c0454a1444243189820c1a8a2820e1d293dcbbbbbb5b369d27a8b2b95cf2a90453a4c43a61a928c8ee98c1121586d0968ec060b0840a45960b1215aa5c445498e21a9a930a58549982a2232892362d3845567881750e1e453a782cb1c58f9114b3041bbda20d9d2bcbe525b218ca32670986a064c8c7c787053d8aae4032655d72994a9227b7975cfad13097bc40544414443928fa91a29fc862842c5b24592b45384458c20449473988acd31a2e9044810b54e141b758ca8e2a5692945802a372ce39a70d926c90c5064add9195cc73f028d2c1a3094a4d5852f2e99480544a48be0641f6f07144838f2546dde2a30ba9dbb1244955995892c4f47944af2258d94104758ba35c431d91aa2788a2974c28c5303a2508255a70b15119a338ea1623ed8822c96930852bf16adf0ff7da5b8e4a4cd3aa865de9813b9f6de4fbd6439fbff5794a1e976ef5dc715d4f894917fb476b1f1efa1ff368a110db3c36da2b724b8e3e8fed00fd32b69937b4e64f4b5df6ec1b41193431666860c8d0ac686868543431dca6599a0ca3a1b968682a0d0d0d0d9d4e2369683ad2d0300538fa313375c825875c350ae1c8daef65d0c4988121b352c5c0a4502713733377774b7fe136cd66d855e974d9ccccb1b9991bfc5e064d8c1918322b15c8c93e69b1b65bb6eceeee97e0e56679cbeeeead873f19bb6373375bea83b3333bf5c1bdfdaa976c358ba544622d4b9674baec78af0dc42f2ed8b47bfa472979cad931b28cf2ea982549ce225bfcb6dd69e41cad7aa13e701b6b3e7deb993a1bffe5d4812e9631335f4858c7fdd2008c8765cbe955c18bb9d2975245e9ccd806631bfebe6ad74b243333cb24d942ea98d0c5d77ee8f2cb235dfc4b265d7e1573c715c1735cf268969411675c9e22a994b47ba7e38e78c332f6ccb8dca95fb41d8be8cd13c60c7dfbf96e207e71431c2eb3cd15d3653316d9861f0835a49494bd29f5d92db0586cc3b4bd65238047f7f7b04d6c4740b372a4f41997ed119db152f615ba5f46765ddd988cee85878d66b96c8f54c6c0fad26ac736fc325cb7a3944e972dbb7b89d855b319d9d46db8bb4ed1add1acd9bdb43b955df7d29aece81a77154647166f32cc3074cdccd479ebe6a2fb0c895dad72c7e445e78b33dbac24cb6e8fa8ce65377b0c9d57a5dd9877d3f64951cdf29c96d2bb761047b628954d7b689cc814865d6a94ba6c6676e9276666d9b5171b4bb3384adb4824e8e2f3b79566f50c2e3f0c9dc4ec91cb2ff93330bcfac9e5bf405377d1c566b170707474dcdd67108f68a1eedd45474d9d3bd3eea6d745f9bbad87c18edd7cb20d0529511d59725933765dceddd73803dbb4572aa54b4a7d7ab7e7e0aeff024329a5f7902dfee96077bcbabb396c5d7eeb973bf5ab29a5b1f906df98dd0b8e6c31a5dc955e3e2fb35aba94d2dd9d52ee2f9c2ab6e1ee2ebaf8f4bdbbdbdb67d86aefc050be6c2925f7f7b5055d7c669bcbafb14d7c911fae62cb2b4a299d7217dbf0c7182367d492450674fca594b26fcf15aa57bd0d69e346eac39a1bab385dcbb0eef4714ebad3739cb39ad5cf11a746ea310e5b3f6ebbb6add4ea67af75ad7ed9b553ab1f762dd5ea775d5bb5fad56b2fad7ef45a4cabdfbc36b356ab76d3ea17afe536cd66d8c5bd70cc36b593f5b93f3daa4fa04e77fafc72df0c75b0a659a8be31d32d89ea9ee91cd4cbef4c6038e49a9efbc29acb6d3937c87bfa5045290543ee637efbe86f5f3f6bb79e0dd4e94e7eedf76c539f7ea866d5c74ede639b0c9e07ce34ab5e76eb313dcce790a64ff55c0daa73625e8219a8b9301f5ed8d61303ea74303130331b0ffe9a428135cdea1847942e88df7eeee977faf0baa750bba73f81217ded8bd7f4dbbdba726fb3de7ab4aaf165d4e7ef977e42a43f78c52126cfaaa83a0affde85883f20818a03416192a4440e9c5c81a4b168c26708ecf40222224d20b9e00524e0f12b9230a2889984113a5cd3e5246ca0c485b5d1699a7d1974fb2de572e96bf6f4147b219d518febe2a59d32fbe95c57a7524556910b9f80f9d5b6066a893bf3b30cf39b348404741464844d50db0e905dad85d75ed5398ccdb073e14a9d631fd33ed5d663c119a0b0537dc80a716e2ceaffd6b39e051a3fe36bd8b5d8bce65cd4b0d5beb00017c0b06ffd17c0b095ae76557b69af633a795c176dc06a2ff000557bdb4334cf52c6b3fc02f0a0007e05762d364a37fb16beb07e96e908000060f8dee380a1eae605308b766303be60a3234da767cf3e67bfb3e00d18e25cfaf1050d7b1b3a6750059d8b58948279963056333ea6e6553fafcf216b7cd9bbf0c97c0bb155d85bcb799786d98fdf71df2d2072954e2dc369ad858f6fdce2520b0c2f1618762c80a18a0618fe0c3064a9be062ceaa115c0100707044316eb5fd57534605cb22630bcae1318769d4af51d166d00b101c4864e7fccd7d8c13ce799fea47d88a9c00368f629088366e998ee2c30c0bf6167497516139845e70486383860c862fdab54b1b5bf80d8b8f64320362ef699dfec2f0cfcaa83fd75759d4a153eeb628f691fc11047a67be742fb9a65d9d3ad27a3da472fb5d7bea6c5ebfafa854364be4d6fe3690352734f9f7d588665598ec6300cc330d36bab379d3efc8b61395a754d6f3f21d33df2e4ece76815ccc7a43e47b77fa8c37de3e5bde7be819a790efb18338ffa5eaafd986d3c3064a38b3d8c8f9b25f371b3387085fde9e8626fc21e067b15f629ec3130d4fe7a9daefc3a1727c4991a8c19b2972f4306627fbdfc2137d2ec03f405069592f9565fccfbd6d3e464f23a938f0427d87d41269d757e971c41f78b10e7306f3baeeb2013b691622cb9eb6e9dc61fe7db39a53629477fb6675ffa82e0de69b94c93d3a7f417fa05994f1ff509ad6c0c9d5452e9abcc6a2bcd66b5d6593d4d7ef2a23ea1d5db4c4b9d4cd5546badf5693d5d1f1dfb84ae10dc0bfc419b5957bec53836b7b50423dbf84a264625a38a59d1cda95f1b2a7532719acdaa268564fee5138ae175170e313e550d56a108ee047fd0f7558c4a4615b3aade741bac0bc19d1bccc7ccda50a99389b399d7afa6d34c39e1c5d87d42692ccc4a655c01ad80ba1a2e287e41e64b79dd0932b9b2b79e4a65ec6610f9f5ad90eb0611d2ddb9edb8ae04995cf95ded1395d26ae0d850b1111f9dbccaa9caec8b3da9b875fa988fb965fa42d63dbdf7853eaef7aaefe2d6e9653ed505aef7dd355d26307627af7272998d5e9ca62fa49d82a981a3b32ae2b553cd58eb1f263b6ff5fd10e13d91e7593df7f9fb9b7ef8779c93ce3d7fbedebf6c3d9e07dac0f1ba8fbf79956a31955ef46adf4fe72d11b9787e883ccf0f918ec78b0203a0df7b020ba0dfeb8207d09f6d0cb87832d0536200d48bc77ecc533f60331fdb7aea536c669a75aaf5b66d33f8b6ad381490ad761ce71f775a571a9d908d6a2871fb4317f8c232ab75a8549594d196d90f59dd2aa3d73ba7d2c83de99c54e79cbe63be6758266ee8f6ab2e70fa50cc327dcce7dc32fdeaeb80b4a99a6866b7cfb76d733969666595b76d70396966bd7a5faee356adabfa5cf5b8ea72d2cc6e5fbc946f96dd7069a5f592f11a730ed7dc19ad16695c904ab502aa5df04d2351794e483971bbc97fdaa475865dd5d84933ab7119a75939d9a34f4b7936b7c9d9719aad92ce6dc7f6610e576656e33ee488324e73ea5f38822b3fb0e3ba692639775306b8c905b932f309d25b3f216b333b61c2c805a11e41e095f6074c31c895596fd906760bc5fcf6f9eaeb3ea1d5cbd56a826176c3ad1f9ffbaec78439dc0afed85eae86562e24f3f5138af1abcf5b92ad7e55cc4765645ecac478df18207938900211e3e3846a705b26b3211724336b34175a7df70971af7ddc111f57036ef55bee07b77f5b819c10b7fa25f7937bca21c1dc1017724477c6e3d2e18cd785ced876fcdd9e7edbbb6fdde6dd56b71dd4e9ac2bd46857fdfc665436a5b446eb1a5cce014b69a3b6d2478d84e5724ee2d6257424617479c0430708300207976bd1c79568e6c88fcc1cd5682b6cd7616035356a36166b468d8eb833838547dca9439528def4135949dd130edde7cc3a7df6fd644fe479329088ee2d0d6dc6d6bd8d33d98c9a19dbffcc51bc999162064bdcf123f1a63b2cb7bf0efd0cddfe4a947dc12cf9fd3352785cac0f0f1d98a5e0f68756871d68a53163864663ebe9decaed00f2a6fe2482eb31b34ecfdb0c7ec11f9d0ce7a4ebdee4ddf3f58fe19ded9ec6364307ce78343655a812ba9d94b8937589374455e898b895e8f66f544e3f925521eb32b3751b0b1d48e30716c01a0d068efae1a4f5d2fc881fe19b7e7a5453947dab23ddeaa7b1f5786f4ddf9dc07eb9f32bdfe07e8632ee9c1f19878c9fdf8cc37fbee418beb1fa797aefebf7e3f4ad9034abdffb56404ebad3872b201956473e47ff2794fdeae38ef83821a679fbc9c8deb39759f6fd1c1783f618ea437953a84f3df7997ebac5007881d9bca3f9421937e4825e6ec805851c51683a127a5d4c3c841c12b77ffb1cbd02ea1ceffb57473a67feb533d2cba4a99a40d4e913b26fb2bf7d42401d8f7def130252f1d894916c7577292379437b09a68c82c2941104b8d5cf091179b8fd2624445c0d5ca5a087bcf172c315d08b5d01795d6ebfe9e748f7b9a7d4394ee97bb2befcf8dbe7ac6d07fd6e04d75362c5ce21d6d0d0bacb534629a3995996a7d4393c3fbe4ab2d5cf05f5784a557451ba962c391a2f4b6b564b63be91d91b3fda13791e0d2462fe0a48deb02017245bfd7dfd983f27cdd4361e1ca58bef75e149e1f6875c4ba1d582c6bcfa1f2217cf13e978623c170353cdecd53a55ab85cb1fba50e36fc470d1cc877c04e343464a7d8e8ef5b24903a9af631bd3c7ad27654a813146daa66f4ad3e71e9b983e7965beee1302ba78561fe303ea7856a0c7ef3a30b4e16e739ba6afef0c0c93e9f4f1bd6e73d517f3c97caba7276f690369acb5aabe98cfbd5239354fe9da66e8ae838cd1ef165cd0589097b502e29bfe70c6951fd27a69a8ecc31a2ed2486b771dc87256ce078801b035a1ef02e7ac80b889cb40b739cee18298d57f6197b3ee437bb74e756f68386a08e0328e29305cee0f03907521408f1bb528def44eca28def487adcb4eb04dbf7c1b885f5c21eeb32ea61dae91accbed87f9bc28988e30b34293096e3fcaabc2edef61d2e1167953b84e300e0f0a6cd3df9f328a5ea59ed2fc93fcba63ca6fc8e90be25cf41db189d705dbf47b9fb7856dfabbcf7302db34176fe9f65b9fdbaf99806effcbc76c23b71db1491ff60d63a8979f4c5ef752e75765a5d7c7f7e34e0fa7a1fa9813e83185db34f016e6c257a20598d56fbf27dc662e2e2fa10213883b1488374698a5c04c60a41a3aa7ce90bebf4d7ce961cee99206c7c0c80398d39dd23999871900e1903ba753df6690d7bf621f11b39dd2f9ef33091b6544c1d479d598bafe6382a89bdba71750404e269b13064c5e0d5306bcce054f03dd4b0b9d0d2f5ceb6503dcc6e2826c1a0b1b07344b431362b319b603195693dd805d2b601eb82a78e150e9573f402908a60cc631fdce10388d8b40c69023b8fd338c637ebf479f53d689556c7e97aa732e7bd9f9f3690e5755b19f525e735e13d4aeeb620cbba16ac52ad5e4fc6506b6631c52de98dfc5cb2d25d72d7fb9f5f4b377bdc150032dbfb08e7148d9d10b4a253ba5cd92a043b1fe5c13cea11bdbe7c7fdc5afd8c5752d66893b5dbc89ef6c13fd7affb825c625704ef61eddffd2ba06ba39dae34ed472c59da8a4c59dc825dec49db8e405832f910355514bdc91474a71475ee112772452bc895e300e99455c8a3b124bbc89bf6951e272a3b70f0c5d95ccefeeeeeeeeeef5f9035273e9e652fcc88bdcc8addce85284e8f8432fba9131fb456e51f047b5e262917d4e8559f13187e2c6bf9c8a1bbfb124ddf8f28a4b71a357b9f1e3cb2c188733c136f1a34b8937f1aff81337be449a5f38e4ceda74c8752f9a4399c482b09885a193aeddda49cdbbaefa7caf4fdf565a513f7366d7c7c7326c6e3d58f44e455d687edc32a069979380593732cb9f9fa373c7232c23e11481521d2eb8a6b87d390dc2c4a2c91626bcc01245bda22a6982942a5a32ac625aa42471015667dd820743742bbc0009548c3459e2329814414a0fa8cc1898922c9638228117d88c0f5864b1b4e582812d414202022603041553a2f810042cdb2a0653502141111e03c411132512067bc2063d28d2619e6a0f465392b0e89e2c31a507a0cbd6a01ea4e007253a98a203978a2939828a0a7cc8b0ab56ac053860620a56985c0e44114c9cc0882455fe40032b246812858aa0015861b9733ef065bcf0cfc09059a9626052a893c903d9fbf99ddb349b6157a5d365bf7c20e84bc8baaab24eb10b9caee9b04d932e06899d533aa78337cceb2eaf7e4117bf5bd3babc11277bcbf956d8d8d227ad170b1fb6cf8c0ffb272649f2c5ad8102efc4254bb67013b84917343e8c4bb81c146f5a093d642bca357439894855c44746ac231f8e4e78274704e2f2471f38b6807774c49bfe15704c4154819158e4328c11f00e0ece1737f08e0d1b415803bca3a3d3c51262886195133384cb1f017e00efd4348017c03bac78d3cf02421523278a584a5880cb0f03e77000f846e5420b2fcd1f0366c539dc7bd7c439db6b610371f9db09efc427f1a63f68490b782746f18173ecb30a2e7fa7a057c039dac72771272eb59ec49dd8e502a3cc20036740a4c8e5acc58a47b066631cca865ccd63f61c1872edf5d9e790da37e426893b71c993dc2e5a93264d64c9fa92c6c2d74668cca859c187c84f1bb197cff5d9ab46fbee3516c1ad7e2492b81d72162b7889083e376e1181e28d435e0cc52eedc303019766c1ef65d05c1986536dd818b4ea316660c850cd6a9ae521370e7ddc895dbe7d5871a77fecd7a8517da58a9198f5cfba47fabeedc0b22fd4de76712776c15433330e93429d4cae696ed25c03a5e9877ccb712776699f9fac81e24d7f17d1b42ab77da2123e0e60d611ccc529d707b7bf7f76708b00c59d780307e484b189d883db9ff58ffdecb336d33ecc1eb31f5f0bb3af8f0d85e0877c9fce8a334ad0dd2dbd0acb8c23f22ac66555b3f752b3eb921c5de8770c8cd9a996631c306c1377503b35742218ae6e8cebbb4e0ec1d678517ae7f52baf752d56cee72571c86f671b7fcf616e3df2ed4bbc986dfc19c7f5b28b19bff143447d22bf32d2a96ae0e8709191b60292285aaf3b83060b392f36d8c8ca4c8d6a1599b94ccbacb6d26c86cae1c26e4826c92c52e94918c3755a37f92c1c23ea100c51b376c0ac663f0243b7b2adf9a07bb9dc972a32f9a880e66aca243867e6680a293755744d3ede92bc3179845c0432fb98878b222d132e63734a2bf0d2175cdd7293d2351150779ffed91be35346abd492545094db4f74941aaa41292bb7eb266d8caf93f966ae74ab678e564047b73fdee09e740b06dc936ef5f714b99aabaa652acb711b7dd37b1be56baa9976e936c3d54274989cb55e5a0bd15d59948d0118cf4a880ba218dbd08f8d510f5c6c43290e5752795d5b4f57350cc338cd3f9a65d9cbd43e140a88a6599bd9ceafad9f699ee69f5452c9988eecf0eb29c920dbb619aedbbd35999a784b51bbb814111774d2be145125ea1c66d604c31412b7896e1619f3e4869c942e5c1429c3f1e0724457886e9360101de3a09e12af80267b591807fdfe1550d1edbc25559779f4bb8d7bd1f808467d451521301168bdb217980f695cfe9005164fd991f12133c14f44c153f09520a46a6ad88821e653469db3026a5615ce59196156cb4f5ee92c39dbe3c236fd323eef0934df1438de60fe95e0f6d7b832c2395c0c98d51f23b8c31328130c87d42143eef6b1942df946defa76568e43029efda8646c9ba85ae8d0cc0000000802a3160000200c080705a3c13c8e721424f50114800b608a5862663e92c762b11447511445410c83186308010420848c42083aa201ca4ee61b25fdc1ff2915b84ffbe5c371272d82ab9cdda15b40705842a72c097b85a01c8684c572f9c1a3d57452da939daae3c98ce15d0b8de19a473706032ef1ce66efbacb8e1590b25d8fce7fbfb94a6d0535e12c9c0638f64a85dd78c390823381a1e5b6cd31c2c6b24fdcf986be3e89e2320635dea3300ec2065242f2fdb5eb33ee9e2617bd6cf506a70a933728750882299b81e71a94a2232848e73379712978dc86efc214d8ca5424e48d4f1e62ea4e33efdc5d7c3def229396eb2d614d6f1171d06a87ab6481ca9d3bbf4552cb337e1c78eea115e9d51a119082e025780ae4e99c7aa63d068761f5413cf70d02db131dcefe68be244c70fdc45c66793cd789c0dfa58f399af808a00d63469ebb4bcbc456ac7e34262372a00b97bd6f27dd1e7a6891ca0939b282484417a1caa9d6f3b64689fd5ed803151ebc27f0250f41775ea69b85b19bf30f08117ddc732b79870c23bae55ff9df79d28d6c9e6aee2f47530bc5a3d96c25b924a8ffba7ddd9095aae6adef3635c1309a33ee9c8b08b52ff7ab8fa48549aadb98cdd6c7cae15ae0b6812dc38915f5f7135efe3431b4d60d5f1fb40c18104ee949f26de81554febe055e59e20280d06ae30864f423f1cfe0d95548e08cdbeb2e46ed1c76da2857ab81e813c4d3c15342509c027b7a39c413ba366827dbc70eb0db01f344588f6510b051075b06f20a29ef956a872fa2fa923eacaea17c01ed9320405584b285679055a157954ce9cca8caa85722a5f772026b16309357c0a60a307a0160c1ad6f12b843dae8a940d8a4c19ee0a0a02f6350ec373126663f28e9b3a468c87a9c02d61d0065d17cf38c647f8db6757c5a38d330b4c826caa0c2ed7fc26e408d1125355f8189593b9a74c50f23e41728aa333d8fa834d6cf50ad7f9144545d00db5992dc0c583bac7caff34b3242431424bfe982daf3d4c6911da2c814010cba5d1961a85600087bee47ce4d0d23757ca119a627bf232bbc7021608fb898ae78857beeebc1c3e71e1ebfb8e8c8bcf11768c1d08fbe8cf696ca7fa9cb7cee98277fc064fa4cb44a4f2a0577eadbd8eba04f062aac384209b9a7205a0ee99a8b13c13908622efbd1509568196296909f7cc99969869cee0f63f0835059bf80c51d12cf77c6fb3e84c766e5210fa20f537c6ef635fa07f71ec4f4814eb41d4a1186227ae3d83b68327b7bb3045898f2c1e62cd016bfce89196db9290e3dc055ee2d02f95fc512b2d0fcdfbd42bc28bf166448eb706325fb48a1460edb70c72b78b56340261a84013036a77773df90630a68b14afda933fa039d272da1d73ad90732baf0b1ff4448e6442c346c9374f786c2ba7c38a82a0ec80e8e7b71240c683c5793d9eaa8aeb770e8c89192492a182fb38b2c7792353c4b407901626b24d781a7361021f81fd44d8fa7151edb4c5c45323b88f42ab1a10e12790e769b1806f2633f9796c585e8136041882f6d8c173d333b5afee9cf6f58c61ead60da952c9915093a8270f42b0aac73a181d29ac01b3159b5216f1864979662c9959fd05d3e6a841215b5e6e8143532a5151006e7c3ed809f54a5ef20cc7b39cd09537fea233cd13d23955973276c500a128168c6022e946da62c034379f3267d09ce896c5c19f019cbb9dcf54e08342b4b9b83c7af8023d79ca3751d0a323d2e4632824392e41332f0e630341e96bfdc8948a61d7d758bc0c39d8994df89c1dc9d93d409f877135dae287d0064e297515de2930e5bfe5a423757eb0d7e190b6edad4fd2fc37fba0c37881ca38bf495d4026a5bcf3987b41770c86e0955c18b00f3cdf0998dd21bf726d816579d97cd77281b145a68961731965ade5908df20718f44f63c23d556a710e51a6d49a0ce3af19e81d66c4ebe8d449cb7d79280c7f47135f25152f55949d545ecdbe5f33ec9d384fb028d72ad5644d5f5410813737e8d0f274ebafd9960fd7c2a4141010996a4e8171aa35d12ccc82d49b39015fcfc4d45f20b08af2559f31da3774b82e984b76de6a492fb914c252f593efa4ad82d43a5d68d594ac511a3b6c4de224a6d31de852a89c7bfb0e05d829097be9e496b84b62b4efe5115debcbfc4779148cdfc0d852a59cf8d0875727d35251ad3b4a9049d3d55dd06ac80106305780975c9be8bf5b08253253d825003319f2f6a6118c7547d61689be2a65c1274b0cb6b43fa59534d41440d01377c4960c368f977db36203f045391fa276f2c822892ec5760a2b98db704f71154017489ff820a0ade10825a02ed53859bac1652cca980353d4a3cc5a0e9e0b1edc25561e8dc1618daad83b65639c7615b859c0a168ba8ab25f111ab7608e576b6cb0233248d5040a4c7558f52a413085672a608b282275841dccd2a344f40d8c8a960c9fc94e5aac6fb5d5751ec3f6fbbeb356abd2c08c4b023d0c455596cd339ebcbc24c2067066c6383d5a90fe312a419d7f6c3f0cbc20b3fb5c146278361d4cee1219c0e53b462fd6bf417e8e5a53eb1b046478a95e5549d8f55c57cd3a06b7bee9f4a08017b754bc441372b2d1f753487f38f69ab7ef2eda35a3e1dbd723018c66f476937934af9eab9ba7f978bc4c3c289365f496a3c5eb119916fe1a3eb9b702b99721d36816bfe42e86d4e6536641d8c62c1690ccdea787ad6b497702d3e6a83e185355eb482dab31344bf06dea177048c3a9185bdc83c398f214d99ceb271728898460c371daf76bf341ec505f98f4eacf4b98e35e9f4b0def2ee5c8225b5549d1173099148b30149c8d08f8bf249f9f0458763d28731bb68e3ad6f71be7ea47dedda01931780ba6d7a2eaaa72705be7cd318af5c8ba8440531c59a057d58cc6acae4da44c151ae5fed3bf7f090c46e5f38644b1d4d0a375612e5dd4a3fe6fd9af2dc3af56a379b1127825761dc0e430fee068d30033a62309740eebd9e6eae99413d58eca0a834281670404c81bd62d1e52f48a52355a076485eaeacffa858755ccf26d194046f26e7ed0f01f115deda3e89405aa3996ea69cab8ebb4cbf192c8051802bd3855a949ca509ddca7579daaa0162bcaf860aa336a59424752eaa3d716f5000fe5cdd56b9094900d68afabc0c3e161b50676c92b36268a72d78cb17de6685cf638703bbe6668a94bc384bb3cd37b77291a551f4dc7890d35e53c4cc4a29bcab1bc8693824268a9288d96c883326c2fc0fe489d846ff1623b6ae942f49b6e08a5cd353f3040bd7e3e00210bdc90a587ae48fb3f21b6db14e887f0a10318caa7931935ba9b7d547235bcdae503130665284de86b109ab13a7c828fd5e4c0131151885f708c1bc8354e4c5bc8cb3d24f86ef3e561f4d20505d02874b655c8472334ec52134745bccdb5e2403451987885acc6a6653cf1e4049ab9bc52ca67d6c046f524ced0a6e1605a94824e331589d149cf77dbf5a69cd0f611689cbcc48b74ead486d418321b60d28243837dd62c55c23c37d2c88ea74d858162d81727a6956db85c7bd05594e63e5a6102d3e849760e28d4fa2ba32be81653d0bcd0481a7f44737081724893aa2025325b02ec2855933ec6fb1b7cae3ffeab7229418e1eb845d355a05c46bec5ec91fe8af291ad7ba94e5f3ed10eb55002ac35df4df3073c23aad11f7216a882e8ccc9aa91e75adb89a039886e8cf4122a06b4d72c81661065a0b37409252021f1a4ad1b5970f3ed424430852fe4c122b02c88799dee11558575692c14952a19030a4b5334d3379a6e254c21a2a2105ce49f57effcdfadb70fa946b805b773e539d67ad5f876763f43db52de109724c4e151f3b10d1c6644a1833c2a902c0bb38e93db3e5b5b7c9c5c47f521aec4ce793eaaa7dba02664dbd2a609e1bbcac67dad0c2d104370dccb08583789365d156da91403abdd478bd6f62551fcbc69431bbf65a92558019eef823059821ca9ad7569a8840325d6afc8b5c8ca8419a1918e6ea719b585817a1bebdcba7f24ccaf8ae3c9d4596d24375e8254bce1da8209b87b8c888a28687d71dd61a202cd09b4e6994e5a4126a537c449f48bff1960c3003c08a88464e18e505cdf8de5f01eb52cfc6464a0a56e8f4f17efef2341f08c83e153001cb4ccecd2a1aeffb0889db87f420801dfcd4acdcc011a0fa006f35eee304b88e0136881ebbfb8a094047940d37f17517ef70bea808c8ba72ad5a44f67b01bb336db2503280cbf9136b1f1a403a37dc57934308618b9a7901a06d5ff295123eb029780b75d55ad0715a1147b4a7ca482fd3159de545936539d1dea5b0d9924ddb83008639dcfdef4580590014487f7f89309a9f88a1c08cfb34cea012760a140cbe67cb5a5d30742fed5a121f77eb3351604ef62c0d8ca7eb39fb2c03774f3bffc61ecd26b4bb6cbcc6188aadb31f19e7b42bc48501049289f3093d7b60441ebf283a91aff309f87f867716ddab1a35abbc0d34602235fed3ff1bb3494c3bde9b031d69948224d2660eb59277d5c89aab458640328c162b7d86dc29e7c99df330363fb46155f043a927c968711ee7922e57838170a37ab8f3b31bdb129ab31e1c58376f195d633369f22fea01df4087978205bc6f0fb1c3e0bdd413488b0d887305244fab151597cec9fbe7e8bbc95a6e0893f1a5be888850d85adba9c03a47a1ffc18493a5f8bb0ad46332ac688969be5c71a747f0365db41b23dca93ff50102326371363a7a55e4ee9226b9d806880b5a27b7bd0bf74864a0ad9fc8c4165e333e2621ac4ee0ffec4255c6c47261bdaeb0b902c858558a087c42580c0168825f6b68ea28db1ad574176a5fe126472657416e75790f24972f1fcfed1e385ed1b34e227e75ce94749b0ec188febae531d8281ea205fde012529d706459165eae128f8a9519195f63d2586842c5ce804d42cf6b5d76a09e7b4280101d371cb2ac29646844958790dd438d1a172fca52a71520234d6064cd238014e8a23f6374c3a897d047def4830ebba6992d8cea0f0949f31ccb6db4d62199753aa61c84d3b7b421ba641f8e20178bd025d2a6473e9eeb236cee2ee2fe69ec120a8c8c6aeaa418097602e3076896c662f251aea86fdd50ea8538aa8acce173548a924b00ee3f1bf2c9abdf0766e2e7797b5679e33b32cf916f156589d4c94917665294ca1b480dc79a49c63e3f9d38ff701a6150dece2f419752a6a7afd62e1c9125bd80c7a4a33456b2f0bf7019a056fbcdc422b4d1b5b3caf1273e6207a7bcd596a22031ed99df9d263b56409e953a1223723869f8352ce6747282ff7440b6879b0c72e47a0abacb58fe79a2aeaef7d370fd62cfc2118c37a1962ffc196174b21f2c575e4bf66acb3442058a7ec49e77a90440434d0f908124020f6268333a146a4bb5b30e81b93aa68cbfa5ad05974728978fb44866c19af3b718a39dc66d12dc0826f473d3e85c48722fbd67f97fe3c1d04692cc8ee63c3b8c9092171d563b45705845b97bd38ad258f5e68ad1078a052357b23029132e8f3029ad4c8e804a15ee4e40ccbd020a8419b1f2ef478882a875ffc3e5b47355103fd4abe1922856bca3c736b04e1e96d7bb7243273d7cd431b805ab16448140b8503d2f31373bc1b01f9b6466d5eaa8c368de23829c5aa73f691e3b78a951c84381aaff65d69dff9d8bb85d07e0ff02d468372a147998bd2af2d2d749d93285461a599c8d879a57c9221a064990e0021a24c4ac4950c4e7d913dd12d5c74b6bcbc367442691e5a508728781407c47f9fe58f90bf0b0a84c0e686b748bdadcd0968a78f1aa82a61fcabc3520b83146e5cff52e948cdac8ca1dfcfc83a981b003cdac767531668b1559f3d7780314b1bedf6990a132327d8395049faae45985dfa5fb5658dac712f62243fb9f29511182b4de61528da42729c6a284d6342d58830253c4eff985f661c67181c415206818e1edc84a84b44204866f1defbbc4b65893a5ead0b425324987eca025e86377bd01c1845cdecce9a253c0917a546c358391036edbb5dae3d6676490ec4e5d674983a2a5e16cb86a66585909d01f7954a2e914351acb40777298dd3a129e81b0cb0a9a2133ce25b79581a25bc10577ef3a070df5287744826d46a271c0ccdcfea1d422ed72434b4a2d78d24afed198d9f393cf6386f6fada7645754cf5e0fc06223b20d4e3311f4660f9f0d2feebb76fd9942270fe9e30cfaa41750bc8a22a9f0921ba18e4116d0f4c34d48733d47dc3d9c616c4426e64fdd33a750501d9435a606e62d6ac887a30f2ca2fd0bb3471b1e8d7d1b6d0796c49a4c9fc9e0a60e084c48043a260010d5d039b845d820d6a86c87ef6038de4afeb46f7ec5adfbfe2f15298abddc87f6fd8a728ee0b8ba6ccb0921ba2fe65d0e9ab3df0429f93bcf086891f81e974121b3dce43bd3946eb40113a29ddd32c5d6f6f138fb86c16c310642feeeda974727771487d0d1ba28268bc9831218ffae33b07a5995c472bae3515a398915b4bba0d07c79c63c1b47bc6a3a5e2333dc682e99430d5e7ad8910f45eb4b8dd4b9d73fe818c1b1c71fcb0469863f8cd5ebc9f37e3dabd4e42a94a6034b8623341c132f34287f9e7ce29972303850abc18d1b393fdb5cdaa88a4c5993fc480300fa62ed736b7149ad816affda510a6a944ad47a0e6f517bce438ede24cd102dd6fdf80bed8a39bd29ad2b7bf1f356a4305be1450676a13ffa9d94ae944cd8c433beed51517dd01eee0152b9e62925e06d1d10fb670522983d7c16566097c9167489c22bcbd49605cd0ac0c4623da21915c57425eff36e41299f76763e82f3d645e5afb3a2436f61e4abbbbacd2856531c4d1416234573f0f9abc99344be36358aa6d9ebe23dbd097a4ce85354557a78a8afbecb1a0a36187b97c5214d48bd0e62970112100c44df6c0c75856abff9405d4fc557040014a98856592dfad5eac4b9895bb125fd85245209461dcb846334f5dde55d54206dd51fcb24acfa99158ecc0ac15d7d9939da2de9ef12dcbc1ce2a0d70e652805860a7b4dc08a2e61212f1dea8ab400342029e72a47f5b0bb96acd4a3c237d5048dc1b2d5dc586b617b103dcf0f4876fbc20831f8eb9273ae990555650f4c57fb88d96c3c8cf4f92f2c517f278d9ee0b4c7a9641f300c7ab041e1f9d2e0473747a227f7334957881195de44613677373d65936f10b76b7408df0882f05173b3c401a9b9eb951b090891435f2286b7f8cedbac54e8697960c653e1c0295b3df6e81bd8b1558b190b962a001086cf8d14272d67e75a59229bdea1af70fee1317e5cff862f27208d9f08ccc0117f52f76b3d4bd22c39e8c141a053a0de5b3bb2cca08514299b15a689f74a61cc6af75bd06a0a4c0a9fd21f247be8a53119198106673f638a5f69e1d51b90be2aeb0c370015ffaab6ebb474321b60e77f0e87e4d1fdfc88e005762cf96113ce2911c1a77528487977bf8acfac693927d89e014cc921b552fcfe20d4310bb152b01709e74741e886e2aa1d74ad20c626181bc12f435c0dd6d489d9b29ae09e43c713e22c5d95f1292188cef18dd193f5ce4e32620db0c5d301e7432c9b6daf5ae7e813d0ef272e8f7352f37e18ff74cac2ab645445ad2a88afd02c47a30a546dea9590b86799bbc448140e00b3a25ffdf820a06ff1566ea8cb65e7342b7151d1f9d00bbc0a630fc70520ac349f4cb58920ec056a256906b410bad1d6a17fea421105c5936ef4231e1cc5a58701e6d8f3064cf3213dd3b842baaf33c981d475483689c5fefc578da66ed7948ed37978b577317a71433e6abbaaeb2516a1fdd4b26e9a25e7da9323de27cb8a59203aaa25780cb7f7cc00636718fd168edec98dfa235b0abdd0d0defc5514ceb1c24a93ba6e4062df7146d5645d430427479d1b9d88d623007fdca989e2cdf6edd05a8305eeed7e86d0b3a47bf446a15c0b33457b08940595a5a83596333dacdc44fcfcfe6732b9c14978f6bbc5a95ce5d09697dcc7ffd0e76f9943f3c91cbab640c1460d4b588386c6224157e966ee11366a85a4e4effd07cc155736a5fda8c538ae6a3325ce50515bfbe5cb00c3d32d18049112a02a103c5f099b599a25f5ec0ce04ab79870ad97752c75cccfa862babb42568c35e6083f72fc35c3b275fa7e76b53fbe11453b3437abf561ff5d7da9c8949d960975bd96ee992e78362b8b09d513423b1854ae90aede8c889459e731d48c182da4e50ba9b9748011a37df356fe85cb3511785e98ef5619af9cc32187102cae164027215414515898a820698b142b187c446880e6ed7856f140056811c2b72bcb0a4564df219e0385ae2d6afc81caac22614a5909221acb58d5ad591191fe459b7413fb9b6bb4cbfe2d66170a4631fdf1560fdcbba8c0964e610e845f05278756b68420d85e5772abcca03c6d8350ce23f1eb8dce1ae04a976054ceda4916f12b7f9acf055ff1a0432b483a1cff432df6727d1cae7633ad257f9c3fbb0cc28da9f7f8d5e293772d5ec02a9862ff12bba39e6b505546c1a0ba6c96239df859708878c001ffe071a36c659fe56e1524dd57641f30b9253033de8f056ca98bdcb911fd9808de2be4a605002bf4e7da400c1a15a55bdb113940e9e70039d77ed104dc0ce04a1a7567aaa84d2950220104b78b798a204e64cc9c43dcf71506cd4610cee0b6ae8009d38b9b65664b666ffad604778c44d35fd5faa02cc5d35181214e6bb11a30b8507316cc5a15658c064d0a60f302c42f1b1fd60d2407b390cf2f82b19e4ebfd01a22980d9bd30ba25980a8b25679d4bb0e4bd8c6cbe9c2014b0f1dcd2ba6a3b93909e6c7333f96d26475be671625d4fa4ca4db36f47926f4a2252b84700513a28527575059f086dc389d06245f5802213975df6c4e1c0cf263ffe2316780fe1f9c184235f124b8e852b260225c5354011c12833c9b7e1f4bd6427e2fd2b5fa2eed4caa87fc01faf42b0dce6f4c5b1c395a1ed55b6e020071d2e64022fb0e474e4a8af61fbf2548d0f3c92ae3741a6e2b8f6023d8c86dab6ffa93d202efe9f2a2464b2e46a023365d8dd4c4be967906104515bb5bb338b10e60ac1795e17e3f4a405fb54e44b5e88c7ca2b13b83ea2e89bb7fc831ad90c2a1fc2377ec6b084a8f268a59d9621bf6e8026c90a09fdc5589721a95207b85916dfc6c3f9e0ce7250f08eb8874e292e3a4adf39d88baf45472dbf427566d23a00ac211ada8c98926b971d3186c8b9a181e11ddb500decbfe43e637290bb5998bbe875ea235e10470e521fbd6aab67a01bd5306cd8ce82e1b010d02bc816e84f42154ec50d7e0ecf703497c2650a842c5eb0d956b842033c5dbe327cc3ad32c6c6a7c30535aeb5b216c6a919023a177815fc4c309b5ed32f687720ee3d4cbe31960154a1a5d680be9c7bd666e8987c1f2d1cebfbb08e8958f34db0069f59af273dfe01a8ba8443ef54382295335c3b57f80b1fc44e53997fcb002426ce1853da283c85ec26c2bdb8c65c586482032c85b4fe31e357c606afd5be85790d1404dc27814c106e76f09d72b3919b6ad32a19880b2d5a307eb35382bfcb5efbc050432cbab6ae57e395386f60f4133817c2dcbca75656ae7f418affb8f00b1650d29f2a0c01f915592b415c1911612fe1d7fa0fef13bad31305a910fdf6f601b5d19adfee4da7e3764d882bd8439d14d09487302b38485aaed006ba8d76fdfae10d77b63ea0e27af9e4f21a941000f702e9a0a61c7ce781454470ff0f6ae8ea2c278ab412c50f005cc63c69126cf1dd1315b957a6c08823aab5ef585dca5a215186d6392d1c818612264433f6f869942159a358310b5ced6674589c12d0bb913fb63b1f5727b0046052ad4e81e8dc4aca693b8147db359a5161eccc414971f9ae14276689a5c4fd79f3490fa6e9433ed8d9403a8f3422736ff7fa73d74ded7565e85c8ca90b7089b8d75d2aee013bca4665adb3e4543a90c7b3b563eb6377c84c2288ac8d15dda302869f22c05e2277c09f372ed77c7941dee0d43473cfeb00212c035c9daf700b2e2991af48fddde720d9b1ad87918fc3b83a65a3ed24d63109764c9b860e196a18002345ea0b434a612b3a2d2a86c0e0e96086dc0e5170e1d1c05eb555450c5c654728bf6dd17422156105fd474734030b0dfbf66763a9002b379b0728de54168f282d02a2f328ac8d724f23098a843b1d59ef45459088ba9f8c6e0d6723046e06596241080656808b465f144adfadc11c342758023443d677610fcea36221325c25f40d5e2fd42f1df8e4c861f7097cbcf3c23d50325cd37ed0a84deb571bad0d7a48b3ed668f89ee467b3df496b5b4e433d9636b6a9793f692e0045084e4bea4401bbb750ede1b7c2ff2bcde246e2ff7bb9109f30a85c8c7cb83d6e7efd82b014d1efd1385529922b458ae02cccf215d969b01aff692b4432962169969f8f4faa999c0386b372adf2373bddf057ac6e0267c66bb59526af6a27128e9d053921027921b2ed64e6bf009fe29ce10081cae4eec367d04e23d0c1aac7945c3db646a500a3cf2ff25ad038931de4736cc842c040c08cce14e7c1b1aeca302153fc405acdf67e5d91b35c12ec748e01b38e1f19ec62ae30baf60d6c63b0e36fd682d1f1b109b8b6ddfd1d869909578f0f0ebc34249fc7020b673af66df77efb9ccbb56c4aeb354b6c30ee306d571b2d0dcdfef67b7a09e2855394bbe44c0478900acee73ec88f3aadcfa3c9fc74dec605cd78850244413666fdd8c23d08f87490d0c34a7ef97190e08f14e7f4eb3609117d1cf5be8ec145003c83e9aa50e2b2b0d3ef4c7a1f8ac3087e42bb89653c5242259a09a70574667a76a53435646ebb417965ab665dcdf50cd75c9a378bbd90e5c1438aeecd99cfdfeaa8513b2ddd2670b54dd9f4dae90d63e30202209c270da56e86e43811b1bcc37d7ef56e37a974ea0114961e8e25fc575da5784d08fe89403f2aeb0c1fdb35dca7a858017ee2a94f0b67612407e2ff3c96aac83965845df6eeb4d3bd381a3dc863943f44ca5d58f8fc574f2ee870051317e2f195d4bec86f07d9cc2a6a7b525fe4e6ba3ee96c3e29c942e4734c1d689fe58429af2c098772da93dc72c0d695aa22dfe7526fc49db4dcb35f151e70059911a2048f0aa88e72a70d8178af39814b9de82c66b4768b35e8968715fa0c35722549cd700feadd525ec9e921fce26d7e49c5babcf95fbd378a3fe5817259b3ada40980addd000528a52e3a62415e879fe2c431d6afd1232e62302616b2aa7146fde5ad096806992649da6a84494d651f3b28612c600969e344bda9143a8a43024dc6680ea650149b8ad965f8166c20d28a38bdfb1923ea241a21556a4bef12c542b5953185310157b2de4ab42e36e1cd40fce524677f576a97a0f8ab050ebcacafbe9bbb06f344e296609473abe0eaba5cd8fdedd7a8cbb72700e39e3d59a6b7c42fa9b8d7331b70c6c8b23556fcf1141f8551792acc10bd0216cac3baa3401620bfb2dc1001b919f0a08493c898345303931860ef39e2aa45b37af0c4534c0c11d997045f98ebbcdab65658ca69a8cd1b53d052619dece444467a11fb152377b8ae0bf0b509798e9d44b1ac829bc581f63fd638051c0d1071926d08ed2315c0335748286fe8e8080239ccf6bad1f91a9ef6944e1e8c14f5280869ae37d0d3e3663d050259a98f1f45d84b70ca5eb5443d7fc32017b15ecf6ac10e7809443382b91e2b6d3a56548dc7f1bc36589dd61772ece6c15d27393973a82917da28d3cea089916c7aad0bc56d9f615a2f2370c4559489a2345e7ac9649c009f32c5c8b761293e3d80694b445c47c6c3cb1fb4b23e6ab53c32230d924ff9424716740205221a2877dedb80ac2374e9e9093d7485f1d89fd0bb5621ae3597e978b44d1d4dd0fa2474177dc880c53d042328c1980361bc3f08a4304816e28d827f7b6df1b22111db26e311aebf1a763ea44b2885b6d9f0fdb8b457390b376ae23608604678de5cb982dae666a0f4cb19afeb18223056d4a2f5aa325c2096f869c02067411bef8d9c7475661d6bb2b853abc9f8514fafdb94fd3c6214a54c809a5140950827e57ec73ae8155232cba6769ca7d6fd11b61014894bc7d7a072a727373b04dc4a13b6ed60887d2dd928e8ea669c25c15d324e9122eb61d73754767ae41b7051fe148011702fa6c1e3acb20fd86a4336ca2cc87d806cdb689e6e4d087960ac12ec3290029635af8d12f2bdc65c9d1d1a4c6089d63f995e00f98adf3303075e87f3052f263884fe0efc6a992c1fe49d4de687805dda28c050206e79cf837f4880aea761c741bfafb533eee1fbecff9cef7fee3ffbef3fd7cf2c50c55b4c91336133e32d2dd9e425dfe092a34595ca349759c60736e5fb06d0e788560c0d6dde3fce1f9dfe77deffbfef39ffffb8eeffdb7fd67809f300707e787c49f8cb215a37df56991f84f40b56988c4dbffcbbb823a409b0e4dc684d167bf5fd1598f25608ec3d4420fa909886b954ab12ff0702764276c4206b6f441972d098d22dc402e898d978b50b6711f1268223bca0e7c6e95f82cf3dbfa17d0537f144355c0134b517004179716939dfdf5f93653e4c878f605894aee0c9a4665f821f5953af00da968944845c2a973d17729ac0d3b091ad5f6479e040a0274b0e5eebc87adbb34f52917234b3718b11354255175d42228154b44525285748e58897c258dad25de9f96189e540e239c2eeb8c24a242ad193e83baa81fc4aba88b7726ef2341ea27cca5e9a20c7e88598887da27df0db592603ecad7b7533a9dd45bb1b873bcbe017d13d4fbd5d0be9d07285ae60e492eda62da660da9ff570d8567d5a0ad196a6f4d0c2af07163a07f9c55e4ea10fa31743e89d9092964229a475d0212d82b5e45d7829a056e1622ce17b90b6795c31a06bff764408afe388415bc2170f6b99d8d4024b7e722971eea42bab879624071e967250a3b06542608bf6e20f3a8e6cb408f9f0064067844e065c61b174329250ad12c736ab381363f27a65940a8810854edbb54f126e56a3cfedb7e3226c1d16e57439b22b729bd930657760395366f31f9363b86cd39c8a2e412482bd0c2392256d02cd0ce7e14b3ac04e9f76967a93e808cdc35ef4f513a410073dca1863f9bf8a5b747b3caa10e1babf5f3d6d61587d34c84433c53d99b49f9f17294bd8b5550340c17dd323cea6931f8268fe5a20693605202d4b4dd0e919f4e818607568e1d73dfe9e5519ef5c166818449862489333e860a96c1a6458ab611db580989be30542c71c68fe39efae7e5ade6a797a5d34e4c02009c2354125fabdd6cf746b66614b80540d9b750f433d5d571128cf919944764381421385c9f37ac10ba187052e8d731897e009029cdcde392d99dfdf27216b57cec0aa18b1bba1e7d647ac42907e0a5b074e48d3347e67b04ca7e5c0ef59786522f0ea0e0ade14de76eb6c03ed47698a508add8a9a724fbdc5a47571707c42f8cdd8c7e2ab11fc8767a057c250b883e8fd88bbdcc0120fe9e1da0ab4b6bac46f675012451217d1ec2a0e6a53fb2d49a9e7a843adafc5d16711afcb42e951ec3f0549014de9832f2df49ba099bc41a70f58d60c987043d4120c8ae70156beb82686f4137fceea1919b875f521c4ea739f4ab25182fdb9af48f2e0a838fc86a893b2e893cfbd7a9df9f136cfe39af941fb56460655420c11061971d70043e73fe22a615c5c69f0f4cdd9d9e21efbe042dbc802b66907e5023c2f45ab681e1c7c81592250f50350782bfe18c58c6156162630facd9bd5018260efe1dc103e727435803188f671761c74ea1c937c19a10c47de745ea1848f66a088f1459d69809a00cbf9d510d2e2830b4296446676c4c476c54415c07738bbaca2a1667f5c1094d5cacd56626fb0bc9799c89642ba0396053fbe19d1ed7c9154d39c86e6b1c791319247708b2bd2561f22a287584440528fcbde107f9453a94da079321ccc222222cd67c6c343d2bf4b27606608533f140ce0230cd0ad20fdd1ff1b45af521db3f0cda3f87bcf838944190c5e79374dba901f01e185d5ee44359302c7a599d7e50fe3a6f30fd141b81b28d7d6b14bbb0116d40699a8d828f5c3c3a5cd304919a5db888e079440a947a76ff33246f1aa087c0365934effce3c51198863576f4f1fb424a6ff3e9c8cfa8d3d45e70e26dbf1b7c943d493dc332ae2740f7cceecde3d86c514ab71c29c5d7d2d4a67b64fc9fa43c11b6f771c96d2016f7c12a60761c0ea8de2e92a79ad394d59af997c61d358e7c6e013d5527dc467178c2e8c785f529a4b7e980dcdcfdf675e4a018d9e011dd138fdfd2831208338e735af072b1b437d454ead230c491517e4d70183b05991083b9fd34ccdc3cecd9a0261074065df19496a969993577bc5e96fe3b8c400574ec561d5c2838ff7d4eba140989e2e0b3da8be027af978ce6e115953a62c175dcf8d1fde6067ed3db74cd7d48f51018dc720f2c3d07d2c2a92a281639553c4ff5dc5dd1b90379ebf4b62b6beb890bde21e83bf50201464f1754c84ef586e3f754849f96a409b659e3fe01c428893047742ba59ac507f9e2f9e20b7760dfe3b402175c5659add14087d7f02a6c25053daae1175516bf326b8f8f1ea1e56958ca01d30aaa0e8f91305bbfdc755c72336ebbc79e8099a2230a580c0ad0819326b8994154b4f28695f87533e3be436f0a698651a1fcc4ed9634cfcf4d72b8b7d65b60ef05f0d15a09a92e9e9ce4358a67d69337b82b5443c5ed580f5e611868324721294b0983234c4c05d52fd1082b05c6051efb2abde368df9e4108bafddb0d9611c641511882b50a256829f8122fbe4eab5b32e4ea8f6e43fcb75ad418d00ca1c375ef1e23a65700f9769e1c7717d187ef8a83640f25b229a8ac782db495b32dca810d446167d832650d34f710a751b29559cc36a3ccbb45c3f2f77c014282b1a2b84cc1d5ad0117757da04d403265af10184ad1b8fbc98d7a8a678090f7360014e78ce30122d60ab582d190ebc58f70c73656d204649ed603576e9b50b32774118a5f3890e346d6f492d5b0e5c4543e252f71846ad3169aea7f2805755bede7729ce8f4a8ef1c69f1e4d5df69ecbde6a7ce061908177bbd145320047b6e06409b48c81aa8ebe5935609c21691a69d89083547e61b0d8af441d249e22c43545e971613b440014153720b1ebaf004e16d13abd8d9b4610433bee9e3229ac35c8e92bce13cc7976541312d4ee8d1eede17cbac5cb217828852c4d0c5067e3715b309ba1a6717e011c195d069179c79cc49411fcfe5f5373ff43fe09e218b0481fa77f3e495e37385ae7ec4e4fc18ca591c8352d0211f08d7c5a5edb076b9a855d241be961c969080ebd5acffccfd3783fec515e7179be746518d56db010a1bcecf99aebb7763582796206d92d6930f582758af0c0f0fe5e9222d3f34a141caa081c87a23a97233c78d28c462287ec671870596d84d2c20a0146023145d94cc69c15128a72f5945cece428f35af775dae9cfb6b0ac2e4417286726582a757dcbd571358e0fa67b0cfd8ff49ae4cf916e7d65e1a2cc0924759f828f96638907730e1061dd86180a3f5de178be8b1fe25823baa48f6c9ddde511d37b8b9c46782848ce6ccdb2399e7ce3ed923496bba0aa7b031361cf0b841f0ec08a54eb053f6bfd862808eb24bb2e5e6f6a5ba27449424b3e122b9b2649b09716fa6d1d0d66f00bd04f40b40c5c40db80423a21923331590d2f6aa203461761e049472c58ec95b756d031fd6be4b8ebca01ebb7e4b8388c930188e51437423242a699a357c46916d31797eb153f62dff9e45a0a7e51ce4240647d5bbbb4db2ad3fdb318fda062bfee35afce464efe1e79ce35e02ea271916f2269bd66d431e6af5ebe093c1d2a4de46749886f69de6c814449dfc2e6ca59b05c8f8e856494aacb6f61774a214e1e2bf2173f80b26d1a895fbefd108e0e2a4b4313769d844c98288bf687a976290e4312ab7db2ac005a8c515fb6589d0296dcdbb129b46eb18e18e13f34a5b610b72ff53d03bcd3c2ec272fcadf4793796ee8a1e0196f08ab31aa68b3d0bc9dd71fee9f40df6fe6d099e0841fd28671e723c7bdb1911ccc26d6197c4ae2c703e2bf417d5a0f568343d46636534e0b2974a7cddccd816dcf0b65420dc3824b5ca2a946f8611575a2b4d7a056500c34db966f27106e111b9a6c1cc3ef61af863a179c8cb2622755664d503774e1359bdbe1e13a3980311ae355378253ec99b8d7aa96d5fbc4d4327c94cb6903502c463f49e23c9eddae5eff8d9d5e46ff44d82cd6ed9dceb7edc06410e4d27f3f125120a45f69a70ba661e9e7b2766037cc0bf2aaf76dc075d1a54856ae2300b2d52fef3402798feab98d7cd2f562b3dbb54c641240587c43fa9ab3221e91fde81107deead8995042a23e29d4221c014f04fb5f0852604d0b489707defd046632fa3446ac4c147837e69c3c5792447a998bd6495d5dbfc364a8d76e0f7a9aacc1d6187e0fdfb9a9a99740661098724f7e52be75f3ebafcde444faf9aa8c326149cd515921f5eb09b404e6e35fa0fbae01324a3a4036862faa94ffa38f2fda198dab9fc68de6e46857434d916ebe0d0fdba0057589951c6df742ba1b206468fd86276f1402f0d46230ced404cd6519238af2685da32328096d7726ac193b4ac847846365416ebe435b53416a0e886b637052e6e81fb021530c2b93aa0872971e91883aadaf94b75d77dd2f4667c4c781565d91cd627e4aba818c12fbd16d447f01d069f1425e0ad6689f088a6f30fe0047bec1be3a50869b61f23d5ca401021e9feebfb204ff8e407f37e4a901450d8f5135f3391772840b37c9e5b89dd13a1ae56c16178c8c08a3726e3cdca94b589ec91c731f6d5b91b4e1c2e3404d7b4cfbafa0046bba8790cc0ca451fd75b770f02410f3dd5f1ad5ee8f3bd139bce270124dc543690b5345a1844e52d2cfb813b173ec859549ce5a0978e6191324ff85236d9c92314979d112d55d4fbc2e7a4029dd40614d8c7d25431f8ac82c46a99841c0c8cd868b32e9b5d366848edc6f54fc025b35bd6af1e2ab4b34d4e940b68c6a3ba18e9955f15505a4cff79098c49bdcd1a023127dac736e4903fd962cc5080daf8b300d5fb0139e69a8c98b0099b8ffe115f9c8212f21c024299335b099c07e56edd5fa9859df726a9dcebe2be1b5f97e50d4bc7052c5bf58eb8ccca4b363bc34cc91067e5ed91dfbd9b613f82fe63eba2bafc30611827afe94e048ea29de06a39da441b9a4a9bf82becd3ce91ae19d3ad3e750b3ad2331f2d9d50251eb2b4a176ed632549b0249fe8d63b24f66c67c49c0a8a7f0a3a733d2cfbb13b9167dfae859cbcd7beb8609c8621fbfb9cd95c65f4f69c3931b60ebb7c883d675e2738e2e284a8fa508bc30daf339c143bc1bc82b2f95c61d8785c8177e96f854a94294f55dd0a78742af086ad882d6fe4f2d2946a33ac6790007609b35e7d2b88023580dd4d7f5e865b0af98bc1e701242f7ebaf71b4b297c479f8662c58a02c8e5ef5b15051b1c1f9ba0d5fcb74d6d81c3ee878d427b2b5cc18068da4208b04cd535c565ff7cf1788e88513c00b5e20de3a4af02d93e6032041a40fc10900aa601a5b0ad75e1c2d2539d626e84ff223659b3b1135bde1179ac0d307c11d598a143500fd32a09364af559fc762f49882e6629a7a3eec3b587936b5a57e9de31d2b59b48754281d2343b272814bd766e2e4bd254a6255568229e4730204b451abe967f7319eed1b19b91dab7d0c51e188f70481fdc7bc16f36077d392cfe53eecef64fc9d6e4699c1c7c1d9bd9f5656b34039992b9c739186b78a0a1c386a1f0be2d263fc8d18f822470f957d361ccd6c4b4f393393e248095f91b71fbca64ef0c95e3e61c2500fc25f675fa4bad66d9eb6c5e28e794d7136e8fc2ee53ed37bfc933ca50d3440f237db7dd0e6c44b1134cc6ce59ded23ab9a665b50298700c93b8b8ba2d856b1915fd92c5fc5ce0b8128b864a1c18c8fac8cf3079852287aeec1a263d45cd50dbacd21743fc0cfd3580a38274b3c5583532fdc7048fc58d5e2c3b1032db77278f00d43090a82ac064c5362f4596a2f76982f2a0027936a79e63ff3b4360eca3e666af5ea0c3ce2c34a23f0b59f812c0cc1d0488d12c23f44c2ef4286d6ebace5b5854d8069256391c7953abde303f51cdaa04f837685b36c20deb92fc16ce6c8c78b6ca63ac9fca4cd803d4ad2d40136868a8905ca58cf693ad8e374dd337358822052db85108eeb72b12fce36dbfea75bfb5f02907d19d12628a6e26d07f722e96ae46deccf50892e195eb09ad95c81ed42416c401f2575b361ce80de5c8999f02a748498023e8c9c7700fe131deb54b17d1b91c0713395edcc90788cadd8e19998e1586e62bc810428c48c0cdb4e71669564eb89e563a5be889b87273e78eba9c1b697d32e72d7598548b6fdce915963f5feeb1e06643ab8c9ea5b8b8941b130169d770ebfa7efd9e17539af52dd28de6d889c0941d1e1fdd365c467c6739d8aeca886d1870b0d423ae08b497deb80b343b132c47968201b188bdd76838cba32b1dbb266ced0b829b01e7f2ba6d6802d452cfc20476e18eb45b6af0dddb01b36a86eaf968099d6510b1b76704763d884c354925bb0b42bcc10f18a123dbb80c46d2b34cca7691f5a6c8704d2f2c0a14575420f6d412ea846200f5b6516fde3a0d012ec75170d88c3aa40418885d0661013915e8355fb9fa3e4368fbba2dc0d662f7637fbdb659fa36050c91f1dd04e1c38f97eaa5255e8db0df1b3bf9666c13161dd4ee12e1fee77a755d0df77e3664f493dec4bf6a1c3513959adef1be894635a02d827367fe219b40777660cc5e4fbf51e263c59d9b5e72a3fd448cc1d3f6d2954aebf6d3c6b2170dfa829075cc1e22c0aaa37a378e7f0f9d6c3490cad60f14dcece5bf70972ddc92a9c0bb70fda30d3bd111f4d665696ef659aa7ad93f4b423d7ba3bfe30affb7082def19b3b4bdfdbf35df565a2e738a63961fa998f69d15ed6d6ea33daf04da4f9da0b417b6c287dad3cf8ce836af4e48c12c8329fe54836b0c439a327c136c78e567f28f2bb21092d814314e8fcf68441241db59f9678bf7730f47ad0148423e914caf16c21e84f05e182db71fd33b2e7f05b14b8bbe82463786dd4f57db34e5e8f3e869d0a79aa6c288892d189aa6026b628b67a6fe9733c310c7b0c934553694413011294897a1a5075efa99c7a2430ad863d5df4247009604d28afa819937fef121d4dcc7bca377e206ee3e30e7af4e58ccdc0273b5fdd618f560410c47d5042c088a099a5f12962b4f38c1a42bc5bec2ffff7bc05e0028af878580412034bd8b18714da314ebadbafce18a62ae15df43a0f4032e8dc3df3e8b5f6618e317467ddbb094685f3d50862eea23cff8d2d0d365a65fbf60de5bc2f25988137ada2705d69de60a52c1737dfda3bb170234cc180e6b908177dc96e2af0fe27be280430677bfb6e6032a607be0374b6c387afce2fa0d48ef057cdbef92778e80515fc04080c71bcc24ce883ef181608326bfdcd5da564f61ab809d3c61d96c28ec83a684119788f42999181b3c263474495414d9131bdc35829a6bab27df274656434d228ade40137acc3a3a2c144dee60ec518026f8dd7fcb9b947223d23d32c679285dcda4f90819baf0395f9a6a70b08393a794efd048c71670d02267403b142541e8b75b69d2b8d4e57abffe12c3ee9134a92067c2c00c53d513b38db9b5504a07ecb4d298ca07988a4a271e7704b3be4c5a4bbe6b78c72d4db42c6211ec191990ecc72d9134c64b9214f8c66272fcb3e9832627a46524e278c5e903d61456a09ce3f4014e6b908afa4004b822461b140bcc7121d4187aea2cb94ca3baa8de64aecdd1cfdad80936d279c58551b939a422d6004422d4823db6ae11b6da3561ab2c4488c98e693dd7833a23d7f9f8bb161da0c1eff715cf49f8f2549ecbdbcb4e6c99f2d8866dd53969cf9c305ad20fe261ab4b14e15c63922d2804a652639a32c5e223cb10bf021a4c93b36b6f7c42257ee60f48a69a3f98d35ee80ab933d2f0f36cda81107ee257180ce80f5a20a145353434e74dfbbdd9d822c3123a2e83af13e5373f10eb2c5bb8beecae0d4c5081b32a6a2514c4881e5c744a6ba362386e33d60405272368000c7707a3b917e20820885e4b0061e1e3f2da9100c2a2bf71f71a2a0644b7a4a8ebb697d871f0b1a513a658dbfe4042d47e043e7611b29ccccdde860348c442092119bc56f0cfcb5a7540289f2dfafcc6e734e2a349c347cc7759d020f2c8a74d98a25ff5d0abeeecf96ea07a2ccf2e875084827da4db6ff611759f31a5acbd4041807d5f00028f246e94340f85574097af72a98405ea0eb3266b8d76129cfb232e991653a427fb10e9bce3f2bb55493f021b1281de47dd658ae00a355c09d806b786401c0bcde9500cd2ca7e30bceac600275737bb38e49998bcff00398fae99d90e88ff3de02e07872d24ec3a1c5a91bdf1d61733f18ab49e423b9f598cc2408a42085c21684dea961038f82ba760a060d6f15f59f719f21927bfb10c25e7cdf5c67c078791abe6dfc208615e0b17b033113fb52c39f3538b84d00de2abab3d7b60604a42b0191fefa298d09210425ddbefbb101bb62f447f5f7329106971b3fa875153174e60f4fc5a0353b6b770a0b7ff25ab6a87a0c0ccba178399ddef59c1cc90b56e775bd03a7ce4c2cc2f8fee7d7110a94d3dd3f7c379241da0d09b14c9cda839f52f16b4496782b072997195dd5615887cec34e709beb9c22f10e538bf5aa59f35bac64f88cf7de6fd84a6f38ad3e17c00c668310b0a544d6de4fa4a883d6f787e7b6385b223ab0760c6d4725305d1796967d3eb1519a734162ec2ec97653905a4acade8229a6b31df1afcebd4edf015223a4295308576b902d34a3ea147cf60ccdb91014b92e18b55e78cb591cf827a725635b688d8f71daa780cffb44de864d208a616125f7bd876d2132a7a6831032ae7cff788c047db404972e7666d9dafdd93256394ff6da826487880448fe4be65315293c71b2fa282cf06de4d8ac2e574bf31646e857278fe11c12ef602a5bd5427ca1fe38e59d717dce3e484914b228c4990616a6e36d0b0a9d6d46d91e98ba8e7d360571ca35f824d1ea758b5770d4deffc663d8730f7f52545cd4204fb70f2baeac48d32304edc9e5db598fbfa892d08485fb87448e6999c3b99019830a83b30769c8099e39c6191437cb58df564e36ffb2c6479d92927320d03c0a4fa0a80f4fb4b70ae64f3dffdab1bcced38a37535c1a3e9ff6ac05104f296e10399f89bdb15e36406566bebd0837c1af7703d8808dc0ef3ad219b9d25948c40ea61a1834ef5f8c6067d31723a6fd83b90482c0467407257d5c8521a377add94ce25a25282d7d947085b50f0ab79014df99dffde637bd25df72c397af5e5b97dafeb46ddf9a4786cca103ccb585b397c69606aa7e204807ea3f00f8ce8a63b932ef10acf6b53f3343f16f9f31d1ee0c8c94044392f1e8636f471c99bdc85cb044ff67a69b71279cd85d80df2ce62901f1abd0d088dc1245f96990e591c4aac229ca16dce0aaec75a175a85f40501d43ec3eeee85310db889dcc89a6cb8fa43b2b5f42d7236f99e9108585194c00a34c0fb4c8ca2395e0a8c1bd6022d09e8605d3ce6389a0932955f722759679f4b263ba1ba3cde0a88738e2a1b51c74062ee7d4ad99b7d85059bae38a093dea61ee6864c1039b7278dd37d2668f7e542ea7bad0e53b8a4f7926cf2ad604e1e8231b45f5bb3e9b4099d64166056822d7accab8b7b188598e07a62d620218cb2a71b116b9147797f4302885a3e1574455815b84ad80f0325c11e4306c67bd34d5bed015e3e95577b32ef21760ec0e035b4ad16bfb5980bb3327dc374713a800111aeb4c4d78aef7da5416d2a4a12b13ffa3bc15da7d4406399b85706e83562f17425ce89cc0ef7aab7d4b48837b509d6904a0ebca2fbd4b4983f17f258b1685da3ca70d7f60d87e212875e801bbbf45e609d121045e399d397f8589853a381f9aa18b625b394e37566d0d2351400155a89c7e6a0306ea2fa20e36dc7832bf54b5dc03a77b4fcba7f345ae39328ecc029878025afd62f3c8c1434651a7f32afae547eaca69a2a08445d69bb747eb92f0cb6c9a84b13a12f3b2b785b6ed5b3106664732c897a252735af9fec3e8af84146c13691c003e22159e80e78930a15f0b5ecf10555af5a1054da19221af112584ca435d9cb79801c1b0b1fe42ab5189b9b86948e93fe77d1464d43d0ecdb525b6b328822276a55324ac0276cee332a6092e35d599cddd8c45e9b36845bfb7ce55c62c94e9fd49baac6fbfbff7f124be02202b7307c55aad2707e660b959ecc1ecb46dc98b8d02adb309956c1b5fa48efd34caf2672f51df8405d0cb04c50b195b92add5b53858677d3e49e71bbaf3428cc2985d2e2f9f2adb6f119edd3a0b8cdbceb2b5d6d36780f6c0cc793d382904736af214c162b3d529b699c306318ad8ded88961a756a22ff848e4683f37f550ad4a7d45119a0158b4d673fa019d45d76086f0a48b8a57da6daf31f2b2cbb1a24d541e772e31602904349028a00360fd724e78d8407f74cdf81b451501184590c9848c2a129034932c176442780fece248cde27c17485e9f40c83bc7b098e039601a462c4ca409db6f374b85409d5a665c82881c7726d49fc22f3ecaa29c3445711bccfb87141457c41aa29e500e11d498eb254e4be666fafc4b5166ba6f72d1cec98576701cfa1f87f7e26da20e6522fd6b0b68bdbbd24a420182281b5d6aab8921d48d1cbb1da38e7db1e39df4bc6ec4bb46d1ff2bef94eb8127f3803576a25f2439a70453ef968e065e8e4437c845f67d826b7cd5431f2c18bab0f2809ee71cce63ff71337fd44ebf3952abe1a0d6af558f3aedf58495a8cda0a35a67e51eb40302819749229234bfa893a9093f83e895320e107fa3fcb2105b99bd27057d2fc2e20de2771261fa3a0429104451c2a86c82a7591ab32a5f4569c0574748ea256c002e9639a534e6b6f013a0a278f75fae48a004ac47776e6875825f3a661b5f5e8510cf14eebc2c79e153ae689667c5d84020f86039209de5d83c531ffc8d0582ba2064107cc81342b2ad79931c996acd9ef2ff507566562946ff1e0e2e4478378b27339af08280d382c6b8a3d3cdaa4ae94e7a1ae913ce1e9fca5deb4e1ef88846ccb9136e7a1bb39b9e321d966a925fff7b897aaa505f9036c6a3734ce546c04a16f58ee3a4004b0aa711f9a5be8219a88eeb8074801f1e8de6585324d7e0e4044a988918b8ddc5eabaad7ffa7615c5c2be77607b0f24fae784b4c4851e00c9a8c3583dd8eeb4f607d52ada056ab55af6698a7794307c00ff17759a5302b136183688fbe48cf05c4318e5eb0383ea31b5c6edc74a81ca846e54937c4f0740e2d3bc98fb570324a63c1da638d80fcfff176940d7d2c86a1b2f28ca5deb925ee765b8f52f3b45879a509f6b0422a63b57e8bb6c180cad7d88844fafa6cb496f3ceba306857fb0121fe0afcda9127e0cab0ad193d1ba7ac160b66818dcde5992cc73dbe63c61e188335fc9fc2dd3585e492acd607ef118a4348b82dd03031e4b260488ca64ac3a4e945e5f7aa58bbab0495a4927032901788a051d971a10f89aef5f816a14a61d603fee1075a5231e94059ae8f890f8e67c30f75b74df4d3e44f0b71182ea5a23cc8e977290db23f6139bd7181b403aeb475f218b16c76652a87d56e0864767df0748c9cfa4e642b1f7d55b9f29800a96661a43c46fc2825e72874aebcb97d178c2b8e762f67229ccb05c8ec39d1771091620692997cfcb65345446eeb53e35705f4af9ac19cb4b290597824e868d11bcc12dc697f39b77d06edaa234962cca400dd61c66ccb76d82f993b22845fc9e2eb0b8c8f73528d8a4cc0557c83982624d4a077a348dafe609c4d7e0f269d1e416b871b84a8401607c0cc8713483aaa00a1b989ad95fd27670a3a5fff754619083fa4d6d545dd618b820b35078ac49ab65d2d6a6e1cc5c62c05b75f6fd33de8ef37515ac590107cadec24f46a874d64b871be9e3b385f2829080192245ae3ed88e6224b7b028ad219d4b899aa770eec11465b555ffac85a69260f590a1d6ad264200ec362c638b9a64eec6144ba9746fb0f4d930de621f81f9204592cbf7353acd60bbed03e28ddab390ee998119367e89fa518d6e55040ef78b033b0ce6b53f8dbb94f3aed2f018053870ed2e16b9a4937d98cf0ac6a0a1dfac69805e2be6817beab632f217830c968858c8613baadd7c53391bcee6b9fd84485f6319440d264d5df15fb381b1b51b8e2236d1b2a8b846d0267928bde7446de12dc0839f019bf221ebdf62bf3bbd5ff8292dea080c3dd51f71849cef7e1e0862bbe91d8c2f70e938f0c51b71f384b1f6afc3f42ddcf6bdfd711ea62b944168b8fab9f67b219152a766fb47d2c1463baaaef825c04048d28f7a9988933fc72cc80d4677dc36580831f394a42d791506416cb7de22721b25c20074ca4a147e839f0fd1204cd5719d171c7f2789852f47aa6996b43a61c42d3f3b426f27e77428760ea9081b42f2c95d102e58c7fb2ccf288269e314e6847afac5ecd557deaa6634a56c02753cee23014747966f000227ddf6866c75b0a0afa02639df3afc85c011411097f7f0dd077b305992349336865fbbb925e608125a47dc54f54189b4437f7a2300a3f85046bd160a4f5f7bae13b4a7c8a0cd5ae2df9efc2d5a21700c1ab33331843b4dd741f414236ab8dda496bf32081a73e3a9373f2275881dc90d7120c57b34fc80f977008a4227af179722308f7268967c9cd7e606e18da0e33aac02ed40b69ad372e42dbbf82b033ed308b063ec0c8cdd723177055c1ae62f9f449824e372736d7e6e40dcacc43364b4c2031cc236952ab927ec81ba90fe1be54a78466f9f526ffc3960834f1016a89f5515d400abb4a07cd574ea3d88dac49a7bec1462c069d8f300086594aaad59847bc6f1e2fdded8fa5c99651f85859b7f6ea2dcdfe19f267e89c48978ce298f2dc0b20f7ac194531c9d664da8ff4fee06465c83cfafe7b13b9b7dc724b99920cb804d2048a0579f5f6a95802c923acdefb4ad4b0af46f4539e2336155cba4c1edff9d233b9f3e453115b29620ed1f887495271f518af68287e6f357e1f0ffa342840432c8164eff1e73d690557df93c77ef701e1c75e4f071b8f65106a813c1855fe62c0a465fa37ef6f374a29cd86663356fb4dc760f5d67bfc200b33de67fc0d16b2ff0522fe4100221ea2497f1bae1e114f197d44adf7078be0bc3f58f4b5bec6583a002c008b64a79eb7c241f20cb1c409a2a48980a4fde85c6227fe5a8d0c70650b45e9b4d335e3ca75ac325d6b69bd8cef99bf64462fbd564403bff4a96cad5365fb5ec1979e245bfba53bc9d6a1466bad0476fcbe1b7bea630a3fd732f6cc49af44352603d618f5b153dd68694f18af3208693cfe80489840e4d5e30f68f5f3c350de0744e3f1570e20d3c760fa345404d3677bd1df992f9aa7cf336dcc17ebe96f62274e276de8f7dc66375f324fff9b33f3f53d7d181367bebaa7988a1f8d86f8cde897dfeca3a23e5fad23a23bfed70686d82b3c45144fe8d00310424c124bc145602b35ec7db5dc11adbad53881bab13af951f96bd5bdff37f3178dc75b47a3a3dd88647bba59afec8868d9bf020a440cc5497f1d11cf10311527fd47114b3946c2f10422d6e2783685f38ef311d829a09c71c524c6971d118f1818aac454d91f57d1d2e22f90becfba6e6b8d5d47d41571d2bba2fa1bb84f17d11dfffa35ca1b99f5f575f80bc6cbe6eb6f6227a13b7e637f157efd568ebfc2affffe92f9fa3aa4bfbe29d5157947140beb971d51f6225d447d1aaaf14d123c058e023f3149ac03ee01038185c052262e6292fe9f88ad4cd2bfa1a87f47e1d1f37d0f04b7ce180aafb08779f01dffef03b223865a12f697182a973889ec5564ef8af8ebdaf7ef88fcc5bd7f5764396ba5a654069ff29c1164064807791b1fc0f3a74eb9c572cf8c7dd560fc05fe5c351758cc5767c5845d00f4eb5a30bfa1e8d9e492e7778cfab46674511ff98b25c384813062b15f16f82f7b853cbf87cc97cdcfefa08689304b21d97ec97352e53975b8cfbce138fc35f3f379e62bfcf964f2f49712e4ee974cd3f44f099e8331a1445191ba3279fa6b540058d002a1617e1442c33c56ce1cae64f2f4dfb0f5158ce593ad3c631cb588df5f82938679ad650d73314f660eff62f2f4df307c9ab559abd56e9c40e5eef6c64e9b621a99b0a646b94f91a990aa55b97fe5ed4f372c5b5f92aef66a5f1a46a174d31bc158de30672cc3d6c718cb27c956dfb4d7b4bb678eda01280da3524da56174aaaff851c3ead3d391377953ee77259ea4a7a67a6a6a2a064e8b5a7af331705adb8d0d0b7bac61f5e9c99b7277f77777777777777798707e75d23ecc1cb54a3feb4b6f27b93718624fd27b1f47a06fc7d2738582fb6b548dcafd35e266a448ad52a96c479b5191dcbf156d49b99fa63f947977dad8f3b73f9f7ad48a954a356c2bea9e7e292e998a89dcdf0414450ddbfa9b8bbfb6bf22f79714047589eefaef96dcde6fa2e775e7fdccde5832206f330de0c46eee503b21b0d1b9c58074101b201d847bc9707bf5d75cf98474c71fb461ed987483a98009e360629947cc2b3540796a9063be647ebe4f0617e87009e0c35fd6c84f81a8d33d793361e46bf5654d18529f10662150083d843eb8d1836dbc19a9cc990d0c16bd76ce6aad9bab613eae071eac218a80e9d32d0c519f5ed2c21296d83f4cd21f47ec2873e7d592b98f5d7db7eabc5f827f9634e3b7a20874014873eba2ef6b7e136bfe462c83e49b0fc15f35db5673f3d5fb786c3ff33be88d08246fa28d58f334e296618828dc1c8e50135656cdcfcc7aef0362f5fd3898b9e6bdaf839acdc3b8f1ec6c0e67a8ccf442a99b64ff7bc35f0cd071e1983a3ab98e644bd100e920b58243f06c0d84ae199cdd51856ef5c646ff7254dc5e6e1b77549d29e5c3830f406821ad31fb934464ff1aaee9505eb609befe7a40cd2394508694fb1dde4dbf45fa9b78421d817490cd9b86192a2a56ab15aec215eb2a31b25016078b83cdc1e260a16c0e586676b7d30e6ca6f998adc290d6daf6a4208d6adb6854b36dabd6debacaf96fb15aac9c7bef8a8a93ba354887243fe773745ab4d65a75874a2c0e4a94e08013dc80a7bf7afa98707e735b0d493ac99ed3e9acf3699d93c706316365002c59706e71ecc0917560a161293b5441bb3c8390d52a6d05d2b48d8ecc84d5bb85feba8fc33efdc9fd0818c736f698389e2ea193ce9e78b6b26823f7db264fb38189253900d18397da4f49c7eb64ff84e2852dd5abb4d3ba59ee769e378168953b2e310cc39f788557b87495aed0ad5cc712fa131e5e7dddea03afd4c735ed5c0230a273aaec4f9b502257a112f572287068b1e159b27fd9936712d9fd8828ee721bdde1550c92298865c43ceae4a98e86938452a0a7bef775e021c75997c1e1c6d51b819eeaf5bbaf038eb3375ccdd0d01a9a1aa7cd4c753e286b3aa573e56346abc12c1f17ddf1ef6451305637abfe3acaa370cb6e5fe9a40e6e3473d4a5cc1d7f2b58b23fe1ef51def63307964de034cbde4eeb66b9cb79d8d20da7841f54f42b84b2ffd6382d313332797ab4d507721fdd68555122541238b83f4a20491c74c7e5dac069a00ca61bad2a4a844a0207f7470933de777b1d7e11680a990ea1f91593f4b7be857b915d88040fe359fc9839dc8ac9d330175395b5c8fe515cc7dd8eebae4c58ef8ab2c270bb5c06e1f61e2ddcde5fdbec72d636a7d5b204998e4edb12f68733dcf6a50efd927c715fd658c5e8e6375ee112bc19d5aa53cc1d7fc7c243405370dad1add7bd8a6663b4ed6bd719769651f7069264916a8a690add6d5be96d5b69a743e7719df5b8db95eac819f0e4d0cee3acc7d97bbb7b690064dd57b17b75cfd5e751df522057afd50383a7ce9df78a1d91934ea754ae5f6bc5f67b6a029c41387ed6a1e0a978422561d5bdca5d01920a661f55e75f32489f3609a98cf7733af1ea93939646a3bf6d1fd0cadab1c42209ae1667c6e08ae45659a695f3ce837552f315ca5f76741ad97e62bae7cb1aae2f491b5f8ad90649906d8c6c71b215bae0cb9a6c894c1efbb361e050f7f866df7a4fc7fae46485720a3d2763fdc4340c6421a861209150c3c022430d038bba87c8cc011a4d1e7f9a4f4cf65550762c64ab3ea09bc737a2a5d93c8cb7357fb16a47ed438928e02931d09945e02f671234824cc54ccb9c588c4c6d72534da6303295c9f426e99e08966c99729986f5378f59a2adb9a53585acaadfe1e051c3ba68f6f8fb1cc51ad6495e63e90dd53dfe4dd91f4ce2118ca5677049c37aaa7b3cc692eca13896a1ce58b6c297602c9fcce1af3a221a3e1e4b57f85e47d419c6731f0f7cbfd5d388f5f6aa9334ac12750f54c3ec54f778c3be19d1d4c78546a419f70a23e12d1c0f4f308160c6d4443bc184446f6122a29b607ad25a98746826989e3a0b1392c6c294d4534c32f4124c2cb4124c433a89a530485c5a6badb552ce2e6171c412edca9213569694905a2ac288252855963e50c452132a4b1b20622936656906294b18885aaa40942362863892851047ba4039f2441047a69e1c3102882343c88ef4f0c311273e1ce1400f4796783842c3078e10ed70c4023ac4be80ea6e4c0b2e070fbacb713656d5350ead6fe558bb6ddbb66d96d6181437c4b2388959f1402caa49ec071b62383cc598d4106bea40cc0893180c4b622b702016a444898b0d28599144290a244a5a34a0748493d2942625209894a096946a38a2a48198129292529124a50b202909394a0a8191a49a5192144d43d2962e4a4aa26748a2d219480aa26548daa18b24d9d031242569189294fa85a40c3451520bed4292506300a98b6e01c94bb38034455f0069d6449096e81590aaf41092106d01241e5a05240f74059094b410d2911e8254d442905ce8149054e8a0232fc61c7df9e2888ace0b2e628eb0745d4885398ad285c007304737745c747709b785d71d3175578b8ed65a6badf4724746dd97a317ba2c8e863a2f46c6745818d9a2ab19a9a2bbc2085567851126ba2a8c5ce9aa8c48e9a83022ebba18c9a19bc248073a9a11a74e0a23471d088cc4d04561844847654408144661b8187979c2a8cbcc888b134659b6185d69e2724653ac965c5bdfcaf1eaeeee5ee976376edbb62779fb7afdb7add65a478edbb66ddb368ed61db234c1a2646a690923256048c288081246428e0873c58b952e525c8cc852e54a1153a83c216287294da428895a8a6234040c42d040048ad7d120e406d1dd30dc13aff37281e872b929e342802c1a5c19c0141d4f603be4689281121c4b3e462f1830282272a348c8056104e0c5461717979e2c01b8c233a5c61300ec6041931d25e4120da30a60a06006223a3308991166f42276792e136491e04a0453729ec8d82146131c25ada51b231b18606480082b03426ac2d07899e9127291c9025ef9a6ac9e5cbcc3f53cd02db94e5c929d6193b280a87a9d0c2b5cda517a5b52dd954108e7ad6fe5749752ae457d7cd816792bd905d7b97ac0d55a6b758de47d3a96971c6fadd587942259e4fad55ff55935dc67fed41a5ea0b472b666dc6e31c6eebe6d9ced6c872f57e977cf9f9969e5bc0ef53c9d96878e715871fc4b1db286ab7fbee7afbf3d5e7d405bad15c432d35f659d97b35bed6e1478ea1015c5923c41c9a666b49a83091a8a257982924549d16a414344454f50b228a9a0a126eaa28eb96a24ed67ada9508a0eb9c86f85376ae6a0954876eb94ecd698ec569aecd627d9ad138cec56d9ad77a80369d4e469d937856984b3e21ae1acb8279c154f9dfe7965dc9f707327eb3b69b62212efa17ce6bd87764a5886fde38430f7949b471085b7672a7a1e51b899a35377cab25f31f7d329da9aeac93d5d6a91c4887122c8092127849c081223068c982f5fc4800123460c982f5f6a5faaaabed46a5fbed4aaaa6855545455345a55158d8a6a93c1b958b60c6ea4fd01f96fa20c0fb609cc6d6626a0dfbe1d29f0337ffb203f3be88fcba8ef4f451975e4e18fa938bf1e53b685aa0c2283c7946da1caf44bd99659a62e96414c68d9162d99d216a334850d504366e852e54b13b90c5d708553060910c1450d4324714942c9b5e420430e34d421554a0b5cb2cdf3c90d4743701d4b1072e5b6fbdcdf9f7f476b9d84d4ce86c253e76f746e38e937e0cd0da7aeea247d99dfe138fc058e65671c3eace9b383eef86f9406d6faedeb7c85bffd9d2f9bdf7e357532880374212635371f8a3f4eb819068651b38db8005104273db346a6edc31afed6767e40375dadce5ba7dcc6e570745523deb4864c3066cc982f827eecb3864c306b6e6ebec6e6e667b6f9fb01d98c38c21b9b1b7bf3f7ebe066645d133a23b1a383091be76fde464432d4fab11fdde4afaeb3a8285555157cb2a828185a5151b45ca00f264f97aedcf7555f462743463f3df5f7504deef9c383fb086122c29a0cdcd55bfac8ae123227ce0f4008e1831e2a82ea39c54101bcef07a1cb993bf571c41a73a77e4bd4617323d787c1125773a77e8d38e70e8d78679d647dba81070bc8dd09b9e351331e4d9840eeba118793375cdc23097f8723593dfe3af8ccadc6ed4371f554b6ccab434b849fb7bf5beb863d0ed1a64684ddfffe1bf7adc4f973c78a252c7b686ce5f9c409d5c67d7d9afb9b052828ee53139b51b69835e54e925bc6e4a77a08df30ee674a84650f8d30f20c4288a9039a5f36f7ffa819c7510fb9dcc6d295fba7ed5876518ee28273bf122fe6440774e61e7336df9fb2a924797e3d6cee60467121d7b7198793dd2fc20720f4735000d78ded3ba829d99e242c3ba8835a68d3b1dcf8afb28736e8a2df9ee050c3d66acc729fe626ec3ef7d55fde737f575c2becee21eaf3018814daef1eff157f9c10e2cdda39793a71ce1e316f4fb72d6f2cf7993f2ecb73469006728338e676bc80b726e1fcc975128f779274b97af401e8bd61d8c359b9ec2f4747e7e9d783f2e8c9537d0855a0023db6da83f6b0d94de0517f7b1efd75e6f498fe61d81f8fe9d96f074e9eda160ba68fa908e432d9d3938dc5ac842525cacd7d40d64a983de6311aad9f321830d64a3841b1f39c797e3c68d4e4996f8b90a134cca5370365d9411d401bdc3f868bb263a25ae2a37cbd294aef4b762c941db380bff4b0c835b9f466b47693cb2b23f3251795c1ecf1af113df002f88eebf01d7f1ad1c6dcf19f115d0b006b7249f6f8c254f27c2a65be2e0806acb9c256ceaf26cd975f9e34359935bba901cdcf9f9930faf387d23a84c9c9e3e0cccccc0c2873d2bd9a3703452b1596de4f1e25d983466e1b9d4dc1eee151d500451e1e95930e04c6c2cf3ffc87e792ecd139d3af87f7c4b83379fc411368eef76693c79f0465578604f5660dab43fe9af157f8feb3a45f2816d94b5afb846adec1282763982ff0e2b10c7564c7ee79e71ad42f6d0ca0c440c790eba77ee943bfcc20a300cb37e8d21d077ba45f04fda8707f685e85f087f597fa704f7427ca5f9ccc4922e68b0be2868bf26652d4c79392cad75f95c8497fd51826e95f8bfce7c77d15fb474644529fd6c728dc6c9f86e687c8b0381a11dc62daf0af11412d4ece9cec628255504c18cd35b0a31013fa2ab47e986c99395008b534ec1b51b8a013f3b57a7f708bf611b2ef0f7e3173c854f50098a070ad983a98a0d002af9839be7713e89831193f8d48f343e6983163c6d0fc0e6fb1737fcfe29ea8cf05a59c0c62bec0232639da704ffe9e14f5016b9ed4d0fda1f92b053cc287bc59f6076bd4c76b3c78666666e6af93331f10fea111e7cfcd2b1109eb6b442442f6ebcccf7856a1f543f3551cba3f424364eaabf04034a30af7a73e4b1c6afdd471c81cf3536b4624347416b2f2caebae8e213de687c936ca5c507e18945deea73241140369f75a435c210d1173882a4292380d89814acc89a8312b3cb10273482c204235c4510e2f3069e15ba2bec8e2030f34ea4ae1815ceb3f3944aef571c8a4d092c15c6b9867540c4119274f99144652aa90d9b27fe3fba56860854c7349e6ca55272f7a8ced2ce7f4e50b272abc70e222c6094b174e52619ca284c0c907304e3770e1b4640b27262d9c8cbe38bd9085d39097a63158346d516baae28a262a2b9a98a8a2e94a5593142a9a645d9a7298a2a903b42627299a8e40d01443144d44a89a528082090c17a62b0291b9a8044b1a4f7a16aaa9012080007316002020100a8604e2901847c34c09a50f14800b7786425c60368f06226118c4501405310003c03c0088018000000c200001c213000ea1b7ea934ea7f7f290fba2a6279376e0254a4415e9c14e591dc27b047fa6b16c2a347467703123de8f4cd1b0062a860bb0112658d26475db2235ad71d03d581503c22ebad153a43c8da269905620a991ceb46dbd0c3dfe988987f54e2e0800d9888a3a4db30c20d10e884eb9b4ee9f218ff650a9a05d9500e27d06421dffbfbc4100f46af900a86ce6aaf7d24b4f5bb4465933ab0f93ef07d6bc9d9084dffacd30328c20faad08a65369f8087213abf1b0f0818a4fe5543848828b979f70a3577002c5d9dfc807b4c3afd8fe0ee00ef8196c17fb147c55846d6f8c95b5efd1a63779ba65ca5303479ecebc94163c117b8f199b9d0933aed4e166f1370ea8c630cede6534fff6d234bcbf41a63282cfa1a622e2e95a3967ebf74b08bcf630c2c21ec46c908771330d58765870f854c34efaa5a4b3573cc2e51ca2b57f3aea0da6d891f2e1f189518e4989bef869ff6b80e79945a4c9328bb0e2c78f6d815e39b2a157074971efad9edc1f16c2470ee14791bd0730c41177decac695574b66fb93c260c7f8f5c34925d616cc19e671cb1feade0d7da309ae9679a1551466e191b7f2cd2c23e52cbda60da408d5d74ea5a48c94f1a6caaec639b8f07790d66f8f9da638e8e28ba7f9010e67d0df91f79e919ddf648a75460a8710d3c923bc6aafa4ea3cc3b62e274a1c460ad17729920452384b8530ebd135ead5f3f9ccdbc0e059335346ef5f03c6e278f4c6a4c424906e6d040dd3df55c63b11b7d73eed40f7ae9ca720a335456cef0634d38480cda41e740246b27bebd5e8b3544f34c1a133e6554069ca9fc3eda047f958a421090140fa4350834f8a84dab2ffa7210e24f74ba7a380132d6ef3060b107a3baf4682fa073c120d0f1c0afa1c067ca3232304ff2223fab0b8d0026cbc55c8d806a0569791587315e2a2a6fcb89518b06f116182f502649564e65789a4514a8023860c912e19a1732d2248edb029505c06f8241fea81b4f3bce8a10ade19e569787a8865d604e18c0cc84db308aa42575f4a9058285b576736313be63d2d101168994a09f438693012d5cabc21854ac30051854c05fa9b3774c5298a0e751c08f34d84fd8c620d33f6c0524899a2a1d1e162b39c6f2f7139fa6746cabf274b3fc9e66252de38346d9fb749b04cb5048f7480b7e9e326835549c98559b06a1a69edc24a9c171004c2c7bc8d2fae29c0ac759b81d2760b4c046d9b346a9c9e6b321bf0726acf660296a802b78275830e7a583685b1a6263295dc0726822b216571e572e077c187b030640ef3e6ed1075462804a733faeab7237be48dfd826f02562ef9ff9241774893fd43f39ccd432f74b7d7ac41986f560aba1a4b4fa286cb2b2c913ff308cd4f6f48d16705f8c462c7a6869573a748e47eaad20058dc55bd32127f010388655e2bcbb7491fd9633eec04aa0253ec8af465a9c034a5126104281dc9e25fb63a442f2ecf5eda85453d46bc80de834b4739675c7376ad8d89efe365f1484082c5998c3de7258b40150c8e31ebcd37af8481ead905429be232d121a72052f9acc2cb1e2eaab4844d2b5f4f42b9f3133918665285e3ab18af0d5704d4defdab2eeeea8f06207e600a6d571b035f333393c626d884ee72f6c832b29f19ba728c15aeb560474669cbae3b1958e760454f85aa3fc960524792f8e06201aaa6ea4896b32fe840795e08debafc4b336a7e28d0525650011bdf4670835996b2ccad8ac86b70b3998f10b385ba1242ee2cd3298adb0c13bd122c9f31fd969ba4b9997d5e32bb9810306f91abf09edfb59d515c6c7982f627a2dd4516a498315d8c92f65771f6896a2c265249e985a98816eedacef8e61ddb9d94ec6dd5e4872dc19dc0c9be57f4c13946ceb857dceb20a1101ee9c1388d9d6b3b51e3b5a6db0f1d771f8bd9fc68896b7f3f50b63c9742568cd8bb6ec492eb1dbbc12923a85d8ac4744771543bc1ce1eb0a9606e6d565944d7c6ef46f0469bd874194ef0dda59a450c60d344a416d135b51dd7c4919d5e9eb0d0a1e97f4e4c1db19d99d92894abb0bb25a88bbfaf7bc0c426eff4acc9884012b58f4fdad6e5240dfb7182436f310d8c13772e8b3f2d8ecdc0d2e9aedd7ae5b802b89f1034921f8f021cec9f1ee3f39b7015739d1cb4db46d35cf6d4b0b6fb57fb385865ce9d1c35feca6f51f677329a06d93d3cc1be3a4f0d939292fff33c39cf34a5d7d0fa12b9b15d2056a4cc99ed192a1e4d93cf328b68d4c6b65d4579e783255c3268fbd7e022bd62eb561abb02d048a0602ce34940e147b17d2045c6600bf228d23f3896965b17b740a2c11277c7f4d4b1e75ac328bf49d4923125ecd8867148a07e92cd1a238f9b72082be90ab2f2170caefc17a5348f7c853f522b449652c1a39a1ce6e4e34603f465450f22e10a7959f90e0655cae6753c7b27882f74b095b13df2a3da28f970fa39ec0eaa422d8736af794354a3f0dc580921029cd46f171dfe0ac6be6defdfee201c6fbf02f6fe9eff985e5a4d25986d618f3d3f1cb6bf777ce5d87d5fe9960faa979db5b57f391ddc338bf7f55287515016856a5a82b40c3ea5d4c2ca25bea97b17963d36fa614ca54f9d8094d2c13239f4398b6a012614c45fbbf2002e3e4ea3c2164514b476446067113160dec20f9a56e5451cedd56594238e3d4616037e0a596da487db0ff902793e86deda31c7b8bf9c79258b9345d952d345543e4185723ea3cabc266abbd608baaba9f271a391918f306e66bfd5ee896a9da1926380cb7b6c9e632cc1b0f99374379dffd6e71424478db053701cee46ce20932a15c199544f347258d1225f2e9b7abe02c7a5ae2d3a3a3179990eb180c08285dbd34e871fc397c9f871d19a46923d614e2e49cc8dafd04352422ce19e18353f5ecf7cbd153090561a30ce03d662d62175ee109a2cc1038ef20025cc55589554d35079dc221987704198a19dbc3121d9ad2eb4fafa4261c106e848d77865b86c3158b33b00d67d47097dc55326988215ae13ea1abc08a1339bf650542f54244a42a329338425f66a60185913c13e340731bc8aef3c3ece6aeef3d502da83d90bdbcb2168d9386cb01ef726cf5ea4796d341df9f77c395dd2f9df670e5ebdef9342eabd4b48ac26dad987117c96841ab18caba74be081d8c1667029a54106b27f51e690c310a60ea90d9ca1bcf54f310273b92cbf924f0cf9a52c31179b40400ef4a4f3ca84e0ab7234e2f9fdc12b8e9769f09b458249dd92d630dac39094691b91f08368d5ca112dfe8fb31735f39d31a640cc49f4e58a202fb27dfbc76791dbe2d0b93eb9d8718cf52d17036a9cd5adf024c703433569df9fe6fe6c9a66f6ca2a0fbb6ad60706aefe0cf1b8b3795a808d2850ca66aefa0dbc7210a69facf47e5617d0d255edf220e4d3aa36bb7963b1cd5da3d772155df9d602af7fddbe0e6e7d8d46be14cda3f595fbe5e76586e534fce6ffb87298d13c5d7fb95f761e43acbcce37cf972bc71acfabf596fbe0cd6745e5687df37ef97299e13c0dbff23f6e1e66544ed73fef972dc7109baff395f3e5e6b1c6e56abdf33e78e5d998e5f92a915b9f90d7f5951c4494f9fb94e4784ce489cd25b7f2310f1a2af91d50c0c651d0871af87a9857a9cf64fe52d605fb281517370338b2bd418f49fe06211f6f3fdf3690b345e7c5d197b7cdf3f7e2e5e31a79ac63b91df8fcb8bebcdd79fe0e2127b69d67632ebfc3e7c7db97b70df26cd17271f4f36d73f9bdf8fcb8861ceb386f075e3eae9f6f77226f0f4a618753839587a811838cf03040b73f55c18dedd478b102ec70cbf622b0bedaa8a56b2348d320ad7c325b6180698736d8dea0cf247f839113dfccb31fc8dde3f3e2e9cbdb0679b668b9b8fdbcf6b9dc1e7c7e5c438e759cb78b971bdfcfb33397df21f2c4b6e56ce779f778b978faf9b6819c2d3a2f6e5fae7d9eb7072f1fd7c8631dcbedb596d76b464e048cfc5a573950d5e5ed5a91eb31912716ae7c2db73c906ae4762ce4f59d95130b5e7e958b1c0815797b57e5fa9acb130547bec2210fd45ab9bdd6f27acdc88980915feb2a07aababc5d2b72bdcb3c2e79f94046aabd12beceb4fc5a4cd25e19a27e5e6e5f30d35e09536f5e6e5828a9d18cdb9cfc17d57351de979fdf95ecf83cee23ba33d0525b0ba289f74af9a43a1156c21c53fbd9760c5bde798597ef5e67c9f52f38f3d8170c39fe2b46befb9a41ce78c9cab3bce6c8f91732f2cd0b7c79eb157ebe79992dd7bfe2e5f15ff0e5f8d778f9ee6b5e399f6d3e272b27683fcf3a96bbc5cd8bd395b7c0c968c7b783191720f0ddda590465688f1884bffd278b0f4c8b6ac1622c23fb99a23491b080cdc0a3c94a5d0b7810dca811c93f70190b28ba7af9579d96fecae1407f1c881212d42698cac64604f9ec9fd11783154939b67fbac3dc3dd68ba7cddb869e4d3c17dfcb6b3b93dbc1faf1da1cfba8b74573637b3d9b31bf83f4c4f639eba9778bcdc5e9fab671ce1ee9c5ed73edd3bc2d857f3244a45a5f8c700f498d798324eafba27a2fca57c31b5a0113cec6eb08aadaa32cbd44bfc043865234cc171af53e72ce4aaae73c73212abd3de5bc27e911e5e7ea472f5435b7a39aef959523caf56aef5c48adb74b9df7657ac4d95cfdd40bade7f6a8fa9e3c4734d7ab5f73a195de9e72de97c923ce94ab3f7aa195b93d55df97cc11e57a95772eb4d6dba1ccfb123de27cae7ee885d4733b547d5f9e23929157bfcb85aef5f6d479afac47949bab5fbdd0eadc9ea2ef93e76861a77e9af79acb32f589ca39fea42796cfade30583017a4a967440af2b54b5197ac3a0db524b01ccb9bcc470788c993fee58ea39ba7fd7427adb424f34ad50f40c93172e06e77fb0e4f06eb270a07ef389ff48eadbb1d0654b270c13e6bac0c94232ed901322a099a950eec4a551ef50fef733b27f052485e4fa370588cfaecdd92c1b6d388847ec74405c73d559aa59744f2152faff137361d96a99464d8368f9ebf94e04895b94483ddb9a953f66a8bc1c69a6fa3507303927e034a512b79c9a75ec4270bb3441816562857668c284cefbc44d70cd61a2af010db0beda74704a02f6aba368089523b90bca3c5e0f90b002371440e6fbf852afa6894a77587d944484e14160c6222af1b8108acefa712a3f32983ff6317d5d879216898f22ee03820816874201f523a4bc614ef669c2d5a3752ab6c53be7639f3ca08b234008c93acd7a62a7d18fda30089d608a3f2551e988164cf8cd20b6d008219735145316cebf6f5a3eaef11f2623e49f7f1931a62db948405a0eddef79c2ceb3a396242880ee7fae8d097fd2035162d91489bd4f1f38c526684c424db2702934eccaab0bd788a1f90b209b132eaf6b56e88cecac6bebae2797227e2d37cbe95ef931aab4a670807e88c1ee1d38cdad8715a59ef2f79118ec045893d46108f640247bfdbf48f2b2240096b4c18f3537c5185392fc08be1378ee4a1c8622908f1ce1e881cd471e3684da8f82901f3962f3a8238e1f91e1d72d6f235d3ba900eedd50ebe8900f9c2f3b2798895ff0cd065aff077751bee0a88f2665d2c29d20b4c2970843523ffed0ecbc8a38010813222cc45bde76b8385e3c1cf55fbd2795f5d4795471e6b8da3cd4671b0b03a36b5eca77c35b9de26439b0df4a615136326f11c46005e65df5e6371f94ab17022797b7299dfc7828bc0f9ec74c0df793374927f07b03185710190117602f2a6b21bc6696f1653912d490696c5e0ade66cb3b18705abe6935879097a0da636ba61307be33299c4b33f74fa14ce923b0ad9d711f3c8b52e6e1ad782e264720d849245ed740dfc031221d37227ac165f2f56742454d62c9b0c6bae6bdb02a8196b836931d5040832b4163df1324775f3215b692e45f38d6198e3e0102214b91e86cfe25d118ff77743dcfa1114391b906601950e9fbcbf0c07efa7e5fe3d954bfefbf1bdda8caf21feed746d346ad28f7b4a04781d7d742a36da53ac4c944c13544ddd452a7efc6b452a9c599f182bbbc41e85a6a4694c849d75fe34aa990009dda8c045d081cb70680d6975e79ea80e5c87d325371f6b955bbd2e786d382465cf3c55c7bb120c63076c0fb318b5df68a1aaecf9fe026368a251507b260556bf1c2afe22636cb259204ba628dd6f1e2b7ea26764a4a9602656d45ab18071ce75ee0b6681c5f9c5a7d696635222d75c2ac1a1f134b790ee208ad11d8f345ae357ada44ceb86db196d53a216424b2452f0c08392970826136ed875d1aa26c3d00a5e5e90a989c76a7b4ecdd3204ba402877477169214b6eaa11589371c613dae616c1b214a36408350e5c945b54bd818a9affddf774a83ce2d31eec1afce4286928558668965446df34cbd434a3a4a1c389fe9fcb97790214775293418e020d9015caf0c331d165a9d9b0620b4ee413a4e43b0741e438efacc1d971d83d227761871a5cdcfb4e6b007f50535b63d96136a883a99b77511a13e05d55ca74eaf8d62e87bb65162baa101866307589fb282ef6a087253daa8d2f42c523a3f26962d54d1459dee9aaa13172b300a612017a3ab3d07af85eb8b4d96679cfaf075328731f0d04eea238fd3f15061e561c9c2249214e20afeac20a7b47e4cf00d7ea7487482062015094bed2c558c6e3eebe55c336bbc8757036b95219472cd9fc9753d1020c98e9260442c1f3a8e2a67b36aa8da2cb616c7bab751928b939ae59e26537d5701cb22e5fc82e06f8401fdeabb846f8c61732877ca88c7938992b1a8deb3b688ab9fa5f8ef9ebb65e04c12ff469e1a8423ad5f25a6efc23f54ec8064903ad09a2268c5b4a95bc3fce808b7e6b39e92fc644f64a70447a9f5e018c55853fce003ac08fc556d6a8ff419e1ce4161546283b3610126c61089cabcbba4fe3a16084f87d0fae07bf0f7b4b059e5602bf9bcb8167140f352dfc4f1c478bf2758cb4466fad798ecdfbe00132263f0f52d65cf55bf3a303f95ae467c89cbfdfa08baf015076aaed34172dedc9e427bb6b70ec4de50a1cbf1ad462aa0ef88e1a42831e0e461f78ad543dad711665c50874b3311256fe1b2cd7f50150eb991cd904035a263838e1809b5a1c0e3b1e4d8501afab2ea34e46c8d9fabeb94ad55b54eed1d000059257a2a35fca8223afa5fcea94b4e3a7d88ecb0aa8923d30627de1d71027c9b6965fd09adc714b690ad30c1f4d6eb82d5bce1aa8c2474606726271769ac3bc646b3fff7fe6c619d0c0997a70c5453abdceb79d08b7b85d39f9a8b4348e4d81dc6565454f9ce09c14c5185deac2830bd298ff66ad4cccd9c6174254e2ee37700c22cbb83b85a10b6eb85c6d25a5d46ec8b81f6a751e554ca3717485c28974f5e7b917ec4a83bb7d42c3b5626c1c05466d341c38fad9d860c7b725535c59ad0aff1e49b80ec63759e15e4f9358d9a48b783df3e995de2c9fb7e51afd23b19ef9b1955e69ac069fc41893208ad5f46ab9ebfd6e61d0f093f9627fe0f59f7b644016e276922203d8cb61faa47efe4adfd528db92bf883840775abbec6f568d191d8b0741922b014866b296df9de52bfbe61fcecefdf529787e894772516177ff46be51a49f13577aca53f3f6b0b1d29a45e1e51489a67216b0060c16053110da11ea694591e124dd17a1321e15e589ade5712a7b26d8b499173122f800552a6b54cbbddc6be79222459a598acc7a5708484ae975ee7f7a0e575f274aa526aca1e0ec8f990cdb4fd05b15143a276e68902cc5370f9bc33106f23ba506b2a23190573911cd5120aab67d40bd6a0b8d2af749060a253c069845afeb6b110d09d2f5705eaa8babd7c62ea54cfb93af4406202269b3f84957d0e5a5e99e4a4daa7f18772ec7653fd79aacf044a43da1fab77cb38830f1f4f214dbad6e04777f9f3edecdba792246369d3e29ece1fcf233e79ae0cc6d0fbe63a30186095b31262ef5bd04bd47ff3233937670612de4b0519246d22f7c237d3081bc30d3e686fbfd43a44c70db9b728eb86e91d611193f108d4780de28e7aa9bba25cf0f235310264d15b1810d1815d28b5ab5bf04f5a26099bb9a964ba0c00173c495ad4cf774d3307dec736caa4ea64f54aeaca1663c49a5014e58ddffb1421d72377ee5693f268fe464cfe2aabdd3b1c29115fc2cfd3ba7accca9e544a684f90a79d07d6e58a986acef90eb57bb01682170a85ac36809f632243d5d74178b46f45f203bf2b0082fa593aa4db88957603066741fe648f99938c36e108eac1b63e38667fb1a69d6d567d77d4cbfbae11007124c7a9d5ed0f0ae70e9a9047c5f51a7db9cb64d84423b1d8ecde7ae81031d6049bdc0c0379d42a5296d6ab8755260f774f07f9975954ca0742e0ea8931fcf49c12827c43b27d3c9f46a77be18e8cb6184ce1aaff07d68343b2f2ecb3778e2e8b80dcefc036a376752a8458f7a133ed1c19608157b518d4efa7331a8005d66510898e59ab7c773cd0c20e37540dfc7979503032119c495c4246a5dfe461e124f07ce22e6e5506ee207e69d0b894ef8b6a75ca6f307665d47d7a1e88ffef1422ed96d2617076cf94b5b03b55517668ac5a9a308958bfb1845945e87369551d4bb5aefb13843a9ea5124af36d8be73655ecfc74adaac01c76e9cf16d11d9201e1a092a37134831a7e70bed9f70a934c54e2742bd2a3ed393e72bcbf277b32b0a64909c642a0fd824a55c0a6c006b67bf19d8e56acf0c5b5e75fd342185eedb6c91006bb105c7718931994d956b70d1dff28983d7a7cba6bf9a65652e137124309d26dc825c97f82eafe264501ec27191b5db58b43e210faad84dafc6cb32a840c3ea3d410044821c83f6f2df809c007cdee2718a3e9336ea2074b806187b9811c324d80dbe2489817cb4ab3d79b93f205b5ec7eeed419007279fb17903a2889256edb71f0aa988f82dbde13fda4fb891a797cdf632d5288f712204386ddba277a2bbcaf2604e9f7d4689ec81274e7dfbce01336633cd224660f1e19494da89aa715e3e008a9988c210174a283b73661ab31a5c0dfe077d77209ad2b1ae241d72e880d0dc00f8535829f7a9b71f0cfb59784cc66a587921134d7c4e6bcfafdd514e1cf1306374632cac370e43729b51225794d7a919d583ae55bccc5380d8574006b64cea23ad337b93fc7d8776069c1ba5075a81726254b08c981c87cc41e9be1bbef012967d2ea1a571b1e4040533ded01f75576b4fd21f0de0465802823968f3858cb21008098ebcae94ee9b86e16a6b8120fd1fe746deca9ff824d4809ea42014a13c1f29cca1fd111533cf2840870102ffc5ac522fad11a9d2b8fb875aa0622e7e6d261a3c6888760a3e3b042e1ce39a400d7d7c2c5a57b39eeacbbd376040331060e673dd47409d7d9683159b57a63be2878eebc49d3acd1751c5f5993d1633a7e71e22680d0d7b8c580360b294071fb6a9c3413f1e3622801fcdbfd50f1c29b11489c289c063c24a0548ca983a6091dab4e3add71ef39fe50466bd0069f0be563e40c718850f9787e0783287f38dfc7edade7d8a678133de50c8f155b90820430c2c7fe51bd77ca2172b0e8a5f9b343c2df377a190a8fd02071d3802b4f0a8f8e1c7a2fa2e24b02ccf5c855d74e985e01b286d8d8fe1b614373a14dd4767572b8a863996eb3bd08143d16bd421797516462546e25cb4616ffd93e30c0ae149c5bd930ef3fbb5154e41cca6e76eb52eed80088cc5ee36710c36a75d2d42b319556245cec127c09cecef0f1646f1a048d66adaf937e74e861ae401f443adca9af2411dd0086748316b29be711eae942992cf2dfdccdd5970f1a9ceb79a079e6b7243e586c432bcf16a87406edb1e134fcda0a20fcd540944fb7b9776d39444e1a7923c0d7f7dc57f706abc3b44ab3356f22b34225cca63e8dad81f3774c6970ce83adeaa0fb93c9157a1c302912e7ed617721453f795526c4516900ef110f36a3e8ca330d7b33ab5782dc5c88f67716ce3b928a1dfd3650cedc6f8653d861886e7a67488815e00f45b68a7b97296b3c05ea3ff1a8a75e3b0b652cac282a404f0b83e672cc9966946b249ea499af44b7210363a077f0727e3cfdc4dfcd7357a8211abf88c52fd5d387f77d7503ac60d3115c0ddb4e1f1190395382ea0d886f3967599f0d574ccd5017bbda5577a83c31a39fd44094a50434add8d472c19a43c5cf38ef7ac34a7e46c54f17831114c69f8d22b99ad8d681a515bbb819a1834f096f7127cf9ae83719a00bcd99f0d41bd11c85d178f27b28bdc28451734358ce6d40f5660385f978d54a39b7745f918793d2e639648db89aa7af357c6530d4eac5332574847c43c1222271fefce86ac03934f27c23739af5352ab16974aa3ca4c5eb21a8837a167b1fccb546480a238e39eeac7e38e9b9501d9a5df1d86e275d2fbb3540aa683e9cb3117aa1def19e4bc1244295ca5cdd954862b77625b6c66775f9ad1a6c4e6e73e034e8c62b0a53be2eda044c03c31cf4e7106113a14b773ffb58728bfa698240d04d51d3c2e8fda3cf796f058831895884213cb7da30a040f92127b686744e23b15543c2e0aebc7a9a44261d4e4390e4f7108f6a593c78ecc02804b340b2ef4fce7307e5e072a3b40c95b69925858ef0c38b5e298f09df72258a21a20dd2a43acd94b81436693026c2969021b2918b147b7f0c8801ac997a2f94d85c92032e750c13fe8361cda794b1895ae2d69981e948dce8c25e06f5524c6c9588de39d9e0f1a571e0614948cd475505396738f040a5348210ae46a0589b7f54913ee40418e7db1b8c2d546b9082e6c04eeee8a549f3118f035f8dcabe9a574d7fd93595388c675c9ddab5c58dfe3e85cba13f21e3e3644362ca22469cf1493b47d800756a6d3b4c230db25fc0d7334e515b1871f906881122560fde64f53c36a64e3899dc8fa626c3cbf427d3ba93d03db44b81bc58c1aa875113203153a6ddd418edfce9acfd2cd9788c80f50e0929997bfd22891e40ecc97384e26c5f0ee9d6fcd8b81e0a9bc8728c7fd16db0a2edd9c4c859fbd7051a0c4eadd720ed8a38856b40301d1ca876b885142b5998e48e30332056830e35c656ad8c7453bd05c2dadae9405f950d82a200d91c163de6de54f176391c39ba3f3717fac2d84d3d5529eb1e45ef54d774d2513dfb232422e1f1ca50e384afa3050c377dd8868656b1b4cb3c8862a0918399a548cc9b8647074fd767b934204b77cd464c2dec420ad9c2f3ab5b3e1a76cea210246dd4376a1015c1dec12d2bba1138a9aa22aec21ac2d9b053833efa3127bf5a589521491b722884de2bc5a17378f714be32fd9f52aa78de64716216cbf42b2002f366b474624aab26f1ac4d144bc62cb184d7e7477e005daf53ba6590ca74e638835206b06bcfcf8aa6b734f8b74d750cf7f5fb0c9d2b70613b47b5cc00b6a3666092d3230db9195afd73a5ec6edeec3c82c3e51eca045355a5068e7e09f66113ae370a0ce4c8666b93665d501e9eaca15ffed26888461cb46708f20eca201b9827869b236252416106ba0d1122d7c459d53f8d8efcd61051cb98451301a9899766a5999e3790ae027fb6b42b5066260b49df3653a66232946a6843b83847078101c204420e4d39f1ea637a41d098391c81f0805aa35e049dd0af533817d6d79bd14a2bab5b0d7889ddac56cfa381b1c17603ced5a0f1b8420af594e7755b85cbf368d2ad1ce65e19abe742dd5b03521ebf34ebb63f3d2988de25ecb420891f164de3803954cf25a4e717b0d6b2b685e2293789b349e1f9d7c7c4f7fc740dcf1d872447e0aae485cd43b4812fd2e797754f08e24bd58f4a1ec33c5544cad68130bf3535dac1a95bdd1b8276dd89a114a77360509ee3497d178bb05579445836b16bcf594c8bfb23a6cb912c43bc0d0e38fa8d02938adf9d40b9cb2c81705270600546ff7e2aee26a3d062d19fa0b518b95ecd76485c9780ae5c6d5cdc9589288d6fdbc2667284cf5f9c3fe41dbd7c023f61006913b1b2c7eec306adfe6883eab338dfc881caf714e565da52f6eae189659ba47de3993717cb28ec0efa53ea02e3e1666e317274a1c3513262874f014e99714ee218b9785944c17e1917ba800c162c53fc166c243831ebc45655f3793ea7449fcd5c6ee1e1ab7f598bb3f4d9d9bfff41cf58c6c17076bd771ba18e095b9baf7596f8a9be56b3398b5e67b2fa7337a87b6c51ae544647c90a5ee77d421b411824476252ee667d0cfc33b3554f2d39fac3b42eec31990c05ac4a147a6ddd45d1f77cfafd4dee65f262e3a4614de49bb7f03a9ed2384d1a2f4dc3d14da8931f5d0398021827b9c3a8c5c077c2f4aa59061ecd8d2cb6107e46cd53b4955e50e9a76626046d9149ad90f4acd28f55d3f58ea0eb34f9bc7a6b465f778a09279b79dd8f6045def6f2fa6a10837d9d1ff003c19f9bf5e65ed8b27001638ce828db144fc5f8e90fdfe4020a795aee41b47cb6f0359c579cfc0d8b803edfd6ad9141a98591d9eaa0012080b306aa9dc8119a15f73d7c144652a802a76c3ce8da5c070a7ff6388d9ed9f4b96314d7e4abda2596eb8c3d1f731f823577b360944deced1111c8f041e283424929385e27121e43539b924ba7b9aa561122e657c094d4b19914e2dd9dd60d223b131e8063658c8d2a55447311d5f0887441b46a3f6b3b6709b19b90d69da08ba6ebf5e7e33824c73a578ba12b6b200fd27a3c597f67d41a4bc39e54ce8e3ae575feafa87c1aea360b92a1fca553bc40468b4381bc80bb4ba3e9d5fe9a54323841c243a6d7b4dec6bca2dcd5ee01ca98d34a51f5633c8e4fe0a426e53483df65769c311a08e46008b5ea9c35a4d87b9a9ce50b72d92554efbe7526cf5707025e2ef3d89049cbd09e65f74ec080b517a59eede21d1bc9056caf4c3c14667be3808ca163742e117d50dd283834a6fbaecc7f80028aea84ea986360282776f63dc760e7cb588d03462d696b0eb58aa1a9f17457f2aa9884c8ebdf9c3a071534be1dc9f090bd5cb3f346ec13317fbff82b34ff23365ee466747cdd3f01b89bd1b6066f718f21a192004654b893d59753feb39f0c4949bdc5c5cd65b4186be2aef37ecb5c73c0a03b7d71428ba1bbb57c6149d01c2d779519e505682ab79ee020bfab2db54e906f5f59b0f2d29810d72a3ac14bb199344e514bb4e20e5ac60dcde7392db9242d817cc45a83fd4c75f292aea9ced611131db3b0947590381a5fd213a688941417fb9e3185801f4d7aeb86092055f018722c323ca2e3e3476e67d12a55e90ea6cc74366ba2c1314d557f554bf6158920697007dc002187b3635c6625ca7e76ccd123cccba5766b2c630c529d449b1b25ddb7fa6b43319794fba9fd68d766c10e2efe466b6a0742fac41d8e9b18c90dcb7b4244cc9fda51609acee6fbc47ae3b1b6fcc364de379480d8da27e8ca7c71977cda759305e94187704999af6f5d156b1de0ae82d767dff796d4c5db1edbf45cca6f9e16a392fde714fc4a5788f7b5313372ecd611ef7a1d2816fc014c2a03121b0f535210c66c0297faa931133d677ae5f77bbed699361863e5760151d839042387c13530664ee3735e691d139ef520060b2a620b62387bbf446ae988d3fe164a2d55e60f44ad00dae7d5ac579d49cbb2c478d62a279140bf540cb2e404e5bcf8e3f52fc858e07b50319d2c317355da01adb6321aec52e6442195999468436631486f533cbcb7d7f43a429cfd214ca4f736d87e63a1655ec40ebf8c86a4e703519599baaecbb465cbe5f7eb830df239b71ffc464b7de83351bb2b3e321970811d38c6ccd6cf6fcb40c920201849be254a0cd1ef2a1bb91ff661038489b9dc1b4224e19930981beee46cba0a2a20bb0011198428137ab05e1993e20096f7a968c27c0fc5a0064f627e03a2c00e5b13de1dc7d2962a3b4d913dacfa08ab335ed7bc691daec4eef0c846a97a570ddd6e80edc2b57896d76dd2eca9d0f48be05682c7975ddaa3fdf15b9b3732c3e54c7aff23910e8023e35cad7d3bad9d486b56d7a832e9d4d4bc1fa0d37cd04d2cc91a621c4cd198ed2033782295906ceffe697ec15b43e3b84d03a8852cc0dda6cc774ada581a45e44f35def33b7ce0e5f36654b2a81976a87ceae2b470d48e2143f599ab9b3cb287f2f0c4c5c2add744b1d3b474ef4691e6225e4dbd99d1d77e8ea9c2eb03f4115260f3cbb7f89c019343c76c2056d8a8642393191fd80477253edfeee97cdde4fc22b44787551ef8650ddc43a1674ee8d121b3da5fe42721536efecae339ce69931f85ea4baf2440588720913dc2dfca4fbe6cff98a51a41e9318fba3b841e6e2b45d9e19cc80b41681299f505e42f27179d0266d5b1f77099059b7b3a26732380f9a2d643aad0c02508e4c13442e9abbd277cd40f0b2960bd966dda864cddb3fb42d47d6a7fa93189a1acc14453668e28d28bbad575feacd937449900fb3591791e34867c64e1043179de9e893283d8749a009c82713f3d033b6387b8e0761ca49114cdeafd34bf9edf9c2d40a425eaa77f07de7ab5715fa5c72fb6f46f1ad19abb15f320c0f076c22a833c680d16a86fccd492e49c7ffc69064c3acac69fff9722a24cc8d1fc35494f5b5779922be61386c15b461d7e95d85362304dba1d72c26ffbf607bacaee45c1e6c97ef141360118e037953232c687786bc1ee97fefe9f6ba455f4be13efd9668e200d8a96b034f5c9d0a347ec8a55f67e302d8d1f3911213d6dc391fece157af9ccc175c471445f972aec7619791ae654a0e0cd9d56596c5769db600603b9b96090257ec21e552f2f6f36bb46867ddac8ec000d06c6572ab73a6fbf038808ccb5049278e85119896e13115282cabedfb1b0dbe104193b895a18fafd5f076f1c41bdac95234d245b797d79553d9757c42c39261a27ab100ca1237bd9cf6603176b20727a8d889788c42105e3f8d44cad54827c3be85325cdb2e6510cca941938c76055e15452b105410686635e940c10b4fe2be668906fea516e30d82cbbad2f19e1c33c780bea2bbcaa7422fb856d091391c06d8eab5fef1613f26bf5d093d115e9f519be6bc09a5f6bdb10e8d19325a9020dba4b7594208215bee1d4110ed0f37105f90363a8c339805ee2a8042b86db520100567206841a11fdc77010ea54c2067fa0a6106937e5cdda50ce661cb9fc39b8f514b191cc2dd6a8521a571f129e7970afa3ed0d5dd21e27575f5ba3af145be8b97674a771e17dfbb5b246c5d99046699375a03b85fffbd48fd7779a670e701afabfb7729abe76e11f0e1e569b9aeeebb11d5bfcbc49422a1ea46526f79cb65227c4d7b5bab9f3f841251993eca08f710eefbd020212ad3f55efa4365503fa18bc877d56fbeeb9aafef91a97e137e9fb748cbebebe549b5bc47967a4d8356ca3e508829035f5b3e5babd1f7fa22dfebc3cbf3dda0cf898e899be8982e2253f6bdde65a43e7c88fa99ff3ed4cf0feed75925aa5942d3d159a8146dbc7c317232fd74a52c834919b5b4d5c29c0a02c121e0a70d67b882b6a682faa92824cd6b28056509f714b8c117bc00e75415dcf3a7637d05d452c77235ea92524394c6e55dca522eef1299b254508a663a72b9b7ba8c5426c2d74bd906de84afdf5a767cd548ceb411a551f24152997c5aaa47d548daf8de324469404a731aa232fdfa43694c6f090db552f7ee732d3a1dd913522b3c1d85391574e479db6684b7ad65694b9940da38c1fc5810c600b70d6694e604b4f512ce9dd06988d280df378481280d6a89caf4bf2f0c514b27209c32a241a9238c9444bba2ba2d84b913e221945788600bec02cb2b4450c33585aa116e4f8136f4c6bc94829cb11c14640e6d5d3fe6b76f33dccd70a53f397544c1212923273b9fa51c9839cc4b3720676a84e33bd086090aafde8136ab8f2e2e2f2cd6b66d96098a0a511a85b2a243740adcf447ce74983b29af5a08733705eeb714dc53890f37f1d6a086199eb7cb42983b22dc9fa2f110ee6f263a4d2693c9243ba186f5534194a6828852335c3d146a89d2849426bc75d66a790e514be2f7b55c3029bc60126e592a25940ac24228b16b888fe9a7b7e0895df3e07b64e08ba80eb65cf579c1cb133ef51e59aeb3968b84fbaafb84377574abb245aef9f03d3223d74cbd88eaa9cfa72ecf94798ba41ea66eea4a2ad323eb91a582a4acc31276df21f157839f5ecf7d9bb7bb42783f212ad3b8bbdf901567b8d608371029cca9a0ed82440d43a13ccf03893c94451935cc43799ee7dd8ab26011480452018940a28e7560a3bacddb50470d6b90083748d4312a1d53021bb402f7372784579acd1995e9d3ac2ef5b74b8d94108244a4ac9a8eea12553229d5a56ed6017541b86fea68df1786dfe5966064111542d8a7a676221545c3ac1066fa7353410d6ba48675e73d775d2a08a9615d775d673aa232fd2e454b05a5a26858a7823ab6d11368b36d1c5723412aa863b9ce70a7a2e8d80c0a6a09b7c4354a739a4999a634262529d36fd3116e215001e7d30cb749093b4181605252846d849132fdc1cd5521cc290e092808f7b99a8c91ce26b69eae033284dab4fba99dd1b0ae4d37199d37bcd1903183c6a57165c8634e068d90d2c8781538004263a04a185d9670484d899499efd055e4f2c8d3f7c8320ccf29cb2117c22ca34637505d455efcfb7779bebf788f4cc2c8ae194a09a17cad31372a2e533617cce53c9e6ddb60b6bb64bbc4f585e5f93ec11d176f3330842e44d5850866b34b5c6c5c5ed3515c7f616362eed93caf5024262ede575439c22ee7b6d9b6d5ba79b5d195cd2fdb26846e5c737789b15d8639135ac32e67d91f13bbb8b8a85a3ec11e6d93a035dcf215056d5c7c655d74a3cbcbd8b5c6d4b9ee85751075ee86e3fbb6962471b77b3d382131efeb6abd5dad53eb6add1ebd1de63e58416c57d5dfeceaab731314d2d7bab6c79c7bcbbab6db43362c2f018be14efbadd6451e13b356372545c8ddb3bedd25acd3bbe4e5db2d135ae35877bb2f877179b9a9cb81a8f1dcd88da337b668ebdec8792d7a33c7b55cbcfb66aee5cd5aabbb587d73f98a03859cf0f8cdba388bf596e5401b17aff44acc3313d4378bb415e111bc675fbe594a6ff63c9b678c47b45956cb4b49117aef2cbdd230cfbb9098eb5d1787d9ee7897b8d8c01e2eeeea3514b4f9e5e259b6653b88098f2eecf67a2f958290d670eb9ed7b29975f19e5562e2f12ed9befa047fb87cf5d56b8f9e6de2ad6533ebee50cc04075e3dfcea10e8c15bcc3d4bdf6a3dc60aa1f7438d76f5f112bb78f8d1e626f0ea12ece1dd209c61fe7299d01a5e3d3381794ddbac5ed3a39dd8c5caba3cb47909220c73d1661e1a867958c5a865cb2708a407b7cc1f2b739d823d46ec526530b6c714acc06cb36d06533d8f09759d87466b2f0839d305420ee69b6542fb0ddac0dc653f9fb6dff7f3fd3c0c1d06099bcf5409f85985f4d15ac38015085ba5da60de0fc2cd6697223cbff5cb8fb4d1fa8459c231973206b32461f3312fd59bb2ada3845965d4ad0db4195d2ece854308b3ca68ca4ead5446e35da98c1a3655555ea812b04fc790a035bc1de60d7369841bccd66d1dad21416b5855655319619587c5137291d2b157b1039feea0107e3329337f84e70ca398684cdb28a66f364a3b01d430ca626db3b97d1c57afb7ae6fb56d53d55448e1b66d2fbefde41de5a8f0fc0b8d0a789b15e918ac5aa1178630d725d75fbc4ac754485466aa90422457907da1f50b9486b910bd3e5fdcf597a42f6ee8426445da004318f398fcd22e54e0f9d5481ba6eb76a2fba0c0f3759e608b1cb810491b2c3cef52246df44b10a579a98ca8cc54bdbe52b85231f3b078495ecdaba15ca41c852e43d7456816d2bc794f699bd5a2307b352c75c9f5cba03436bcdf8142b42c4c43c8711f8dca14f9ee7a7dc1238449f6e2bdcdb6990a697b5621d12bc2fcd15c54892e356c661723fc42c3f3611ac2fccde647695ec4b87841d571f51811d8d036b48501a23256f8be18172fa68f35ae624420fb9cf8809c68d804c260089b36962489b124a9901aa6ba42a473eabfeb2af27def91f55b7721da3617222af37d3e0d9b1f94a4d9ba5ead615e523f7bb5bba4ef61f968f499e3bc73ff660de3388ee3bc24afe66169d8ec7b2d9557f3b07849a94fe8fbc922fc685ecd4508f46a2e421d6b7cd6eae587d2bc48dd85c8a588f6c2becca8cca4996a0eb7590e894c99eb35bd3dc6be009dd01066151211ccd2cc615e759552c7ba0a785e95850a49754555eb58bf695c170fb3346f84526544695cd78588cacccf16cc129e2aa394141e779722cff3eebdbf0a6f6ed5d62bb52e45d685c8ba5099ada3409b960b51c7266e89bbd53017a2bccd8aa8b858d1b1f0b302a1cbcb3dd1c6bbba54b8a0052e5226daacc2a2b25945063c9f7221aae50d6717978efe9b9d642e45f45bb86a852e445e0dcffcd15c885ca8b854c1f35ead6339a44109573edf9dc25d857455481dd771573e15526db9756aca99562161d595c955da53725b4a6e3e0d9b7569cb75094fd40fa5f9687589d27c3314505dfa68dfccb5f5cc26a6f7216008540df7c10eb008b740b108bba2ee0ed9b87fffb87fcff248c6f66ddff66dff6e36993aae3375ddb93b64dbb66d03427a355e2dccd2487eb88798667037b585813b8ff3642ce13ea36143a608bbd7501a5646c336263066d0e898e49a090cec79dcbf6ddfbe6d93913f9a8470c32196543ce1011c765308b73796303632d4ee082c438d094a1ad8c0a221a422a31c5c310de9e008434053004101458b7685225ca10a28b061080d4b40a1218b26b4405415b1806a152aa882032e66eb6da3431c2d081aa0b55081020a8206a4d01bedae140b0ee486a6184148891a069352863c8c3ca3a512e4145d99c4e069659baf354254c3680c2631789eeba386d118b4bb437920f7b6d232b29e759aa8d90263634c1f354c22d59f707bee232b1bcbe68959e0bff11f6833be16c11da32d9318f874026d6028eda33e6de6c1b01b841355233c8c2a3208bdd2052866987273c9ce6134ac51287a5d3f36251acfdb552eea6ba10f7c1d6d63f9501e783ab55dabd255401ddc51a7a4b9c293cac867d44813039f0ebe9e6c27354c1eb45df341787aee1ac6f29a5e59182d23df4af22d7a730873c77b5a98db682ad131c8d854ea0ac858dffc9d61c6e871b48cfc7673cb1260c2e4dbf2606f9030f929064fb63c374ee5c6aadc386c794abcea528679feb78d1a269fe7bd6f93e2930d968e8d178918b58e81492710ec8ec1c5c0dbe5ee0a0c1b265f435903c0f2a2cd3b60f9161b5a271e5603964fd9dc1870b2b5958e21f13e6a248e9b324636c5f5e3221183bbca8d69354cb611966fa322936d2a4dd430f91eea293ad6b4066a211ed460882ac1608856349388948a8080e60d398512152ba61296efd954ea9f4c816692fccc729a5118dce0880a181ca1094438c9a2a289842c2c601a02ba52695424410c4043500c492f004a8f412d22c25215df76b4d15880aa51b1042b2437a405196667a099e1045898c96812c2fec4f7b66d0eb99855b1022179b4822198805680061c587ea34df19ca26112a861148a24843408a861f2dc07c22993a734abcbf3901fd2453a76a463a8cb2b6923fa888ea9c2cb27b1d34bf0746cec18eb12e6d2751973f9e2d286bf2e7ff949eb98bdbc979f12c665002e0770f96945c7662e097099c3a58c4b1d2e77b8fcbcd2311e2e675c7e62e958012e0fa3349d8b1315c938a558349616c6836d49180e9f6163240c8717c05ec270786db0493f8177b84f2cc11f1fe66e3e6207bb92301cae830d250c87cbb02809c3e139d84fc2703801ec2661387cc64a09c381e3388e8b61a784dd701c6ce6288005f0be610079e21b04706a23802724ac3f822e604e00af9b9c9d9a4072a69fc84d8001730f809d4ec8f923a78f9c331eb984dc91494858ff856572841112d687b14a86b4906aa44cffc588c68c1852a6ef6261301ed392ab10f54958ff643709eb06c29c133f3e73b6c552164a5992b0d4e4113e7d823a64113edd2649600e070d0e06e331ad5588c2a64fd3a769c268fc86c9d3a1a1ce09e1bc71041b14c9de77f6dce8a5014d4a6b8116945a20b46db48194823a961b08d3e68d09346ff4258582e59b160d511a0a2465e4251dc2f258663af4a39524b8d5867ee05561862d68a0a680a480811b8400ec68434554088d4105289156bb32d4032c32002d2d054a4658a071a699163f475a1011d5afc80a5eb8c20882b0aa71b32da2d01da5c102128a4981c6230e0a103a284957d0e9a2f41da3581e46152c3fe448d36c33f91819070ba80a6ac0352bd000676985f6a4431dcb14884e2129d011b03c85a2632a1ad304059b983d9d8700223a4f2bad40d8cf7356ca75dbed9ed3e689e7fd68077038ae315a313287ee0a6c599e9e93549e9edefaedf6659f36e5ba9e76c352c69c346a6b4ae9a5a41b0f8937ef0455c2c85d84e7caf3ce711cc7711cc7715c77cf3281817b0aa1c412775884a81b1e750b8479fe745742298570625711d4c322214f78bb28843d32d47b64ae99d1d10a3c5a154b3c8038e10a782a9a81c12bc242054ed882e908c848074a3523221388e11b691ccd069d121531b862f2946a55403141370484a10b50a56ec8e89b11410b34fc0cf5e0a44484332021c8a43491c0591567e082c7d119495170b3690594d19532a880038be84c0a5f0081ae64008a37db808eaa784a541c79215c0d29418a103c4ec68c9bf923db11059281088e64204508a78eeb3acf449bb511d08aa22083d9799cd71d0ac8e88a151309b5d90f68384f2a21ceb3f3646c32269eefa010e6600a9c126dd611c10c21b0b264c2f31565279005c21a61a36c78ce6edeb9d7971a966feb90c23c7fb82a1d6bb9f8f969a56312af3e5d0e73172f29f0a6f9633205e371acf81bbbbadc8f655dee65c7cb0159f17208b041dc8805f203581f2f6279dc0036880b61819c88f5f12196c785d8202e17c402b91cad61f43fac8fcb45d130fa1e96c7e576d813d6613b2854a00859601beb19e1270a36c040586a820a187d01ff60bb0e50a184052cb371dcc36b6e3c878d62e3f24c998dfb60a3f470795a66e3386c941b9787ca6c5c9f29352e27d4304ae372228dcd3d788701e3c7c76ceec1e38dc2832cc23cd82905f80c5b931a460bf0aad4b102dcccba0e1f75b868f3864551b4a352c7a40e55a926e97089734dd2e162968e895789c6e2e96b52556289a328de9dc63a5c823b9ae8701dcecde839ce094c9f392830e58230e5a270f1cc41d90126a5021dec9783dd6ab501c498214000709081dd2000184613cfe0015889016025c6c108c36ce31b04603b1c80598361256e234a8d00702d4d4278af36657283a2e83ddb84f2361bcfda6873895e06612870a55884e248b9108a67895f5dfceb79b512bf7af66a4b561f3fa186d1d5a5abd58a76f3ebacd7173d8b7ea4e26bdaab758c753a9ede4b7a8dacf1e3fd86661da33e1dcb1f55f26ab58ec9ff255671857509daac5ed374293cfe7d5df10454692f6c8552a5348cde65eb50c3e8616c9da261f42e6c25b2954ac3e8c50a86503cebb9d2c6d3564b1ccfba53a96174696567164ae35ddd998510a5a1159032f41bc0f44f604a4d80e985a8d04cce501884b9d266584ae97273a803299b06389ca712a69f59883f5c0048ce889732f6c3059c903089c54b0ed7741d52b4016d4e6c3f0da36fb19b0f3805a64749c1f45508d39fa060fa8ffead191191771a422711a591b22f6c6d410da3344cbfd9c6940be187288d47ab344ad3d5a40c3dad45c39476354c8f9ad568626e4dcc1e5513b3c7d5c4ece9502d031dd08d068e1a1a3268e0193470740cc77dcec924064fef848346c36a502b70ce6b6b9ac64f38bb41d86d9e7a0e0502691810d0c67322cc301c1d4322067bff62dee779374ad7713160b861315ae1aab6d18e09463cc8820780a5110f8a7095dd198680b00c2ca9a0410dcf136dc16911a2fe2d75cc855bfab268989214a17cfe948ea034df119599ff3e974b3b2dfaa8bfa3fe8e3609f6e8196e6aa36c6f1be5cba269b6cf336999f929758cbbf8cbe288a5b04fef0c6ad8a451cadd4c4a5b7606cd20ee534aaeaf9219449b4a3c9450d785e28c82f04473530c6d1ad836b9d154df2674069940caccafe0080678d600cf192467cc502b5108360d3499b84fb108bdbe1b14c223e40e7860ea4012c2e3eef39346693629b680f51eef45ee9dceba3c2fdb7b64f5c5eb29c2bab73aeb7d8bb462de7a8f2ccfa09eeedb8d98ee6d67ddc8e69d754f6782f5ed52563d9677ba4be6eaeb22c2ba7723ac7b9789294562de3a13abb36ea41593f37257dff4f19b75f5bbbb788d59f5c8625c8779cc57cf33c8c5d596952d6a8bb87877ce12717157efdeb6c8785ddcc79b6a529092451968b3992ce62e5cc4c4d81e990bd64f67fde4b23d3298d6b7b7beb55ab647b6b98c4cd97626a61471f1d6a58c0917d7d5f7fef2d675f535f272ef2f9787678a6bc8cb8590b2976ba45b224117a490c2683693b5ece54dccbc940b42296b51194aa50338400212b0bc5c0bd4136bf6c84e2e239b8bc8949db6771ea051d9e988760d29b2ddec919966500f3e453229e3c6959554e6883ac516a0fe4561c109071775bf130e664bda52723fa1c433888b324f1fc5f6dd28db6b9af6a4a9dc83bfcf6e3f3f547ea86f5279a4613c807c5c14d8776506491b1c961895a710edce202ca9407a01ee32847906d5f717427abf5ac3a6a5afaf6f271c6602c3b261b91e4165b050974538f174e9c610a24e3f242b1fd287e5bb82e7fc92407c64e5436ad8fc7714343f95f08c62e62fcf9f2ce6bfa38e59691a294b4d1ee2e7650f0e5fa7a4226e092f903b839e1002d1b0f91a69b44918ea3c80d44f54131e5ceb950d3b5251f726e9887abb75700225c8a41945db1934abd88112502aa8561a362f5340b41a11836bbdec5a6b0cae9d18c2234a73444d6a35ac5e8236dd32f5dfcd53084f5cfbd2e7af7e565a669e6211fe3beac2101ef1a882075410755884ae221d8fe45a5047dd6564db2e65b2b3926b41599404775c09ee4055ebd2218d3a7005d7e70dd74ba30e20e109daa05e435136f7349958dea80356f0665d464e4cc82478b35d5791cd552f65ddb7ebaa97c8f44e37c8b39366b7258e90494846a619960068c2d4636afac5c8405d3d4e522a21ed01c279d93ce420a64a18f93484b77f52beb658e90de9252c219d9d1ef44def664aa3424bdc527f4ba7a5ed94dae806f0469fc01b3501de2a80376e086f2e9f45748adbe976ae6b6ffc77efbd9dce288d6894448b3088326d9bcbeda58f6be96eba1906aba2e592a8ccf6ef0bc356ebef2529eba519de7ef00684b720bcd164b593b6a44d096fde45bad2b48e7de0b7d533081ebc90ef4bc07b476a1878f3f1eadbf7f592ccaba35e57b63ba8a368d8d641780bea283a46eb9887f2bc5ac3b6464a6a2949dfb77d734298f44d9bef47d2b49094d99628cdf78561abf567d85685ad36ae90b4586aa1165aea2527de41133de85d97a9a3477d224d976fdcb76ebcf92ddb434ad34bb3a5a58fd29cfe7dafa9d4577648eafaf89cdef7a9e726eea5ef5b7299ee90ae47466fb7e93ca7f775790fdfdd748b703cf5dc7579574d415df4ae8b48f7f045ba8797678a771efaeede2dd2272b6515e51a42c1eddbc9f416da6019066b213dc3308def7582437c6ea8ccf683b7d310c541fd8ee5bcedddb061de4765b8fbc93eed398629e795d3d19c419be44c87a02804445da75c118228b629d45816d16080a59c994de61a30a5769333f286c0090f035b08669836b50e08e5154f2841610adc47750c77585ef1449209cb2b80f0810e85e5154f5cf13ecfbbe2892af28a2852e056c3a6bcfd19a1ce4b599d284ecacc504e532a2f819b2c81b77f3fd8c216b6b0852d6c610b5b403901d504d9a82639a6b8b6ef809598984a0048583fcfd041c6b7d9bfc1c3dcfb974199c8b899090acfcba4617d2368f729a361a10c03a6619ab8a6a7356119339a66021dcf4f4923b1a083134c1982187c10852b64f37dd3b199c4123d3279e5b2fc6120ed81b0e331270cd36178f2f0dee72e0fbbc361ee75b343a451c778db96b75feff208a37062568123a05905b0e4ee77c0681d21cc218e9146373c288d0c29d3ff9ed800ce73865b864784f00d9b0f9a9d3f23e8101e40a677810ce9589e77088f86358f219fecb9a49444b9ed4a75223fffcdb0b4d276332c6de32ac19314c26c934223b25402d2425236a8e3584acc25316f78ef3b9934ddb9677906bcf594b132870b00c90d00770158180961964a73d6b1300935847903d23433e93c7a8625cb2bd20ad542953b84ddeb076ba37aa9e47d5434eac4aeebb6d04ac05d2f7ddddb4ea249a381bd39b7b905eab58fbaae3bac9740ae9328cde9b611edfad953d7755dd799baaeeb38afbfee5dd775db9d4b6dd4422da567a8d4330a857a9e4ba86f2dd430140a256552ddc1ee5bd755708b147869841bb86db5ab5dd740d5e8fbc2b0d6d742d6bb4b30f59aaeb6ab34ac3bedae7fac10ce77f374e4643bea136ce2e27ed425d864bb2eee424899d707ff8def3eab74ec88d2d042ccba349d511ba54c0fef335129d9f785e11de2892dbe4878f1a929e0471ba5bfd913e03edac27b37a2fa675ddbbfafee59d7765d44bcbbdcc8e7e2f2cfae5cae26136f12af6c277db69794e80c77df94104e2b7802853f17c0f274ef3cdf4d97c7730d112fcf94d42da27acb794c0f5b2ecfe92a9f29f6fbb9000e6fe47be89d09faef46bcab2e137defa9e72fec52377fdd513787e0e5d128d9c94ad9276513a3baaeeb3e6fbada993a9f53d79dba9bbaafbbd775dd5d72ea7ab626b69ec9bd340d7b343e4a83ba3cc9f88efa7714f5bc25a84cb52195f16eb23db2b63d3209ee98f88886795d194229fbde777197321777df30ef302ae3bd2343b804a5b9f1ee49cfe38116709648d82b6a420bbcb7a561ab50e82ad2ff92a0329e4cc2de532d08a54ccaa6ccc3f0ee92a6f506a56e4598e269fa6ec3d5bc8797ccf75db5be3c6f2b0c6b961089d26678a588bca45426b711a64816086b87259671e32a528fba944665e8eb7515f178be4b87289d51196a44529993e95e8f0cd56fb088e9dee5f16ebab2ed94c1a8cc6d55a3292910761591f7ee5d9e89d423ab92e69d7e26229cc313bdc97e7622d1775c08e5d0ac6609317d67eb94724ea5d90c77d6d5a3cbfdae07737446876894d219a62eb842a98441ef125ab475bd41edefdc374ec877b9ad696f6d27fdbe7f94c3dee6a1b86da39456019e66589ab084f49b6179b0f6cda84c5b4e687644336a15851cd1acd56a214ad4b0fa4602f7f90c029984c24c817a86b9fb154dfb75b3a00ea8fba911ce87aaf911157d541ad64b4ab89f4afa8a3a76a5e81f51c3be22a279bf222a1cd211c2fc1165aa86307f441f1195a6f964fd610e89d248228040d6e784b823dc9c51472bcadc101157c37d9dec8499b302eecb79633e7733dc5900f7614e44441d151aa5410d75b4aecfcdee02ca88bb025881a02d4420bb0ee0cedd05c0db4cd04ac33a03e13c77c12370089c42a50253161c42fabe3004815216443a02ad1c1d75ace336d0a6eb2678d4b10c1ae17e06ad00ad8046e015dc078d402bace81878a354091e9d546b58c31ad4203b5d262c407f3a8ff7d375193931e1fd74a7b8e426ab5605129132bac9a816e1c12329d3078f5a201078040ea1ba60515b9039f451469406950585056e5492112a8b0d8b50622713675412eea3867ebe093484fb2722dca721c0289034a84945206909648c5bb520092a339750262c619e4158ca2a706e24cc203c5b06d6a8c7aab2c1a4a4b8947476546e3149e77ccfb9c977765e76d6d5639bcd70119ead86f008f5eb589654604a05eedeb4a33d67d7c160b8ebba8ebe72dca494c29033f316983e4978d223a8cca4341448d614089fb450258c3cc6522a90b0a6995605b2861b0a52a65f040a3185905e629a84704b05758cdebe7cad851472a005f8d4e2907e640e27bbb5ccd6c275d6b08e76ddc64d2b80a87882c621a536ca21d53ae6fa30aab92b1d6b2ce0c68233a745f8d30ccf3a66fac97e1f91c97e432e2253f6dd65e4bbe9a62f4bcb340d51ab2cdbbb9b51ddb99b57dcbd9b63bca32eeaab9b636013ad694e47b01887d18a59e16c8ae27414c587374a293da58eaaf01bd3eb6f4eff323065535cf3464caf3772fa77faf7d3bf33617a7d06c12426a68c892945be9fce44bde9a6d7e7989e73fa77c3ce0ba1e9a7a782c29a0f135336f03e4ca85eaffac9745df37b11f0bae6bf9bfe7dbb455eab65027cea9f0daf7aa55b15829898b29d09d543265207dff346540f6f2475d0352f11d5c317513dfc36bb21a9202cfd9d686e4294a67551422d1b4aa84e9490fdbe30a4df90fa9a6e1804d520a776b082941108845aa2d16297b6bac5eaf31bf824d3d15ddce3ba9411a681732ac8c54d05ad2e9884baa1775baf17163e154469c0ef0bc356eb07895234a1a14eaca6a35412ee9b8eda84847bbb75a961209865e6d525300935b3a8595daa5bd4a5ba54b740cd3850094c8a2205e507f5b3519aef0bc356ebafdf05701f0c9fb245568f1d660ee3575fe1dc2e6946c3c6d7d0da470303961beb41093a66fdd29cd71cebdd3c7b37ffedc437c7a27532f18d9df8b4af6339a7f76af0ed20870a4c73602065e873de81363997467889734c4161f66a5972929ac475081badae8e22aa8e9598870f2b31ce38be9e503e6c85c2faf89ae3937c355eb4acf1888ece6b9ce36a1c75cee395c7385e47c74e3cdaf99ae368c571ac28940f3bb14e0e0f1e97328798070f1e0f411b1e93c57a92af842039eb628ecd3c38e727d02607c783b0ae1ca7f11cbf615d392e653d1c8875f9e0c36d58970f97b21befb01cf9cd6b9724ae9e67e0fcb3befa9f753e8e17675ed6c7679dfbfa78d6f3c413e7eef4869f2463de607db5e29167b0ae7810fc71c2230adca173d6bb9a388ea2f8191d036dc40ada4cfb978c79638e9906ce419cb5c3bcf1ba0f910821406e6e3c9e889b7b06665d760cc87310f785f3837511c7ba5eff5741c68b37f7182f0a192fb22e63de10cfba33700ee27f9e8157d7b179629da3c01d3817ef12f1ac579cbbc3cce141dc9dc6411c07e79e8230fd4562c155b4dccb4e3ce79cf32fd6dd61e6f02b7e5a193387f91aeac3ae0ec4f2b80ece67c5b9f8ac33ea8857ce1bacfafa5f1f9fc71d660ee2716e4d8fd7f5cf8b9fa38feb9c876d13b863fc121f37cf0f1482c2e377983746f1abd5ea2dd066753b6f277e8d2fcb61d17278c4e3377c2b7166dee9dbdc83ff2a5b76aaaeaeeb07ebabef607d7557efc12b9bc5e3bcde83452bf1ebee307398d7b179c3f3c676b58e61d961de90784aec32e306c767113f6273cedd695cc4eb5266e338aeeb751a7fbdab71f1148b1006165f231c7f199312365efcca04038f376d55c440c83c4be2234c595670154c5f64c514988aa629428941d6a775fd60c5a813d6307ad78f1a172fde257f8d4b4cb5804d41a586ed841a16e5c96dec27a5656c7ab0396810eac00a2803717cd97865401c5fe264550d8caff4a3e28395d8c372c37e527cb89f901361ee6a23fdcb7a501ae68347bb38572c1d5c417584f9e435ddd3c36ddc786e61d6cde293bc077bc3dab052ca6451bc92d75051090e2b7907da24b93442254994b8c4f7f800506f200f8995dc1d0e23f906ee407224f764837085649a85e273c55930bdec072c981e881aa6afb982e95f054b01c24afc8395586625c656e2db0ed7d8891bdcd1d84465756dee80be293e222867f88a3ad65ac0f49f15dcc809218b94a1f19eac988a6414c65b6bad272d429d9b9cf9c249028fa2288e7667c3abd5c7f1a2288aff6899a0bea10fc77e54bea22fc77e46df91fdacd09316e148d4b1ce02a6af54a48d89e738ca711cab1862b18545f1f4d8069c3d5a57c3aef98967c8d0225c9de55511de08ad58b77a593a9684f8f92249ac3e5ebc30ecd5963089815f8f8197b0febaf8cc24065e9273d6c59c9c1c9b27cef9119b7bf091571b9627091bf3489e378c739c699788cf93823afe0367de2c5e8989e76fbefa68917c5a241791d40dd5e327ee71d6caa124f8e3f5d1e618dfd8921d139f6178143f9e82364d70c03bf31353f00787e7eaca86896ff007978f9c759debbca625d6b1de91d70554341ec3c3c259d1307a97781a176fc3bac4fb0955d183210b84393f6d7ebcac4f282b3993d57f09fe487224dfd06a759ce3dcdcdc9c8247aec432c9f388ddb13aceea3776a7f16a89922351f29bd775845e1fbab1f536ff38af374fcc9a177bf02f7e5a2638bfc1b9fd863e219ce3fc88948e1d11ca1173724e411eafa13712e7d89dc638e76177e0fcc8c5b97962253709244ff29ad6b134beb248207992571a149405421a7782492e92af62609d4bd04647fca47c434d86d5fb0b21eb22056dc671328981573ab666511285bab26ceec199f5f92ac1f1e69e1c038bcf480e811e9c336b9212ea08e17cce73bd4b728ee44b72ae938304c9738e24061e933a469f5b7dd35fb3eed558d64bf241c8f2b0b02ecee58df88b7f5d82acd7b4b8c2b1f9bbcd8f817372746c141baf599ac6c64ac74a5c73acc435cb6a05ae1fe2c78b1f458b04ebb26197ab8d368b17c7fb0979589ae693d232289487e513ca81ca0c387bb44efc341985e26ddc9aa526ddd921358c4e511445918a0c70664da37c42a11fc9f1a17809ce5f378ef379d176483a6ef2875fafd78ed559acb13b8a62e3b7b265c61afab2381f2dce6f6c1e8fb3435d505a86e25cd778d405901cc9e990f0e591dfdcbce19b1c1f954e40c351f26f26a8b4baf4e3f41b0b44ef9546e9cacba261b01c3972d474a5608ff139727c6573e4a893882268d4f0b2f096a48df1d4e652def86833077a1bdabcf109c91ce869e3ea8305e2386ccd6b58d969d81f5e849d27c2e6588dd7f19aae40581f5e63715c666bfc074be3d316f11c96888f55a84681a944d1b15c691fedeb41236541ea864255091b8baf55e9ac25e37fd6f3865949ff8e9a0585aa124e2c22758c76471dd24891a4f8a4b0fef26a4a8e335fb62e75351484400ee4e22b105a870509922bb9f943f2df1c22f9f809c919dad5bcf1d2ae46eb923a2c5dadab75b5b10ae9d4a5ba843202aa08e11521cac8878fe3f8f8f4f1150d4584503c6a08a178941042f1282b4291359e752bad61acbf943cbf5eafe7fa52f252f29aafd54bc9ffaac456a15aeb95d8bcd65a95946425cf1bfeff5a9bcad5375007f8e357c9575689925b952410e13f7e03858cff78d678d6ebc89ae3959878f5d7c5b3ecbfb2ff06dafcbe6c15720fb4a9793da126ae53d621af69206ccd7fb0f3a395b8ab0db9b9e63fe41e3cde66bc4b6a84d4fc0759cd2596c92e8db0465653730fec51737178208d3c5fb36406b135b7cbf19a23c7a511ce1c735e206e8705ac117a79493aac870535beeeeaac676fa96ed12c4f88c55ab1682caf26a4e4fe7a1e6d641d8a50cb48eb989762e5f0f8931c67050489a2b4270a25bf9416c29be3fbb04e26fe61b39705d30761f3468fc43a993c6c0f1b9b3d2d30fd118b0fc4ba7860200da39d15aa454e922186d0c1b935a963e22b949a54b3348d94dd4afb2734c4106618c2e6d08695326cc37e525a861e5ff1e3ad3421d166f1ab59695ead0acd396d15aab40aa5d2a65769d9cb285a8d8a4ce86a36fca74665baa16e8a8ea8a3d2157556705530a59c154c29e5b058ca65c19453c294cb0253facc6db184e937234a6986b49c86de77aadb290afc935ab51009d323dad149d493ce886632775030a554c62bc728da7c2c8ead5618b26e1eab50a5bd4211edeba3ad423b1c1647511c698f220f5240bdda2cccade4d5fe4f70c805a88d0a45fc3ceb661ecc122f153f6fa555517c8572d156a19dc66315aab47164891b68c39a9d37bcd3f8236265b1616b9696a1bf2cf12e166bfc27f44931fab0344d9da208532c059cbfa3da17b6c0f9bbf25981e959a3687b4ca11664621df3622b751650e0027c0cc2141f5c80c794a86c98285ec671c495d8a08eb10a75ece6e6896faef3fce5b46efe7a7dd94a834238b1f89b1b96cdbfa89323e2b0ecc862bd709e3ffc7add3cb7f0eb75ee13c2b9f91bbfbae3cd3b1c5e5dc66fae101864751d3e5ad6cd1b1ec7df9ab4d3d8dadbcfc3a84a35761e2c4f8f8c87f1721c3fe3acaf6ede691cfb8c5330c878a314e00d0a29c063516cdc266c9c87d39c9be56963a7b1c8cdb6221a56185549729a6b0c81d4b1ace44ac77210b58e651c583a9691e423593a9675728efb9045c7329013b1d4b1ece3456cc103470e5b8f7cb01f120efb01d5b0de110deb01f9f0f122681c089013e1c375747ee4c8912079103f5c09930ff18027d9a1c3e6db0c88d36f3e38a7df7e724ebf3981a363b947aed982581dcbb28dd6b1fc6383d2b1ac6413ea581ee2cf497e13e4f4db141dcb453cc7e937a28e65225ee3f41b95206208b1b5e833fa665e51c3e881b0deac61f44458d930225ec3ca86d57811453c478e2749f22186b81225972571dce4354e8e0388061cc7d2a22256fc301a5245881fc04ac772cec7d38c73d6958e65037c559b583a9683fc95d4b12ce4cfd2b14ce4374a08383dcda263b9c765a7191fc7e9e9161dcbb26135af431f91d25087ad6c183e0e2b1b86e33dac6c580fd98958d93022176265c3843c88950d0b720358d930081cc7ca86e13cc7ca86e55c082b1bb6e443ac6c9803fec3ca8621f1638810a7d900a7cf452e9ee6037c3c3572d6e969141dcb08f8eaf494d6b19c8043e95836e2afd353a18e6505fca77901bf397d942767c069def911a7394a0f8fc069ae52a678046c15dab115ca11f693c2005b17603d0558cf08eb25c07a35cf88f50e60bd22d63380edb2348c5e08db0db11d96aed6301f7e2ed43ed8b83c9bccc6e98dd3275752991d6437af88668e9b6118b50f4f7cf0e1e6191f52fbf0e43ddc1d9e3f1c37b76adc0cbb711af7c67250381a170517d430283820ce09aed23a56e3f4154ac7689c1e21a5630c18ea588ed3d7a28ef970fa7ad4311c97bdc7cdab051cdfdc52c06b6e8e29a2d28c38119596800751693507526945dc47a511711e37e3e0e1e3404eef65e95810a7f7943ad6e374c869911f0f520b72213521275223722535213e44cd004f523bc091d48cfc480d01d7b9198792d3214e939c2239bd37d4b123a737a7f78e3ab6bace736e5ee51ce7e616ce217073ccefe46618af37b91996c4cd31587fc0cd33987834f13fdc8cc3c9e93b2c1d83c0e9bba48eed9cbecbd2b126a7499cde9b758cc9e90f7fc091b87985c41d7073cb015f7273cc92e79b6134e06658030ec4cd3180b8cdcd336caee3661a3877351ddf71338e1bd686e584a8cccd3d78c79358253ccfb14726f097bd59e2a35dd9271e1ec28eaf21ce8023af91c4c90881d7cd10370379922024502347021438129e21901c390d1e1f47f0f0d8b939c987e0698284070fcf2bc9cd3c3c1ff7c957e33ef968f8e0f124144872b39223a1401224f79902e46620a74181206e0ee23e28700403ee3385c7cd3b4fa2e4e62647f2218e3c470212c85122812124a06488fb4c3972338fe748c087046ad070722510f810d779f244e7399e1cc9b9cf94249e3ce0c9cd91273a370b79ce1305e4b8792281e34c4007e701974de0c70226d003899b73ae3301074c00e70137cbde6302e1045e3937f7f07edc279f02ee934f013f7a3c470239371f398e047270ee3325c8cd41ae000908b959c87f48e062c067ca0214709f293d6e46e239476e76c071ae23fb6efecaf13aa27344e73e536437f7788e1f7f3dc9214be2471e709ddf8eaf1bdf8d9bfb4c61b2e4c65f3edcb8b94fc2042cf9ebc9e712c74b103162897cf3eb5fa2014bcc25f01246dc67caeb6622def711f9ebc9ebe69bcffb04f5f29922c4cd42dc882706b8d9004fc0938b019f294624e03e5388dc9cffbab9b9019fff92fbe4c31f111f56bf19ff9bdf67ca909b879c08be99c87df001df67caea6626bf196f5ef29f6559466e56e24420e06623112002c759ac8f4adc8c8047c0c889202202f79982e33ef1f0cdab8f372eda271e8ed2c377809b717c35363de8107b106b7ac07173cd8be8a188fb4c196fb6f1a68cf79982809b0ff022ee93cfc8cd457c3aee13148e7263146f8ce27da61ce06623d771a3889b1170226e1441c47da6d8dc6cf351c7c5b3ee130f47012202f7c957f31d000710f7096a75331067dd27a815eb3e538adc5ce407b071f3018ee33e0931067ca6e0a8b9cf941f6efee12b206e066207024e9a24f100241cc064496ec011b68833c012f105d822ae004bc48db045dc28369e004bc4bd9c12bbfa1096f524763c122bfe885d5dc7b29e63033409dbb8d9c38d3473fb0a50c7ec670eb7655c1d6e67d9e1ca86a11e2bc0ed2c6a5cd930d3678cdb5b4c216d24491b300885a80f1212121212520b8197bbf414e97d336c2e9d755b2e0cc7206c2bf6e64fbc396c996e7ebd262cd2c6fce7d29d4b346efe686e0e6337b7f00b1e6e3e7e31e366187ef186226d4cdc37c37e647a27b2082b0183b3a7048cba0477bcd6b08635e02634dec4f426f54db83719c09b6c07d7b0863574141deb1ba3f94e8779f8a414a6bfd361fbb96d2d34f4e918e8c2dafe76a263dc75b2c3c24d5418bc939d14cee14e9468dc646e81b9ef7498009f6fa08ed5eb6467859be4c0f54e765058873b5162c34da61206bfb361199f6f283a66ba4e76443ce34e764eb80077a244879bcc225cbfd378874f548ba89b7e3a36006ee64e763e1ce303e8188deb64a7859b504c73e94e88373993ba934ecea4bef3614ecea43e1fb353cea4ce836d3993fa0cebc999d40b603f3993fa0ed6246752aff6246752d7c15639939a491db4a09c493d079b9233a913c0aae44c2af519db2267528f61453993fa00ac8b9c49cda4ceb2a39c495d65597226f5cdbec899d45b6c4bcea41e5a177226756a61e44cea30d6256752b73646cea4def6859c495db436c899d451f625675237d9cb99941a300e57ca99d45316c66526908908cfc36c46dde07209c0e67ad703f02530106e973b1deb8b042a89255c56e200d80c1ec675d1735e94d3bdd3761d60317899585c01705df47a3e210e3c40e4f47bd3f7d1219446ca906a3249ca5cb8b64f59ebb54668fa3139610232fd00794134212028a074cc482a8146ca6453f6c940c64c3e80c10e64acfeb3c18ca53e4d341900619640c2666abe4e17e0f92f0793053190362609e4cc149a3726148722050af0bc38801b0ce085830d70b041a606322f6043b0981b6870834b003310004c00a604c0050c29305a009001005e6e0c2ecbc2c08e17faea15e5e562c30b6c105fb8e0454b0c9498d0d502970a86053029172b7001b6682dd48b0a5e2a2b05acd328c5685a45b1fa5c50e0e2892710bb1613b46090c353478841d5a62281b491a2a911481b20063fa19036507286766c7e12467fc21f6ec2d3e3c3e0950df3b668980b7abda596e599b2d33d2324af4ac79e84b40313e06cfa790294d39685f093888a0a82a8ccbcc10905d1a862257e796992c3939e109e34941744e7137328688a808b019e3a28cd89fbec1ba5752ad432db2744650eb4e302a61f6a0aead8cb33ca0464faa942a00da5db37f4f239bd204ae32d09cd1b1c52509010184a555bfaaea19b0dbfa5725079b1a98fb6a3d2b0ef9b52f8a82063e31564acda60830daf1bca442945fa53afb75d51ca76449f1d9586cd0fc9f4217d481c922cc2790285400432f6f2f95902191b3f3f51206340ad5618c650cf2846c68036e06febbd254ae319510e69dee87e660ef31c129e9fe029376fea94689725a90261fe3aa4efca57a3b44d07bf1bc88f061236ff623f1918d1f9ee67def884660ef3335c3d7f33b76781f0abe54fe8bbf221791508b3e9e7fbe998e9f326274c40d4046ea275e2e1fc096555cc04ca2a9c3fa409f4ba790e11154d233cdf1175543aa604d71585293b718e1b810dd3bb53c11ee0b76e0d619f862defd52768e332ed8b6b68c2d810c4f5debebdf87673cce90d02f3be33a849127849fdf67af0f56dc1535bdfa090d4e941dbaf26537da5b55ed0f494cdf5e17ddcf44c6fba2929562d2f1857bf5af187f8eda0dd4e6d4e0253fa5a6dea5bea75823e7ab0351d654d471dc5d3077ba06e7ad581ba49e0bea9a63307f298f8076da6176f4a8af01b28e4dfee921fbc4b5edf5eedceb6e1dfedf5f014fcd1d2e36583ebf4c5dd622e0de2ba796298e6ced9ad61db56dff5d67120ed19f472f30e9d410d037a51a2600feed696d7fa17eea96e0de176c17b600f0e1ccf6df687e92575734f1221e64013ea2eac6c19d4cd1f78ee2d7bb2b2654c377fe35f1e2a31f17697bcbcbec11f2daf9f608f24f0964a6d4f6d5bea82df38bc647b7d4d7db379268139140abc09bc5ceae0959bad7fb112d7c69c65bd9ade23654a7d7b2af5ad619b10500798bab9095c1fdec43d7ceec1f8c5b6b06c1e82c38f362781c3090575b92d5b2ec11e236e31fd8036f76090e6b4b5dcf4a386b0e54ed8bce1a62ecabd9a80ba86b6f0987e3a967a6ca69efad734a737a16ba8e950652598aa9d795cdb4fbf13e8e0bb3484a0e9281b85de9d3edd0945cbcc9baeab7f2710cdf433bd16a5994fccb7be09246766d86d31813aececcaf4b334b79e3fde925213b4e7a589eef99ae81eb089d963324d2cc2808620fcc2d2e80c53c0b2e543d17397b67bd8df1786add631fd0b55c38dfb70fe308afbb47987c3db6548eb86a2f2c6766ea3971fdda494526e5786f4a4a81206f71932a4d10da5f48b2163c60ee10c7a79da3d751a1d33dd968c899f8f91a3bc51335b64cce5f327195b7d9eca94bc0184276f309939d04fd8cc81729e5dd2346448119a5e851841228d38a261f43800813a3d93490f3b9da2283d0fd5ada1b3864a266419054cab802995d1b1eff43368ccfee665cfebfad17d7ec2d81a46e96170db6a7a4f28c9eebe8c2e62d2b12c03081933bcd8e9f9c529ebcbaa5a6fc0e68c99376230a981cd1b328e6131aa80af8085dc09b8ff6181fb9ec422a3502399100410794536a1e85df8ebc585970d366cc186172f925ec4c46821c6e5ca820b06060b302e5c6071d16a5da1f5f262851716ab0aac71ac8dab1515562e2e537011452cc496962b2d61288550a58a822a9582420a04914014ea09a85a9d504fa7269c4c262ba6ef63c2e7794bf030875bced0c61c6e39c361ee42a48d4dced00df783a09462ee417a823a1a730782e50c95b329ee5ada68d0034ad8bbe7b9300ac316584a3c83b06b35dc12862c581a85e10ace014ba330486927ba6b3f4e4ce9eed3bfa6094f9f49492e22dbfb37dbfd9932d3fb86373e19c82133fd67cabe4b2a53d33f33005f2eee65e9980df7586f1db4e26b84e06bd8305dc85a236c015b5e6a05a1e9dfe96950196fc9e9122f4181259658957bb0a872015e147f025d6684462ad02606e94ac3bcbb5cffc020a7bbc403838877c9c99e6e0b8f1325c2efbcb8ea822eeee2283048eabeaa7a30e8fa0bdbe48597c45ce2d03679e198b7d825a7bb2eda977561e7518c04ffa1291ae6ddf09a2eb2523f5088f8d3cda77ba010d5c19bf3e942a007874f5df57a0a9fb2f34510979b4f1f182495baeaaaf02adb484736f32c11df229ec2133825ec242c3597eeaebdf05e5fbcd8583fb17e6a7961f38b17b517b6936a2f5e60a925bd52a9138d42df7a8342583f8137bc4121e26cf9e966f142a007bf38f83a413175f04b3eb8e5e26b87026dcf0d073750482a88eae6d333f896b780df40212f7a887f7133280a200020f8d04e5ca780aad10717789d1899ef1bb94cf4e765627e3b13f34e499d89fe76a78041c4b7bca66097a090fbf012fcf1e22f2e41173075015c8242ec533f5e9eba4b4e7f3908f39a0661b68764271e9c61fc86c3d81ff62fd7c5feb87fd1f2d1e61e1897f8865f1837c008806d28305ade02ee686901c02706c075fdb8b7bfb7893c2c341cb88cfe740bda9c903a06fe74d5c5b7958e1dd50bda88a2cab69c5a3c7befd55a7182424e17533fb5dc480b1f2c8d96b2c0b96bd87b0b4ba3a52b78a9cad210b636db87297c9a46ef40212d10e80992ba78d036cdda16525de2dc34ecbd9a50d6ca289cd850d64a4cc11eaa9f2e553d52174f57a812e0049e5e9c5e840f2fde9cba13cba5762a5119efb54ed0886a4665bcd7f40602994b14069412e6fe4972620908090a2b828c3a8a8ee589057b4b3da334debcf799344fdf4e776597ec900d1291b2beb279c813a98388a73b6b41c0bb04fce9a71b99210b09f6385d7533047a2ede6905968efdaec018787f59251ac3dc06ab44e397d7694469fa277f5e9525f14af1a79683177f3a3d358d1ae6bd672d76e76433f8d361522a08771aabc09e2dd9b9c50d42f042c0a7b6e858ea2ad138754fe5a554a914088277891844bcf3a861d38a8679483d7339f8b9c5e9debdd716d0063c6df8248aa7f7cf5c326a27bcd343d0e634bd4fef3deb98eadeebe9c541abc4c4e04f96c9e9a7bfb03f28069fb24c52e0273ebd86c6fc641bc75c06c886b9bca61ba7522a08612ef1e921cc2508a407c3b870e142fcc462eb2da04d6bdbe91d2cd6f889c7bb44bcead38a1418447c056d544f813653a861de53a08d6881066dde30b8026d720f4e5db60fb3fe767d64f3201e7c0aec91baf974d5552ddb14d78f89539f3875d0e6253b8d5517df58c07b6fef1e288260ef389daeebc7c4aa4fac12ef1c6a98f749d430efa19d541ae65d656751c3bc833108ab37b7006510e6fe21c2defb87d2cc9f254a3383a47721212926d3174bdd285f505014dddbf6d3291803eff3673ae15db60fa89ffed59f8e6a1faa9322f3f4f2f0b4e6954165bc3b1142ca4e65bc371142cafa5ba6e1bd56cb83ca784759a3d7676974336526efa9152075ff2cf70912c1475019ef29178449437c96a032a7d39fee82b0bb2e90bb2ef0ba867453c67dca4ebfaed37511e9ed464ebd9bac947d76ca9438021481eb3a2b6d1845c23ad5e10b49639a7721635b147600650878a2244d8bcacc576efb68b8cfe3285d85f4f68ce93284dbb7bbbd61b3af6cc922af053d9bcd3778fb9c9333d953198ee32668d35d823d6048c03e393f2ecacf65f43601934de9b97509aca8a20756700d2cab88a2846b95285391389eae9c4e490d839151334ca3e8681d50074567e503e1e6019ccbfae64488e34307c97c45cdc2550f7f92648b86514a86d0c66f3c7f42756975d1cef186fd845ef733923347a1f891066545fbff7a7dcd247ae27723e6b11b472fc9ab7958bc241f6c3c8bd74bba5e6dbb79ce9c56e749ac131d5405c22186a025511a1b3a486c85d2301bf713d2f986c471847d43e28e4fcad045f1e61d5a6fab100d0ab8635e878833ad785f3a3a365ce2732ee648598e0d2bda4a7b22dcae7862690ff6e273ac488700ea18776891f323b90e1dc2cd6f5614d4f1fabce23fa74b7489e771f17e42492e92233a57988a10d6d01c8b731e56bc0f6b239e656f8774bba386e55c96cd1b66fdab9baf56af8fe357e36fe6f8d597ac6e56375fad6ea6384ef146143b717ce19cf53a1532d020bc70441ccb7a87c4b2dd51a5dd0c31c4cdcdcdc5d71ae18af5158bf557d68bc53aebff5fafd7cb0a0d84a30b6baa61f5f9d761709e5faff9d797bcbef26a38a75f1224f7858363bfa14fe893f2e358894f7825bdd51c63394774726e2e5e978e897fc5e789610c418508387bb42eeb686cea704dfbb0138b49805c82432e90c3068e27df51c346cb04f5556918bd95222b60e09925094bed4ac3a8f85ba17c485f0873fd8c1a56d4301854f0140dbb5214e79cb3c6c573a08d6873fac3e9bf5ac7f063409cd6c84ee3d1684da232552e154c6b52ed7a54af54a15a548daa953a54a914f1afc808f7693938407e237eb4ac998333bd9a579bb3d2727026eb35bd4a9b07f29b3b278edfae6c11af35c29c9bfceb9c9ec37fce75acc7e3d711f22fd1b90f1d281f6d0f16459c9b7b30ceab94124b90c56265f13b8d57a3153fc1b9fa68c5b3ec74b13e034b2cb8a6ab685f5f5919338731ace2a8044cb4e6b19c664ed108000100089314002030140e8805c3d1783c0da340a81f14800f8ebe50724e1a87418c42c818838c21000000000000000406240000662421e8bb41e3844c621174d3fab92919265174fcb41565f0fda040b64f12753bc18124c6c0e76d44fd242c124b9648c45f3abc211101c1bac0721ad259fed6caa33a180dfd416ff3688832def1331e2987ae96c8d0b1a354b9d6478288bc4a3b1f64455baffcfa3079495f0b709f6489b475f03d848db3cc9ca1ff572f2517e0427a7bb84d7dcc654a16bb52b141b98b5e6490560065ffeb31e9433d530531f5250f03f5450710396c37a8bab0001e0f5d2f2f0ca457821c636c6e1674d0b1c583e5a20080b423a731b5574975c5e9a91c7d388882b210b1bb9b78eee16e25eec358dd8afab7f558e3fe7defff29fcf1f13fbc3bc7de2a6e03369bd4d8c6e18ebcd4dcfd0f658f43aec85f2f867fa30794b395855c5f33fd27dcab0a0a1cfb8889ca91a5e8dc869e7f8458fd2cce06fa650970d76f15fbe1ae9761d8a133259a0d045f3189c150627baaa122dba91cb6361567b75232c5ef13e1db02e1f1800c833528edc2222f72148792de4693a3a21410c117eb1aa8d0f7bf7b0f382f90e46b86aef46b1e138bcad72cd0bdf97ce907eff3909c371fc7cff62baf75c5558e9958ba84269a9ef31c46ef4b991c7ec50f1ce39c5864fc053ed1117f7c1f8014535389fd8b81e9a68fa18bd6864019af3547d78cb1f60e87057f172f1ff905ee7f3207c40fc79ab94c99924f8a2fb7514c90ed5829324093e8e414fe1a752a6c4fece1ac5bbb51b0a42419855444f74dc337d986d28e2afca14480d5ccb9c16bfa828b3434358c27111e796a837c82a3ecad744ed50f46fcdbb05c63ec0237e9b528d4353b13d8b4510166a522c4a2c6c0420b318b88a1161541565a406c640c19b428b228116a2311cca445c0468d90858a62861283362ac0ac548458d418586821661131d4a22268ec40c5f2e7f182a2427af58a898d5687d84c8d7fdbf555ab91518b15ed251c561859678afb997173b048cff66d1e1938823f255a1a2b3c302f50f2895f3607708b83090722d415ad9224ab3374f75d62cef5715df0073c982fd8eee03267054c06e60996cbf45ee5101bd045c9f71c4c9d7e1d7586cc0477154e830382ebfab54839a756ea65de90b5e041a4c6ffaed96d6060aa8a23f6cacd1e99c07615c1bb49508e0128382e0ff5138337a3ea320feb11608146a9be60864afc7ba337ce2210860d3ad1b87cbb3867812d359ce96c1fba0a534902109c1f139b427984d9fb014b897a1a77fb5eb080564358d9afa9aff1ad35128628caae041e40c5d9a3c5a3333988399f9394aac938ee5ab1ca32da6a69bd48d2661ce129102092d669cca5a111af9dad02069695255b3196e72619319935c4845071c12511732142a10cba625878607cc9c34148710cdb8af2d3aa2c8a103613aaee387400b9286183d9abd5cdfd26acce9f221e7dc559abb487d5800b8342f60735cfcb520d7059f85ce78f3b43c6de21d3ce2cf27498ab2a004f71f679afb579ef4c2da5af74241a15e779ec6dfcf598c8e2b33f2f8d0bd266f65d7651e4e11c118069624f64a553daa4f47b2bf34e0748be83fc39298f9142a635c90e1d7df2aa43af0c0574e99bb2f3806b280e51abc83d229c67d211097dcbb27ffd51f18713088406ef6f29f30673723fe5fa60e529a4cd0fb3047b06c98b3dd81245b3780ba1587b62b7e9ac93571fa369297628db0c36f5b566ee655ab24101a6d0f47b5692397f10cfe2f5f22bcc2f7f0cb6f40a9457cacf0fe10c1b4354b0fd06ac5b3c9a7831685c77b899ba4a6f9f43a7da6b3849b2c453ba0e9e02fd906c46f53a058615c5c2b33a1b6154026adcf8e08cb8774bb4ba8e70a100521fbbe34259f1fd3a38a26604e44bc00926e00e1ee26788d758a67cdde4081374876b9f3f420c15880b45ff2f5fcd7e51086501d53c8368180382adfdd326ecef8bfc3b3ae3992280450cd30481162abbc93f303db4189fc182d9074e46b3b7fc577388a88d8c0599f162f1734249ae3f7ce4f2554bbb762396b19987d1f83b9d994e26265caeae608c890a6ca7113436ccc8e85e8e4c2f22fa1c0b93bf48b02331e9cafdbc4469651230cf9ddeaf079d00abf309b8f03b0553fa26df443bd522623419de18b59bf221b5d00d3c996e4a9857bcff31629f9a2ee97495da84cddba3b4edc5897bb4a70ed8915e8a52a5bc03b86073fcd6e2e09d731d5227b070aa6e117e8703290d0e4ae6b51846a78fc3214b12ebcb25a1cb84de31598b62892351856b87dee792e9f913ecbfbeb91f5e6a3ad6db3b7e35295e9ddc030f0a17b0530c4088decba31efe0cebd04d54bc31be9d0f97c4a2657d43fe36571b09be6f82250633c899564ce2508a72e8fb4d92ba21e60c37484abd4c719b4fdfc78da408435d00b08bfbe5cdd35b1b2633ab54a498f26fc6f53a52f7617384b444bee59c60b4f2da6fc1494f4da2b1db4841f74e2788e6f26bba00b831cd6ff9f396c13dc4040785542257eb51ba50ff97de299107d10ee9c3ad17cc8a0cc836e39252d8e96551cad7e01461392532fe6c705f1105564bc72cb8b4528d42e8b3049e6cf634b76cf8ba17a0ed0c468db8277a46a5e8821b8103dd5bcd85f444e017e6915503d965cf6797d7e540a7d30172c0d04a3157fc86ea40f7966dda6b4776e1e72465098ad02ad6a92bd334998464cf23aed8cf5974fbd1e62a5130d1bc740a13f137b29031b980454962b0610dfaf5f87d7b946a91014de859803fdec6bff61a38a8a66775a881720021a431b49a4a4acf8c13b15c008d1ab5e4d68cc1db78d701dc1f3faa41684f222da4a98456b3a4fccbe098b1d17801d1634b63d2b3b5e45c3f5a4492e04cc335b65e6c474dc67c5c44115976173167449a4e93d50bf1f15fc5e680e5ed845b789c6956c471fb7e8cc071a6dc30ac6f5e6fe4d67f3f9e2e8b134df6c97e9dc17c4fa30abc8d05b42b5dc36f1a426a1333744ef02028964e3f33c67dfc8db39f58fbc99ae380b23575a934d94137a2a4ad4a2ed36e8918546c80d89aa0ce178c354fb2b712bab68c90ad501cf7c9c804bff420281c53007dee1d852a40a23984770f5b358a85fc5ee9477f48dfcf3014693dff3ab9a9a3b9b7d5bb8e45dfbae1b81c5870aa8fcef648a7101c35e01cc655562c4e9335ca63b73e38726365c8245f537e41505bd2f03eb2fd29f9361b1893443266909f781b04858e6c01ab8b6a09e6946d74993e1a22f8af03105292150ddd9cc357bd67e0fcd8e4a81b1a3d644b54bb8f952d85bc45a62a62dda1206044f02020e92a11448d688345f6532a8ef28cd8b528b5dce7350b72c72b24f0c82a2a124b94a97f3d667229cc38ae5810e401fa63b607f65e32bde47269a9af371c77e262b4a5b4ab9c5276787ddc5a2d35b7e437aecb6b72703fc17a74295eacc2f89e41c1725fcc17b2f06d6887730ed7086a5dd50ed15aaf46e9b8cc74697183f2d23c268000fc56d80ab4970d8318bf2d9a0c2c15e499becaf083492b5690fdedfde21baa6fe002cc66c917025e340152dadf12e95446b8f51d364aa07059c7517496188c334f9865a002691c740c4dd6957c56dceae71cd9c6e8a28c2e50e4a1a9b8ca03a178b380f55d30d990ea33f0a16e84dd117a2c024e0d26d07762b1341db66700586951fcc7a3af5e117f5454a598089ef83c76ca95e1fbc38393298a0e8a994117a5f93cb03a00befd0b2e02fc809a796ce2a750c8f290c9cd612f3fdc73a04a20cda96cb0cdab80e7a8bece0d7efb9cdf9f6f589b2cbf7654a5e9745d3d68e837a7c225f798a73251c88431205d5d30c0cc8dfbe3665df525138fd59a0ed5b8483a661ade4c089b11fd07ae335e3cd07eac43e7c9d833c5faae204f3beb4334c0cc6c4eee50b29b9b2cac39546da898ce9049231eba225317d99690fb81163570c15784cddc65437503cce46481d7141f18b94b04e0d10ae550e0a464c12a5c6881338d39f9c06f53abc32df2e08e3259d19c0ca81a9784bfeb1313c64f16acbb7a0d9e9bed6131b0a6ad892951574d268e799f89c1d5011e1f2eeba0bb7dcce68566b605ef3a9da5068c61af38fbd2d0bccd416154c77040520f947fb9aa6be2755384c8d49d53005dbce5616d723c6212318dc490cc8a005d88c3d295e3ef8e0560c3c6be675077de068318acf31eaf390c3d40c19414980ef77428fa8e31bcd3c1b803cb6ff9800934587142eba19fc519871bc7d80b457d56401c6b4230dff31f6c2092f704f38270cd1dccc18e5fea49a667eae42ac5aa2ae606e7d0673567b0bcd08b853d12b0c3791605ea052b8ec0a2dc51109763efe7807f35e18223f502b4e65361fb4a879ea230c33ec1a9df4e99ba30b5aa8e3f0987da3706e3ff5bfa0e039eba75ac8e5131e5708ccb2008aa27ed40e1a04de41d41883aab1b80e232534e1c42ca545f1880ea43bb40385213f54630a0cee58680b89a942b863031d50f0681faa42e288cb441bd030c9173752150ac66e28a8386ef262b0ca4b10057a49702b1e637c259f726bc60da022a44c9489524f568c35a45737995997eff0a5bf7d82d45d48b87c0c50753671453f677bf57fcc7b00955e48b53a268edd761c4ed48a3055d9e644b49ea6e42982c40c0a7bcc5c06aee964c9953822d6c1264501cf82f013de4d2f45c11892c2d9d31c4fe528c0723001180327cbcd9b8061cb70d7ed4d3992d30497555e5f636e56a68b9a94710702b51731c73098553ab55e36e99060a5cc9ed3de9d747a3113a86e3b92bd9d9333aca170720c22dd6dbc56eb57febc4b06eeb2b7e96c45fbee8fd31812a8ba97453615cb7ffe4b8b983d3d67e5cd601d97c168eb94f4689b023e3edc0afb474879d3d279c511cf280eba542db97c972b826bcf8b8de14d11d0adb59bc7a04431365a506eb76e8bd026b5bbd571f01c080d4671fafd41aa8244b28e02743681343430bfe127edef6bb8b8956964eabe18595edb59962ee16ae7e0bb9f3ca73de3912270d4a92d0080454540dc0cf0178e4a06b13e38294e2468cc46c67be31e8b752a86e48e37838987e69fceab0c7451a68915f8904d5243e3e1e1e65afcf4c7e9be208e60361ecc8daa4b7735b6e85b712ed502ba74ee6a608c9509c9476367774d8a60796127eb3c4756e3ec687fb02b0abf83e64a622849d311fef739c1e4dcc0c9af470f843062367a200f3364885b915220fb47d54ad2e56146ace31a5eb2cd829d1170925f01ef8e52f4d54ac98ec620aa370e00b91686cf9dd57ee01caead22f3c9ad6778aa3a2cc051657eb51602e06ebd8185e6ac749346eecdfa6e3eec573555ec21cc0c473e7e461b91086e18bfa75cb57a616e0342c37f1d568911b75a33010f24761733aa74ec19a9608f92fd4ed0101950958e3b4531acfc389f59dd32ee368aa00a26fe62e2d5fb87128ec9fff5d8bd1e853dfad2b6a104d97182c0f233d96a0260fc246511dbd55ad3013c5079969b3b42fa6baacd7ca6d9c8b49898948b5365272984343dc023e87449c918a3416c2599f90f1215ac35a82eaad67999ce018ee220a18f3477ad00310c35919c88aa98c20bfb650429bf6406b0618f39b2f07098ef14d5d67bafb1d3e149e6b13bf622e7a30223f90cb33e1b8cd3393c54b52d8b77eeb2af2261e37ad5ae865dfd77174c13fb44bd0a6159debe525d6cdb8852705b35acaae080870fbca7a5dba15d048e868c7c0c3ffe89f350af6f832a260eee11f1707d56cc8f68d6958177c3163330b8e925e434376a9b856d664fbb216f40d73ca1781e0cd6b58de5ffd32407cc442e76ae1133c2c2924934c6814fad8fafb4b709e00255d7b419bc848afd544902a4e01c8b86094957c1a2da4e91833e3f0919c5409d918bc68eec9dd8f4277c129b83685370520b858102a0d9c0d22f737278cdbdb1bd79fd308013ac4e3fde98bde873c0781815dbd64277e822f47a750cd1a941a3038fa488bcb3b8f7e1d5d121678a285809c70081e272560c450fe4f2629b05044144d2d6bc374293f9e9e19ee6b4729054b38cef40a48c321fb2dd1dfd901724763f25b7cb8fc6b401dcdfd884c9515ff9b6e69686dda43a4093cb4810624306e5f90e0d4cf166004e3ef8e7452e85f116b256a94ad067f56dc452fa5699abcd177228b6bdf1747db17fda646bf293a5d6b88b735f0a7230902aaed7c1bf67d51912b7a3d3ebc2dd83f4d72cbfc777341f261fba775536c9d86d9d1a58bb43e2208283196cd8f62273b25ca6f88515d95d588b62459b62d899cf99a1996d3c52bf08966d6161b88346a6b60e362a3242ab48f2b7068a800e2f1d384590aae7fdd5c958b162eaec01a21ddb2537ccbf3b69ed94e50a89a2161ecf75b8e8629df4a6011a88502d9d40b8710011949bcf488752353caa07f94bc4aec1a4d6975bc909bdc6cbd5a277397c892a77f8d337f39691bde10a67842e0affdb88603acfc1c0cbe84fcc3b39925d6784a181ec0f7bd8a043d2423d44deba405ead2673b1d86e5e3571874ff5c16eb3eb03fa43e437392782a6cc97b14f984f8119b8ac86e5db258705f333fd74b97b073c2bf1a15adfd331f29dd07bf1ef3739771f7b662bd62b7a978bf089953f79a2a83b38fefd8a9d43b06d030028a77ea59d49a9db948efe9092689a89780a00a0baa3882685ab6b2f2dbf1530f0d52c8f5362d8de3a73e687a88a02c495a221f4470897bf2fb34946ed063a7be603d57df6ae9c92058d707c933c7209bce87ae24ff2172fcf349a38cb7924cf4585d8e84a988d44a3afa9fc5b42c7d49028259d8ccaa45fda2a1e3f07231d932d2e68fe3896a133d68308013263439553af7bb9d7abe8463337230b4e408d53c17da1aeafe585fc3251b413f6d2a736281198eafd4d4be42c444a15223bda118c5f16ca5f2d3ec94f89c1ce48b3bfb4f3724f0bdb7e6385ac86321b6adc3e3c1bfe61c952e2e8f442ecdd0c691929b2810d9655821d6f2138ad571bb09c4c66a45baafe492fe42887873f85f1e9decaf54fd83d2e92a58bd518d38f7add1a83aeb63b199a8e26857cefbe935625a6d5e618c214402df7f93a6f7174a9f4bf2f537cf3af765f0bf3367c726e4bdc262b9d1c91b7fa665d93c7fb30ac6f3a073a6f4763e77a1e8675ac92aca97d918736c285836ac9dc3ac2acbfe92c750759be7630e05e4b842c439e0edc607323cfd12e79b54c2945247d161654be7f24a5ba136f3f5bed60473d5c79cb2b894faaf220e74e6bfddf815d486a4cbfe77838d4577337278dc6f0ac7a6c0226f9e683d5f826a20198d30660eb07741e5fa4246dc816069c8e2d9a60f517355305b6874d187ef7c9d5cd7bf41cd855da812b1d667c9e29cbb1fd4a12b52cc730c8924d65fe5f018233585483a60440a9276a35c80e5880ad85f5329bd7be051025a209880978182863ca13b77e7924658ba8cb700d7d0c92bca3063e1d24530cf53fe9ab60059112d19639baa5f6f8804c406a66bf75f1f339185627ce6657e3813ab3243a1cc6e79d7b9de3c5f09b675f2f02905de897af03ff02d36d25dde36ee0a36cdc884e5ea99203d7181301d412119607cce32cbef2b44d8b035cc41695b0eefc4b4a41fec622bf0260dca6f2858bf8212dede45148e893f01145eef9a4a1a9395500e5d841c19a7e4f8addc274a5a13cdad0f59306c82dbe573b1dbfbfb3bacbc24f5b05d392f7ad0898e6cf68de273fcb9e4a6014f86667dd0be05d85c2b0ef03890bc959a051690177ae64b879f781e3970b876c753d5f5e5764e6d11997404332a3d54073ee940ffbbf8868919f27b9a57ea1485c517dae728ea61e1e55bafdf09940a1235691814875c1901d8e2a43842ccc14e08c0e47dc014e4181e81a228b6e2cf70f341726fc1eca18362a2e65ae8cca62b39893268f9a7bcbe351a842f2c54305a843bda2ad49267fa9bf3e158bb55e4791bed5bf4f5214e77382aac46029ae93dd72053edf36902b9c837a8beac7512580465d96dfe4f0d68c982840e4e3e35cf969e68a31fff02b95522ef4d6af852bf5b228749ea5af1279623056a2f50b42953344a552c88b323a6fb686c0afcb597304629a8a286e5dafae6b1501a5ceee5caa929f3028153e2e4ee385fbe591a2aacfe80d76811ffed01b8903fc9a94d363aac3caefa8338df78bbec270060324a6bf8e5d2ae333af2c12f73e270cfd6b1c8ae82c4dbf8b86f56ad9a5f1cd825f22024f92b94a3dea55e1c3468cbcbf7a9bf49b821d12a6e236e3d2a5f417642c26a204fca688d7fbb035ada05f54a2a2f34d7d0eace1fe9bcd962456675d13933c41ea7d5e990bc4e4d9d6727de36a7fa2f9dd116cc71acdec9f7c6e7551583c8ecdea4677d6f09ba0e4b644f714ace34b449978283e41bf2e1afd742395932f4b21d7adf3c1eaf9e10dd8197ef09601acd1e85a2411125f0e6e3df197063cec7c1efc6661f6ff5c641517f702fd9d9f1e928aa5ac035976797f3962ac07a71f84c688efeaee8a2b72a48ec7f501dbfce7cbfb8637eb18d1293e3bb5a17dc053cd3c8c0fd0f43004818e9d40ed3ae0d1751000246d55362afa40c4fc1f6fa70eab6bf4b0613e82dfdf47e3c7a9ba7312fd92d2d22965995012f9649d2cd389f1a3ae048ad8c65d50d2fb0587d0295be2f407266b61f0fac73826f6ba28461fe6af3718fd06e265d3a8d85ea650dcd69759d05d64787411fd09a554a2b2b0730f340eb40a76f52a5eae9ac9f0fb8bb6a17ed8c708a383ec715b44c39f60693286814cad68c784f7b6be5692155b0432e1dba3d8b14ad35106e2b905602c896a85fda46f9511a1bfef22a73959acd6d5234fff4f26ae2d2b12f509371a2a001eb309cb5f45cc6ed3e2b15064445e14019373c3ec33d5eb274a3a4aff428726398027b29abc32517e29f9cbc62fa88d5259057ac3121c05d982352b9611b373a5e97948e0770ca4d09eda41f7a3f7d2fbc55c1563bd7ebd7ced6dd8de46dc7001c8123d1a18ccb65301c49a79e9792c0b31a05005aa3ba84e8d1a23840d084e2862407f8e6109ac7b13c47691a8fa2f4e3cb472790c59435afc806a757248dcc55ee6b087ebcccec591649173e66af370839cbb319a2670e94c266adf83998965d07c9b0c5c2bf8406eac397316a8985957740010ed340744d3056945d5da73b5b3ad07199635ff48140bd60bff6072606a919262fd9506046fd657f410b172a0a575c68f006418b3a45419c542d368b82f806c0570f196c545a1934ee8f3b0a37ec404741dce52d4873ef5d458bc82ee389dd2d285997e8218ffa0d598f68d95f86d6ebe998144d1b3e22e5de5f906e411ed95d9edc2389dd825e8c2e14d83ecf98ab45002799a33b5108dc2c9f7f56e61a5998253ed60c1e0315fbe2a165afa0bc6ac3d36bba8377b24bccd8ee843b4acd59246607d0e0431800730c7cdc67f9a27647709c94a1193827f42a529a2c2baab61060e40168aa3a8cb7831996430d7b531f0203467c4c01bcda4ec6493bc16ca2c7261cccde23d89f0294384a03843bac48874821969c5538da65732ef425e6058d682ce8ce04c8e2b363d7d29d7c3d6965a09eebacdb225d9fc07851e467eafbddf3654a07c8eaecefd0bb1fb70f18d9064dab0682243379ba69c922c448d5b6bdedea5bc259846bd7a47170dde67195a3a6642be379eaef02e1a598821071b6da0a13094322a1f9794d22fc26d7bbb325021f3dc68ae683c4e92d7e4b33cd3ef3b58dd3f94064ad0eef9c3a4621cb8f1f0c5f360a4741307d0c40f04a2c60485f70b6ce27c4682b5d1094e8d52589e538edaf0494760e6d096575359f621b67edf98410f7504edf1b43bd9083aedf05a144fc10783f4f54fb73c4c1e3741aeaea0ed31b4438e5b7dbcbded29b269f878627b3df75cf162e9314297a063bb503436583a29385292a2b019dc8280b90114646605316fd8fd90a380da78f81de9f7d7bdbe031feea50c83423bdc0abd141ce0893db48cda8b12db3d7397a0d2e503bd9e1b9e795a4b6218064056bef348503808019976d8afeab26a4d65955ae1a33b28deb112690a6ff961736425893fb898639761ddac258e6943d23f896d11581bb741e5d834853529f6ac304fdb0892d5dd0d9117a219efc13da6564f568e7a802cd44c0db6f1f119244a00ffa44a228b22e8cbacc65f4407e284f50fe022373084595fbad0d77602063097ce6246cb410eb08581feb87da17a12f027cb48df370a457fb7e4d97d3b1defe63ccc0e12ece9987d4222e48d493e5a71ba22886fc697084976a1d574041149c38c373a03f798283735c48192b14cb1ceec3ecf31c2ad53226d648a2bcd2769bc1811025831d358160b1b005ae1b1cabae4a0e6a003028d251a3ab4b40e938e5fdc9d061a423d3a4d8f6e917a1cd2ba0ace20a125bc9818fe339605ccb5694b86acc176e9dbbd8117c6227452f9b3c95daf169b3822204a430604e8135b053bba04d8e119642f11d509a82ce16256d2c0465caaeeb233d2d9b53755b3a56afda963295ee5f44cd9b589cf0eeac5048db8398951837d3c6ff55bd1800e2924112a48948392ea56d1cb9d61f49a926543553af0d9d620b9a9a3c460c0b5f1951790276d8e0a778060d97a8ffd201024cd63c2bf13f68a0bdf0dcf04ac78ac3a0375d558c42394dcae7ea05e49cf382476c2cdbc69c2dac78884a2e643850a472fd4876afc9b76fa5f18fc5395cdfbce6a72220f91753afff77baa1a8a7947e5b23b035754416196e4a6470fe2ba180bc998019f914a47c0ca2f8b1aa829f6f34269c7ac9d51e52b64a532db3af084abbc832badd593aa18a2ae589e6b67ecc769d3e87a4837b944aaa098c9d0cec967acec756b95f55b6496950bcbca92aec0ff9cb607c9dbd0afeab59e177abb53f970b29cf1ba7919f8a4e322aa9d773dea64fd8d270d18f950ec3b549a04acda87915f6b119b5a7a1b08a52ed44dd6bb4ac58e98794edde2ebea92c19c0a5b4233525e7a8f91323e38da96ad11c5d5e944cb39a6241319febcb8e44b6ccbe480ea09d8cd7e7b92be31426312501e7b5196c0621e8f80f54dcb88d8ca0880dbb51d1193eed58b9fd4d4000aefa0d0986cb2280a5e88a87325b7b07c5d30d99f3b8bc9024dafb8dad99004de2c7ee0d246abda59ab0a33fac4b85f1d5bd1b46d1a12fdeb11f1a4b09394c91a813d896024d2fe301e2d8eeb5cc0122923f5503c34349c3f79bc726eb3c5b3edfcd68823624fe0188c4eb90704258e871c89542aab394f887131c5455f073544eea4764eccc01606028e10bc4c7152519efeec01d3dba1469598f30053d06a19def8c8238cc215730239802b67a3fe5bec6f45149801c1319bab5a49f510f55a9227222f6a6d5330455523de32d15ce6780c7f4ccb5e177a84339d234a4000880d8eb1be66a1a25a416c926e017a24f2745a4bf5add86bb5926382ff996e34587b46987e12e8690e44447e2fbc85ede9ad0700501b3135bac233483b99d65c6dd7d6d4df3b095e2e81f89153c6d1cc1c20a87aa941ffb3a89a4222c6c3c27442aa082b66e0e2262898029f17157db850995b5023c4db398833903146dba6c8d66c4cac208bf226024d940f3360b4f4c1a4fa2866462a5025d41d456ce7bc4eb4f0ad854232659700e811f940fde44da874656e6cf3f14c9c9b01d444356afea1928966badc51191ead295ed4205abe9a64d1b7625354c9cec140225e1825a2ffd2b4260098efdcdc0f54c65c6c8cb85bc9d36bda70f15db9eef51aef2a0435d5bef20837ae0628a11e79a3ab333231dbfd22b1041d9f04c01664ab83187837e36ffd4085b36d08440e6e13d9bb91f587d3d6c1841949781f13844e2e2d9394fa4acd2367329f52066f7f3dfc394ee8fd685b73978c01b9568645ff774fb676e1c52a264abbd07170b73a04363a1511767afd3853ead98fdb368588b5e5c69076b8d017713a84f6d2658b5818a5ca098544c2c75f57730fa27ffd7f5d75ada285ab8155a1f0d05cf7b3031d4df05792af285cc75295b549bb4b6fee59158c9a8d9c018a4fb165304dd55b9eada050afae66255c75a9ba1fe38847526c8197f0127178601089eb515f8b9dbf0dc3ed659c391b53383e6edef7ef931d94c2648257ad15d0b4e1ecb12c8505c9b68c89a55ab8dccb6f5beeb740f019a296396c28dfafc3c6d93ff992a60e6474c6f47915f231fcc53fa155389b2d87982aa80c1ce8da4ebc6a46d8f0a9b9c03ab69ce6024ab4a3954505168a492625690fde85d6c62abed5d105b66332c2bf4b54a0076627920f2ee2978a30a429452d5a118d934afa37a9f01fb07828c46634fcc9fbb105540338160e3e903c1875b9253bd60bd7ae61983f03aaded4fd35413356c257a81abd4bb447f144bd1c692dd52a0d8a3d92ed8f6085b7c913cd9db0cb4fd26deaa8455ce8a2bb48130903633c5904b67dc501ff1940936fd74a7d006cf138363f30e30116536bba07c60c8cf7c1c021352eb80158614b8983dee0a8dbca0b809d0f2c1704c99e798225ff55f98da17c04dc1c13be901f08d951a44e571e9f647a445bcaa031709f5ae3c4e401e3109f9f8ced0bc9f65cbae0f240d828325d1841cf24181bee1dce9f35a1f6219eec1218cb8e7189baf1a9edb8547d30cfac06b0dcd66026aa0d509f526d22d8e816ddec060b4506dd247e11bec2ca16b8ec845b9ed3d1bea65fed9bb32f04e8fef048feddac9ebeffdebbcee7f010957d87502dc959cbcd3c2368689134dcf20a7c80b1d1e8055d7333bf813bf13aaef1f93b3c25a118168770b5b056e6135b4400a7c73100b682c6f0c7351849c28c8f4444136ef92bb04b14ebdaf3ca6117d5eae375184f4de00abb40139b911b4e5ffcc0cd1cb332486c438ddbbd717cb39d6116e04884bdc79b2a6abd47946bb1987db29daca2902b9926400a6b01ea7a83dab611473490c5c8196efcf64e6e851a62b94735376d8f7a1ffb03e56236390fc793914954aa9f0d4544d1d2f17271c2a95a02b16c4bdabe9afecb98c756dc45bed552e4ffbcd5944e0b53d807c1bc88f676047bb2a96f4058551f690a1f677237b0e322f8d6df820de048e37cb2197700a1f277168d812dbd923abd5437a52917c98e12359185a6318894cbe33c5ed2180dd3e2d93fc86bb05571ea286e1a57f41c0e981ddedbe6b1a395e21217144bb2bd9e03b463661d6bdb5ad5f91cc0a7f33831f546291a45ef7d6c1efbb68f0eae48216a73a08b79faf209074731786093482f8c4a4dc37c23d415a2d86b963d33b0aa41355f16a2d894c68d14dbd4bfe6547fe104616c03c79ce0e698315c28f5259aabe7a6770d4ea7f24150ac99d634b8ec97779396e0bc8cfe17663212375bcd28036b575ae143ad4628a69e5ef7a685d7cd22503ef35579b39bc653255cb994ac4d9a205c317cc9ca615c9b83d18ad9c6503943c3726b09377a39a742a66ac0077c203a08d1715efd9046fd1c666f40f1728daea1ed65e42ef188bcf924e81a7043135a0d9c85c98ea1563b03f9cd54e84a48a5eeecf275e19587e5b2186d8c8730c0508a60516b43785ffd4ec6051c7c50c0ad08827c6ae87f328a5aeef98da40119de3550cc6173ea334c5b57b71142d2588637b6e3e65740944875e0a1c5a734442bf0d05e66248cbf999f93a5f4277b8c80d64408a09826a5eec5b9c22ed1486ac4c0c0176dfdfc4e2010ca40d28792932315eb8c587867028e464e219a734d1ff5f501ff23515bc2d816100627203daff00f650d4b23ab247c76d98e454260c78c442440c6701fca99008bf73669ca08920131721c0cfac4e5a49e358d9436364052cf2d56d1f075cb80535abcbbd2550791609d0cda5e4fd823a46a20fee144f8344fa22dbd29e66d0ad3a88494ad0b187827c9ae0674975f1966baaf3a63147ca94eb7f101b128fa025ee88b82f1428f2d3702e41f1d8e94b65ad306dd7c412b53eb8d4355e5d16bf06066eb14d384046f14f7176f842660a854e9e01dee67e8161cc994463b5e5ef01d77c6269f024acbee4cba4f944187abdc16322845f69e9f1cc5291c0715826a6c7e1874b0eec604783d092201afdc01dc65565e99b5d148775b558662db7bd256a81d38c0fe1e4c73ec976fa167d49ce6670dc3a9d0771075e93e1bd83e41a5009432ce9024c96b68240843c75a5a0c1c30efc75e9f77a81d99465d9cc2705425cd5191315692ffe05c8c907f672ec49778f9ab40fca6fc6dc77ed202ecc29b20162b4869b3755565458bd32edf9a8af48ce3562cec2c4df95f103672b864fedd7bbe207bc2e409d000f2259ebb020d824b355b60cb4c2895788c1d6c0299e637f420cc28c3b6dec636ee9ae1448aaefdddcd4b6d89d39c30e2969ed766ad02fda06bfd8a11072cfc4672dd3e406b8343e2deba4847b32712f926c7bf4ff89c40a39e5f2c9cb9cfc271cf0cedf5efe1e6f163b25185bc610b1c082c16bbbe408946fcdb907943067554f1c97bcfa381951e36615a44052da9a314c35a549898bb1317d0912c2a798ac63bf67783f1d0f3c81c78a34dada4c9dba8ac3f29e984cac358d131b8d3d5269132df10acbae3c521b5bfaf2f9e9045592b1a4514c414b92ed5b2828f5aaddd22db04d0af7f679cd52aece620776e0b93055e1736a6fae072836607cac3bc55611c0d1c241c9cc911d66497dfb1496a4e6744662f81c4633a5036ca6ee7491081c9f720b0104d1d369da74b35473b69d50e3249b409340219290640d35ce1f08e915517a370397af2b47a7cb4b10795b21e0e3385e0636f13211ff92fc2af21446cf1cb95b080b2aa57187980a988c0100b111cea36df15e7d5e5f89197f371e0b276e7206598ec63317f0f2d17a9f1bf4a88145220a861ca261f80a966abae89d7294d4dcbc669362a81b846e57254fa3be8ad9157192978b4d861be99ea4700e7b0e6d70e54252d40799e015c8c41713612eefa73baa18802d6f102a024808d359ba64021ad6ae1d8e0e8ac13997f160c2d870be6c05b352d3296921600a15cbaf8a954906b646234c781d566de5a676d643855395aed6bdc61fec9e4b6b2737cc307728037e8314029ddc79f41fce0e7edce704bb85b3091236d394f83562060a74f2e4a1ac3fb84d227c6d327c18438d4fc7fb9ce17727c306731bba166456a5010a8444cf668454a7b9f41ec32017e411c052a17bbe919d85f43e94562b220d821144cf70fb39967435c1477705d48cccbd9db521bd3e6bef892c34e5ea36dd95c780c7a869c66ab511d6005d1e68340afad3287920f726d879dac9095db22f2bfa8d35a82da589dc505ebf525a3151dd3d1bb0b859dbbbbbf60ec5ea50bfeb553e112959bff20df13c3f5ac77052138b2d1779b631898a0dfa07822fd54f94f2a85f2842710c7d6bc8481f367cf5537aaa1965b03317064741046d713aa06788c12ba9781d903d30560d4096992d227520bd103016a187cfb79545ad9f6453fac55b504ff902a0b912a592d08db39e4489e7c654a1e7d25c63bdf77cca344a3ec592654f994594457d90226839a486a38a0995073da978ec473c706f7fd5bfe82b59e11370c26b8bd7e1beebc3532123c63efa27d6fe3686f8636317e4fcff30039e3ce95940c18083d7e185291cb49ee11c0942a3f71fdba9511fdbf9423a5e781be5355278c5f6b3baccab54ad6cda2a28124afaa83bec1b3a7d006354fb88fd46979e6d556f79d07bff5c3c8eb677423d03510ce9b42753e08970faa7304b271869cb78f97e5f0f230514c7b227996cc431c8888ed1e14da734aa5007438bae252a207083f5a50306d2c525ad611bc0536ea3fd27326c1b4680a79e562345b7dfeb83ac7aaa9ae89f0c2e56e961484f90eec4146300f4198430b20848c3d25c4d2810220cefbb03b98b1e2a470311728b788707994a05179f316e2a2d16cab67adde9e1ac49f9fa840da793eabf6adcb2f3a12325447a6fd85b11bbc65807ef07bc40d1db97ba2545019a8e920981263de946f4cbb42a4814b3e1665c743468302684fcb009a6fd1abbd2049c8ef0d73ca98182d1c54f304a63d2612a9c395f93bd5349354e388808882ec446a5ce986dd70cd8f38d0fee873267011d1c0cef567c616b012b6032d204bc210d0577f81ac6137f0f6de5c286c6a5bef3b42952e6997b79101f6f675f8707e49ba37c6a323fcbef9de738afc304d1889c6f57ebb9a2ef5bdc8927f3f7989104675f34909595a8768119e9f8113984d1b8744b28d6c42a6e7a8c3194e7da4cf0a6ca042909bdd117c22c266f11389ce3d7920a36fa975a92d5b43dc2a87926a862a22ed29bf114ac348337f27698102a58833cc58f7917cd76795d2e5c0d30b76dc31239bf7920418b4cc0b4eb21638c3320ff472afa5e49ac09c689a66bd583df87ccf75fe5f5a7141abfdd50c4c6ff4e1126c6a133a10e93a13ddae53949efe7f93bce6a9daa1e746de4b1e220b1770a44680deeee3f5c8dcdf62516058a38aa8954ad83535d9d391e2fbf36429947d5c8b50b771c0450fc7dae8a3f94347b0597feb897b472e8d3c56eede7fb93f9e911467154cd3245f844c55ec755269845aae675cf14b95aae9a6f0e68770e801047a718662fb4544bf1fec2c6d2e5d335876449928a72a6591d50c92010fe7a048ce81738830d157fafbbf40f2d0f59c1a53fee25ad7c58b539a810dd6778b6cd47fa269f3f4f08829064c351138858c48b4476e75583e48169144d4f8304f8b0a2b6f7c0f37788213e50458918d2e4a23527523d249f7314d62143576ba3e2e7b1a55690474e830c476a283236aa9814fb9901752840cf4929d9ebb9e2ffd7392aaa1ab43285cd7dbdd87533177448f134c3d626f157280c584b718d193c3d0d9fc806f8cfd490a6e61a4d647097b5c8ffe3edee462bc6a6e128095d8730603bf006e35b24f25464c5db8c60034625491e21be05bf1cbac4e74614e9c18069bdca919d8668b5d6f07714db9cd18c56b47241370e2a99bfbc1eedad2b3435a3de55a8e926f48dc7071a4654459e2aef51693d2e6e5c64da5c870327db06fe9fcb59b60c7003ee7604cd57b2ba4edb48cfa2168d3d60e776058aff631ed8315e0576df2f2b53fe7234ae52338c961c4e6bf7f8a8717e441b0886b8c1b5fbbfe0b6fb3fdcae217f7aa9399a032a3b4a86f805dc5312d20b2351993da7eef79bb2d85e6c673982e80def591303954e4c15d5351ae1c3448415045151f572febc3d87f29cc2920ec4af53c44f40b0e6c6d408cde9aceeac12bb524bc2eea351d8a860305a387a3956e995de30eb3c959c89a28df3b47b474ab8ce3d04c0f2285dc9154b066e01bb8d7d5de60258953985319517d6a305ca18071b3dcbb1e39d96b7a9c26fd676a2c657251acc2488af0ca7192001c2490d13313ac68e380b1cd9c87150f2bfd5587ef0ef1b062cfd585376124622280b105dbe9bab1d6e6af43eda49d70a950b0432a898114d81635fce83f1a261eccb0eb53d1517d58d8a52aaf549de9af585088635fe223858b24121e0e5e1fe4d5b45049978843c5befc7c3122c7fa7470cdb624398907396cfee12ae8fa7172bf8dabdb348e53d4918cbe008ec4d30f06f289179a1275f0eca9003c938c046c796a284643290c77f48865ece5f1c667daadbfd363c3167dcc5cb1259ec2dcadd16388e060bae15472159891c502d324990e23b106f02b92f2b7561aa7180bb63f98876e304c164289dfe8284bf039d8ccf3d0f7df38ce70e84b034154bf529a2ffcaeffd95bf22d8f475b4a464f72ae67ff0f7a5e554c34f9852825b2b5827222709ff43d70a457897d115337a106edbb7a67bd068fe8e97f37cc06aed9c8b1fcb48fe43dd7a1f1a66f79b5b8ac320c8cf912c8142e068e82db317a7ff3ad27cfc65f6240d3fec23abb3e477252fedbb34d6172ef277cacecc028984b05e400fad56cbae3547953f6059d59bf1bf808f6ec6f0a49bac827c4ab7d0fe2c118edf348f3bd57199583698ee049e02653375a4ecf68696372f52098337b99e7ae2bb7a1f8730cd2d22495e36ef7c3af5408c0aa3f52d76f02ccf6897fb87b87692ae7fbf14d26c8c7ecc9ac338cb6be693bb36ea474e182c603720cfebc6ba887f76cb718e89302aeb4489a09a3a1496c01a9cec8f03b6fa49b36324e9492d81e5f6337c8a339637b219c7f70524c7471aa19b36dbfc68978a8a7a3f261ad0da247531813c83053b7040af5c660a75d6a555355ce1e2d02aa4f61a2a728e732680208fb5e62a59a0108158315772c9ac9b327b1f436ab9f4614a8655c07b19cc3cbe395b46bf3c92add3c7bfe6120058210c62580e27b09087b735c3f71572bf0a1c4a56516cc7ec262adc26ed0ce67feb8e05002523c87d7146763be935cea9029a43588f5e25cb2422dfb34091d3e6f35dc40420357b05633b4dfe115cd8b89469924c5ce33c91ae965b8b66b868e222ab8bc754470da64792a11aaefd8e86f6b29640a4dafe8c5c36e393db399c7155f73b9118525e117d698882ffdb2100c3c71dee9a4bf60cd82a3c08e5713c27070a491a08516a30971125cec76dc5935e93ac4aa5450fe8a93c7a70bea893329e732dbc6c23bf5d41084f2f0256ca6153630ff8e0e151253fff64113a8c61f6a5a4f811452abb53ff15300867484c333947876bd7638b32a87451349b63b0be9fa9d0ca869c298a064aceeda54afec5f306964345579a95d66677bb1d6198a18e4a3e8d3d36f7c3c31f933bf51c5ec4caf1a1153e37dc777b995bd459777476a1d66a5843183aac982256d1ac6e61ab9193ae77e82e85e4f339abb70e37cc905ac84e23c756ff3074499f905244358119dfd5a63ef31a4f286bdac8a075538a6b4a5583c82840863cd18b6be14b865f3f52ab4a7c9a6fbf5180bb87755b35904ecc99e11f930b4050716c2ae0136a81febe7c398700e433e0c67be2fec7fd4d7c4a018217ec7906faa9f266fc1c933a55e74ace4c6a9c7e398e9084fbe59eaa84f1169281501273be2688501b868164ec32e4001a05bf20074650c4b4a0c4d5dea4c1ae07701446053d2c4661078df34ddc4c1b7b445df7499659ea1ceb4a9f2f1875fc87bdf47a69e5683106370e7fe2d9ca8cd90f23341e6b9f6d200dd38bc058508873b8c3f50a56e582965f93468f7a9884908875a92156c1bfd646ecf8c74651024ea85960a9faeb5a7b94412bb121cf61f02d413aeea963d3b1576974d1212d275bb80e537f99ae8acfa58ccbb13e7e3f5adfcf3dfd1456314a36a0eba097b16fd11dd9019b52f904f2422fdb9e0e0af9a80ac9fe9aa2ad7f2dbe5a0aa7fb81d8ca9521dbca8816b2ef62e88d8b1d6f45cad30d019cd556a44c87c0f7007f1d8f6cc529e873be9afc1cf9a488953b042efd150c158fd28c17098ee0a85b9c289e31ade896e37b3d235d115c8640b94b4d4785f2650457ee324b22e94f7b422d6c542a8ddb3029099c6a707c8830b5cf9fd229da76dc72c05f8e76b3436b0d6450a45bfea9c2338c0e5610ca2282710c4e81e3d8490bb701bcee8e81b208f94cf86316df1faac2387f18952d452d8c7a3baa63f308dffb99f8ed8c5e3e14863658f94e6716436bf1eb2acd75490d5b07cb287fc120f9139bc3860d4571c472aa640c30ef0e28e683cd37f9ff82bde30d34f12e8d8891b2ed31b555498b56f50a96327932fc4d64dbbe67b30e72c689870204a06d8a3fa179c8f237be42216dde40237e0f85ad2086cc883e8df8a5da8f755279cf084190fd53c9b4c03c9b28d2a46ffdacb79072c71bf06bf7839cf7641a21a4c49899210665ddb624ca4b972dcfe98d435adf4cec1e06b0021f3a8eb681ae46be7a9bb0f5b6b19db720c2bc02d9425405b8b5cb9fe126ac4b977a69f8dd85206bf3b48da26e20a71206aecfae6f584e557264701ba1d0eb867719d9b785007f52fd6841f144495c6bd727b2afac4a583e233d129f15444c3f2780b193de4ff2799f5a43796e69d024c7d398f2e4eb73179a382a548dcfd60e0569fa973c5fa23fbbbefc087af2e8391d65277281b09da1407f965b476c668da891fe2cbe27fc22e615cdac372986a6338392039694405ceadf16ea4a428ae940c61943012783df89ef2189fed0f539f0a02345fc10dd30ac030448dd3bd415cfbf8101e9b578b6677342bd842787773c8840f42c587c410309020daa8e33dbf99bcf70b61699a465209288003597486f6d32a78377239bbb10e78d9a7b10dc5a7b03160085c189ff340ae77a91971be2c93c87a188f91ca38d00b05ed54e620a5182d6b668014e035699d3590b4b037ef7d591730f0a2eb35781b2087a16eeac88d53cfb990c8abc04d53b8dd64b63c9249e3bb13c23a45675d36755b94111a2158946effbb786d1fbf55b4bb88b4dd843c37050c6b0e059c29de6b03863c88936732665e5ea2cb650abfef52405e5ae311043d9039185ab125727e5ed3a112d25fbf084b04edbd0e4aaf5bdb9d4bb2d53eb85ca1d058f88c3fbeaa70f50af39e127479b9d8540343e95dbfe9559b24a60305926812bfc83031bdd5a39b1ce1a66148c0046ccbda36b79159fe20fe5fd5ec0524169fac6b2bba2e354265695a1a74b83b4918493ec3246276b0a00ed8fc3631984fee2bc56609d4c6354064c521f1f7c2c809d868be329b00aa96c442348c318f073874fe1bf27441c9187a6d959b6eba7743c10160cfa148b839badf337635d8490fe8a4b77c1299d8fa4992f68c992962733b39bc04a81bede821f16f3f8362e9b5808a60ea4c16f8c1285343a3dd32616035ddf7a1ba8be204b0b96a1929095103ce8c488a16ec6d46c9723bf2ff123aedb1f1f364aa953f8433d886bf3ed4aaf51088d7b4fa34ed681a4d192562214cef7e1505088a51288a480758ea5f436263d57d7c86fffd24eaa5cecfffb902eaab6f3f7c4f882008410d31348030e763c8aa86910de8696e46fc408c2a21849188c1912820fcb1af3414db1df387743a6f173208231e160f505857dce3d7d5f833d66aebb4350c6d353fc4624a6651942313740e2cc0f5b0f30a816a32cb27f6f2e99169c52cf780fc41b15880d275f085aa4a8115ce32e35a296a7fadd298585404338665a2a199fc4128c28c675f0acc820a33864000f9d7682701014f24f166ef9b016816ad57bda2256567559999c52af476ae6f4523adb6152ab5e43894dbdcf0f0b5398a6f00249adda891536b58b0a6a9465506184cc209040adda896491631d5770d926f9be128f5be3034e638cab742c6062f11fdb276de8bef01062d914e13485773b0bded0a804709f62661dace63b6045955ce280d6b9b1245ad04d535510e6dea064df0667a7fa5bf1a71cef65a2f16a96878b911e7300603257cec64b8c060924db6fbc07bddd838fe1f5af284fa25d95284cb3a0cbdc803f1d9f865175c5756799675b2646954adb25126368b026fc211e5398c4bba43209941e38a9ac33863168ffd638422c2b99ece9f8bbeb6f1c536f5184c41b05931babb0da17648daae0f566a191113aa8b29038e35d27cc29404e879d9f04582a3c825dbde0b96ba5a7a685aaf7d89f454ed3e4a56df7b8d33ad4c70cac9cfa914dc1a44c06251a0e0108fcea8f49de8555653c07f1a1262c7a4b350be2ac411a72c26c6be45432c334d6afb4f0a71797884be19c9c7a903c85dbb10e2e1038b25a9021adddef4640dd3d92b95414f3366c822ca63602d827f2c8b6a1aa5cbec843eea324d51e43ea27be484c398d4a78c1f08bc35067f34f88dd2c38993aa792e05e8abaacad0c720833b8705a60c182b9318b65a9646a7f796d8cdb40c935c9281beabd40271f0c4ad1d233908f9516b5e5d170f93b2fa7851e43f0037d610d5af71a4bd0228ac3a75a6e472a54b2111565bb6773ccaab533ff925bf639bec5fa11297e27d3e5d0f302f5679ad4152cd67b10e94639476ba33eefef742c89871c8c8517b8cb870ec129a6ccc3e5cd0bcf53d24c705e88322e72b775352737a3ddbb8b052e0ec07a50f585a61b44bef6638478582c3217b3b1f78646d9cb4cfa724c76088298f5bf586701541711a334ec5981c9d5860d51d87914fda43985103399cdd4900525fec796700252a2113b3049994a26d578c4e4920b9514792b30057e9ad841b00dc7183b4be7c1778a625d19a07844061da3d8d8bbc27b5954b2a2599fac24d062434d07110a607eba6a05f0a866fc8cf57420d7fb7a9d7e8be98626b18a4854a400dfc1a887aa6d892498334406a415f54b85e7f8d3838ef02aa8055d26d1016e3513f72e0bcd82c05710b47c05edd9047916b7022c184481054f538e3ecd162e9f351408f0f21f4cf2b4da1d6f0172202777fe8ac36e83df05042a46f3bcbbbb1dcf216aa7a6f9f7a0438371f06495631c99f5bf5acc7398978e29d62b403bd5108a41313ab87a585b4094ed87579fd96f844ef6527475de2a9583998542ec09e99feb3128392b60c86bb5e985cfb84e1400d6ff07fa4e690705e7ab56a457ef39cb7c50ef0a893a0852159de6fcf682f46ed5aa0bf60da2a97d2f7e5fe7d3866a7de2bc866b87595d46c8114548d5373a14192c7a53a2a687577fef57f97053061d5f988fdd27f4eaad256a56af1ef78395fb4d66d4a22984fac11b9b8cd6e8a35abdb496a59e71f1dd8efd00115f8a7d63945382b48a77dfa517498fe8131f75559ce571a182ca7db2f0a9ddf665b77ec1f18fa9d205cc0a355481be8c02a4088a9f2f8cf859357b135538033b1d48aac69a4e1b62a7a1ac5eea44f0f3cb54a168e05e800eae5b0ba9d671e6b7b281db67e52af7b0eec47b78bdf6d4222a31b145bb01c77b466d6153fc229be7c8ed740a6796473c5d878d0751fefe96575d96852e43c1589300c40a62f66770581bc05df850401b55b24d7670b16fa2f77645ef1eb6623679fb9470a3c7fa2db26cd7a365e7b2d86ba463f01fccf9dd2fc87fd9d318431c4ef7f3cd76ca15da0fe4f0bb1da470f40907fc7bcfe5942bc558ebcb993c543a561a6ad3c7010561e94f0eafc7dcfcebb253f8775b80f83f61499fe0e16fde08c54c2a75018797b1156e5a1b16aa6899c7d4a56ba8fac37b64985225d1b6dc6712f15ad0e4b69b71fd710b1ecba1868c035da54f97925a9cdd50c67832bd95a0fbe9b4e63840ec14ec98f1889e38d168c548af659c273b55a89123c5da8a8c317a742bd6995ac69e1270eae0dd7ecb069d4d09fbe1e4d5e341aeb5afb8cf7659db80a08095402ddacd74f403a8b570393e3efae5da8e26bd8d94a8d9e42b182231bbb98cde663c2457eed51a8a2d68ae7add6b50242a726d6a47a6c2082fa3120e2a3c2bda1d0def033236f271cb29c81c269bf31118013860c2ca0cbfc7aeba57f69d7e1e58103f29f91350f897b6a15205ef06f04f6b6146a36ce3d629e8cf1bc44d9a21b3797dcd48b28f930b3f942a60fecf43696fef2ba0f896b63d0be31a060a76b2e3df6bfc198b114939d6a08690293d9a2679db6e241ac8685fad412c6d4766388ab6a810bb105825cecb5e473ab0ec1a75d8acd06057a108c2c92985a28848047e373b389e4eef32cffd470c013b4cfa64ed0dde49fc88673dd2fc0b275d1e8918b26136b89a85ef0bf2ece8571c8e46f2c363d6bb61583f2eeed8221c4def01d0e1563ad87bc209b22eb570071d469fc5890f453f01734755ebdc84c44d4b28424d8166b1c7ba193df6dedc3d55d213a3ac77c1590f8d59002e7d56edee266ec44d821a2198e42d0403b6b60fdf415720df61532cf1ff71cbd9e14825278b063216ab1c09f172c3e0b506c1b4915bb4d7f8bdb531773dea813fe44fd12171b5c0e352b195ef786d6b8b86021f7615609c3dfc62a6992353c7d04a90a55c3aee00647baba27576c61b8d9b471c198318baf177ad82e2655a565b72a7f985a026bda761bb65543394bc83385350ecbe803fcc6a3dbe45f1da8678e7dfe8a683d3f912b9123ffe8124fd7eb3fdb03918fa06031d9e548b7015d07ac957bebe857564ec55ab7c29cd967c01cfa15cb24693543cb1349aee6971545c8156f9469b15d758af40c349413f807438d0820a1af3c4a9dfaac23b4f9cd4b32a0bdba82323beda73d7bc16fef303d914859961e9f91b97ba5f322a671896172498497af145eb0febb63b5a6b7703d855be2752d3d9e669ebb699fcf4667209a0223530088c50d04268a1594f40e62b413351821545b060499db18e8c70fee70a0cd4e93a4f7128c6d2315993f314075d02b4638326c0026b233429f4abb449ad97256906a655242b4da92277198e58fde956d0741d1999c6882cc99cc78e59076a307db675bed0085702db36264362539c208aeac8d851612053c6122d80e0ed1b350e2adf586e4eda102493bb74a77f6b91cf427bb74a88bc803457b445acfe4113b0dd222393653a8f0e5f0921f2292d9ac2085204ad95bf07d935c8988d8ea706cce230a2c6da0e843ca02735e89bbe5002f2d20b46327028b07405fa6e24f46f40417a9c2e76f2a1f51b1c2a458c8a11c1c68c71ecc199ec9765d37148d435887adce1b1114a58984dcc991d6e46b06038039bf9ef399253ec82224b4549c6ff809a7c789af9e8412797cae04d14a8e410f36608002e11aeb91201a24ee60ece232c47253c0d7c71b82ab008833e9588bb66077f673c2500fe0039f360078641d8b6d01c293c9d06d1a00301336ed9660ca17be160b52cc346c0819b2dfda5692cd4a9103cb3c52e05710b1f8a8f3d449daffbe7ca6f3f3eb39cb645edd3d02b802dc6dc7438e849e4eb0bf6b7fc6049c2183d3352aa2a4ae5b4c12a05ead94dcd219a105a70792b5d154a01e6b9c6f969e128fa360e0e2cf576276d7cb1e4de15982364972fac34c867536d3ccd80ca42e7c58879011bee1c37642010c67dc0284f95202ec63333340ec87540e483435a56c5743639d3d0fcac79e1f2af7c224f17ed6d763a8775826c8d42ba73edb3b4ba2518d91a807a6de26e4dbfc5fc9a26d90c6d8dd2aac6863582b7403e41103771e3ed11505f83610b430904958e142ffdff15c2885f927baa1767bd61da7d7fa56b2260887fb7686abcd26be034b35120e8ffc4b018ef7668568b34e4f69015be478f587b5efa31f03918888acb956446eacc32bbc6ce270a038a98ab3998ac1a3e2c4a7d8736e97ca2de424a9dc7a58e241908f501d78bc6597e418dd06334a7eb9aa7ddc25adde4311331b487340d4c02d93e87fd0fc3d09292793ebe0c441b20bf5183a027495b3f8412d5fd6e39578411e370a7ac0e7a750fd18274a8f463c0db9c61db483b0026e267c7f6c2c45648b5aee0ac55f0d62f94da5307944bd430f01e10d957b478b46324d4bec3960910634f428c4cea2ced807de597bb2d0b911645b1fe2a68590e4b3bef01a4ce1e05d89ff662492c5d2740ccf7f3739d1864a855280510fb98f0a42747e51ccd43574b5e77755aeda57aca1701a2d18f24020d9b09ae31cd8896b53f00a2e2109a2cb3bfd0ae207590692ead461a509800911e9484f0b1e029ddc000f31f10a519f71827ae23526f1318b018a6c1a56790d1b823859b19f0088f6b3cfc138231f4e6618c4dcdc1d850367d840a1c52777a320de1df90e684a442f503efb60574ed67700c7574cce7433a8fbcf7f4c14dc7fc52f15b8f71c3743ee23226d29a7780ea9fdcadd967253d6983a5b9017c5c080c9c4db8b1aedb83126b59c671b3f80ba36840758650ac9865e99e9a6bedf7ea63d8e8b016d99f7f334717657ac2463cc4d520a614aa0fc09f6db68abaf2a8f79084a1b2ce9031022287ac8024ea9adb260f3192e0f1b32b31826fd149d79ce3b7c7ec5fe914d5279d085721f70468ce6dbb2dfe838935ffc47155aec998dc431eafe2380724ee92e4e68691a328275df5e255521a921e3500746e8122fc0087776478f61c289c32a869618274f80423b6db000450d0f93b45aea34a7103bd3c4903c5b58f986a291206458729d932a4c5e2a063c33189ef7d969eb123c207b088b9e4a8ab8cc0eb77ef4c1e8b5eed9297bb26c4d548c33213634d6d7f6eaef099f9a8edf12d55e8a937913a0e456ed99821f03c4eda3a4fc97ed6f8b2d655e2797d664c967d6c35cd44533a13edf6c3edd91c44721e8dc19b0904168a8a2db35dade667e3be52cc73398ed2c0fc4c43ef85505b67d993df07901fc2863788a2ffd3adede94071d8ebfb09c6b357e9e92c3882d5863fdeaf81b5017d89fbc8a9ad44e2d24a352d41364c6b79f5d22c7f56ddcd43e63b941318664ca26b323d030c727650ccf08ff2b5e5188205dc7fb39bda88d63c57835fc3ba6d6d55441a1ceec58c8d91b885dcc697b02f210d1a917e2b462bb33c30d75099f7d613d766ec7543579a965c8c374a1e4ae2ae2818822cd15883443a87813cf2900ab82d4a39bd90c5813fdd5056f13486c6792a8974f7e31ea0c61f38eecb90574870ec62227582c795864342d7bfe3c07a6cfed7f9e853193ad1e14689d550a4c774690326e80d68c2abb6d79b2a61edb825410f1e5a90bca3361c1e21b02fe8477b112ddb7a9596c7d5422aa04010ec54e015422f69f3422b1c35e922337c9b9526df448f790121871a7a831eb318ad88186236e579cc075f01ea6314e23554f80fe998a8d23c2660042c4d20072cf9b6b8d2f498b7bce5a2c82fc62cf29bd3898b0f9df550715c2e8640ba112b05cd8d2909de32fcf7da9497a5ea7af557014ceef2c91b2ea28dbe0836b9e7da8c8f699cdbbbf56b510115aa0135154cdc49dc143fb0d736bda81077454143a85bdb72bb381ee73e84e4c9cf42b1b0a5e8389681673ee5fef0a51619fd5b06c034cb9a394f4b97079ad93c56760ca3956373d3f0222629ab1daf8c26a574d369bbc874e84e5b49a1a1b98a333c8f64594bfe06c80eae252f5bfd59119ef266297b39963ece3e6ffe9bd8987d724bfac0cc38f8496551870d5c2c6feda418f23fe5f8cb3a21054da674eb4022fecd3cca2688c01eb744cbf5f7e1c499f151b31414999b4f6e3f8cd85d3ea585ae4258780cadab53bbabe47afdf03b64aeadebd3fa4f9d94582e3c784a03350dd10f52fbcc4bb177b7e170e33bbeb4f9ddc822438dd50a82092b49156650bfd40b2e448baac865320b7626b91d8e209cfea9a050c9c0dc83dd219c459aa8cc69e8818bdfa8a8b05303ad157e501527a17f80993fef8a12400c6623f1f68a3679eed270b54222d5d789460d867c5aebc18e520cc1aba74df961608e7e788ec194d4eb845c97eeaab4565d8bcb395b12fa068c54777bf9bb38b9fc767b2d261a8a782ea29c3e2e05e3749e9febc3b32b8b07ad38a7dbff219d3c511c44b457a0562644eeb3c7958603002ca020f43196865e58c842bf91de3c39e89496be362c0d3f674d3f46fb64c9d7e7f9e5756cf5ed7c0e1109fb8c8b22079d9c2487437fb1879b3f38ccf46195cd28303d98835827ab79f9b49929b470ff037503d26bc365770c4b1c9b0641886144b94c53725e5af313b77f98e3e97f1f0c37626c70c94c5a9e63883a9d3bff696d54e52a77d90c102fb34d349829dce857d0f3120d8d23b384fa4e110bbe091265a8afd8236273d416d0d1e53bec67f1ee0296e2ade99e07b9f2c3fc3a2b2b79321af413043de9a216c91300523e7ab985f6be9170d48e64df6ff5e7439710cc5e07187475449ea876423835d87f1750da9a7ea0e1ffcabde3282bcebff3fe33707d508165f61ded2aaf4c31d8fefda737818e864e3c66c0d35363c9a00801f4a89b238be336da2e5eae6e86987d6588f3217dd1b5cdf0761854bc458d9e1ca2a4cf86886ee9495f22f4f245322f135e888448d31dc07198f65886dc2a7aac636d184c7c36b86e7343e4288979d46d690aaf7f1331087c00c676ccf90a7a5ba170eaa32b6307dc532642ba3524bfa5c0ff0e504e8a991e2d77a2eec8756176f824800b36b100a53c8280756ca5655589bc9cacca983b9d14cacfd6ce14c34d80eee4b2634ab37092b43e80565bcb47ec4217453dd31e8340fa8e9b700046c6aaa0ea25ced8769066944839cd58c7067ed57d438521bc4b30284658fa08871a0e76fefa8d091934450b11cc6383c405b4b66db2d5b06f047e2b941883963830205ecd82a2e5e436938caac3550c0aee46b766834efe2f5d7e36f89dd42e7da3d40fee25e536bf9f49ed5a8f79c4f9149341ee84205788156e7d72d48184f72fa6c956e0fa5a6c83c33592ea154106957272893c8ee1eeb5c0619640613ea3de2cd409fd3f26169f01f0ef9384420a5f5b1809614362232ed24001392f4029ad0d7ad7ffc23d1901e8c6ac5b5ae01beff6ccac3c62442f2002d8f2d8a42e4f8fa08d3d31f42a579f2b33e22ae24237c1a3f52fca790402a2b1b8829fe367faa9f3b6af0bee3867ed8d53a04e1c399f8980e6deba6c83c140246b1c0361fd9d223a2bc7ecade2bdb2875e280e40c4cd02900edb3e8e36d84d16e228adc85d475002b238211465f0abc971d77cbe073948b83515a272d85fd6704009cc99632b8d0c3436b5be54c489e39de9c41c38d8e3f6fc003c8dcafa8f9ea89c16f5612f5b74a005607224e419bee123428d90919148637c5fd5a0902841200611a1854bf9112a998e34e6edb633284b2e8966e1830355141cbe9b2f53ef21abb489f338925a4bdd1c4951392b18670d90417fe0ae7c2ba7c024cef75a39dc050f8350fb36891cb672725a2d9e5aab21c4178603b9e3fbbd4762a45192c7abde074da99c3d4925677d462f6c9bde7f57c0c4669ecb8c76a3446dd2d1e8135ee5200ca480661e8371528b9f8974bf4adc67b9adb6721a52ee56b7aa2ea0436aded4bc739d0eb72e65ebd45eb5bd0dcce8b42b921a467ac2c99f2e7ab8dd30aa158e82b6cf761e66e5d8b3ac8136dcf5a0cb8aa4dc69529b331a23c1d0fe1801505f09060ad46f45cf563924f5438fb63163d74091ebb0d350401d3b14ee42749f39859d6580a3b388e347003a489263648723f6ad63dc259368209566d5069f8672891399c7faedd4e22660ef33f23f3821bb7a87468a2345e5547c0ed3080e583f74a97e5f4e4a4f9ed4f546cf922471acf1b87565c9c1dad89fe5bbcfaa3f3250da795c215b6aec886d5d2d2db04602a357c87fbafa65ab0ea2718a49d5dbef2c7338c77feb41557ad667e65559eb0d7128503636781b9bc985d287f364a49e8ff2f057205a27355878f7ff951dadf182ba2e30f0c678b7db3fd99a8cfb469ad278485e5013b36d6278b87f3336ae81473090176705ca3e6d7d37ac5d17284aba1ed17bf6648df801f80dd872742dd97fe01eb395d074349661748225ffc65e03e7c6f0eb8c19fa0be243554a154fc932f9f916b87ed31f74c9be5694eda30a7754260a45a084f2bbe86fe2eb8265e55186fdcde2da73595af2317367461b841d4b3b63d9df170a7309a4d4e05740134df2aff5e01febad20c8d7cd5736bf34337e820270c74f406ceb9c60426439b723fb12d61e0707f32289d792be22e1bb9727478b6d6a18524ab48718a3027a97e4e55245babf9dfafd593cd31c2d8ef9879595257a8cc2de51be16401dca0bfb131136b3830054886abc986c30e2edd81098c0a8a3c20ba8e7b0f2c7cb71c86599624f448bbb97220bad84e93a26d5151c571064ff127eb0d6c6266fcac0a64c86d1168ee4950ae0b14abc0071994bb2692cfb9aed7cf4ba2c3d04fa8bb4934e9d0e96b28a8398d1c1249ab6d4feb949ed41df629b0b4dc331ae86a9f746200387be47a60b2f486abc06bff3c46ae280da1f4d88ce1c625c3b86d3a860c8c52148d4ec353022d69f04abc3856d1b4da2990fe3d5f6e9ba10c53f5431cdfb169a718f7bb67a1f916113a8b198f1cda3880791482f3c7cf4b0a35debc79ef2bd78e3d79960a6a9b3c53c104f61e588968c4ab29246cea69813c209b72c918c3761e62e860ccab9db12b08345481377e19b235f2b5d47a655b94d5e238364a20f1f4626dca134434faee597895db44345747fb5239e26664f9a824faab34a89095dd9d8e23019c2abffa0b6dc7cda9b94ee14fc48b199eabaa337288c32524008d455b26349f993e8da12810ace0ba530a0c14afb71b552ea62e80cc90e5507280074cdb98fc5a0353d64edebce080b703b3b375c89bd72b73c601da68544fcd85be71353dcc17cd3b20b7f7be6fd000400bd3453d6cbf3d9024a189b5c96fee233fb72d8e066c6181b9de690e0ecc0db7665840382505d60691e67258fd1c314fa24b986976f19dbe8a4f888f21de859aa6d21424b58757728fb1b1377acdbccfdddae7fd28acc313020511fcd4c652538e80999b2ea6d68ae79cf4cca8c77b22453f35686f8fc36efe09bd227dfe50b6b116002c4896741209310976b20946240d402806f93316eb7a700df23b11e47a97e5c4909c4d02c8bd6c2f97e5bcbe4ea71411ca634e27ef2a3c00e0838afb1ceba540f4a653becc8922a3ca7efe47186d9ebc6fd6599ac74a87e2779bacab634d496291ddcbedfc3857ce9703b864f069c0b7b32edcd0c26d7b0005c02b543007c04213a45538152d3e4b7a4440e702ef906aab3f330a9666fb929f4b0a6ed7a2db98252137cd713aa184d1a82d6c6ee07757ad9d222c3e938cf86de0475460bf1a2d512a8044fecf0a9f90624c552126931a4351edfb21ef73b454bd75411ec512536212f4f15998deee08c763b69c64da2d39585ee198ede4297eacab27ff4b64d4f864b1e4a060c2739178f4644eaafa035a02c513b7c224fa009c94df37daa0bf02ae2eacb595a82441833477ce4b983c2a053a2411b001c8db10e67c27de196206848b406df84ba947618eb0c481a574bb46cc6e938a6367f357404d72b5cda18c402729b3def0a3567d0fe7c5f6b1436e563e615b8c1ca874e54829ed452c5c8e1982b68292c5ed4cfd5308d5104023ec54caa39b25aa14a40234cd96dc4335773ea52feeb8450d270bc0a7425dcd1ce707308d060fdefa4905c1c013f2b1d295370eec82fc5ac7d0f4c0930389aba1aa98c80a01553482e429036f8829a6a27b9d2090bc650ef530d92793cdfc544c3a98c5cea7d7e5b7defb5843d4bfaa86dfe37ab71a8a170129fe9d4d60ce605961a1fe85dacca46912b351ddb73d22282bbcd0812e032d13ebb4363e82ffde62813398b090709d14a2a05c9b3fffb6e26f40b7a6f4660afc6be2ba8d8325081550d24c8fa2a5cd695ee1f6a4526719acb4a2e4be6ffbf625b8baf5282afef9dab8fd0929e1683a58d8989c6becec43086c76f20766488b045098ecb14a6e43b95d3f31c148a51d2cc2d8005a7c716f09e7067913c97527bcbb2c5d9485f03463f5190a8805ef0a6aeabb4c4cf5c0827a708b8cff0bf0c84f007d7a898a6db5944dd8813655b97918097b3d5749fbe9ccd790f962f62abc85a80cb78b52fb9130ab68d38973817053f7aadcc04106bc4a3a11ce3a528d8d1a42caafdf4fd9a26056a8c19d95e0c8649b009196024ae0c2b4957c2e1d719e9fe66f43ce19d8e4c193a899712e0c63e704d5a9280e5af2163b23942c2382ec4ef4cf117c76933da35ee79473151616269b215113726b90923ea9d2cf6ae383f7aa2ca5187455733999db17435ac0273986bc674640e13058539e2b3efb55b26d858b8649e6d9bccb89d08869e5b13b696fccb1ab85605c06d1a6e0d386cc892481afa2543dfb603ebb90f80959bebdd15e25ce8e2c9cbaaee8cbeac5293b3ea56395714ee7cc945ea5b7aedb8b3e6da2f21d2e0e7a35684b9a3031e73d522f8f6dcec9ba1c347d500a9b4dcf8374fafae85f1ceb3adbf81c6df9cca9bd7d4d9c2d935251c15e3f1ca43632c4687835b798a6e76d56f42471d8b30898a6c8446da3a6556df1d726f4caa22d33c79032a7c01ce0ac839da4bb1a6e12ee7840c44f7e01b58a8b2710c59d33827b53894f0cd9340698c0d691ff7e6eee844135ef6be6cacccec0f7010ce1ad55a05a63809193eeefd660456bb721f126badd0f6c730daa95487b75298b1b1dc4be18e8644ccec1b16e21b30c3f4e48b5cf0c53e36153ad51a5fdefc0afc295f880791a150012b7d70e5f0e6f2e7560076274324feddecae740cdb2961e2cb1b1b653ffd896786a9aa07f0e6bebd533faf74a7ecb83fd4c607cd76ce7b17b7d6778ca03320831643b6ad31065c41397ccabbb4bc8dc05963c9af67c0780d97d89082e7c888753280a530676eb27924b46fea3697558bf60e3a618d59bc1dd5954d5ca9a77443995fed85ce926fcc43b7755e09edc456a5c3246743f2cbda0c88517d8a2f96016d2c724d9203c75f71859675bc39cdbbd6282abb190310d1322cd567434611376c02e62dfae61ad21973221c93b6306c4c43c1d5d72a92c75ab10cf9d60d06a1d08d896306652f078884a6e5588b3645403cb8a790f3c080ec4552a3c9c40d75f278035e507abb9402c0c79f0a5278e9bed8ff4487ad1fa9d48d8f481f01419303eb94973a0e3cb909cbab70e7f1c05aa78561b264444734e57e31e02ff3c1b49c84f4c3e382705fa9db5939ffe812d58e5f8bc43baf1f383280e96df8119ffe805321b2ee767f6074f68335cf84d7385bdc04e83604566c878a86e185bf42780695f29193fed075d73f29cdd027dd54818068251be8e69b00ec06b01ed6737dc5954895e143c80151e6947ab78faa34ac35579b06ccaefda85230ca9a17b6e4afaf0b2b0e0a7423fe3c4ad2f958a0ec2bc20e96f2c0285c7e8fb87c566e4c4c80cf573b82ba1d695e12d65f104408bcbc11850485618ecc0c97a8cd61a59b2859dd16b3679490138fd9c01d64b40005c911999ecdf6852b765a17a775220ae12e0451e11dd8de05d779603e0ae98c4af16423d2a583e7005a77684e40b2fc8a773a279afb61349a97f821ea397941e8e376aaa3d2ad5456a49f5f2419aaa163846bc1e00ac9790dbe7ce4a331b94edd9f7f062ab5e88de726816ccdad51214e823a4a47c6ba29abc02398f897b16eb97c78367c106a3b713b1706f23166d8220049caacd5d30e160d957528fa5be562368ee9133f36d1c39b632921bc91b2f23f5086346e1ab7adcf0142443308a1cb7792cce9acab4668425921627e46c60487371734059292badc01bfab804d1cd190f5d7d600dd8462b74708f76ce85b89d0f3913180f22d8810bb5c58b1ae21e60019641cffb1a6991c2ae3419503279746be519ec8a1abdd293a924c097cc7d935acfa5c61b19282258a5925337852aa27b033ba48a3b7c24fc22311d727baa9b53d0808d1df1fadc9af66100b9a7aa916bf131f4214a6266356d5b0751d60ea9a01479e46cab0c1108e39a93dea933b3a93f7b07cfea8e1b0f490cc35653990a0791fe6c9bc6aa5d0a698d05e9e40eaa02b3c9bd5227241b1a68c0f8a29a54acd2e2873c9d04bf91303f3640aaf0bc7563690d70f62f6315fa6d98e1e0604617a3c046b5fd9b322c3425ef9784f20b3b4ee4e059b4f8206bce9d8cae777ab885f3be288c20e974848877c7650d714c0f26c600dc0b3926151ea8df6456de32ce279b4aaef6a3fefab3681a39e736238f0ca6a343f1fae2733de8b33fa276590f261ce5724c33493defe709ac9e0f05dc3a075e5af4668e851b351340b73c9f1609a24adac50bd9ae1b53b2d08832b2d77b8323adbd25db7acf98df7a63d6cdebafbaaf15215d7138f52017c825da56e39b76732c2bbcdda489815adb91b13224146152858b668df98540e37d7b1c21c580ffa74f036f83c5709249d64c781daf50d5ae7926add22188460ea056f386e7530f31380d26ba928491ae391f0fb1864beaafaa84533eb4fd348b5a715f76301c360f6e0bb519a24d8bc01cf4c203382ed0b2cd15e910c6f268f91740f3a7c0ffbafbbfe4fa31988711097d28925c4ddfb477c430e700d8a877f3d0ebd78629167e61b846186f9e760ef8c7991cb53cfb3c075c692f3aba4b992ac45ecacd8ce5932ae4d2c77dddc5bf0e237a69355cf1eb248d6794bb2aa3f44d2e46fe3607a2ea86d41df6badfcfbcf53263d31ec4eee0fee9e8f5a093aba23cfad6c7a69c09496c04f907be77f7a4b9dcc19dfeb2b39afe4a478d40576f7ed17f6a683193369dc972b965b4e0e661f26bc6fc4810905b698e7361d666c4db0d9d8dccc08a43bda5a9e2f2485fb29e12270299741dd321ffd738321339625c2ed1da51e9baa26447b7b63318ffcd11ac902a7c3591031d0c77ad4f27b71fee0a8e0b374b26c4c6f1e8a52eb7e64cdf70fb04580e77c18127434529599e852b8883dba5e061749473a4fb96025d6b687f58c2988d8ce79491a2024233512150c5b80062003cb34500cfe9822b658930d059a69c8d1ade98a4320d3b6684513144eb13d59a99c51e952cdda3d2a5c6a54f417efdf54f00d9c4a7c5d344a73f62f106ce8b4bcd675697671022b889bc08c7b7592d8be86ced960bc39bf442347b34da450fb7c9089680bea094c4d4cc5514d1d090fb39996b0a5a2df496a65abcd5ba5865c6b554a27cd53de2a4a52849a284605a5c9f6428681795f5f5e0793243fc9faf67de291cc011acee7daf5f11bd29d7e8559e84dbe113c6d2e9c7b41a8c630b1f61223b5ac72b0bd3c39abee328bf0d91e2183cf0d25e248c2e353c3bc61658cbbbcd4305e2cc139dc04d5e03463c5c2906e17b81948f964d079b40bd42c9d119e4246ecf407e670039f4e702de9dd8e8b411b498d1901e6bd3a096d1e8f950de5a09776c0088d909b03ede54ef159144dde01b074202fb7fba81a6d29ce0412b4eb3534e630996b3aa17df54380eae37b4a41e098d36860e19a19bc3b94191096caead48b087b6bdf7931c9382fff9081d6cbea78e70e4c397fa463e320e2657a4c7a0dff772a69f500b2dcf601709ff05fa64b95e58b3574a552d27b46a5a6549eff36791bf7d90a7de02ed01ed732439f3326c63354ee3f42bbb658e137276341fac26df5823ecc480f672f2952eff19a0adb4b26193f33e570e4643a2c9cc2a477d9a0c266906002241642ae9d8df8a9fceae31b54fe38cb4f108c1982ae2c633a0e43401e2b1739522e587b074b8561cc2cd054074cf450113e40a713b1ba69a843ecc1110db407d1e38a0f91d525695859c6c200755e2e9695814b9439179da1892922d63fa839b9eda276c14a70f8ebc5765bfb0d628ad3f32d609c01afd65b5bd4747e2793a05cb2a6938b11983107cbde42917ad81813035d523b64ecbb1f042959245cf98112fa850a32265b570e24eaad05635c99f90ca195e6ec8450e547768976e5ab39329c09439d7cb3c100fc659b6ac6b279d30492e77bcca9b958ba609f47dccae6e263af212ee51e0ba21b4a0f1794adcb85aaf708706bc2242e5b88f0422c82118b040ff93bb4b8294e8cb85c40122ddb59667177b9e4587cca6ab7f1fd5a0ea8750f1b6886d45b7c44038d457235b8e82644213f2fdfd38c3737ef5e6eb612f0b5c98dd209d9d5cf4ec4da371a09405c4dde9ebe825cfca7fd6784859175a72b7d58b6a13c6fafcaa8f19d6a60b2ffb7942edd19d1a3840be727dac72b32ecea8c937ac0fc81741f8daf40d9ea335c2814eb3070b9505e6fac98e2a2dff6674cb01b1a1abfa40dd0b20599b43afe8379139e451c070483cb69e2cb22afcc627d9224cd5c6804dc8cfe1f854753bd14e59c3721690cba26a02940f95615f4ae4f52929162189af42863c63c2717ca6e42cee30a4fbd779a225d9d8722cc800191ad8cd5976883e9639552c3b46850d0626ace2278231856f21afa3da3be882edd503ba4177ce09d36d94bd5b2dbd4b3675407543d1feabd38f71e8d498ca070835f94c3fb9dc68b799700ee04b579805e7ca5984ea565c238955909b0271cbdef2b86c91ea3c2516b0d10f4410b5dab9163f92a85a71a2aa01397f7f868679627d089d27936d5022741240d5ec1662d30d7041d002549bf7ad9b4b558c0c73d1e853b0e0def1016f5d190706bce8c2183f1af2f7385302d9987c076c3d1d1662162dd74e861649a2a65ce5ee116b08f7f868ea64ad9b78b68e2dc16613826e5140e7a4bc5a3f2de816e6818647475271cdddaa70ae38ee21364c53292c901d56ada3994f1a3452f66e78eb1061af4869a2a006d5d47f3a1580dd66821fa2d4ad84866648dc6b176dc201568a00e05537985dca491129aaa71d028012802a8674d8a059016aee68b6e24d0667c2ec66e6e74e538dfc593450476fe7e3097e5c33e512858054f51f2f05d7f65b98b4ccf44a2abecbec4ca9f96ca41bbdd1883683dd0319d957b3aa8cb56cbe9aa3cd3ec5ba4ff62938ba9b53ece5461cb81913cf42384533b3a56ddcaa5ca0989ad8edcd653ee9218fac556acc3a8084e764a3f33aee235373de870fa7c0d1924b3d4e23ffc5166b8bd2881064f01b8a582966b155382af177c86bd4d387a2a57862f2d97e3db9ac8940e7c0b3dff3a64de1a8f94e15b2e2da062413233f3a42a0e217d3d092666e2178afb1d0d475a4cee4414d1aafedabc55a8a506cd1c283bba748b89e9a3bf33fdd8ed92a0d5d1447c3995417aa78c540d2ba0d693eb341c44f0323d9f3b8894ff022d1be2314f0485ca83cf031e98768e2013b2a234f589047b8621653fd9e3c0b153a1804a52de62b8df9ed072cdf7537415028fcd29f64344e44f4e3f2f54ef58e57e91b9f28626fe8728413710ad1b17cbccd462a1683d86057f0be9610956053aa3ac875ffb1e23fb41f9e59caa7957c14a83e700bf883f05402c766d22f418045e6556bb8ddf20861cb627f94e22a24c70738c8ad52077d5fbe822407718a2a0ac2d1c5168b6f8ad7b40c8c7e8d08d8314f940ef85d1987818538b765f767f227876a8d154687c25f35ec100834ef4192c0db87d34c4ae69e53bc91f95a45d5efcef4ae64a14c57c6062bbe04727b08d8436a7186e90c5aadf809e4317353bf883abeb7b943bff7c6706c1225ee5017812781ca0868bd9d2962803beeb234646c146c6d4e6b6f51d1afa21576ed7e8db9a80959c5aebb163a99b31b1add1584a5a6fa96b5c33cf63ec3701150cf9e276cd2a8bb40134a7fa3977aa315d72b8b97b62fd9f60392d6ca376106ed25bbc17f2b19b6bc0581db011801ef7295e6e26a83ee5405c31df81bc64451c28c0790022ca59250f4b81d2839c588b112c134ec98e12d8952ab765ddf0f62da7b0038cfe0dc09eb6d0945bea721b343d76726518f029e84d7f4f165e0770c2e5d28836d897348806c6d88b1e663a0641d068cdb4d6c79f57fa1e4630265611ce45f865ed36a155912e2911bc81fd7a91bceafaca1891a3b0f22e1ef3933e5c8bd3d3b8247667e184b3067fe8bf1238e2692e92a1e6451ab7bd3ac3b3b45f18e782b05a16cc479a1913a0e776404a45f370e9581356e001d4d3889cccbfb0ad4808e2d93410c407e1a3ca0fda59620fb6cef6e91d6bff2e28b384979307b31c01a4efc8136768c34c5084559de794159708eb624916506824ca8d82438ffd001b25e84342a82e84b8e54297c8c86dd26b4dc00f22f4a04fa2e8b4ac6302ec58d3ada9d8cffcdb028ff5962835d07e86839b5aae1328314443978e53d3d50c7cdb28607b1b1806fdcab12b1b010089273dcccedf8511bd82535dd40541e4fa2ea494e89eb5d90396feda144e7b606eed8198677b00d2353f2842e79f064150496711bc923b887b9baa4fa1b336fb144fa905da540b6c5e2d3099b540a49b308947fc2a6264b4c8d8d070bbee0e32e58054e1294f34ec08f76343b682f555fcbde7852a69bed39ab5e310c54f8b6ec3d402542bf7f7c133022e913970bbcd4d19fd6bc9e9b63075cd2430a305c05c2ce36bfc6cc09c5e760fb0351a072f71d8f4553f8205ec35f40d299afd3aef61c6246711664f5fd2c06c9980a6ec00bb75fcb0418438f72c9660e0f05cb463b0e2195660d1b15a43625ece4aeca8ed98548624c2ece40d5c905d166dc813c996539c9c6389c041b187d9566932be44cd86d3141d8c3667e2555b3eeae608730ea77d3027f4a110d1f323bf3d965e939ecac68d1732eccdeeb73965f198b585a65a417a79c0fd97a6c4da2ef6d60a4fdffdbaaebaf7a64e41c888ed1a42d0738074c4c4c2d0c4cb6fff6bc1a4e701c15f952b6372ee26c4498e9cc1373c6b0f572710d40db03680de2f7cbf15bc60cfb0deb4c819cdc9fa07e8a7be68c1d2440cfa9117ed298bf811f086eab3609e8ac4272001f8ae5d3cfaa728c3a44dc6c38422738a2b9627a23ccadd4cb42c0b3560edb1099913fd090ec6fac4f1d45099306dcd997638d213480bdc95001e0467f3611313cfc5dc2c1f561a1da362834c1f4e76929ed1444ad7454c377099c8acb68e73f0ebb766a476239fea938f45f0ae71a836bd7f8e61910a1ce79b7713dc814d4fc23b7c7301056164da290c4577523aa28713fe5e77b18261bf465bfc57a474a05d8878bfd8cdd0a3b46a773bbbbb8415435b6dc4eaeb7a857761a56e11ef3f479996a8eb69cf26338ebcc0b273834fa6f4539bd1758491a985784f71b9559895096f89329642475315f3874f9b30d6c15202b01389bdc6070fcb0482395cd798beb583d27654a04fa5c9f44c1f439555555abb1627eca89756ade4ebca0a0d11341d4d749a8df1cfb04a3ee24ed8ff882569110508e2e9bd467e3f531c3c5ff576b5bad258c4ebc0b6dcb0d50522a025596ad6c0a60f0139f7b80455050c34b312bd81af4ca3fe853729b9627cc7eb0687f5a880651e780b16e2f5e85bc3e1e5359ef3f35d67d80aea49d386cb58cc948e613306a50a26c2ad53ed388c2fc445abdb65575d4f58637b251914c2249b04f7bffb87bdba90f97d410003f0bdebd42b45a7cf37611ccf53eb2b62a68f18687a8fde177014006e8a8edc2ae487b1ce636c6652201281040e96231970faa8465386554a1404592d5db1eee2b4e0df298bd165a000670230c5380b2ad17456a4bb39f22bd6cc8e47b27a614b000a5c854317f5a8626da86add29a5cd5a2175462ba7c19308972af4ced0d1bb015e6880c38257384c0116f4341992a8a2ea7f835bd5e1e104519e1e509060dd39c559b55de78b891095a0829e42cf0a2bafa331a06fa404b05184fe47785cbdec78169e6f14b99ad730e93d00a59e715715476f50b84987a23cd6514ae080920a52cd6453935e12dc87a208ec5177bb2379117c7871e462503b58bc1faad01d7e5eaba09e57d267b84b18301b58cb59197caf72dfddc34313a8a43708e2037914df8f0342baee4d04286541874f3f8a6f93bf8012cb02095694185bafd805f41e9016b86b8035d7064496bc88dc23f86dc8137af3a46d2910e696d123b518023d14b8b2cab63840ab216aff7305ceb2828b4584bfe04173ed504415a403be93230def58296aaca169c14e0239403d8c578638a0ae044ea9537e856b091f2b3593b2087db14b657684461e9891247c5a12a948f1abea84e983c7213bd8475f36a04ec988c6b2741d597cdb5a14e85d7248a1be74ec41d03b3df9448e8e2fc8e13d7fa2f19b5a473b7d511d5712988f25731237645a163ba211ba017ac7e292c544e67041231dc5ec502057c0a6778c50bd6c968285c3e1494efc707519e520b7162087f350112fa7897ddbdacd4ff01502069d6244915d6403055e52c4700d55205c95493ac97090c41c2864198d74c389aa98e54445500c3949cb86035678b01047167c74765c95f69e0560482bdbc9c9b46d6dbc666c27a60008f41c398455b7bd783614a1d606f011698d10d2082164ef2df70e930d410d530da61498d2ac0f8a5b9787625387d425b939f556eadc73abd53af816a7b55aadd6cddc5dde9027645dc72a08623475c10ec907103c0dc1973a98ba197cca13020fbe43d221d83ad6baa9eb0975429e768bb0d92f774718d35a076d0ac499ad735c77f94a1c77daafd4b9eb29794926cc75bfd4d4ee21c9e0b5eb1d29f192fa753a764fe944f14c7d460f49065fea0863ef8e3a24fdf29e38cef4c1e6ea0496550cbeecf9784ff42b77473c203fd3c3ee05c11868653a049f65df6cfe81b7a76c0c0923036d6cb9c00982aea74093e956a0b7de6bf89a0d1f8899b836510ca65cd6c5c48226d8e41f3639ce4c9de55ca4f179077f4aa5ce715c27bd1b2c375999de3957973ace4c75ae9b1bb7ee7a674a9d7bd69e4add93296b97cb322ad35b2e9ba5cd270e743d46deb4ee3ac932b875c16ff6e4e930e194e7ddd0620efec464bb731c77b0654addd55baa83dc5bf9a452b9b965702baf2e677aeaf93a5ad8c4e2dedd3580d4c19b73a4a46744ea600b7ccb05822b19ecba76f26e9c0e5eef64b3ec5697a7f1ea278abb772bae03bd1a2ed05693c964329d6bdd18124677c19b6c8c8461725d654fbad34da99f0e3e6ba7a734d0d41d6ca53aeea9a71e3d1ddde966f0b2ba9bee32a5b4df485d07e59ebe79467438e572b99ee2d570811273a9d4711a83b6e214c5ddc9d4759dab75d76fb4eebaaeffc0a04db96c066f3a9dfb0f0cc690304cd76ca6d8d4655c967d32deca3fbb12043e7cd6706be52df01508b43508bbc3073e57a01a04433d756387606c17da2178936b729c99d988ed592eec65a552ad960b172e5c2e2b95c1c06432994ca99489a65a299aea8c9a90058d4277a45f58f8a2cd8631cc849db01406e6e0f3c03b24f484e64c783ba4e9829deb92fa85b50ede7beb99e2d6cd3c8dc1774849becc03efbd7597d571712ed7cde07ba4e9de5dd603bd2e4987d4afee76497a26e6602d5716e4f341b1eb7496f788bb636779d786c4de23e6de9215c8b66ed6963ef02e9073fd6439cec5716f711cc7712e57cbd5c25aae568beb3810ecd105e910f3cebd75f0ca107c2068bbb75cef5caeb7402e03418a7b74d8757376d03be709219d5cf79e7b741804ad37e4096524f8b283cf9e507631d061970e78971d121eb49e909e0943eb09f5ab85dd6523f684b4d7ba15287bc1071eecb2e7aeebbabb8ed359976599cb956112632ecd66a0c3ae0a64a244bcd6cd3cb875d0e60e834fd99cfa4cf1e0d6edd161ee602b73c1d73d7b0dd233e1b15720eeba528fa99bc1b77868688144a1b9768c20a65207411004b7a78ed35ccb9e6cf0b59efa665bd76c684d21c5d475eadd70b9ae8ee9ae287a2806cf55afc676693eb0f2d01b9a7687848f9e49872bbc2cf031a7066917ec261608de0ad482af7b76bba47e753783771d03df3dbb5ce05dd7713d25d4a10bd3b4cf75d76374b55ab64bd92e498718789cee90fad53af62e4997d4b55a56e2d4f5863ac4ee092161ef90c00a9422d42126a443ecf4061ff80ad4afecf9e40e29a85f992ea94ff4cbc3ee09f5ab3b764f48bf4c8edd1b0227860d511f21a1a121224488722b01619f55609f57f48ccc71023b0d829d3e21840d612c06b411b792065e4cc84cc3f70a145db05322d1056bb99ef21a0adc44e479e84cbe172d47b07c8b46d2483d4389d0a3e982ddf5dc4edce7ee27a46cf12cb10012d233748904d2339e8f4c2291c823d2882c22a59050c8276410e944ace20a9c8fb1a040cf7448347ac6136ae999567abfbcc7243922894764c8bcb0809d5cc3975b889006a27d96c89c914ae47fb37605967771f327dfe20863af4073460a892ef25068527c458ca8c8af2e26afc24e97c83b816590fcadb0e7336728d021cd191ad1451e8b559437c124920e292641c2d8bd9676519a3334bac8cbc052e6458865057e9db70447d70faf89fe7127088e667c871d13bf402383078f1d341816e9a43c703aecee96333be29119a65057c14d221d173ef9792790864587dd2f89f552d00c9a401d06e9b081fa45e79c40fd04eecf9f0964029940136802e1a644b8d8524d1887655b8c31c68c768d367738c6d8d10737161308a64e60790c2888f480befef6bc694bb06f3e1b907e69956a4bfd9a4f82f3240284e52b929e699f243f4a80aa08baa2e58160f916a27528853cc2f2458c60f926d2a17c2f75189f7b055f7cd638599bf00f480f532c1d610444eef0d38433acc007d3732cec1164c171ca76a1981d3e298f64d2d19c914ba20b3d5dc9234c354c97d0abd33e5170dca4d3de18b518a3365d20902db64da9c5f431cb6cb53d2c9e5fdf26e40face90db8bf257c893f09428348052438421d80a841066a30caa206db33279a80052e106189147558c31bd2708731dc0109f804e7c754ba864829a523c01475822258e1734a29a53406c4d405910c58084142144e2061481668700215467718ea88b801d3af6eeea15d266cb90c8d0ced03571b8e456748430f4ac023696804599460063050da4a909359300dd275dda4383470e028f597e8578eb1400fe904cecc3a72de74e961b1f64c059fc4dae53465af11e6085f0e956454aa164b29a5b559ad02175bb2e4564e37f8324fcd3c357668fa22bdd9747af4e89c1d173bcf9aced993c95cade6bd9b796ad85e9f9331893903a29ca4dc185d4ec74094d393326dbbd62f4e5e7a3662873e7306e7bb5933b9f9e36e5ecd635e0dfad3ea43ddac9d4cf73ccb1d67668abba9692bec4621546b29881d73e80afcd1d2078aabf9aa0cc117dfaf2ccb2ecd3771c4aedcc29c537228ed9af6ae5ff4da764ed3eef40810b1778e7ab4330570bf7bbc3c73b399e787cd2f5acc6cbcd82946dfef7aaba59d11f37deff7a393d3073d14cb6eda94a7b10df99d98c5177c3a468ae1d0c01176c774f799c8f18846f6123c27bb51540bd49873f698392a59e03d90e8b07974d8f3f2887e754f0cfb7874d817c3fedadfb7aa594ca2c32fc7259f123134b5312a2485a79931343290e8577e8ccc5b5ae2ae33989c8f134795541666c4701eab54c0f3fd043c7fa30d0022ccfcfce58d0c0963fe78d2a08e985c7cc1858b165e68d1a2d585568b05898585c505166b650b2b2b2a5a5051592159ad545950a9525848a552ae9092021e81208a1550504eaa70726242051393efc8f7a1a680429da4703a7951f0bccea8eb3828709ce90926d3e6846dd38c685a464596614dc093664e9a4967449b39279e0740b4691a222e3fa79c26245cecb022b92dc17146ca18ab80653c02e24d1112867c4c4a8284e7e363fac5d2d1a7efcbcae2aae563d1c0d5cc4a6666fb3922da440cf43357abfc39b101b5151f05fad97e3627e41378dee7be1bd0f6d3614e1cba676599042cb30482bce17a077288bce1eecd8cbadb766674d3adeb28edb25a297dd7dd08fb3132eaf0f7d54fdb73ceba524567577ee6cc8e78148f3cefd3f6a93d79663431a225a339e7f442b79dc8a516b8855783ce634b4ecdb5d795a3165b8229d1674ca90a7ae2bc6e3b215a5a5af2bcd77c5c7ba77358376d3f7a354e434cefa121a693ad5b225a5ab2cf44f0517cea7ea3bedfbab519438252bf56aa58525be7b65eb1127f2dab04eb997783f59d192d16f7a3eb38bd44bf583cbcf8e9668b4f67d9dc61d659a73d633aebdcb43d5c4281c509cb982389e60c90f6890205453326224f5c4167d77c1de60f879fef408c2710a61f3c1f3e14156ac5a4f5b9607c3881e962b69968e38307c3de7766e01ed026daf8d841e19e1411d1c6c7cec43dab06e27d5a5fdecfb4ed87f7b9ce87f74f2893133025b55231799fc5f2bddf22daf47c2ea24d8f662fccfb2d2fecfb3d449b9e9330daf4985ca24dff8797ee7d20600411837b5f26daf49c0c116d7a4cd8eb699a68d3d3d5449b1e8aebfb37d1a6e72423daf4600088363ddf8c68d3a3e1d9c7a2cdcbfb28d126f57e9f876863df1722da70efe374536020ec06c58bdd867eb09b904dc86e4fd82d2888dd80ece6048cdd906c47763bc2d9cdc86e463a2cb25b1139f4ad9c6cf04525d8e579fbb961bf73f29dee3bfd9d49edca49771d2dc876db75b420271b771d0da8e374342736af5e47fbe16a5f4703e2dd47678105d6d17cea7d74f6d1b3824dce83e1cfbbb181ec08f7dd7191bfdb93c22b37eb684fec487bf310d37b56f0c9cd9a910ee5909bed66ad0877f31015ef664d8a0ee57b5670bd79c88a3ef360785e27db71717386e7ed49e1beda1019322e2a856272e9836ffb913ff85ad784441b694fba4d29c2c8731b51bf7456c650a448113b14151931626474e4c8d111122448fdd2d990b248d22f9d2d4916596081e5b7a47e358e3626f6e13b12afdc8d68e86b4d22009c66c66770fec21f22e732e77eb03636d0c2c7c707d77c67e53b427c27c67782f84ecc77607c0788ef6c203bc22fdf402cc23e6a6ede09c07b56f0ca777cac08f15cb30911e35988eb68416204f11ca30b22e63988eb684ec4c0788e398101c4338ceb6840ee0308986720aeb3727bccf0f172989b7b56f0cbcd3db22be097679beb644b4bc280579e7930fc727b52380037eb684fcc2cb2b8035ef9cb33cc75b21e33b2b8c31df0cacd1213654bdf736e0ef1cdc7b97935e3e60f0097086b4343282994c99765599665599619654699516694196d581624711694056541595016a444a4a4a4149130a6a4a4a4a4a4b4624fba0dc38838a2157bd26d442f18235a21b24427441dd186fd603fd80ff683fd603fd80ff68384848484848454912a5245aa4375a80ed5a13a548796969696969696969696969696968ca8111197717bb376a3626444c4d59064dc7b6f100da24134880669f6a4dbb8399580441be9e19e3f34c8540a28e9d98818e5c4660f60ecd9494618d47313121ff5bdf167dfaf7338c7a5a5ac824d4bf5054b6dd362f698612d2b509e34217fd4d9b140cefa1a57f0a94af02ca1445884123c3d13739068171e9b1348321dcad99a7cf8a8445c62042eb6e4ae08cf73912666bacca778de7610a5ea50aad40539da718f2748b66347273f403a9cdbed7c96ae30c197b123a5969696160ca9fba4a1898909b1cbf57cbcb95caeadeb5458fe82b5b1be59f1656c6e181292cdc836ad0976842175cfd851d7ba79853794bd9dc59030241b52d75d0ca9c3706253a95fda9d9a364d3e4da3f37257748845f7d96d262c936ba3b1c9bb63552041822d99d852929119acf0013203238425e9572c8ac3916ea3e9d76c01e2adc3db69cf60472db87b0cd7591a167cdda431b15bd111ea13f516a86bcf80beeea7a823f28ec8e9132b8a284fb29d4f8773e8b153a910a762702afb4c7aeb9bab3fec6e0e637092eda692eddd9d4943b9bb49f7fb6c62d2dde43a26df8ed3d7e47e9adc6b727f72eedaa9d43349c94cea3eaf8d789bdbb6757712995574442c0fb7a53d1bf2715528f56bfb0cb14ab5c2aa0fab34ac7a6cd566830d470a8cbd08c6dee266cd08fe8eac90e0270995c45481697a0867cd5a8ccbbadc5770d3dbee8cd8769cb9d9942155d642506c6e2970ee4f16692c9b43fcc266d30f9e67b1d93484e7556c36196593129e5fb1991bc2f32d367346207002836f9b554fbdbd1ad8b7961b5e997e65a00563dfa2942d39f4299b81a9c4c4d8e591787559ac937716ebb60eebba9f74c76c278180aad4370cb39bd16604bb9bd19d26f8be7bdf92b6eda96710049fa5cf761df05892fc49a16047d8117694baea47fa7408a4c3e9a3ba4afa00f9c1b0b91519d98ef8985ca2cca1a23814c1710b3816c141092e8203129c922a954a45797632acba43568f5e0138bbb240a250dddcf2d44b707bce5ad55b6cc41c68b1d646cf060e939b1c47c4aa55f474985c954a62d55337ec70b3acd4cd91e1ab52bda66c9867805814bd1df58e6046928faada12843951ec48dca33a66332bf588bd83acd4b59161d56f9619bb9772150bd43ac46e62bb0eb1a75816f89d0c7fef99f8bbb443efc67bcd66cd65ef4f6cbee7645f8b156146360b6e1b87cdb76c3783c009bc1db35d449542dd26c235c0ee9bedd157841d0dead1ab41241ea9b0ab2e4e63a883d8c58c50ac788459360b6eaa9b35bc5d3b4e63481dce2950b08455c784b0a4bd3971a68d33c531894f00be48450a8e60ece8a85f193bc24830a47e452a508045a422053e9db321c1f3194b42450a8a60161ca9488110e634893335653df828ce94e34e9df46e68df8ed9ed2aebe28e19f5cbde79aad9af9cb31633c28a843e7bcc88f431825b4629bb19e9a468157ca86307df224575ec289bbba33a223ad83b2952ec84a2c339872611d5a7ea4e221d86730e7544aa63573df58c1dbc1d119e8a5de730db11a98e1dbc7927c3e055d7c16e47248564c3073e65b72222b023f2d5409dabf952de1d4ca530ab7acfc4aa94afb3190f3e1f29ef8efde45d9ed4cddfe95eeac7a9a3581f3b4b609deef24cdc1de53b1956dd9c72bbcbca71acfab1eaa81aa9db336ba82ecaca7bccf606505053a9c3f9e207eaa0ed7ed539d0faf0406f476210fc40db9893e0dd91b8672703dfd9cccade337187b2acece6c830ea3b19eededd2c31eaeec82cf0c93b6b72943d79f46e981cbcddf12ecf4e16238cea66560e0d63dd72ccee642cf03db3e5279605de1c5aeadecd48cfc428772a99494656c897633c235caf5e8d1d897de850dd75b1243d139f2e86a4c3f97b6fccf1e8a095d8da888f1df9a02d6cde8ef07ccb16e51f4430f6cdb2ce6269c66e8f7884c1b33023fdca403cc245fd5af93c66e4793556563c0fbc2f95cf73347a669b22bacc47e1c815f0ecad0b781ed98a302c626468542c2bf3aeb0495d75cca65429d539e9a5f048acb29995231671aa835b1146a98ed39b91cda85f2a1a8cbd07c3453e54e799b886eaee6438d5a5f44c8c1d674e257726f14cac7a7b3954c77e51df91aae3f44b751f3b1b8830de3795cd12ab2e6d1c3bb7591fa9c708b3b3811f38f5b823eb53966727c3971867aaacc49bddb911b1dbe8703b76b7231de2a4ee909f30a7de6c07df917ee599b4392102208acc4abd67e26d468cb7a3391373001005f82823ca888295ba3934bcdd1d99c57732bc4501cfa3ec6624053eabbe459c52712aabfad5517dbb8eea9b114e7a3a547733da2e45f06d8f38df887827c3d87b26de8a362346b44fbfb01e1bf6cea26c7ec1a86fdbb7ed1c68255eb215653af8543f61364b8ca55470f583f7d33342b5ba2c2af41dffe41f987fe01423ea86a5581678efe0dd8a72f065eca8089f98dc993487308a4f5b51eed15760ee9bb4e18fbda5afc058384d366349786e9d86c5be2287de28e4717a264597a3393387a2cbfcc494e64c9a43783ec3c197bfa2930214653088313e2924d229bf2434ed22f1d18b4487ddc7da8a4fe62170129732312f21121d764b87fd246e1297c73bec24e4121d3231d4af2aa5cc52882ed1a1d4b44fd6cb2129244428522bf1bcd2a72f83a4900472223ecb1fe90450bf22bd1248fee0befcb1409c9142425208f7ed13318921cb8faff9a694dbb31bb7eddb8b8c8c16ad5f5bc76ddb366cbb59bbda8d5865a1d185e6344e6b727e819ba7b4e9653795b2a9945947a5a4f928ad924ed954c8449b6e96af562f2b162ed0885ae8210594189d10462a2215be1867e09865cce0f821b46fa61430f5d83dafbee8d23dc5c6e8d21db49d8c843169248c150e89724f426e858d7694c01c7719794343c2a091373d240c19f226c491372b09635611f6103a703d8d69628d88e1c4813a7973657e7e353fe794893072ca4c21228c9c42cc181146ce183388082367103326c2c8193361441839614c20228c9c404c98082327cc7c893072be4c397f9872fa30e574997286b3870823670f534e1ee68b0823e78b2967cb94d335e5bc534e3b1f61e4fc9c2e668bd99a2c933557e65459cd956a62556a16d17d1e07186122ee6c4ec15907d7be3b4c4c9968d31a3569941792e211fd7877bc34a5f1385d6df8a2f5927ef2661e3b8e9073caef3842e29833f4156fc6a19132e8abe9c5a1c13438ab38b3430edcec90457a3c9048824788e73c4df822034fa4a8c40309aee6eb17294f299db4861d7af29e7db16187b3c6504a63c2fa1cbed4737d75a4cfa44d299540a8f4e970d6f025464a7a2a81805f8773ce4b20fd0ae55542be078e0ee7fbd59f5f5de278f59d9af675f8154b8773b56279dd11919258c94b3f9750a25a1e9e259650822a3197a089333c90422c814c4bb8d8af1b1177d6229699760b46b888bd7e6693d6f98c62d8a4c7ec9caf575bf55d2581561a193834319f4c2643cab63c14cb4c06cd4be26c7d315944bb6817c7173e1ac6b0c3bee14b378d0c1c29b5be2fdd0c5fceb2fac07a052ec6a0f3749ec6d7acc0ec39e79c1347119366ce39a7902fff2d48c0667ea4538b13b3b92bbdda47a5c48246064e8773ce39e7a4c9ab2268646852f6c49048c2a33727d13c3a9cc7eef0f50d248078370af918eef3eabcb3dc8dd1346d522f87bc9d8c271f23efbc8cf6797a1e482441b3cbcbdb43b176b30b7e31783e46266cf98ac5d4d808b828f3794b30d6dd3da71671f0c5bf6869f10c63af41b224492d9e33254a18cbaac0d8834e36f85afcc5c173b285c42dced57cef41e5a91f4ca6a752a9ace11516c7b19cb59272c1b960592f8962132542a5f094fac57233c7715e1267a2443c254fc94bf29478495e92c94bf29478d74bea8e56aa24d37fb01e120fa95fa8b3585cca7a482bd63b4a3d7b4748705a7691c5f2d861ec90f54ef2b1dcc523cbedb8b32cb7720f69c57a4736f84ccfde114e4d252be75e81a6771982d7538fdd637ca19e59ba2161929295b356eee299c55a39cb8895ebb05cb0b07bed65b16e767196732e2c8ba544a420b27296bb60b9341f4784fb0acb4bf24c388f3bb6b26229111196a552ac5c07eb52293a24a27865e55222ee52224488fa159fbd432942f6c417e34d7744c2c0fe0df15aa45f42c4903888c71803e3316a9e0f8779f9c13eab81e783d2b48c061fca4fce75483948539b1273316c7ec538459a42d82cb110a74714c911ece6c6df65ba2318bb10b61689616b91e7a305a1c5dcfc61edac0be3ae0001e3030f2f3f5ceb82bb3375141fd4e62a05c6ae7d36573360ec26366b78659332c52a362b81f38fb22c0d773cfc2d1e7eef66f7743b4ac4130251e05d35a80655a01aa402a5a43cb5016c712d1b31e7b211dff5d4532e57cb9a52ad180903bca9f59475b9acf7d321e605f9748801e910033bc4de4ab5aea7d4a248b869852f7fa9b75c2eced225422ef7aec599f0dea5577c18d481c23ae0bbeb6243cb81962e59f16572a95fe0c5bad3259da54bddbb7b577458d7755d47743a76b274c9e9992e399d5eb1d92a4587a7edf4bc5dbaa45dba842ea944e8125aa45fddd5619dde3de21f8ebd16f5cbbb3aacd3b5d118bcf7885f8ebd1a8936e03d21fbeb82f518551ee34c87c4a1b83eeda0ad46220cf6175b7fb0b508125681eecd2e70767bb30b1797e5e6156be5e64fe5ae2ee7ba79f5109f6e0e7136832ff5d6a547fd4a9de8d189229d4e274b91e81145428f5ca7f48822a1489306340aa7d6e9bb76eeab4129d7732a656b50eab902a56e0de2b2a77336b77e0a280fe5799e7733eadd3954473b8aea3acab5a7836b2f47111dcab374749f9f5767b69763bebbf24887b2e324977974c89d67e2aebb49f43b8fe33ee7f0cd7b371f731c873a3da350f3a8a3de851d72dfc1711c8fe9c21dc5ddb3383ae4ded9223ae470f4cbebce7dc7a93b77d2c5ee591713830f47bf6414d1afac71e7b8e3c890d1af3e770bcc191c3ce64c185db8731cc74deeea482229a519df17ecbc20a5943139a491a1118b9e00c5169a5a3a079c178c0a2498206a31c60784f3aa3fd339dd54f64c2c3f2fcfc4f3c6fc8e9c11b704fb15334d8e30d52611be7a9c59bbd6db036f55e34cb9c3de37db038cf54d294b5204310000a069f59a9d5d3d0b4c0bf74c8a8f93c352eda27783d36c3d35aa5274482b91a988a9c82485898869a843aa699aa6d54021a4c6f484c95473933509056935269fbb2d5dfbfcd16a4e55ced5b04caf315da746a546a5a6a646e5ac732a2c134b8565ba0fc04a3d9a2ef4374ec4eaf530c76024454635b7335229b284c5af9244b5db211d7548bf1929122246104160cd0037f9d49cde6837dacd7388b57cacdddc6837dacdb59a9a031c7104ac569a86358d889a67cd477bde96b46baaf9341a831504abe6db9235f9d4bce62c216204717bb3f61acbb21b16269f9a9abb2d99824c5b51cd59aff99f59ac9ab39e37225c731dd6b52da843168dcb62b16efe55cedd6e452a76232a425473955f85a84891acb91b51d65e3f9c7e33d22f1c22ed0600c6ca857134673ea47ea192f44b4b5a7d316efe82d890583cdc14a4d9063aba71b346538f56ff1ce248e6e6181f7cf0c1879797979794949494949494941e7ae8a107193264dc143463c68c1928282828cf2bcc030f3cf0a0804f2c7c19a6354a55744bfab572faee8a7ea99c9e089b80d758225e5373693e8989b055a348dcac690db8f9fb1870f30a88c79e31e2664d23c01dc03d29e2661a1a1d37c7c408e0e630cc71f38fe3e6d5aac6cddfb78a7da271f36aa5baf9fb6cd6b0cbc1d66f005aae1b95d2dcbc5acddcfc7daf9b356ca3c56d0c71f36a2573f3f70971b3865d3c27c6b5f97eb3866d5edce6720d5f9fc7331f7cb7bd42b1682415fb75a8fdb39a145f3605c1b8b4de6061d99b1ef3ae48bf6a4e4dafb92da44313ce3459986bb9852cc0e61e7ad1482e36cb4e623c6c6e1b9b698ecd2d366c8e466296a713201460730b419921a38794171f6c6e203cc4d8dc43389b6cee9460fa04d8d0e61001369b9230fd1136733e98fe00367342992bc2f406b0b9f3c1f4d8e64e08d3ff6071346cf3be5998164b612e8bcddeb5a41e18c45aadd59a6c0f10a752d790b4a4d4a396a45fdaed698ca425512d0500db4560d3b9b96d1b6775b4db43c60676d37398ba946da10eea70880866aad4b38173d5378bf398baf49fa6dddc03c4dbbddb411db61011beedb983ba22308d73a620209a1094040929c934d4afd884a023339d638262e9085ec1b1688908e638d9755d4725f66eb679ceb9ce7ab7b11173e036b6f3ba7b37d7bc3b8e886bbc017477f9b6d42f977746d838e7799ec671375af4767c77043392bae3863a17db33b1cb6bec4e865d6e43d1217579c49c4bd7ddbc3b273ded299bb5db336fec4ed6dd788f9e8ecee328bd71ee93a8f674d8388fc4358fde8d9a73995086c51043fa38d348d325da708f6f319884906a9cc0178b967e3076f23ccf9b02e76435364b5cb361b161d12af84c3e4b12e71ca739990dc154a45fb91e692b2d68b55a3d7a3672906c8e7f7801ec0e4bc4336f00deede1993780ee36ce655d8d95f1e8dd98f11c8ebbc6612d46186dbb31c0d7dd87e3cc1a22eccabb6633abe611a7deb16aae8d0c7bbf336cee11a7c0329ef31bcb612eda656939b69374b85d868d1dbe3cb5bdc646ec6259dccda161edee6419912f9b828230d58c78d608f0fc6195bcc22ada009eb5229e3fbc52f3bcc22b389e69723cc708e039d4f17c9be71566650db39a95c30283a585456369d1ccbc6e12e2e63243104d17fa1631382daff0f387ffcb357c01b8bd4624a365dc08a296710210b58ccf20c2f4da8c0168335e8436e335b7e635ffe166ade6f8e6afe63637af6aaee3e6d75c00378735cfd14835c771338da4db5bbeed3937aff0168489728e0f73f15d2efe49cec19cdfdcfce53c75f3cadb906ca88dcdb96b73edfe70220e809b1cf374d878ecf0e5e65682b763de0d1bef99b8abe8d087211fe79df3c146ecfd86ed69cc7de564031fcea178357cb8341fe703d771366cd8b89a6759daef33217c356e6602d338c7795d63317dfa8a0ee9920ee9bd56e2b86b9ae5a155744893744839ee9aa675e76c8fae9182f0a59e1b497be7d5e0967c4e6abeee4887f49d57a34362d415e9e04bc59c215ff7bc2de19b67eeddb55b12efba28f724ee7943e2ee96d46178ed1bd29c9139dacc77d4cd65d968ec72b93e6b7aa25de8b9ee9962154ee1149033610ea58b9d79da3505d98183c2544587f49dcd3302308d23300d9ce6525d96c1dab9ae5aee590f3eeed5bb597bca4d9e0ded37e76ced21834dbfb13d6430f6006ccfb1196f3856f37298ce812a29ab54dd4cd9695bda30576f0aea17c5f4a627e84d4626243d2323c924a45fb1682908532429303d31059988307dcca6224c4d4730ad42303da5795bc2448d692bc1740d3877159822cd89a421793632bc2141f13511112428c2ed8da48b84da539f71b35482b76d0988c7795f1ee7f5e1b20d5f1fe1ed6dd4e1f6bcc9b8b981e0ed4d146d4c33e0e159855ff0f08287670dbfe8241dd22d4987dab91bd4e1c6ddbb79f6bc1bbb056d4937a7739bdbb6346f9e72eec66e297643da927448537e9382b425895aa621617ada72fa2d6953d2afac2d7957db8a7448bdbb15dd8d886e45e837a27e69a96bd730ca4d82946426b3935b477bc664128aef82bed4b329c8d3717a2b7548afa443ca79d76cd6749c1e3bd46c2345ec01e14b3dfbc197aad12af86c6e6ec1db65cdcd524803892edbb76f9fb9f9c3adedaf6b22ea57d09cf94e1fe30c05a2cbf6ed43dcac6d97b9f9db2e448b1837afb60771f3b73de6668d4674d9eec2c5e540dcacc1dcfc6197bf98825ceec3cdaba84473b93ef87a782a3c8d38ecc1defae817d687c42d762983f85a6b730bb9f5415bd81c8db46c8e4a586c964058364b212b364b252a36379095f521b1aa7ebbb1eb68bf721c31c270aabe1ef58ba5610d443931a9487a46eb723dea0c80583bf54ecf6d9a36e4fb6e13604e14f50d843ad52c4764ba505334c24ad0cb231249cf28a19755d0cb2b7c70c4cb4181ba330d26cf7ee01cb61bc48573c63483e8429f03cd079f69083428c2d0cce60fc3e23bce9b2908d39b7ee6cc46b42d4da215dd88305d618a5d93a326fac78c26e48fae2a510597b15a394eda7c01191fbb68b35339cf4dfa230bcc61f987bc000f955787be76876531b3f1f3e62a292a471c7d48497f23e29e89ebcdf40726a70db8c6f1f2e623c0ab27545074476d6a891366476dca122470c912dc3605a3584182132b78904ddb76057f47b6694d1db5272bd4c075d47a56dca1eba8ed5880dbaa30e775d4723dc06d59983b75d49a88705b14de8cc220e4eba8d5f06cfbe10c4fdb16056348705b0f73281db5d50d63c06d8f3970dab620e6523a6a270cb85447ad0ae6541db5114fdbd604737115554ef9078d456f8802b765c13fa6a44ce0e8a9f5d12365ad3b19ae39308facd7307da4d6c725ce9471da88bf2e872f311ff8c98418b33df53b31c2c4b36c68183b4f953b31c2d0cb8c8b36cb26f0693c76acdad038e923cb64f430396fcf2401a6b4888b2d54f32e2d76ee74ee3b990ff9d3e599787ba7bd67dead7eaf376d26473d62eedc899672ccca7352b33d1ad6b814db1d3bf96633789473dd61dda307f660d730a623afe1131b31cf0966794eee4e86a58e7cc43fb0cc029fd89d0ccb474f7bf4b6a97ddbce73daaecee95dca370b9e4ea648c110ce31b89f5f5e14379014718a14fce0be4c15603e3976697d9cbed3844f96b9097c72ead990f804bc2816fba69d7c6cdbddc970dede9dd33accca9393ed5dffe0ed3eb8dff2d2afeef64ccde4bb3c13a3eed98ee6d0ac0f9d2dd37eacf9d8c1b4777767033f3076593634ec7d033f30cf4e86bdffc03f708c305d0df9036b2c1ddcb76fe76c36491f9a7677b2472cb9d971a76b967bcfc4dccda7bb93e11a318759baddfc036ff7cecd4e7a1b17b73a7cb1094f2cc1391a35e10925dc2f2222c5245b7bdb3deb03c3ee4e86b56f367b0f86b3773b19aec7aedd9e69c26ccfc47667095c6f33cbc432dd1c19d66eb4d9e9c04e86b53781dbb3d1fd9846dfd91d99056669dfc9a62dc266967673c4a288a94933d1e7ed5ac426ed793bbd387674d8db75b66bd7d95e04b538746c778756df83e18aa388ac67e213103820250873fa40b067f25cb43ea68cf3d18b8fe246c47167cecb6316c88f2b670471c9055282e73400a2c8acfa9e89e92396770876630f111febcd91e1f99d0cd3d33ba46f8c41c8cb9b29909ce8dd881186469818c3f8d844ff98549ec173410e9760423a11bebcc8b4605acce998fd685ab00c71248c9627524a9942e1286f8a204084e96793c90b65d370f70e09e30809a34f809322ec1a31e278c81b0b20f18068938108d34f3a42824d6cc42a1836f967730f96bfc9cd5f12f246090ac81b1e1f4209a3aff2dc4a4cded2aff8d9ec012c2f3d80e5d5f98e5d895659d91f31ecabac2c810cfb292b55e0439f473ed1dd4593fb654b60d8e466f9449f44a2514a242c89da877b59c2b4c277dcfd434a097031c69ea818638c3146548c32d2a0629452ca28638cf1c638a59432c618a59432ca1863d4ae8894f68b67627ad3e535ad5f3e7276ed3b2e70cfc4a67340c39809a3c7b8e8d530996eb600f66c7a35b6a9536f018c5a6d27b3808ff6c1dcdde9b63cd1ab61babdfdc0d8a61d3b6ded9bcd58cdb22828e18998591f94de9dacbe67e279698726594db055eedb2eb8bd5eeeb6b8dfcd65c01ea28e186658733cb0c89b161d3270fcd8e98f8fac500760872fbba18c0ee51b70872f2638464105579845e0624bfe6227831d38462a55c33de7dc91b42531c40635a3916145a6cd44a3190566d6011fa0e10b4b8cac010548dca0822be0e6b1a3c36b84d61dd8d11149d8322a43739b054330516c9aa0bbbb91b083c7114747ec98331c7777b4a0db0a555071063a04210c434b72da0adc542481c18eb91dc51d3a4061b44d9b06243b22090ae0b014b1e01c9f44a2bba909c729581084732c5a626a5089908c3f32f00b1c6170b4c97e1061fad93564717c668944a71fc91ba9052c441bc90589d4215112bd19c58568d3975a8837120b09a381867e403120a0cb9f2c0da47eb1740d8985bcc1b188368873bc19e5e18e30f20e3724c6f1f972fbc40cbbbcf9c3d1a51f05ad0bf96808adc831b8e780699a0e9f10125914332352eecce872cc0d4deb9e734eef46e3186128adf9b0257c79d5695b67ea6abe189349a66338192c29a5f42fb1a8ebbafec1d7efbc026c3971baf4f53c49a577e3d4f50f3e5457f3a1bc1a3d5052c9d7adf47d9b9661f5a3f3fbbeaf65449df20f9c6559866559cde8ec4c6659963285a0d65a6b77ed5aa5ecaeb3d65a6b955dbbd6d9b56badb5d6ae951ea1ce5a6badb576adb5d65a2bd6ddddcd8410ee1e7c990921dc9f8dd5aeb5d639cff0758faeb3d65a6badb5d69a1d9d5851061a44e569b792b2bbbff9ad7e9694b044fb034a34880a1a54575fc2d7632ee1be3f4b4a58aa4ab89908c2f5ddef2b7cdd632a7553641a84e7cd3d28066810eeab237f54b9f1e02dbba5b773fce1798b70f2b18583420ae927a60a82a800480daf78e92578e54415b8cff222a916648c498edcb857983846410a556829a770020aadf16a72818bfda22c1b15f727ae33ca9e271a61249546d0897f4c19014e4a3ae72725edd668ffe0a3736a92e55f812b9085d249e911289d74b684e159ced2b2aadd9c734e292ba5b407fde9b49ab9044b2680f05cf2c91e72d239e79c739565d9119e37e678528473115b1c7d6ca9f9aa3664ce7b3f2051f42dc173b41ee2932430e168f48227a0624bcd9779cf43d468313499ee870ee66bf978005bd9058e40f470955536c9a655aa3ea3b84aabac8f1a18c4d06de1b30258e3142cf2264a18d906d7237557f8a480eb73a402d7cb608111c3aa04d7ae0bb89ec302ae37d9faad5e2302d7cb17ae7f16828768034484a9af6f91372f12461d0273f3b5afbd3d1b53b33e280e333b04437d40a298f4fdb86466340002c72800b1a2e6cb4cfdfc61dc39d3dc664ce7a669dee09bdbb159e794afdf6a9ae490bef49ae832d0e18ec6a1964ff1d5e3b4d6d13ba4fbfec3e9188d3281b321711feb3ac43ac4dab6befa385d5836249657fb6e481cef35e19bcf9a4c01e7157d2d3e2051f40d89575cf5768c600657ed8d88b3a52ff3541c6ba525f856df11493599ad0008e9cb5fd13c9a2de0ea66b12a7ca66b2fdb42d2b6102139d42f7ae5d06d2121a10ce30c578c590cb757831e33c2972711ae423acc62fe4c179b51e1cb1249066149df24ea9786ebe7cf9ce99caa9467115c9b9ed542a0c0f57d14c15054df50f42b1ab92029b3f4501190f679814f6d8c4aa47ee596fca2d4af9a63949801675905ae6dc09945a616b1a3229130ea6b9529c0558ea00e6f9041d3a5d61cbdd0e515964137c380378728371fc5a4aad4af5412492291379d8308a3d6a76e86a94fb939acf52837afea4f6efe40936bd33b8830750bb8f6e86a78c7ecc41886d91e1dee5a28c2d4e37436853a3113db4037b90dd4610775900e6b077590d3b3eea7aebb0cc1873a573b08a881707d03755057730bd51692c2c7619857633b47ad4cf2f6ba539b6551f83235b5507d45a2b59eb33294bb321d564ae9a5b931f5317346e6d4d364376649b84aa40eabd167ba48b87eb32da4c3fa9a8ff65087f5da6da10e2b0b3b1552df42fda2385cd08518469c5558f8a4105d22c6e182264497885918a731287cd81bb7f4eb85bed24a2bc56c6ca92912650a1c1763fee2a5f6fe65691747c4da49e83b4f6dacbe2b8d2e3da50cb8df7c598bc28f14b8dfb1ac9a0db81f2718fa65de18f986c397639a46d64a57584a6969bbc4a29eb3045fbf7c9f17a7434ba34379715c1a30f8722cc2c109b194ed121f656c913b909191a1a1a1e923dcdccb762ee2b44c8dd571ba85f26ef18c0aeedbfb5913be1c97545a0769a48c97e0eabee1abcfde6cf8eaf39712535262fd991208b79176e92ea2a181a38d56cf313873b138433dab649b166db067cf3aacd7a79e3dcbe02c7b17651a1cb96c8aaf66d6535e7bb670cc2f70fc49fccaea2c171c554f913e58fe6409843b48e200f7533d6854262be3e41c4ebf585ebc786ef1f09c4279b02fae0dff18b3d7b9784683597e3ac7722afa585aae75f19b5de01c9752bed9d6a544893e59a74001128e61c0718a13cc014b4f23fae4b37c04d689eff18253525e97e894df94db94ff72b58b36bfe098536e8e57b9ca464cc14faf86ead9e95d58ecd19e64a9bbb0268f5e8a159f6530eba86336e533df409df594a72c2b5e1ba8b3ce7ac4299f361ea7571eedbc29e5d19edcfc82e353b2af8e333f13f7151bf164b111ab5636f778c1dc5136f790c12667fdb399098c72731c3162d5a7bcbe856d516388966571e599edd1e1142bfe2e218496ed2410954ec5085e441aa2ddc46a679d65539ec2ba4b74d8292b1b71b5319592c5a8744ab9ecb2cb44871d978668c7e925e68c76bb68b2e2cd5a55b1e0082e1133db465d94b59125e6cccd9aeae66325be6769d2478a405317b591f6e2f5bef8959bb5d5657ddfea92e6e03bce344b709a56aff295a8139f9d8bf5d3b3c17aead1d3b1526f8eef91b87ef55466555eadcaa355898f394cb44bb3e24d8f7709d5b5c0083ecd1b80c4591c40bc43b4ee204a9189f551e3bbf20a1b8d1b15df595676d3cdbe5956f698a3bd764462a25dfa995dc20234738647a5b911a98fc026fa078659296afd71acf41d0cbebebc095e5e5e88d0c8c0a1913f500441214323834646862643db5eb08cc10270f901cb1704905fc1065041c1b2c3320112c609033696166d4e64f0760d87660a1a19df05206f1cd052c07d13931726b07c9f0006480003e44d0f942a60142cb06c81e505b9440f79c38484d15f49425182ba4a98c4e0864f1e7a780358de481f7923a160025c7245073076754e8e5dfab020863190368852480fc59040a088319140a038b9b42737094193633f0151283d58760063e7b0930e6c18f5cfd23804ead4ab21e310a81b6258fec81f192c656430762591ae09f943f3505074852b14610e15e58b44b2840f2587a339b3dd069a2e5193d98ac83241f561bf4c5e415c69cf68b57b76aeb31d94d906eaba7879345de2a377f3a7c47c96d8e4f6131d46eebb353e4ed4ad373b00cb7b37f3c0f2c6089391c0d2478d791b36bf60ed6d7bc8b06c34aea7971b87441e7518b58d0d417a4622e906ea80fa95dd7e224876e511668df0adb418e54f8cb17d706ca1cd44046e9e4345278c88fd782512969e11f2ca9f0e6394464738fe9052ca80e3a23c82a57c3133ab4406b2eb60ef9acf3484a7c394d2f7e8307d0310ac82e3142748c2ed6597a55d52eeb2e8634ed72ef3945e4d9ba703e86397ce619bd7ec9cd89db37dea0ceae9a6839dd2d8e6a4368891a189b1400f274e62f80e5bd35edad33165daa5b1bbb1fc85823a8e0a96999572cab004394c311e7ca2844f763c8a285ab94a7f19e55f5e029f5c3af10024545690e09b752d2dfdc29e99c0276f26f0c9d54139f6249234d00302203f147002755b5a948a4f8e72f21d6582b227252525a59615f875284dc81f759aaec8e2290bd8d5382fb10fe9ced168833da6e088e3637cc52ea5f398ed773307f1851e3335ce4c50abe3d5e04c17a76ec7b4cbc21e7368b44b638f9958d1ec39e7fc9c73f6cc825e7e019c20967282f25ee0628cefb674285bb853b087fb35ce682f5ee01867b86bbaf5d62b1bf78cb5d61a55e2e6414ea63822e108316802eec71718a79ba03fb0a6416abe99c96b339b12a79560794a292d9a218548204ab449278db1d67ab5dca2551d6c24f8828cb1484744b694421e8e466200ead92d069fd39249e7340a43525f0547a3304081a288401c8dc220e4c3d1280c413a8cefec0a8e33c989d5fbba0496403ae428131dca9f0e39fa2a7deeab7422c270f33ae88e9c12f7509c95c0d54a1cb1bc383aac310a0d75fac58fea705927a59472625e0dd43f1b85364fdf596e725dcde79df36aecc439a7c64331eaf5d476af97e21e89bb7bc769d43b8bfa44dd24321ba04ebd1c9a6784f677b4abde73adb57ad5abb5d69b3dcfa3943ed2386f8e4af248776967f701d04ba3537f3a4fee3e6dee74a066c4a8acf5e87076ea5ef0f5b94afbd53df3610f4814757e7a46488f45bdc9d5f83ae4b8f7d0c721415f31bd2c5c38c317cc1d47873be6bd73debb735ee77901ab5ba8e4cb76b5b99e658c66240000087314003030140c088462b16834a2a9829a3e1400108fb2586a561d68390e33c618430c01000000000000000064060c0000bd1fc8ac5f84dc9daa1c72c28bc088466bb9acf2e033975bda129d34f00789f8bb4b0a40675e2e46774598e5f34abd03f5311908580c1b6018dff0260f64c213132c6ac173d6699b0de888cef975beacf146bd10324e0cd3185317a80d19427887216f1574651ee3286478a123697be4e980f8c9e6a090804a686d7c133c5603973d405c542004defc3981463646bde9b12a077b7364a48c4ae21263af6446a5a6796b6a1a259ba1352ab570f311f253e683aceac430476f6214a72af82d0de58800bf407175548a5b8c684554cda3ef93b4a46b0fd0c1bf8a565ab8d9bdfa96fd4f137a5482fc4d09631935586aa80afca1179d2512ea9f1fad2571551ed49e353cbe358fab689522e7633452ed9cd7d920ee6866fa49f18c4341cb2a64aa41e149512784dc260616033cfa21deac1bcac3badb78391db1a96f0495b702df78b7d033fe214445c2e242513b7b553d5f6910097c1277825de73a90b05ddae2906befc878e04272855d0048e9e27cd5a5fd96fca9a47cbfbeadf6547156cbf86f815e78199647ab6367c2a7cdeb9ece7ba8d7429fe634f796b612235bed15fcaea18a0533b65817c405720f85877e6c0b2f6a0f1448154bc388b37987b6f58c9c89414ee0ca9d0658c7f535ac9838cab2ed7db0f54c3c1e041e1319f505dda3f5c705b6894cf0cf3fd3b74736fdbd9a07b929ee855c8c3dccc7049027059db3e9d2e8c53e93285f3e4a4189f86854f5ab3d044fc6e7f2829cd2e5a7d980500c8f69309b722e60d44d86a88afb2290e44dc2a6981d749bec9ab5a2487e9c0d22a68b3d0b305eeb8294d003dd3af87ca7b58beaebb0a55d2cee5987ab7fc5e5544157dfd78d3ffb3e65c9bacc0c4c0f27d888989adfbb91b5107644b3d95b5009f4ab1afa69794de46bd74010c492e65ebc86f7930bac78cb140aa2ba0802812a14ff0120513d1100d959122d629d0609406f1483f5c02fe74e9cb68cb931b2488b828efe48116911e242f2ab98c11dd4b7bfbf07905d095bbdb5cc8d984b684a88965073838f51157570eb78baa364399996bb647b981714bf703b6e7fe2620aa640a75917fe2cf8a5c00553dcd0d37729751d4ec42099c4ba6fc433d39ee1d5a09550f954d9e535e61df2a200a8f8befe87b7668b220b0ed0a2e6688ab2daa8944f5a760f95b70afb0a7d05a6dc001fa6108cc3860833b6a3d92979dc34982cc7fd3facc79d1cc65750f338ff2b1b3fbd4b69bc51282f30445eee5d80f2150a150188e91f528f7bd8c1c41a7063a8d697941580078883429413bbdacb34a6c2d432491c44e507ac854e66053a28538703ac5443fa7361e0c400252be647bd468e0add3db18945ca1cd82c097a31a511ba1ee8c53d90f35fc6d0ddccf843862a3bebaae05d1d7a8d064d4f4798af1b20ee380254cad24dbdfb6b457be51e00be5b82759da17b9e7e3b02eeee5f96399e304d0304037d67ed4c61e5e00bcde2a93dde8acb326e64e0383bc80ce8b7225dae60cdefa4bbc6990a06423a8f67d202f18341de4bcba939835116102be4e5a46355f9993a16f1bc3beeed4ab3375efb94a16748de9a5f34e5acb522a0dcfd21a1a2563c2441493ad358ae50814b1d767800a2168e58652de7bd2d6fa4b5e2b696f4836c4553d1e7e6cfc5167fe7bd3743bb9bfc4caa19274bb9e4cb7763596d200fdde4d355490b963b52a65e6794d1ce143fac541c9ce684bdfda44e94fae9491544accadb4feefea4ef165e87bee604a7fa2d0ebab3d12086cf6c28d4a1eb36eb6746c8ca3fdcb12ba9a3561f0d42704cb9707753aaf28ac130c5824b145f84a8e5b615cd3dc13e00287ae67b35ff8a875f46c530f408e1da175e285b084d8424c6bff5ea2158cd723bb6cacfb746afa1681337e2ac095c0947861d897f3ceba77d8c4cc2888dfb09f80e1cc2b516aa2d5a56b60bacf0f96763e8332210344d88962347f858465e5814f91891807d8f502d66dd641e6b8060e9583d01046923e22493124a1804308d14c13522810cb53a92084c9530430af64a82ae8f3d6d86173d3754d0e4200d80c9513438481013d8ee7928a27a211f2b191b490998b7dc0875270a108174203be699323df2964ba62cd0d21c78033878d4e8625df38703db76c6527e148d9a8f86d3772a2d48ad43f1f5e00ac8b600fcfc4c47923d464e7c08b523c0603c8820330a0c6feccbf3b98a805226a426c73a66e5d6e8521919eec1c6bfe7ca6e105da758b82dcc796a9b646f904cff05ecf897f137b882e7082b0eb89892ff9abc6757a4ba29082107925da00de4161af2c05a26535851a57400d6b3ee7c62261643aaa6480326229d007bfb25f8aee27058ac1ae9a40a7cf386a65bf47e2520b69dffef731982b8ed830fd89a1374ffe6e477a6ed5229288de059543b1c3a158603fa424fcd609b21ee7a838cea50d244ca39e267bbeed60d3fddc52e27e08fe05c5ae462cac4b1fc1a933df8da5d67546d97a3b820ff32ba4f09187bedd54074ae18c56664b1151ec3cd66458e4e504979a36ac13625b0428650b87ebe055bc2009279d7e34c3e14b298be302a365703d1c0aa8351fe30eda6a4ef04225a3303e33cb8ad53bc888fc67ade489b1e4184b72ea92dd4d7dd2b2f845da641b9e888ec1f5c69c30e55a0a4b25933d56c909cd91dd51eaa823b23621ea7a5a37f976ecebac02869f7a5a48b9d4f2af709ba720db67a075540455af0918ecb5f43be356f8e031204e73fa4c39f964face6631d18a7dee18daaff07e6a7bd3a56395e0770cf0eb83b86e057553839980bc3dab065bc75cec00a78f820ed53df971c9e4e561266e28c0beba38d5ed26c30a4ea9bec5f3973b158da2cd7c8bbf836c07b81aebe09113d9c1e2de20905321ccd12bf2b843f04136c0f64deaeeea7ca0fc284ecbeefde2059eff8418ad0179c0ed5f9b9d0ef58dfb3e329611bf331eabcfb40fc335c1c7f665fdde0d529de98c0bf46cffd76e8f9336e20774abc2693de06cfef8f2b8c450802feec812f894313e7bb65def7a6cc4a7827363183f1eb28debd82b2834f7f90af017a88acd39213e16cdfc64a508661390f6715a80529e12d37feacbf3ebe08b52bef1a2d62381ad9c0a0df1480bed7a1a86b9b910b43359a58e8a1f3aff1cad6dde8ebc374f2498bd7a4154d3f5b69bc5909b7e80d466f2d628967c9dcf6cbf403747dea9c2aa22c6d8d50dda4242025b21f4579d851a1b5ed9817302b8a66fbf3150217017271dad0d97fff0e98715de6c50a62dbb44013719c7a1eaa32542cff7c75169e81013945ba6a65e7d0f71eb4440f52d65a04bdd5a1aa4a0f6a3b05592e0ce46ed133c02001a76d217524ce6444556b00e2b822f7e6babbb906afbe5298a481f729f1f0e937fb30656957c6d8452b2d1205e8edc4cbdb4fa700829188f357a7cab9adcd7274a45095a13cf4db66702326b24e535055302c243ffcd64ea80a1f072e825eaa46a754503d6ffc45082b65f038bae78061db07b5e90272efd5ec72566f0a77259e26cc18c82fc81a7f7bcd8abe41e06ebafedd7b82d9f89afa090c21e31a56b5def5a244dcdd95cafba9772cf33892da1d4cbda8bb114dfe1525bfb56a4863a3fd4dbb07be78d4a0063ee24a9958f68165cbbff042eeccfb4e5cfdc72d5a39ae107b0d50dae31ee879fc535ea41693faa6d102781db09c33011015f411e53eab8af96bbdbdf0055de733b25e048731e5c01a10b83d4d6fe3796ad9a8f370ab2020e44f371d60df1cd43df34af07274a1cc41d37856234953539e699b2f5b8cd5a743a94873cbeae362b3ab44e97220810cc2f4c2fd68fb709e364c71f9b18334c09835d24fa82772d604602de61ce603d5598244133a8992d47db647fac23817661ced3a948ce6f4ae2eca92a151b892d6a45b7027965b5bbc0524ed08ef587fb7fd495a059dd574983a42b5f01356e473d0efec92d6a2de28bb0df4cf81f6c1c17e07bf373771a1a63ffd6652afac0ab7c00a90c26c1c1c58b3da8b11dbe5fada7e80780e57e51b757dabf74dd044f84c302d7abc5517c1b45a27d8c077e8e408f9b701c758a0efd68473d43731f5524cee86ae7f944307e4a98208e16e579f791e984285ca6fd9f73fcced13c23a0ff912e370682c6ea098eed55e4c24fc01fa5d28ca14fcf987773d3c4a12c3fa1703a4740c2e0aeabd04ca4109c01d2815084a9d7f8648180b2bb7905c111860b353fcc68725ee72bab2b81edce0eefb0287d211720559f45064983692f496cf82f5e7441060ebe113c67c52892643bd884976a7ae677a84debc7cc721842fdfd3ec3ba77040509ce7b097020093da13a87d3d3bd6d01bb2ce66a969f5c005f5f3625704c44159efa0c2d9ca6669af83c082029e6d63046eca0a8558e21813190d504621b9b2af3bf5b2068aba706909eaafb4d738d3e9b74970e235217946b099a767b970d74b9b6168e3450d217a1e39be3bcc5c4dc6624b276b221490ee0c1594d13f9c0e9a375c926ea7a8f67d675b08da2a0a16633db9759aa9ea001ba0f8ec5b5d0be21d6d5d36b43ab48ca6163126bdf7834964937d9098347c7043a3b2e606392982cc5740b805912247ca11c0c64dd24acd4db89a50ed045150ad7c6737538f16ce7103660b87894418585e4c31e2bb411d1bee4f9d961b3b5f15ede1bd4961a4d2262e4d292fb622128867dac92a0e50f8c42c132bb0b6b183ce1098451c7a78b9bd5b3a80008ec661943004aebf324978626c50470b182c73070bd9f215b1c21b09d90221cf6e1d601c7b1d1cebf5a939f1f535d5c2d8df8beac7df028b06b7e0c9f336d272c77f9b7cbe42f3c637f61943c31a3f23b936fcc276f39384180008d3061a5f10e6f460eb0b2ea5b910f217a6414ea63d5de3a1c6fde4cb6f7411e0d675406894b2665f6a5d8100e80843360d90a5b00473e8f13cb57f5d43fd35075a478807705d022d9183d9313e8ea5f6324acc8fd732baf3449dfd7457f0881ac2dba88f5a4b6ee613fa027049dfc6174aaf015e962e61fd88c1041ecee16a27d4100674af30ba8f631f0b3c0bb2e12b0500f394108a379fb10d4305a5b262098613b01e6a946815ea4c7682736da36dabf459be9cd33dd62f747cdd8e5374626eac9fff65741eb8e5aeeb9a6a9b95df488902fb2efc57f6465db483775c182b02714684f4c8706014209cb13d6a7a4b195775477937fe5532271bf0b7e5e155ea170c82bc2acd6213d7f08000436c254530bfb73495afd817795b626b2b9237cf9bd615ab50970719da33f24442f165c74d1d00da186ec2b65b671aeaea46d74789236b846d2dc07dacb1f30a51bc434925533becbeb86168100465faa3cb864da8b465f467089a169ab70d5674c02e0e8e6a8fb424c64c8b4e34a5eb68cd6b93a4b542885f8db75e574dac6f64ecaa3c336d390b5b4cad3173fa36903b81221ef712237810213baed7656d993ffd6ab18a266d8284b4ad158095ecd43521353415928b9d92256a255b8fa287cccc93b4c6ea681db51ef1312f7b367a2f0a731bcd0f5ec8d164994a70b7acf39c85ea4617d7b3bd7ad34684a66d17fdc2a8593ca31cb38b2f6d771727c2a3b45c6196fdb84b9b2f94adc8600187147f612560cb3de6a4a664dca2bbb34720c1d41480f68458a49167f580c237a250ee13443eadfeb58b1aeb3f04c15b7527b6dbfbaa4d5830220d4501f14350b18f1eb910b173b7390bfe33343c5167d12aa00e2eed1aa5159adea9a59b2e9c464062625cbbc09031220453cabc968c5a4acd4d14b7c4a41c565b8589c9a0641946e74f0c6f9bfcde0627b20bd8890c782c0f5cbe0a69ebe597bcc3d2ee5c08a9e322bb64e76d008e614adb5b2cb526327ee7e4d16c26cdf5b35596eca03d5c63277e8c216517b232d033d93acab40e7925f49a68c40882657aa0b52ccf0781c8a5b200d73c988556b237d116ae2c25afb556754e5d0dd0e1a3b02663da161d33ad9a17c0edcd77e61a7700809ae24fa7753b023f3ed2cebedf492fa656ff4abadb94e289e8f23e491ea480745cf2ce592b265ffbfe8b26f7c888b80ea5241d7d55c9be30e7e3eee04b39c05941f9b1730cc54b6c1f46104cbd3d4aa88cae4897bd5b730f492d96d0605a51d2511e7eb5b8e9ff9dddaff15a5f8eddffceeeedf8261e129d381ff9041d873865ad650a1fccd119e90b52de74d779a996e667a1a9c4235dac1a38c11552c0101c85509757ba06ceaed2d4027b52e2327d5bf4e66641c89dd743a1b9465ab7ca9645c7202b3e8793b880a73733980630103d10dc7780c9de6ddb24b01e7b3a283a601387a65a6bad23f39c17a0e26faaa76155199368cd4a4c7b808bbfa2234902af449a6deb6b842ea33cf3e91716e659f9f62ea563657cc884ede2668f8b276c7b04c4549ca28067d7a1b637c2a528810e55a7559d3102a5dad2d6a7b45cdfc7cf0842dea35ff539f068785c80e74691ee25f4c4e152308ce3de661031d828063257caeb10a4bdb4de4397a5b15349ec754ca52d408d93991e01fd4daf6ed704a0917e20eaecc06bf7213092aee258f2948329171007c673075b3895e418f620da841b73a82b4bef2f65b39b2b3918952fe85145b428488819b8a48c8c0164b11571b3a5a17b1fc857b8e8324d92cce1dcb5805d4bac9e6f85c1cf1b6af9a41c76561969282de225839677103de2daf41209188f18fcba6cd9e4a197b242f0bc855b8a28adcda81c1a778739a3cc5dcd6a2dcde1ac540d9d5cd30ade11f1d345316d328a2809a9b0e755802f494a958c6629938b53a9951bcd50c9c57ad204b9b899b09a88354479a3fe96d520c4c146e2e8d4323db1784d22c0dd322ae359e656fab0541cae0c034604f8fc95ae91dbcfe2e4c113a4bd61e03c69f76e7bfeab343c94f6af06a1d3296d5b134480681f436051ca3797afdbad67e47aac36be0b48520d1854e5efe67d21f81be3fe25ef66897676d78f3801e6d4b1bde60a4e64c800e427245f316e511db032f29c16f8c2b1937eb45672627ab60328b1c27a9f93d8e38426195626b18cd8776b8369b4ab73614ee8b4935f65a3d7c2c5803d22844adf491452cc7f5195b1362716627b65b67291325a3abb73945fb5606e04ba1fa65351e68594d6dc1a7c2c2405f7075da531a485c42609b1ed3ce520b4b6e1e873279f6e46779d7fa24a7890f58d65da0dc4863a5587965522084eff6c5c5c9f01f250bb0283b802685f46b5794cc0e31d5bb4adef29a8499fc61cd45be98f1256bea03a566878be4aaa20dba4b81c9392a963d3a06130d12ce45b1566e9ff8a4285379e9eefc4a73fb33fa054a2c49d7e4670c08f1887645ac12e2d8cc50e965330af12102e9b96fc0e066688f435659a2e84e1c6a63e59eaf32e3cef236fc1dc2d1c26a5fb58639eaf03d64f46c31c4a9425874daa480ceed6517a46f0dd7c1caa895be02c144ed9eb2de3a0b1794f76d4c2d6e99f6fefc7d035dba17925e98c25f99806fc94239f90c93ee908608de36a8ba8584d8f58bb653649a4d95bea22b38b1602516b6007dcdfbdad8d358088a7815191cbab65672ec9d1c55a6d2d4212bb01e43b2bd276803c7d65233febb4a10f28095c077203c82e8fe8e2c7e7c9a9878296fcbc787138390001bd0c1e9c52bbceeeccad1ee4f1d5f35ec67bb53c18640064baca1cb89cff115d9c45f04ca406e0da24d5bc4407207067dd3b5b35589fd9b98167f280e7a305221733a6f3cbaffb5951690c8d97935559ce18e4b09dc4ab4ccd3171b1e24139ff0dfc2eafabd7bae16599c32d09b2a2700fb22ea879dac4b4484f37ed208fb60823fa37eb4003ace879baf2c0b2cfd3f613ee6f173d56ba30648ead07e53aa6e72830e9f3093630a42b16e8e2e901f466130f9643ad7acd236d7fd99dcb14468892aece3630b8708b922464f2c474f9b1c8c2ddbaabe95ab9c6ff26f7bef82cd1aad1f84b253ea8dc8270e081c1623492ef9962967277f2ac601214ea1808e95131a42d5896e1304e715ad3627a2818a2faffea4c6862a435fabb0550dd18b23ab4d04d8e3c8fc2e881c6c6564ade7d2e931658b1e21c5b910ebf25329e62b3bfa50b8adcf2c7274243b8166252a73ef5f589b19613c08408ea12750f6a3957bc99bb9dcb40570f191bea52820fe97f1f40ebef84aed401267c02190cac492ce380471d07d9d13a34083372840f4d517000544837328007b3bc1f2a0700df987c907da57d42665e5528995af6e0238595d3d6d23fbaa5a59c7f1eab96e323d2174d2c57075a9b86923fcf3a97eb3200061438d4bebf901411d1fce2b05ff1f8e4ca72766dc4e5dfafe3047c8d2f0e519942628b53de7994fda009c09d07793c7040097002b4cf800342da5cf207eb2ae4f992c02872e4b8b4f29386e47b374fd3a3dce3142b6cb64805f057aa6d4da0afe426ed607cf78335aeba705cdbdd53b32c5a6237de0fcc138c88ba6654594089c90426c3350ba376396ecd0fae1c93331ea5aeb91dc7b0722d38cbd88e13bb68a5832ce28e9d29379601db302e7ba6227f2d19d539680bcb3788ad9080664e58445d8124d7832905c16413735058dae448f050e25427e25c142f2a4436c862a5d344c097ba45b8cd5d1266a3e0c9473b32d9c09dfc0568d1cef33e40072c217bb078013275c82a5378c5e619e6c4b33b297a6e8de4e5a5923042f649bcff184dc5b35ffbd035fe2e4ee6de659bc479951c1cf08c5b83bc5fadfcb90432000033343100c161a078e2acfd33817cb436e97357d2f186362a0395932c5696b1d4010b8d02251e23c1fd052a5a729de558c63e1d03936be1ec8456e0e0731f8d47e5e1ec07c0cf5067642f582af067ef2cad2b0d470dd13bc6a6563edbdf84b3b17b7bad411305969b504b7d45f353d17dd2094109a5939e28a0fa040d7ca2300b252db0226a3e2a4d93310017bd93fc0405820c50e97820bc7281fdbeaee4297ab79ce4c551903f91562c74d16043983813be7f2474990b40a05e2593c831d87c5e116cc04053f9862623601f2e174eabba7e36b15c00f9394a5af88a53c5b32db9399b8c1a79c70fd7ee0b8b1894ca02a719bee0ec309047e6978eb297179e6ea1f8420947431dc4eba4dbb027b760935be22029e25177b2a83b15410a4f5fc86ebb80d361f41b86901caaad50dc9645ed13c1941b69c27ad566080a72a243a1bfb86454d44ee618b47ab72aa26b9aee4d1f3f2f18d94db1b1d15bad9f4341705c304305a6cd9d07857ac0c1998f2e74036445679fd18d4f00a7828329b52eecc99a502d5cabe6e464422abffaf6bdc99b8e4569cb0208978d8820eb42a35fee099dcd248d601105fc62ea095d11416f86c3e5cd020f61eccfb1ae7c96de879776088ac6f384b2c216b13ebaeca5c1b7e6c45cbf32d41670124a27d693ff7f44a771414e46ed205f85fdc985a6db97a0bb48e20b9b2e69f2f1b700846a638f7ad5dc6bc4c28f8f170978718e6e7d1cb58512eba8f6ef32176e97514f83f89968b627be7fec7bc5803733774be291c6820a3e0e0e8bbe9349e606bd2a54c0a872a8a9201643b0a7460b87882e1e1c69c9955431b4382db6381dee2d0ec048a3f404cb3a1256d962c31207e1b5d85ba70c77aab81843730dacc50500994a8838afb416cb8fe2167bd7c56e12ca2459b7f84b19b3062ed6a56426df576d461b90cae5e08ab7fd7268ac597c21e52f0d7e7e3dee065fe7b600cd543751243d8e8bad88b35d1d8850f570501c162c06915bfcc74f2cb0449c8e0298b9c07d4416bb07250558eb778bad2c7cb3b253486d1a418affe2e3897c7ce3fe1d6dae793e866c139fc8fee2ff843c85e23e5f9b347bf610cbc981e1594e4078cd92f9387a911a396b7616153166b33c6ad6093d2a7ba949848c3ed7d0a0762e07cd858f7c3d582dde54a20234a0e5e9a40e3fc476460eaa41241f56596847a7367100df514fb10047444b4e6853592a750badf9552f749beca00f55129a67e2d7497858b4a00d54d3307d9c677d2d1feebcc1dc148de124f9200f191da84338cbe4f916acbf85e9a7c4709d4d63dd0a321f5861c645c12eca35fe890d8d586c9b011425c87e9dfc35f63e51c9926ce77dc77d0db2561abf6a15cd27a059312a9c33cc2c68e1e854946e697d0a803ec3e302c678432b08642756c4f3cd986fed4262ec404ccc9ec8a209653d315eba6e7ccdf8258867d0cfafefa41894f354e46f50389b7a7ce235e51313b6d9d0da2ec3d83ca0ec9fe760e0af58b30df40d0cec9c15cc4f274bd0294d5f4f14662a29f1352580ce37bc0e3e463929e3817b0d8cf32c3b0efb8c8e3d4f54b92858ec5189625d932db8251d3b138a30b190651bda29bc374834f31241900761f8fcfb138022587dbda1f9eab65a08a42e5bffbdcb06c7bfea65cb6710485fd6e504439b7c0ec32dbea59bbaea321a218af496a1abbf80822a886c7a9c96fd05fa52378a1d091bea50f0df37c25ba99c2108f75a70c970c6131fc56a918b8237406dd6b4377124e02e5a71e2869750aad6a48e570e3e314d44ca628fbc1bb68f5ca9c7ea00e7390ae0c30035c509c02c2da33318f12401c84915c4bc9dd94a268a338e26e20c4a9521245f08d1d47e594f26d9a662db4dc2cf45b1c93cf85324dadde6440191fbe90c14f0530c16c1993ad48d40364a562dacfe25f4f84c07058a56d3d3944535d44ea9c21ce450c61cfe71a8d7f061b7d03c0efa2fb32488ff38db2029d2f8758ffcc5956599e421625b59da20d3d17a155dc950af3919fd852fdf76281a2f49c876a2b7ecea37826ad326c235cb5bccdea315895c426cefc7c414321f1079d9272be2c94b80ce2ae964c73fa1b4b1142e9bd4eb6911bff6ce0f6767ae756840bdb3398d8fb0b53d985abd107d1f2ea56db0f32cfa90de3e2aa5953d9a440fd2d947fb50d98bd19287e905e8b0cfce92690d7718d082e688b9709e6ba2e7f93f8f9260d31599f03d8c82cb1c9b11cb3942728b8644bc57c550d8704ae3bf7ee45208aaba45307c856bf5a7d4e83d6286ed6e4a214e64f97fae94155d76515c12f6a1edf204cce2d0d2c6d7f9404229b4a29f0c2dad2830e441576e00477a083f325234c0b271adae85f4635ee8d0e47079ede8d5313507b9918728c4f5067281620cda2102b449586e931de14e6711dc86be98ff6c378b869b1a1c09d993c367350a0ccb880b0d7ce05c1fa60cb40992cb0ec85e7f32b7a07c8fd47169c1e8430acfba879212eb0dbc78309b6d70511496cf2d2232a8ca572ce0928b23ea9af4c55b2f3f84bee9f28941c5f49fe0ed831e9ae643cc7b3c9cca29ec9b7dc5f7321aadebc9c766db690d6310cf218d0cb00b6d1435cc291183a147e435c9fcb895392997242e262c20506d039a74e11b44dc42afe244ecc18656c07690e1f21be5dc0b7c8b4b08e1a192b26c5f756b746ed4e4988f1ec8c145786d86fb53a25a7cbbea2e30aff44a7c9aed873db0e515483e2e3c2e54e31551ebd32bea72b396b04dae50a25cd08804af651fa189adf05619a62a5424e7fc9aeae20646e90429062a4245316dee8b28d7ac2bf923331c4cc77bce3ba55dc18dcfd8a9a227575b81eda5010ed8e893355a5704902c69726ea1df962c4b9abce442dec859b732bb9369cf034663e9baf459012f210db7fab638435d385106e4123fc60aaed0778d83d691844f19b858b890cd391e0a4df20ba64d7f9a5d8808cdc31b62efe9b4ccfbce4e481afe513ad15d5f07867947d1a4356c41829490f0f03dcf1fea5e4656ca5a0b07b18ec0e1e91a9fcbd5393dca41d2d150f0a5180e4488bc0cc3c5893109b51021622ab8d85ec09d84d38b899292e670781ccd81e044c1b21285c9c71c4324ba111aca6f0e4a36cabe772255361378c83de557950ac924450e98438bc45d0975a62720bc511de66d0fba34a37571fcbcad7905db6f30469e7cc2ebd6c2d53c6ca824aca12dc52b37c9f49e84b27e5084578763f685e1e9b5ea8f2d7ef593cb76ad2af2fa9ca9286d59762168da02499346ec43e077aa9da5aa53b0c6cffcee0c78554ad47009cc40e95927fe4f2304747b2a357789f974b0f324c497fbb79e0210a3872ad0a08b66b9df36cb7fa328908a95604cb37346e533b68fe0200923812cc6e6b139959701d2c3e34d72e71affd216f78c6e14e23bf38c5a10ec233b85f7195e7b906f2cd2c8c555492ba0d4b2565494b1fde628ecdad3b52df3c8488b3ff3d8917f4d56218fb05a73bc2a7514e57f7f2c3b95b526d8856dc8377dc801dac2d10ef89170f962ec8a191cc035d07c5da54b61d87077cd6ab71e72c351fa058073ace6b45e594684cf769a1e377d64b51cf7eb01feac151633177250050a57ebc6a29c9dcae161b4d3614c2e53ecc74c81011d9ad7dbd2a267a6f7a06e76444f27eecb92e137b1a02577ad1e30398f4705ddbc5cd1d1d5843e4b17477b2f2e081a7b8ecc13840a40f45ab22008577dec837a6710a642f090ceeccc70f3e49aba95b8916e9ba5cd102f97c3371c62bfa73c1a74a596457a3b59099dd3a999b5548d2de16b295e29aa13f4d501d1037229b925fde5434ce8054cda2f328c68466a6e2f12b44b326c9f98fff4e13e20c818e9f2551256dbffb8ae2dd18aae90d02390d85a1e40f72ec8c5e4274eff3ada81061547f88355c2a118ff11532d79e0d9f0d2e2169abf9be0c2bcb928890eb43bc5507be3e093a1bb86a50ce3d0597c5d32961d2c3efc853743a3631e1a2cb1e9891fc311190b978226120a98c0313b8ca1b3a1a055a08c166932202d39c85a4986e61e291311c75cbac15fdeefc8d8a22670b2d053f537d2e95f2e08cd463ad42657516b03c38df58782ccbc867c8f70d87839e0084af0a2281a0ceddbf085711e646380a20fb524fff104b8630d8a82b3e3aadde21fc6ca617ae1d5173635816f25e50e561174c465de17f630781c5d86d43e27f647107c29d0f69e2512c549ad046d05a4be157d28da5b7a363cf75f14ab560ee75a2f12d8c350501d590e6e7f4a4c2da263287ec477565e061b540fa3cfef61dcb7dbe59571d58842cd5eeb8b19cff307f6f54a9d335d3fdc4f412939d9dbe13831c128f6c1b1d7e0de8ab8582c541a113b1cf79ef01fce520b700c63c7c9a13545341af530118fad8475c9ea211a53e6e049782c6d60a987b1b27c5b9c4e560b45ea7c22640ba39a07a4c5590d52056f38b572b5a2071a2f33352161138918ddc4227207495c816349b12dc48a20d849f70a48247b3100fb483a5de0755859fe35bd92fc28bd3fbe87b3dfbf747572424e6e9405d6af34e0190100297a2c3fceb3c2dba3b01a67f84d8829339be980d46685608a36e3af1013cce895bd04efaa20e9a40be314dd57f4f5e19684d87adece45bc9705828e52aef45a84943688edcef3318eac2ecc1a4633dfc7a9779fd4914a517e49ae7cdded77e89e7d7c32f06912a60a25a002e12f2303f26e440fa6d50f528b22c15fe5ccadf9ec4f81027ff00fb0c740c74543bd66cb79a5e522461e9366616b236f41f7038e6931255788d309c68a35f1ea52997f9da5598697f301f731c3a7a109c8b5b9392d2769883b5f0ff86489079a3ed450f8c845b7672135f4342bd1e9d6b4f0c4a76e806f9054c3a854e797bb0a6f4a4273968b155c8c9c7a9945af8509337d0c288f998dfd09457317a02b17a0b68dcfe50e6e63eee170069215125dc4b88e8f434dcab0f7638e1e215f3ced959e5443c77de678783245376361851eee780eb9134ce54d493b3255d706c82df6e3985ec9fdbe28e09d9fc7ac0db63b4bb2d82c8685a59df0758ce4835e5418054ad331c9dbfa11c5592e656a0bef5e00cfa7f5301ef55c725e2867da8033dd41eed691a19bb1b920f9548798eefb2af89349841110e93dd2295ea10fa10d00957247475a75854d3797f8bd298f98697a16fcf961d6bbcc676a6fbaf1e5b371572d5c9d4b0038737d714a21f097e0b32da46c681abbaddab9e0994d63820f2d1df5d8686a0ee905795100fe4e942824cad8ee234db79d2dad2eba3a61b9732b673a38b20f1fe9a8a7f19a1ec3fc57b4f92291139c7cf6cc6ea521633e85fa11a5dcf95ae102e2f9ca622e0b04237d2625e8130d6be4f58f347acfdc730f8224f948abe6df0f58beac86d863ca15b9401f2c6dd76198616ec1c536b2d7940f28f289925be88c3e76fd640a8ae0dae531ec2a005cfcf78088ab94d75d3b58d796ef75d7c48ec5f54ad3233c74b73baf09f98e7b722097452ebaf508e966c7b2066e83341a4a0c78b0cb7994fc41bdf9be23f0946b85c622ab652e5a75a7b376b259c8b89650b8d6bd44b2c8d042ba806f5d52f4814bc10d92bfff4ab66e989b5faf6a68002c86c83b76803419e14044ad5abf5dc543d723099b27bf12649164e334d90c9c0597e5b4197a243ae6ffe8c40ededebc225899979d54d9bc49fe1f3ab2641675325247826e2ea8f5bcef8fa52ea60233779b18065a44462a6284004333f5125ec8b6aced9af3d6706dd9f50f1d696f71b16239e97281047594f049df809ab724b65b6b01da45ae570fa03865f8e6798ce8562a106442de800e835ecd17e0a86b4885b5237770e226cd9fe5ed4b0a4e927309e263b4801ce323460410cb717c89723a20a43b9e174ecce998dbc57ac174ca9cc276e94879d6589803ac1c13d548225360a84a2089a225df5d6c428c3448a021d6861f194ae9faae16d896676e23928b4d42b33d1696e1fa5ac892a5dfdf26825e9565f8d0ec0261bb98dcb42fd1b2943d2de9c3e234819aac351ac2f20302180a4db37de168b97d9d012aa4bcb3fe872aa58f02d9a9f117fcc19685d06ca3dec4f2f8105e42120f7cabb38f885b1cd45acfde0360708ba3c737920d0e6eb1c1e8e435cd72b7888764f87a5ddd7b5ed90b913b19cf55f73fe0c0b4b953fb09d5a7db21c75955fe06c301707ba552bf9bb6524b4d556da1874397cde0d7427707c3daf396e5658eb3922fdc1cff1b1f8f40deb8e1f557574e0c1a9a742698c4c0a79866fcf84d1d3bcee964c74772c8176de3fe27fbdae7148eff58485deb1f2b1d10bee29ba653f50b09ec3164802159114d7a665e0d702f5334acdd714902fe7484b744ea5d22bbc6a3905f773d150e4d9af37b54ef1df5c9bbe06705b4a79bb34428ee846af935dcc131da3607753b55b3ef6ea9c3dad56aca480a9bed07c01d54c79523fa92119d3a370c3ad96612ded595f20a63a12965b22bc023070d8be22e25141f5e7e7b52629dbe87471fcf29cf4d0e5491214c0e34c0ebacc981b0959beb527428ce23978f667b8e17a91c226272fee8e48efd194d52495f75724f1d480f9b45275925f84c09e2484c9bdd61d0585883ab356d927429143c7cd3ef362e21de7d60ebf35c884134bbe49e352e8f54ee68e2a41197250bb42ec29db782cdfdb023561861f074c2076b63871cfe3e9ffe4467dc9eb2d93fad0b731bc10a0d593c62c3d01707e6be7bc03e7e37cce4995dacb7be06400efcd0df3adbea655191375fc54a0bda94f05b6016238276070917e3ad1bb99718adadee5be5dfe2478067e11a2b93f421c2c4fc78ad60713d9642202f2f0ff8e3d7abae3f6ecbad4a6c8923940bb51b5e9a48b0f7cfe556b9bde8e49fc28940a6aaccbf456934258f60d77659b2a1a9e4b2c54cdf12dda64350d7e8ae1c271ad0f3e537281f3a80163ca249c46c56924829f6b040ffec2e4fc24d20c27e4c9575a8e8ec108b6b6b1da24b6894395f0280ecec5173a645350523ee0326ce84a5c2bb9d383df33498ba713cf2fafe72695654456c9a98f500021c1829c15e357df82e63402341e08e38e78bdcbc2800df2a167f0f1747f49185684386d18975e70f36185dc00c3e17e656ad1ca6420b6b1d531190aefe731dcbc9be251dee1051ba73ad03f3f8f1147539858ae090e721163d25993863f1bc85b46925b9a17a05266f069a8bc28cd3eed2702ad21bd081f6bb38d5ffd833364681d2a06582e80f1e970ffad848d621d1db615ee690342f7861193edc7820ce7cd6e07f34707cb9ad95225324b2b4b5f292cfba221c3a8cb8501de1047848799b4cfb3c8de0478df3390d74a6823882f36cf694d6e08556667b44655e9f6d759b4ea6bb821cbcf140a848c9b16aee5205736a8eee9d0886c8f94f7634cdf3d15889e9077830a3a2d13fe982c6f6957bb5b2387701ec98ffb96b110b7e7078d7ec8180e3683247904bf6670131a68be507bb4c0c7ddd43cd56078386f05f1ca3b41aef110e38a857f4fbddf324aa8c85cfb1da21dfabb1048d6941f0fe1e0fe2afc958f31941e50d215bee10a1665cc855d9d055d2d3a27aba39352de191a898ca8438b0e31febdb27146afc9d71887bc72083339d7204a7f14396f218944bc9d8d40dd5e965f8c149b3a135d2d5d1e10f7ae3cbe7e6c2c9e512379c9c30eb840a54d2ec9355a3a5ae7dcc12050999cebed2ae0cddb51d3321b7e2b529ba0277ed18ef94635342a33e0849fab46cf71d8b2bd078e461cc6769333cb5c784d1d4369b2d4fbb87a1c30f2ff855e740defc47670823918db22645bb80c9b3afe50791aca46d20d97eae468e2b63417b58d8317a353c0d80f552dfd1f3d0c6a2835a266096b21839537446b89509c92263b31a995ad1ca2314b9017dff218265907dbf9076f8422b73232132509ae611bade4736939ecb14d91814503df693780f55f899f201a7e1c707a69512ebafc50a3c0a7695d2e1c7c8960a156c43f45a417c553edb71ce2a03aff616772436b3caf9768548af637c2514791980822cc12d3a7d0bfb8c26cbca09ac16cb1b05405c2f71f03b383d0e9cd3e65a11f7adc66617eb539b5875f27660e538fc1bc232c98fe9c8fcd182938b79363a11352641fb1b2e5e193dc310d6e982524cc76b1f5d9cc81cb86db320310c1018cc986f55a6c34050fdf1624c24612d673c370de0f6af1a69fd9f4208660ddf59175840228d3109f9afd04cf514afbe8d2e2c86ebedda359886d1137ded51c1e2f8f76108ef34e11b0b841da0e8d590e9b4ff5f500074ffe0b15f82cba01789a9e709ed6f6f8d0b26104003b636721846460fffd1ddd1102831d66c35a10ce1448a7b7bb636a19772aa94073ca18b105a6c4209ea5ff47b3960d0592d32309b10a7d91757785486468d2bfc49d79053b81725bc84c6f1a14bbafb14b57ccc4dcb26bc2285b8fad044f64091cd736de3a29e23a1aacffb3ba67b848e284c939182ff18533822f1c7c13d4c5ff7577274a679d331c36c9ab7433ec5c06af4fcff0d4bcc13f211b20f23d0900f658e1484cfa2636d2591aeeb22bf09a6c2ca0de8b4d057ba13b75db6f0b29cea890da1c113397488093e2dc254aa4d91ff7c3ceb6f43a6c29a4ce48013faba1e3df39922afc04171935abbaed9d42c3a9fc7b040138a6fe84bbbb61831cc58d2c7ccf5ef8bb3cfb790300737762d691838bf4b5c77e755086643c8236674a3cb26e4b77e8e06874c05e9ff433d92253873ce1b49444ac821c37cbc5c4ea5d041b4133c844afdb11bb8820889699ee3193e35e5272ae3d45d95615ccf7a32bbe33fc651c9faa51af233a02dd7d17eebf50daf58e2373cd12c859d7fe8b01d5195f165da980229a6224f6a358ca274601a0d9866e99762b519e9cb2fed8575f4dd17fa04b870949b6f1bb47039c3a893fa631827f88ab7c8bcfa4c711564c891e93064e7db31deda7d9581ef8ab8f2d227803188db55e38a4ceff2a957407f5eb3d8afdd1c826c39a0fb7a717ba80607d75ec9e917594fb616965ecc821d1bdc3bf71977b5ed3286c02b0e0354fde30d6b0f91135ee18b152bebda8f83bd257bc3a8fa184e421b36773db03a0b79d1b1e424d79db5fc97e504b98fa10145fc222ea711b4959258821ab20c309da78bd5e1d014d53e6a74997d1076697c313eb1a8876864d3b366925bd7ff561c7c1270ee433b3e234e0635739e242056c0c984d0989c1c468547a18a649972a106d7207d8bec4b14b6b20e8019f3110e6f3801e356522ed472f588cfa0619fec6794262c528b9e3809f0173e702cd7fbd8f1526e8a23ccc82f2b71d3401f07812643740cabe294a41282b729c891064356f5ee408765d7fff217ccfe40c527b33ce7769a8f89cf4da310d02144a3bc329d42ef2c26360aebbc5ad351dfb6e19057fb5162a3fa69b18046ca612608d17cceb59c3c90ffa86aefdba650c9b362add2ba17f15b7c2f25a21992e888fcab428f141f7a64da6ec49532fe0071c5e6bd17745e196b3cf026fc2593f05fec3959309fa8c837dbbabc40527e9eafda0bf14b0a250716d5cd529be05df11e42011d415771a87c8c7d5d3b0b0f1384049930b894a3b96b5f334f94edd3540b615cda5e22a064a2d20b94b8130576cb8b9f2785d5cd24f927a537ce0ebd55a58c6708806345d2acb5b6055891a1826966cebd35024014ecfd322c4f034daf208c22693ee07fc494c7535f1c3f2fa04c4b26f34d38811a7cbc5be16045cffe244422a76dc2780ab30d0519e730312e6fe0f1c26e28c24f5dd2cdb8916db4584e8d3d879b6b8ccef1abe21671ef21bf975aa8098483f1a94bad565f545a64b8157a603938331ef5326eb268e351a59adf23c096cc94c27e86e65c2c5322a286fc8eeea5e176df5f9a4059f3f78d26e940fdba87f99cbebfea2796a6b5c50b9e694d7fee25c9633690233405294894ab8f06a6ff34e369937fdea1e5085338d49428789dc139db086a94903594e560ac5046cd428b16b034ea4dd15a8c57c72c40c3278a94649ae3ee7db52c9662bd0bb1ad75c3044bdac2a49a5a0a0769be17f956a378c5e0418c6a043640048c451210c548605a8ef878fedb72fbb47e875a69f6e6bf6b2023ec0ebee5899b9630e3142d3a191a39c8c79d734f10bd5ebd9b4c576ecec75a3d0b85f41bb6693aa7a81125f8ad1ba6fc080f37908e8dfc16aff5f258437b8bc455dd7d99fe4c0066e087090a110dce062295f90a4e65bb2b72c9866e8bb98f7bf300343aae3dde9c5e9c2ce14d787128585fe2d204ad4eae1f075388a922cb8b936e062775829107989b6c9504e690fc9df2515c0cd1316111c72919eb793c99bb52d48490879ee9b69b053aaebdb833cafb8056d3b3670c550873985324f3d38ad71cdf3badf9f07e5ac7779a2a8f25c1747355d6e320969cc658a02da43bf5a0b6fcbfa30b0e91719a90a0020d1669130255749cd098444acd90f6ad12f7fa9be9014303fa69222a5e56f26d93f27ea0087bcf86aef3a684d1f325c9b338421c676e93c6f46d7a0be951a939aaff261a6788e4f563721343dc0fa696ba6dd9d16910ed027b5abc1ac0eb5c2b782c785961e489565b958b8058bccb578433337a858e843e2479defef818912130f06a942ab5a3c5c56825419d6b97196dd0ec31438d8063ce29306b831b6e506cd9cfa4677e763d23a1ca5c54a9ead342d4ad789fbc32f317c433e33d19307ef5c51909ab365ae2c4251366d172f8378399c9a0ea9a4dc425c4c6808ce714c4d8f0b61f5495efcbed70231e58264c1a6729e2a03493afeeaa72b18abe3af08321575971265e663178c9ea8c62331712932b7dc67dcdbf5c65de3b036d276711ddd0264844493f14fdd72ee3b5dd3dfaa1dbaacb84fee49a0234af69eabe38c44111c3aefc31d850f1a008e04e558d327f25d309d46cbb4aa2fc0e213a6a9a60fda54be0cb66a8685b56c3db9b3184c8fb110ca10311066a665c275c13fce9a704e1ce66ad755df1f0c966d8c0d097e64d5388a1c6f45f341019a32095a4c8e921dcf9a07d4f07439370afce985f99ba4535b3b29b804127d596f3cf377c7e138000958bc929569ea5fd7569e696d4c48f82d0cdcb394ab7ccaa6ed0f261d640b797d628e649a938b628a094a1ca7e7773731080fcfd3e2710665b53590017dfa2c654b4f247f108e6bf9a9efca6c4b556eff56115b70c18e496c8516ac74ec1ab5a7b2a41399a1048de6539a6d56a59abb57d008ac9f46c90bfecac4bb368f695a97d1cc99261bd5380e0d94e9ca04ab5263fb48b4b33ddcdaf859605213c9bc58340937db52638a5d2da91b3052c8206ba8ac97c86bd47b6e87e11d4df1e481dd5863546740ab8f9392477eb8a642dc1fd2797df397515ff63507b8c13343edd9f3dd5ae606cb3041447c50de848cfd317709cb048ee290904e034b62b48ee99443d087314218720ea83a59db3e4ab394a4e292b05ab6ed1566cc913c106584bd563a83ef7fb9fcc80d8662f1eb08579137e8e446cd02eb651cd66357e3dd59463d5a84e2ce3b81f173826ff4e0aaf0b40bf590d073217fe3c557397fb590e4cbb4e28b506754679eabc4a194722348db902bf6a1849947d5268c70d7e2a49fcec6c3fedf737a51e16965cce8d5d84b7a63160cbdd0cba8261be6e6daddbc872a7ffa32fe598b3b5ad0287676643a3912cfe32bb279388f9990ce72cfe8a806d850d38da9022c27c6a7e68a82afa50fbfba311d1f22e67e5a0c59c76bc7c5c9fe8f93d90300fe4fb588248a08ca175389e29671c0220ed1874083a4c6f23e8b03cffd990026e4a12ae1c7adae29d95f385d0100d1aec215c1cd5c5a866b800a997eb8559271b8f7e68cc279b6b8af2e50ff8bae56312c9762597fec3ebfa7ed527cd166a22785fd51a20a4bf1ac5a0e770393132c5c05b1bfa4625a01e17a32e827691e841c245135263ef5faa07db362c44269883fb7fc342ee371f040ecce0a213e172fccca272cfaed3737388cec71c40e0217f465e3dac4999bc61bd4f07b9d159584316519f691042b9c8772287106eeb6f49ebfb62f8a89a75f0e9fb3b20fb86a8113d2dde9d029ec3dd0bebb3e2692728e1fc603cfb033c780392e6016fba7fd78ab7a5757d3c3462c3c84c87a58fdffd50b2483b5200d81cb423d6891ad5854c14af936b3be5aeabf375f68ab28f51bfcea246df790c40dfd77cdc06ea5368763e74bb698d3961671c53141c96b3312093cfbfa9de4eecd96ac87a9244adcb80ae9be9266e62f9abc76e7a4c437bd793f3df04b4878ecb6ebbde828fe5f9a1ce9928d96d444774003a6e308f0df4161f93c4550bd8f0473e2f3e3b30bf65f59a0bd7eaa0ed83bb93b9b1a0a2aa08e2a0a41dad1efb8ec1f8ae756979ed4fe69cbf0f58e1522c01ec2d625852fab723b118de6530e02b862c068c9103d0d49ae7402e168de06fe69b70d04aaeefc51a5e0345150b46126493e208c1e4c1727b83deb165261df180ba0f8bb24ad07b0fd2feb54715c29f2b8fac32a8e9c7ad77901e752071c7686dfc8e8c23639d0e37836948bb8f0746a490dd1d52eb12c1bef447e664bd232e9aa2ed07f147ce100e445da90884cece830c3c21611d974815971f46f428b0c70ef4be606fc865775e316172ca7fe92baf7c0a1e941a76c7f7c488e1f91bc91aa3423553e396c084f107727aa4949130aecd74cf76f05075b6380a4d4457fdc04cabf4958f5f6d40552f7ea884eabf46dabde79b5f2f724ff74c65459b66adc296de5b1b16a7be4cce3f671a5a7130c7405c5a95a29b342e815c06d4ba7a8f3ca3c5ba43ee014c4f2578a038ea116c26e0388f0761bfb248c1b8591cd792f5908eb06566f1d28484bfe94cca3f25e610ec37eafb601286c4fd383bfbbe3b57d38d97b0ee9d234b2cf0bb77168414839906c05c08d058215c95ea71d077467a67c7f8d2bf674d2de9654f62e3ca3dae23dcd3c5a90f4079eca116a9b974d2cd124827a8b3fa426bc82a999075d4b1f2b825b99eac82b3855be189c1061e8e7f9dcc16b0ea211a7abc8446ae50f6cb1b7f43aee9abb8970cf12e57a16f52c7c2f474d059c3d1718ea8eb553f0b83c22d5c55b19b52a04f125dabc6422fd1da6607479741a4a15630798f08800f481e352ba278017d41b017f0bc6ced8f8fe696ce4314b78ede7ebb2941c09f4c671b5330cab58a23b1e23f8a3a4554616e8c4d37c7d03715730a8f87a35a02c4d739bae0200f21f1e8a7f6c5e67eb6dc854a2dece4330a32432939f65c7213bc9e2f9909da94f8f383129b47ada4b1c5520875afbf906dc7ed4299ed99c63120a98571764e40bd9cbb04590c927d1c09bb97d817247fa134d02d5dc04e1e397b52726cb694ccec2a76f02a375714c3baa5d0f6cb8e937950e4abebda8301e82d21fac1300d04d117bdcf346a54116973320faf5c569f94a835ed75d2790d4a42b93c3ac38d6514ba65f68000a41f22a99a1564663c528e3904f04ea9d579534c626f135a95f750ec4432ef8c0ec5d5e02a0d9435f6e47140c961bc784a26774a2107297abd1c6bb49c64ced42ad985eb8a38cc960a390b4c4b8eda25319965b923bd05717dddea70154ecacf3903dfc425a062277953bf3828fed939b81329d1d18ad5c3960d078cdf7b5fdd76a5f60598fd4dd3f148b3b19db63866ae065349f42c562db73ce38b42d0ef5e0b7bb4284d219a28ed847b09eb8444356b265da987835e023215fe28d501c78c22436351bf649437f09dafcaba0a514a143ec903d3a324c9cb9d1ab721b802763333d32ab9a3f29fb60d34269fced4179c1175cbfa8035a897dd503b987be063eac38c849f455e3ea1db418e796f2b8e5f6a0c6b777d0fbbd8bc43472c059851f9ae310d55e4ce182e7a8aa67258ffa67b1d972ca97e62443b5c8442300cab84a4f65577ccb19a816636ec89c72f9c5b1b51004b49fed4b69fd00b1ec2fbe7f1d17423a416f833623b30c0af0e3d98dc9acbe72eb63099ff85f30a03a7b0204674e71203b380d70ef8a65485412172a30ff60dcfb924e4e62e70bc85bdde20fc33c7294c1097b7383aa015f5c47b41e3a2fe87d15632e6d038f6c24161821eb633d607e775ea52aa775577f5081ec0ea50d109cd8ce734b0d174a0eff33063534973540aa2cb7919bf4d3e550a07f61c6a6f65b79be265211469a8f5a70936706677f49fffe4c3eaa2abe18c7d156e9286fa7aeae3f5228d4fba67072160a09008f10a930351186fa2bc62f396aafcd0e1aec823a47958cbb6fb7e8bada1cdfaf7a54371b13e78c12e08f5a9afa19e7c5465c772aefc55c1ea5be16ace4f63648ce56415c307a544bf99ed50e19ce5001047699a9195307287679e67b53a71fd14a5a8acc81650fd297759807cbc4d916da82ddc957b1e094e5de4a6788cb7fba5e5b8342afd6e8c4cf5cf874dd2dc4378f77f2210051ac4e27c870dd1875521344825ee37c7b77d8049e2e39933b99b95395d1fd8ffc3124fa80cd158880a4a48ed2ded29bf38a436e3d1c41b154712788df6e8c8efc5a1bbf908a2524d03e2012a8f3117bc0f5557e1147073010757c881a6d46cbdc686d7e983ec2af6abf0da0659f254250853a4da2c9b7227f25f916ec3b0ff9c62a00eb9024b0aa1851569313e08317601e85be2fc6f28d19faac1ea577df377594a9295e703dcae1f89a70e79efc5389bef2a53cdd2c065905ce3ae488564391b128452ee65efda38a9782fa22804c8cf38a755efd8014c0bc004ebf3657c02d1485b2866aa1f75c79468c2848a106de73ce2effd3765d203b63aa9d589a7b6fb22b7cee5ae6c82d4cd5086c1b88ce38b6431f2707b338b02256b29d2e1f59b2c463a840e8905b0229aeb9b7fdca417e94b632bb05171a49ea32174a9347096bfdf04207c2a671b24596d4c2e58183270ddb0d7d0da9460a3361cb01668fa23a56c4f035144558d18d99016315720c7cca8c6fd2864977ce8c2dcf4137e5b81c111339f5889d8e016a1fcd48da3cc25efb282d48f737662922f57e52179a2bc5da684286c819ff42a09e609468d2eb3caaabcaeeb0eae3afbe2e629f9a8f6218c44d9bbaeab259922752714686b32e731a2fb8445fbe3fa459ccf4b9201f9236e5257404184ed598b018e6a21801f086385c9195c1f205743c70fbc6951e93a11566c4c2e3edcc6e1c79debf2c033aa05bcc6194280045a842026bc6f7fcfb88d45433b180bdab745e31d8a8590068368a4047cf56b49a9f30cab60e7b0fa01b8a02b9fd85c107a4082d44a096601395db77403cc7b138cd5f4139ea099e0904137c3603c81308bc92589b0c269a3bdda233fd450c0bc971e8f8fa01e3cb3ac76021c80f359b09ab071138d3fe238eeba705fe3ae6a78432e0a70b18a7443e81a57397842130c2aff0b2c1fc3b20f12a0177ae09676963d33e0f4a7a2a88839afc59244b588a4489d60489ea0d5ed5a9a749bb5b35490093626c6fddb07758a610cfe83b277427f288c8e31f61923e3a32ee3a78c5bc85393033ef4654cbbe0dd81c9814c121d82030a229d171d719ab5389b1e3abe9afadc42c38647f99a1cd1d703bf63d6394d4e4c538faef086ac804797e6ce54b40d355a694baf424f43a23d724ce6b16a4d527c7f9c8fb60b618a3aa8a6e28e87a837155f0d14c2b52391ffe539c6b0596d33df5d7074700d106556fa5006c00f6b260f82b949926f5f539584ac36832e1907f118c2e4b9b0c3b5bcfea61b43206931f5e1ba67dbdd3012a2fbbaa2165e5e1dea32932502a1d6bc57b7f1a522320e5d36f1fb3b3fd92277d5a22d664302e35fe2b38d69fa4a5c3d43fe04b80ef448f49bc0cf6faae12dabfe76366f82df57f2b15f90a4e80a362381b3c482bd0dca7cb71923df6471f8b0275dca8dc3ccaefb862809784c8f51428a9995e24c289ea9a5ddfb3568cbe94361337a926563f954d0a18817d549039bd8ce2b3c2c55dbf81f1f0600bdbef77f19dba350b3742f9bb201d6379253d8736b4c08de8d291a5b771998983b0c3cb3b7692b005b9eedcf8c64999e4d7f436bbaf2fe178f13e1c03818f8979ba5e7c14387d5715421423fcb3e24ea3e2ba46ed8deb93d03863adcaeddebabab316347eaffc9090e2e16d56d701416826d65bf8e547dc6250d0b721b1bb38e0e5b9aaca395763133661a7cf624b9b715fbb635e05e3df6f4b1b2ecadf4389465dc96655f83be1a639a58f6d9f555e97733cbded2be6a8af8e943ce52963d46fcaa25660f2c1c28967dcefa55ff79cfb2b762bfaa82c82cfb75fcd593a2ccb2c7a8bfea04f9e32a378a65dfc44c0a268ebae59979705c9310d322fbd4f1c337556896fd83d50a03a49c657f3ce33a963dba5a7009b3a7e9f9035af6cd08f917552a7ea0af25876d8132911da72ca15549150567178bf004db2bcc809e2f0ac9162ba363b5d6b075c893315dbd348baa05912b611ca340ef7253fe2d19e01695225a0ab34291459400b89da4f7bbf909b7af017e319fa124489be1aaca5643d5f0bb8e5f0ba6a8a3655f6687b5703e9090b6b52e9ce1b02440c639707745b71d87088a3103da5b8db500b44c3b2fd112ea116a2fa90b94a8427805cafa21060e1518e995a59fad8df2a0c93aabc5ece2449cf1ec3b8cb5b614034bb1f888d4654dff82313808ff28a0c241a4ec67bc1bfa65489a32a8b7fda187fe3114607a5146a8954b79df8fe1c884c1ad123e4feac53683cc0f4495999a7381b92e1ab6ce288f41ccbbfaf92c95d5d921e72ee9d04662d0a1305028b8446d64056e377a22d67ee327ec37d9391d899f7f6da58b6e5b49dacef94af8b9fcf7a10e9757cd5fea61d3adea03586205d14b6df479d9c9605f87b4575e82b156977ed061acff766bf506ef44b88ed4da779232fa9f478c0406999f8bedd01351d1b52a1dba3c4fbfc248403e0bf8eec298f74c396a728a0cd22621b7a3bb5e4518ac8b26277e00c32faa1ffaf2be28865e4b1f5c3ce2b7407ea7fca428ad849f7d1e9ae644551622d0570ba0ee0d1e99fbe9be1fc65b158943aa59aa37c0f3de9aa5f1c45df1b39d08c28abae5e0b3bab8873693a7d05f2f65f96757f9a8e9ffc0cd7dd7d5983c4042588dd22aa3240d26d15004da11b409802b112e0b82971c38982f6314e4bc45c7631dc0738b2ee80d146775d5471fd4d45cdb698feca6d177bba045073a77cd992f46a320cf489fe0c21588aa13f505604644390d7fd9025102409f848c674024a325e1185097d61692ae4350ce6395ac3feb2a191aea66a0073b0706aef2c47552b1dfd62d6d33c04f2288640b71d2687a3a305a72be7b65220d0e30c4f16a31b4b811d00d5fe0068b35ddb200fbb9ee0901274c2cc7a35d449ba351dedf191f5df5a33521fe8812738f6e517121c909bbc64f1df4406709809128e63ec10447c8e211304290c478532d284ad95ad1eba5a1cd1b3380601d0530f25d0330cfe6d0993a9d1ffe66d65aa27b0fd13a4c55cd33d6bc1c61d92fcfca50455571d0998aee8250db431487c105cbae6beeb627594fc1d38074ac70e5e60e48bc26336e87f5a01fdad37ef3b0da9764106b0534fbb56a2c6df1d023d491588b95642ae6ead6de960bcd27072eb4b7528b6593b687419aa4b7e0bc5fbbf531a451a120b006a509ed78bba4920c891878206cb26d3bd54eb63324a0c6903529bd1366e08d315704d440cff33bf313ef90a5ee1cc9813953872b9ee4e840643a1f67ac9a69c55cff10a04c17e2f50e441b489b5c806bc0807ea2e3f624f816a42f96c6b16cff43e52a988baefcd5bfdbc285c61a3feb911190aef47d30152c13d9812e35cb3222e4202e6c8128e380d9e5eb7ed4e4b9e60b7d6c12f80463e8cc6659b84caacd02bcd3d51bb4ab07a6c1357b39a2d80b44aaa32875d4e00ab9321d5e20549537ed4135f23c6483b8f2d5d0ac30f59a1060df3fcb5f9088bb4abe17680bd68664c87f6a261846938a07e6b1be23621ef3437bc7fc91838ada0c69aef63155ca02749a05618ad34f0eab188e8751f995930aba19f5e96ae56106d8519bc542d681f6334626b6a7f2748db94a4d46e7ce772e66b28e67b03e6d5ba7bca5aaaef38f5d3de1323deacbdf59c706a92ed717578b7b415ae0ef8cd9094f74ebe8df5934d7421bcd7d0d107a25a1c976ef381b51fe6487b460e22e7c020e4d6ae7d23ddb0dd1e9f412c0b12a1ee9f1ad699eb9442dc95b9d935a71bfa6f07dfce642355d15df8a770b13219574115a710dc8794b9b028f8d5ff27978649ca0eec62a23f58a81c37861823ec4ca3f19e84f68174e43506af63c2a99cc62f52eb63d1810293fa821e49777e8f97463cdb9ba9eb8f58ce0d2b0a62a286b338a9fb51344af305b45955637cda3bca804f3da489029399e567d51c190d72033bd9e1e914bb20c4ba8a116843c55741f5aa6e2842ab98761135cc9c8d983a314e879093b284f27f485f3d80ae7f339eca3833aa99f9855e28b2594682d73c6d5298176b1bc7a107b3f596c9183ba8f5aebda463b0525bdf152aa166664a2b15e54d78dc2bcb8f307f5d593559159d48f5d54e42789244fb08472134143e27bf093375b99b8cba6a71730f0b2c27dc7ecaaa8149ebdf379bcb54e21d8198e67be87737e9009b09a6c9db01fb5825ea7cbc1c66671596ceeec302d7184a8ec250ba32ef083021523943846f0ad378d834741efaa8d2777d693a752b11923fa98ef90ae19e99c14673009a0bbf358aafdd42abc6b18236f27e41db1f5570c8ad24bcd3f16ccc6a3bd86d08a2940ba638f3d611ae998f0217780e459d5a56b8deac18b77af49632cde9b4cde01255f229dc34bf93539eae5b3c4d70b50fb33e1288c279796cb4556dcc41024d3ce348d5ad24b4d4471c3e1fa1e2b4118f3adfa32525c64921be92af033c38156413ff8581d80a97849a7569ced3427b0a51442b60bfebc9696c5b828fa5bc55de2430775fd4eccd70d77d94607e6caa05fe50b0457bcda06fede87099dc0cd70282bc4317c02e7fa849b81a585f8fca25471b504cb7aa96802b7b3a7c02efcbce15001db22bac9a37aecb4028968847c3846b2278fd2521b8c2a3cc39afb3dc8747a828848b8e411ae403dc34cddc24fc0a0bdea2c4f41326cbd12c7552dd9fd345f8723347f0f9d7eeeaecfd4f86f6e8097863967958e554f85113809a5e1044731f21ef5855029e3637857fb416d5be62e22b94cc28914f4ba2a08c1f21112488d238116e58b366184413b3fc921bddc7083de771194265ba4739d65e17d113f702a09833b8a2ed40358b73b9e375142961b19ced9f01ad389ea0a53659c7f6f805722cf3f000201cc335328f258a2d65863c00b3dabb26f95435d40560a3d980193e0550c4347b6714f3c4923fadda5729b90f8e5bd501351da40aa8439640fbd78a9dcde3f5ce60382dc823b5a6671bb9266dcf9d09f562a4323e01ccb7014de6be5b304808e95f60113000a83b56925111bf8b538aed1dd7f770219a351c731b708dede384b44f767181783cd80031e39f8247238eee8eb70c3bec611afa495cb3014e933f6baba8b7403d54f1f0254e7b7caa78af59c5829bb2a8cc3b0ef413833227077b647ad22ccfd124bf3c6ebc64e2ddb1034c13ae8ad0aa409273500295e480ba866f1162906a12f5012ff26bc2f50f99519942f6b96a3c26f8c9be9619c44e773a1d163e7abf5054ec6784aeb05b23c6093fdcdc8ead372c86a6106f6671890a48375d5d6a3e0ab0f41974969b7255d305c15a82bbadbcbd10ff26549819a49b9c2f929e40cb2c3031d41c3489dde24d9c0be6c2a7c68666d437c361c5effbacc373d1cdfa1cb9bbef54d26c0da05362d4834ef7d89d795f8f397aa0b46b06baf89cd886f6a2ef1b243dae45d5672998697bd2b3d14c8d5033425ea4406e23c5b54d2a0a993a3d1c77f8417265a2f4bebbcccae4de81e0596345ef22fe6c7b3c7d0fe7d47d8f9a0ba2a136076514b5b42344f276ab98c01f582b0a2f7318a01eec8bd1f3d77bb2cdcc77f5771d5acfdc4dad80e269b273e418bc1d1599ef827d21c5b5dbb5acce66ecebb322b2190bef9eb15fb7755cf7bb1cb09719255b0501810ae4eef09b22b6378d4d38a079ab41f1e4bf9008eaf3894208f58dc78aa0584d6589ba482e078cadd6d246d79900fc2b386bff3630bfb63856fd06289efea2fc4c8692fb34fbc3ca32246ba70a91e715c1d3428d3653d2a9b2f2995d402146ec1e6c2649f60d5b3b686899586351b59d2051197ea09857202a8b92edbf4189cdecb67cf44f89039b4b1b700f5564c2a0c600a5d44ed3520a28299c6c31a28424ad0f1b4e78a1d644dab08786a0b0d656f618aa36b181156f87ae4661d348a6d657261c00c7cc7fa11d786578a2ef4bd4ae3a9cc777f7fbe098a7d669f39aa0c2e0635989b77121d4f2ea4e7aeabce028d315c4eaead2f9c242bba866c13a6e013fc5f54f3d563e24e1981e1e23c54c337797231d6dec1533d450b0662f2ce642e05e000377f906c7584750b638fd5ec772d77bde2274061a783a98cb8fdd3157c8e0072047fe156dd0c2a468534c7f82e4c3960e1b2bae39da7f296180c7b093f19dac765bd6eb22a784d4099249cef021bf5170693534749e4e863df1f842c58a654d7d293bdd079ed78cd0e96791a6dc5fe2103759ad6305813d2e0e8ee890145207b8ad4da7bd5c76aee4a31e0986f84e0f0a953d1e3faddfec3e9d5b0d66874ad343dd2207fbc7295534905ea5866268c75cf3ec516f031f00257d4908152490023e5d81217368cfeb00f197c85d417abd820238624c5a45d906bbf1b84772de1f394e6827068ce4453897390419751888e083c7eade8002d7ee12190e1effd7a7fbda706b682f4605576189fd29ebd081cb2b3a66a1a0f11e3e2b8300996b4fae06e3e811c9a617ca925683f3ee27884c7293c980bf3d50703b71c8621f85e2f83f607d453bed86c2b0ce10ea722ef033c11ac603dd65c481c6c1fe289833a061425c4444d035408f4e36484aeaeeeb5b6cce725c8b7c24c6870b591c86c44bc1e477549944760d4989d77f7da5ce742dcdb45a36ab3d9f0b7fac1932d1544fb05431363b61accd1d60e1cbc2f64fd2dd9618f11353001b3ce913eb79122fbd996448ed6a47f58eb212941954dc4b2ba44a3f2b6141edfc34835a3fa81d0c4424628c8a0dbccc74b080bc04b8049c70f98fd0cb5135329cfcbbbfa810e015bad3d9fc42b1d301c3fab1ff41518e9a97e207c811d0e4800f7709d3f48ede125ff1c387b4fafe9553fbce5cdf2f8de365e5d8d4cfe7a739833f878a9b47647d885b4422b4c12ffb8d55e5d05c8d9c982df4f3e651de63b0cb4e4f7f2024c76c8563fa40aa21d11970f245a1c1c99c3393e17bc3e70839adb1696472c5a72cbbdf9c3baea8778ff7c8aa192b99b98f83f0dc887ffbe28305f82128b1fc90a25d6843a8b66268f84e3f535a13651d4c2c18fe7daa8014a79f8bbe961d7cbcbc59f79edf05d87de6a30d6fb9ed8eaae322ed75d2f5ae3502239b73bf22fc93408c2d0fa8f1d4e63a235a162d8c031636959cbaa7b4a8a220d93edf43cd486006996a128f388a313ab63419fd61b3d111f0c8c3266ed3cf3d1dc6505346d2368a242d7ba7de5df65bd138151b952325e47c5169367a115b7608df03a2daa7365d9e5f30a200cafb8467487b4db66566853ed6133d9269c4d44f138b90d00040867d2969873d95a5c5740801c079ddd3972c21f49feb64643fb9b54bf930088c21ccc75a987f56360df1df689200fb4634c8e74e2a9534620b1d6c98ec961aed268cd4b2b6c974e71ec0beeeb4cd9747809a641e5015b45ecaf0967950048fd7b8747762bbb29ca5ed4e20f2861a3461c0414a54f4ac4f09fa2051648c1da2e0b793505cb9615378234539e06d35b3e5b630b48b842a19b1f8f9e03647036d1cfa16151a8dceca5ea3b409c1970a1a831cf8c09c9d62054812becabff2734705e45f3bd2df2550169995b8bd52dcdc9d7fd2e4ab2c08deb6ee16d729af89164f98d4c213cb797b8aebf7dd2d5b5ea4f55163760ab0d1a426598e0a347ccc4a8bd0711fee1ba181d93be0820e7252c214fe2bfb57d653b218b49273f0d32563bffd83db7793b4129910dfda1fff4d35ca933f1f5ebbe3d46189b262e05eb80d1a347f8e53cb1917936237a6e09221b1bd1da243ba3f825fbbde45dd750f44c82443c3e6ee27b7a0811fa1eb72c3acdd10a201b3218fae8401b7524c39c4eefb40b09bb42561bfe040b3d7c1d8959199a015d5be846dd587cd660a309e406d4c04e4ae3338c5142afc3de7f4286d09fda74d927940b71d17639bbb52dd2f887d6620230a2a561d03460427380eb9a179fce3df503d0a3e8263acb1c663b7ef45965c49d277ec7e2fdd9bf4f29afd05eba4f0742bd71cb93a2086b5d4c0e3af6d11c369662851a8dea838a7e5766f9840a37015306ad2b55709116a99fdcfe5f69650192058615aa395592bea6f1f16dc46e76a08c513edeeb0e8fa4470c936f62f335224e7f6004a31d59db4553f71f3317e095e27837a473003d11eb886da085481db87fdad5d36f0afffc6341c0b423d804bfb6197e13d015f8b55763eab376750c757fbb9b90d244b008f5134608ff9d2f766e5e1d234a5c4d6c4e6fad212fc2283e588b87d68c2e3ea3900a1c5d7e42b7d7d6a7973ee62c7448a0c5921172b53d072b22e5d9a6cbf0b61fac9c5f87aca5b2b0d4d675776e1f8c7acd212eb967ac8459d48d46f85b19a047acdd37741d7856fa2e5c5eed0c45c7158bbdd90ecc7085727b33d572d575fbc6e25d085fd4071c1724c4a5d600aeb58afe6adf0e3dbbb85fbd0487747b646ca214aa1661c8f55673b114cf8428a04c94726e5f384279b81cce5f12acce9d9d32104f4e4ea97fced0b001ad7a53aa8b3325bc4c500ec7d8a616eb95612ac084bbcdba89a75d38fb00133720af7fe377e48ff774fe0806000df290894de8afd4c1b8fd632d34676e5825db78c20807a3c4d4440bfc4974c6a8254a528ac565a36ea2a62305fea401420f80e278fe728b2fb65267976ce303e8cc46232c8485f90a7504c762c647c0e5c07647b8cc5a18d7cdc98badd99ceed841bee8c2151584496e8d2ffe32c19ab31507c5176fa1dd3014b5c52eb0439d74bead4e2bd8282d58b93f75c916490b4dcebbbf4c5d07b7ac929017987f0b44768929a409759de39c32dbaeea9ba1dd3c7ee604ae26616133f80e3a3778e9b340f342b13c9942c636361c0bd9d6f3105ab3e68416ffc5b0eac2ac393be7bf48a4048178717f813fca12dd758053069d5373e2adf9d2407d6a4e087c7b746ba80b308698ead6004386a15e436cc897d597111bf25d439d1f012fe416fba6ff969973f78b65fbfcc69c6bf56df07218ccb98c2845da1282af0492e7bf287e45731ec104c5280e32278eb3fe7c04a50b8da5a37cf35287c2da3b4ea56a74e69cef9ea71cc6dd9c0d0190a52989f2673ce7e65fe42b90d7dda0ae031a7633d1f273a6e374b4b91f2b030f5be289e640c2286cf980cc744c8261eba173e125a646e2587c5294a613b6d8d3eb9c2e90ef1133b830556de61d0fddf91502ff5f3682a3cf8db82d0974c4dd76bcf12a0f2a3908ab5e2ff9d838556a47a3c5bec7cb2ef20b667069b1c4d6be32a1eccc35bd8b17619d4c8c234d787a7268342ad877d95f7e94913d9ec56237f559b557c7cd55b87f5bf81acfd020a3bcf1e7b0a3cf68028169653830f252458dd8854b24a2709f1d8f346495507e0c388c03ad019ee5a4c4143d9e2590345e2f2a3bc6ae040ac078087e58113bf1182bb8cab10e0fa1d42a5f811513e35b18a1c043d0e544de966b49d506e6d0c6bc75fba8cd6d4bcca73bc462bbe1edefb882ab5d60d70fcebce9d33f3d2c502aa7a30ed658e90e64b849b9203377a5c89309c28357f16d828076f3a37dfddf6807cc4032935c99c73c0d34f53e5eb8f0d99f1593d71e2955d3dfafa4aacb191e2c1d2e2d6a8d9907bc65f40bb63c7d84f7e057ef20426b1acc0928af3d0ab70d9979905bdbdf68f2e497d35aa5e1276205ca1387e358d2269c00a3f303b01e9e552c0d6a04b364f93de4db985e5c7e05eb35be42746ff9578e55571d71cb9d01dd49eff19e8a134e5b877da4ed2b0a8812522cd23b68af2c18b34dd8a6a43e5e77087f031dd2ef2785bd97e3ff9ff28b00d0160905eb62fc5bcfdbfe99b0146833e82707addb32b5e1231320afa8b321a28f61970aa0a2d382b2703059ac97075748952fbdf6b91b31880964d20527e74bd8a181a3d92737439d269eca12a4c2c283efd58b4da01f4f3f84e4d95dfee384ff6a20079cc35031240a7f6203f3c0c17eec3cfbbe8aba3d885a006b884984c606b03c96b6198cab2fefb07acd83dd320f975b119868588843a72ba35de2234ff778d1f44d40ff229f0f6649f8fd0a83f56023797946aec0134194447c3a1944fd60ec8d081082da9b036c07d72d8acf238f607334ff8fb2ed27291ebf042366af0c61f5504fd2e8837067da8c85e13e0b57ec5b229b6be828d09d5ea411e830825867e3141010da52f5c8742c5c8502d231fb8bf9d0fe4ad39522654b7320e8cfb864e60676a386dfb931ffb07010552cb3c6a150d894982d8755f2463bf4c386cbbc00276b75b18d9144819b687a5080033a55dc172cd4ae6fb0541b3f62c1ce5c4eaec243a4535166225718f6f96a88b59e047abc8246a0c6a86856b1d5084eab8bc3297da32272b7456a4f21f06745d2b402f472a18c8ac05d566cf60c83644af2cbb655339d6d744057d237561bbaad2e2810d2cf2880474ed1af9d126584e72bcdcc3fd1fa73ea7774c038bfa4efd44f8662534c2a381736424fc00745c3d84c281e33a9b1c16fecd03fe1fad5d2133ebad4a9f5e370174e663d8b455c411079f1bb81f6a00a863e8106b3f05136907d4ca2dde92c492301d4e4ca299b48b13c0309706f832163f8bbb519294b0a4cd13edc6368977d0085dbaf99212519c48d09b7b5681c120daed7d9a0ffa196c1db83ced8ef2eb1024d8f4633eacb3687472080e50bb5377a831d64b035ba128342783d98b426f3334697769f31b6fefbffe1fe339ec74e9b28b5f805f55bdb107e7c39c42996531d346735f0d21392531c06e13a52c7861c7d3e24cd7525400ee17edeb098814f68e3373fe2910d6ffb9f3b8db57e48a09d834916af55f712ba621bde5ac77a7356764114fa2fb1b7b9c696c46d0ddca4195ff2ee6adafc691a276520eac5e04e42304e795f96c61b16752a1cbcd83ef70d0d0d110dc8fcf261e4e51a01710e68a569bda1751c630227db40dd246e62af7d2a75c7ba28ed7619653a6a444725d2b68394002937a25716f6924c06fc7adf38992a0f286a16214d43665f0337cc80e00465ba31d28576203ecc03d084ae00be75001c2aa533f7ed0a18d7676bdc692b00c25957a9e4157d64922ce22d0c6ed4249c1f9b09e729120445bbfd5f9c39b40cc26425d68b489b82b330406a4e52af37794cb6c639fb4f539c3d0b13e689eaf0faa6d7869135394b36a243c60431d2294241ab6a5188b98c6e7b256a63041d59ff2217b9da9b788c4c5cae0eebaa3aa80fe1728daad4f1ff299a8590a2b553066284f6ead55c25b707b661a4e6d2e4647b365217b2bcc8c14ef57e4c9a62ab2e20ca7b34d99b0ff1f30a212d72558926d50a2833d19c05941166895d605f7e5637dfd40bbd7913d37f7bb36995042e06e42f54e72ad1a72f8c58e7c6a82728b090827d3aad8839bcf3d1ee8f7446fe6520a2d073a365eb6eb15dd19aa83a3ac619fcfe5a14faa5c8412301b266b14cbd3851bdb8a8879f4c304579b3abc88b747ed1c46b7628616e9fb1b6c83cdc595df69fc30234bad61c7c75f8acbedb6c30f47ce3b30111e4499daa6b5df3029b9e099bec5ea58c34aabad77b40b040d43548bb879c059f5e1cd6f50171b9bd8624e0c67c9a6f554c2aae0da6e238f91b409a71bad36c5373e0298f54496ff9a8fb7f72af3c2c30b2e8d1033e647084a1da920985ead2135f6242aa47e5f672ea027889376106fc96e223cc74c341a46010191cf67840cf33a436b6ed8221bbec4b37786792246e9dd6798b71fcdd1a3a14e0783b23defa05cb80a22b23591a87e7c6afb1ec7ece9dc6f20dc5ae0374465d66d7399456fa4e507f8737e619741b96569fea2191f7434e62cf91f97f9a698d592620b004d179a1b849f4210dd9e7d02fb0b8e76ab6f427d8e23459a569a3dd266412d01c9239db9e699e278f398b85ec96234b89355dbd90e91482746c85da166aa98fe889f9558662c7a31dfd230717c31a3a1269e3b0f6b661724df6a30ad2b755028726e51b82af6ba47a64fbda2a6199d4373732015c369b53a34365c84eccb3ee16fb9a55c878a017e95f6a7fcce58ba59fff223d4deca300d9f1ba18aa395a003c121ddc32de32ae3e72c2266aecdc1c89b601db41170628401dd793d7085bf6f6577787e9c1c06c293174e0c6b94aa72f42c1c1c7d129234717f986c901db827a11949479d5d3ff137641d40fc48627673c6c15f22cfbad05575af15fec8d645a9b06f8e23cf806a88d60c94630e854475bdbdc747f4fbd338e517eb5f28a2e2b8c4c94a7959dcb579196b40c51e039306b19de79a570b5e0af53983f73832af4579e84dfd326aa60a9e381c43633adcd63e56a2287b2b7dc00498d6ea15a037063003d02bc5fce3415994dbf2240342a02388c348e6ea8b1e762795d39a19deafc44babda0f0bd2050b47a11b230aad544a18c45ad2c9cca305123e5e6bf95178f73c90b4d02ac8cbc3580ba601454426b48f970801efba182e63f77101a0a07d017cb342a386dd79ee34f37ff86beeaba05f81ae5ab83b766df21b3a76b0a911da97745cec83f736c6bfed53377b9970cda933455dc9c9ea3069fbc5c31b4e4796de8354a6f832fd9ffcbe4f32aacb632db2433dff983d7caac91ac771bf91df82f2bca524bd1b37aeefe06f833e2353ef67a07789be318052e2a8668c89907a49e7eec1018665030e82486fe8c9860bdc9973435cc7e838f62ce2cd82b914c476681b3b65e3d5fb91dc450d660ae6e30f82009a36d44cd530a91a9f322781daa1ddaa1bfd0671f79d4e060f356eb17f48758d004a5cb8c58a50968d9a3d03b03c2df2668a764f5a975eeaad252facd51dbb369c45390d5642eb434798c0fa322eae48ccb0ab99dbad8a9148419fe024e990bcddff3462f42049de30b72f26a35e6ea028ad347b010b1cc3a0c4254bb109cfda22fbe1c96856aadf8f9da518af6e3ecf7a8a4166769de161120693248ab7696a6a6d8fb8cb5c7b7e3e2acfd61ad37fb08022b053b02b2788adab25aa31402b5e51bf7f3532b797f9e7aa87d839a2c9d14b5a3c8cb53fde7a81e6355ffb81a8edec52aae6aab8457acb296bf202079ee4d9aad622ea267623dd0b79a8930d60d3e7243bcbf779d0cd7b121376b42e09d871311e8a9d0c482025bddc491d41cefef99db9a6ee978fe8b94160d527818eb2e62ad347f119dc7e69a83cd6c5f50d08e5ea12c315dbc5097fd6330eb62f9d4cc7c816262f84f39fb2941a985b2ee3bb55315dc424acf9b413b5f1016df0586c09b064d47a6fe91264aa841cde5090edd085eb26765ddaa2c5602289111bee0a0088cd77a12ff4176a02a1a9712661378be2d66c37efd96a7c43489663304a30f4c0c4b4ef8a8df8146830e55b9517ae608a1292b04c47c98b6737ef30ffd87aa38b58be0b92ba230536e66c5a07a55c189c5ed0299503baf4938025f9a2aacdcaa2e024325386a4bc417f2aaf1c2fa105a216f91e10e6d5e5de1ba18a8488c656db9890a64411c365cd3ff4cf2bd024a18e70b77453c2c0eaa989411cc4ea0f82f822a7cde89a26b5752f1708ce518cdaaff1474654e3658cdf2b5ed6453c525fe69d3f443bc50a7e0ee911680a42c6bf82dd0ea3c8a104e11f4d11dceac62049b63ff634ba098823f589bb800a7bc12bd56950558a620c6009f796d277aa029b505ca4205ba7a6b6cbe2130668dc6d7347a1ca30d71f20c4ba9a205c397c5ac456fea379ace0b9043fc165effb0c460d7d7ad56a7a11ae201e5899723c9df6782bf08876838748f6f4278288c8d167f9319c05b386ec929073254b0eaab0f4f5694a179d2422885b77899761463ccc78c29de448334ffdc4e666e0c0ddbb19990d3be6c1edf2ce000b70c1ec0d663da465980b63ee6bc30da28ee381ca9248dc495a03155c7aa2a464bd00cdf4c16ae593801b4222f94435bf0b5ea356e795c00adc8bb424f5825c99628dfacdd3c00370c4760815f32ad2b74d94b95bcfbd67446c84a204ee6b736914aef7e943e7402cbdd3f68ac93b43e8c0ec6aa41aac62b0621996b86ffdeebfad8c67a2627952669303a1ee8145dce9c0cb166bf65ad01511c2b3d1351830c5846d31773c49e10b2bd0e0e2444d02734b2181628127b94d722b7c785c8c325b73d0dfb29315b1869eea86f56ba3712ad979a17764a8438d04ff5951a094f90de691c017e4ea9f91bbbaed10f76ae022b68c1aa2784750ac7e8ba9ae1432f935d27bd20ba4fb7ac224dc5729ad8ae0761315613f669fc4b44047e37a6c3f6e9758d322e1880d0e78b93b646ab08298710c4e7376603336ea70ad677a7af4bac776d053c09c257b44a192c06bd49f12ea53f7d0c687516a3d58de4e760e8ea9174879213e7e0afabba849de435be3d8f479cf99a9567b1023295365fc70bc0d10ca47aa2d62cd5e4e0d3e3903f0f1c6d4fcb8d56ef1ccd8b1578e074a305326c0ae052826f62eb68db3215d2d65b264f66807e245242d8389d879b14a8fa41089ff293e7fd17ffef61111e4eab26b97e1f8a27f996817c7eb18b368b8336d85f50b765046e5ecc1a15df9cd35f015160e20390ba9909d64bee233d02641d544b8c7a48120c0c68e270558afd42c578b2625062b142e053feaa3402ef99e99b583a96a0d88b8fac6b31f4117bdce833883d6a6c428ce00bb57468a3032453c2b2b2f9e41e8eb0f9554a301a7d3eddcd8d225c5dc1d6d81d1fb114d5ccf2da85cd1c3c46be3e110b8336e712f40ddca4fae146637ccac0b5bea6076a93850f79294b1007a22ef10937df1d90e17c5b75a44038c9bdccc1fc5023ec9e07e0b27051b0de8ab06e4ecd8aed5326104c425f0d4c7f89f5182b948c09589df60c8601db9413a033092003ea75ac36b688d5c7568fd50e1474cf28c150ffdad505bce29f00da64df203dd7d89a17b298a2752f7c0ca7d3cbbc59953037e0aec4f2b1a9d826761ddbc5a2b186da3e3ecb568561b7d99e58965d95389f81c00eb85378014643fcfa8b7371e3e984a3679e0daedea4278dee2f21d0ea2550fa00814d904cb1dc0e3076808311f22c7f79553af10b0eaa9a42bf4e1d7a14d59201251e0d2aed0c69ef979426e5ea68043cdcd260dcc26fc03de496b014609b40d2850034159000d53ec61fa51e6356d1817f283ae2bbe76a0c88a2550bcdc216086964ebedee85c84c89e3dc5ff43e070a4c725d1187e9e1c128fc3b03ba9b76825b30d859a5035a53f52553b96f950cd3dc6d96a95928cc10c083a1d4eb5341846622b74617515dc45002fbe9d8fdd2137ff240c100fe80afea2903ddda5d88336b2976cfee2300c07ab9a4ae8769b899d84dc8de7b6f29a5942949198b08d60706083d289d744a97b400fbf8f1cae107a554524981cc39e79c735e0864be8e68467bc80008b642669d42252755a840010cae24010aed8313294fa7ed51af0f258ca40180ec9084fd67574ebc7a28f8c04bc749e5c0e8c412223cf7d0892552ac98f2090c74df277ec0a40a52e8380523953353bde2a9f78338a07407142856f0bc3c3c359e78c1670fa13ca104159291822274e0042ab060a2080904e182953f482999d0011340f0cfa61cc73baf12d854d0c44b9c1414269c3cf710ca932946acc088c136080a65052aa8d34281020694524abda35c830bb2fdcf4e2a2027c40cb238220a13100911d14460b0e05085e85013020a4a98588942054b78c28664a9e0092835a0a2062e21f448f24145104ebcbded01c4880a283aad2787ab861c2e55865c5668998f1faf1c7e20d13c60031cc48009187c0005366c96b733c0c100475403371c79421121b054200950d8b09cc5db191035a1f21584135685163dc14a9b51202e6d1ab958203b2409a10690581506d2ab9e7b82195b438eedd51d5198a2b7992ba35492d8b631783200e50926a8e4c0062d3892840d8bc55ba415c458251cd12a1034c415231640410996111796a42794c828950cbcf4a434882021747045164d8062c91459ae68e26dd38c6634731f728aa459e6a23201e9e3c72b871f9ab5d6427932450a5c5b2b64ed14980cc900092ca83284650a446f2595544a6b7db0d6b6e0ad5112586fa51162d8c78f570e3f2495544a6badb5d65a6993585a6badbdc15b98b799dbead64a29655b6badb536bb3d2495544ae9937de8a0d6ac562f7a354242135fbf7aad758808329882068a3002445211362a4be1eb510bbe3a210426be6a36b399c5a803e915767b54206a7dbd5e2081a40ac08015858d7ae56b855203d7d76a2b03f12177e054b4af24581f4269c2078f81ffe08b6314a14508690e362706ab9db5f2b473ce495da316bb9fb4b74e3ae71112341843275f50105621643e772fa808af9d42171d3a9277bc0323460d3bcc0b6487a41c4238c53d9ce2e9d43f2927952ca5dc81534238c54280ec40bbbf09218410421b685b4d0d9d2fa81ad7b209539a6b1efd6b7887237349421d6d42e0539a4bee46c6c35b79a5acd4db967091a7883dbcc33d35e0f00ad5aae930a7f4d5c0681efa0ca4614f90c606034b71a7faa6551a2f14d52b9e564d1eee7e287a0dc0292cbae936d288ac786391db451a5168bb2f91463c1204d499ce2ca6a1d36391275efee3991e8526f73d5df368a000606a3ac6533d18533108388306a87324d2a801a5a0f8ced973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cf39678d5963adb44bea4a6333e0e5fbe301de6f079e9f3c3f84f0aa3454430d2458254e1df5e3d0163b2820676dd7d170ece70a73da9f92b51d0e66bad44b3ebd52a98495364eb10cfad9b3eb90098fa62b494a29bd5a29256dd9b2562a25ad7c7b60f020c1173be370255ff73e9983537d03a73ac6d8835dab5e0f4e718c396ee8c197a78bd3c78f1cdd4b1faf114079ebda6ee0a9910056350e57741f8cae4ea1b39f64054d746800c929191dd688de32c69e555822b82507b40d7c9e62f69640d8e6247252d65a5badf03f691c4e75333333c79882618096d6c21e06e09d86d103a31b1eb5439c9e2f983162fb17638c4e7b20953576eec2de3a39074e7192901d76ee8feb8353118a2e6e00c60be19df8eae1c3ef07915247dd4727810671be52939fae31db80cede677b85f9d748fdb23f3b0b552a1e5e3ad00e2fa7f70fe04e1301a6a64f29a64cef7a85552555c94f8f49d8e3af87679f314ba23200cc0676332aad9ace34e8a67f19959fae7584f34e68e1aa4b7ae11de832a2c94f875b07bf1a289c39a57c2f3d5178e835b6a5d713657b7c18a589239620e58a1331431461812baebc80081c40410808524acc4ee98a0106142317f4c0e81cae21280122ca0e726084136cf01368067c98796864e589af0f8d9e50041e41085a810a7ca0092c8cb0011056384208218410420821841042b9c5383746a2c37ce862844840246016618442df0bba1861438804440222d1c578bb18a56c182144628b3136124840ac0718134d8927303a1ea744b82596c0c518d6770f8d8a902481a092021368454eb0a083810911218269640529601847982f1d25a9bcf49493285e7a0e0ceda19113231be048dee12491e3d5e9b8478331f0748a7554629ca1ba224caaf5acd36b33af175acf3c9b6ebdc9eccd54f6b5b202ed36e86522dde17439a59437b2752ce80b8e348101240f9bb80096cf79d8c40570f09a89a783d0618ac60ef185086598019b3095e027e38b01461869f0105f88fed1c08a2f441890462cd203ae70f0208d8805ce401bb853bbe53bfbee6f8f89346294533441bbd18848f185d836d4e8e15484b91f1fb5600849bb4291c656a93d1d19dac01047865490524a29a594524a29a594524a29a594524a299ba84ed17dfe96680afc50db67ed8daf1b91ec73b743a4d1ee1f3f0f91468c125f60c51869c4be557cf418630ba04ef46bc547c712a380294e4df1d15b9610ad24211ae15b0067c4a24823ce2847f8e87de4e28a8f5eb7c8e170e1e2660a37373652b0b1a9b952534313051a9a165068d162e6093333282b28948c153232314e888981a90206e625e9e5c5a5092e2e27269c4e2d4b6869e9aa749d490926532909a5124705c76d54b64d4382a66553641976040cb352585b8d502b2d02a593083fbfe747875246016774f710e00ce6280438237ae56c409ac23712c5d611ba2e72d2f9e65fd721755bb7755dd7dd6ff37e214d41429aafad6374c5a2a329f1284a14def91a0082970e4f45787969aac397a25739fa6a8efdb6b993299c6746e8d8e58d459c9227ffa43c7938704a9e3c9e7cba6291134ec538fd34635174125ddc484845af29510a49a4ebbce576473e410cb163cede2307e6304abf8177e475c096a3077bf2a184f01bc7c60227b429ac8acec33b356244aa45e89022d20f88404515481129d24a2ba5ab57d64a2bad94af5e592badb4f2f5b3be5eac17ebc56af5aaba5c2d57cbd5fae9d3d5ab6a6dd74d9faf5e5556aba65bdb75af9f4ea75bfba2ac17eba7d356afa88b51a8ae6bbdb3cbd9c52b6f2752cca767198bc68c9bb164f0dc8ca5a96ec6e24caa155c2eded19ef02ae3f8571efc1d8f1f7bbd5eaf19388fc1bde0366c0733612a578bca5d3ca098e55538a69209be8bc73f83073f86c78fb55a2dac0503e3329e0a2d1dc68a81b15c30960a63d1e45c97138d073fc7e387e1b734566573ac0c331ecc8b5b1aabb239ae6697896919f8adb53606185ccca066bc87adb5d6c6c50d4d0b9a77e1f1c7e0c187e1f57abd60bc606353e336dec335a776e5eaa950e3e2c6e387e1c17fc1e3afad56abb6008043e3b97bdec3959553595d595c592cbc68a1c255c17b98057e0078f0713c7efa7abd5e3a2dccbca0ae5e65ad564d57ddcfdaee7e28d74fd7521e500fac77e1662d47a13ad8fae928ce8628824efa97b17efa64c1a7674578b5824f67226b59f01e4e79f05df0f875f83516b61c8fdd054fb6e0c52b299477f385b7ab3cad054ee56875495670163c88fce99a6a93bcc31e9cd1ce902143d654cd5854cd92e4d4f494079f8515361c4f05ef7a90559e37ddbd79e34db7a199aa19d82a99e9311ee4f9e25df979f220ab5a8efc2c4524d3b5263fa7634e7ebaf5a6d14fa7de742d678b1cb717a14e08ba76ce503dc4a0761185b0586feb5d352baa8034b83db2fa877a6529c3cf466b44f771123b81230d764a5ff0d46dab6bc7fceb21202098dbcae9b0cd56c095bde269fbf0d446e8e9cbc8448d237e9454a64b5241621074d33bd22449939e7a8b8f123dad4184748fb9a534bbf2d9fd64842fb04ec5aacd34ad62b666506a307a6c05d67035f9ea9c44eb2bd1ccd7f23152ee4692cdd9b34454013909ce68224f692775125b49e21475fb812ebb4984dcc6e6d5e3955e45ec7ed65ea1be796d85553472f1f274303a09d2968d53997f9ca451e724b6629db2149eba96d9ea6c75d42bfd5a4e514a6165959ca0411c8e359a42ead071a8c129ea3cb688eeb3aca7310a45562c52ab177700c23becd485e8d8b9c107d288115fa04e3d079c519d422a1d0ad52aeaa8578c1f7cf42b309228151a848ffeed3c9d82838d43920888a521968fb1b1082189d09b64f44027e5b58df31de83ef950a7a543e97d2da76010124d33c9e8e2c629e83836c60d1ee82da3eba48cd1061ac7e07508623dcfa6924a4a29f5cffe4c67af1e8d0dd3d983feeb813a90c6878667a7e1e5f438e3842fbdaf07222f5dde90cd40f1a7f7d91f76c897c68786874ec367f94be3d30d2143c891614f2a45a60cf1a987507a20c5c3162dca47133831ed8071fe8c4ebd6f7e900e99c33b707b18f4c33e79f0bd40f1db87c4efcb3767c6d03979eb7609928f4e8f7ce6d44b10e5673c8452820b7c755aa377c6ddc83c73bad11297f946a9b665fc335d48fcaa7d9aa66d9b67db8538af799fc931d74c5ef34250256fe3148cf2d63b2ee2c85cbbd0835007ea68ae51aff3cdb39c822d4e3de89987f35974cc4fd65bbc6f9aee17f443e443a8835920209a7fd433afdc8e2c723ba26bd4bf0d4a13a2bf7908e504575ee39865f78b4eafcf8ba750929082e3ac43e842228d39399cb2de4fbc5ad07fd137a7dc8dedc6cd23e414844238eedbacb44057825ee2360fe773a00e9029bb7007f56abd1fead51b72754637c51213e9fdd32e39b8c119d3a1733bbd5ffc1ded9c4fbb1c1283668c2b88443ae8ed91fa07e78540a6b78e810e3a743d8d4f377521f1a5c71b23d489fd4a40214d28f22e3c940113909abb417fae0fbd128790f876087f2c40f7756fc374a0ce2224ca9f9c0f3bb3bcf01aa103dd97732313e2d40d2c5fab3c06c50453be2200e6d041a3294b3cfb8b6b10011d349a72c4fbd709654995a74ba63cf5269040a2711b86b5400caaa4f3c0836c79e194f58884775a7046ec5cc6a43762c7c6f97458f52e12f10ee743bdbad65ef5be99c3a9969810516cc5fb45252fa98c47c4cd4b348208b14ffd7bf128c4a9214e4704220ee6d5ad2724bef5199378785f2f3b49eaceb5b879474ea23951afb44b44148d88a2517f34823ad2ad063a99ea2efeb978da512a9dbaccf428837249a4c978f1086e07cea3648c514dea93c36e71d89d4317d77aa39d05eb31587b78f393f7d9ee43b9789f8b9f1ff65fa4d245a4fba250c743f285bd97db7926d7341839329153273b28858e409d38d4e23d6c89ba2f0abd8cef721a72b93cdde97efd43e2d74be3d359b2fc541712a9f7f3c56efab4dcd975d3042d073a0dda0d745603435dfb178d5e7a34d25c7e11498a1da2dd66a063e9fca442c83b703e2249a2790f5b0c305107e00c20d343a853ef179f89e08cf8d23124bcf33113451af025b79e9dd621d18b4a8e78f94523709ede241c125e71575697b1483aefc48f42f1c86b301bb37f33716e9cdafeb37293f67ef0c9cb7a2dd49112cbf3fd1800b1a4a205fae25321fcd4eb053aec07e8a7c647a7d045ebaca932046157819d345badb25612b50a7a07516985b089d0fab2cd533675d73f85734ed910da20bae85db79164711fe9e2843e612dfae9f0424e4979822ece382784944b4268f68896f9f8f1cae1474572032064c94011581459c0025d2448055752c001258250c41092aeb8e28a0f689648071d564d02914107b8b69d734e6666664a293333333333333333333333333333333307aa06e89c73ce39e94c9a3303f3c290c105b8d2183c3084e89e1cae1a724c4a29a574ce397d504a29a5015a1166d9e0e6bac909b80d26d6358b55eeeee8fd58c79c25f0d6eb2c59de87afd666097acbf1607fc9e110c0db0b24001cd0f518eb31d7631728badebaadd0861637e9b58d76f14ee4a1d9558991f9829a3c3bfc52c98130ff7878cef91fce531a7b253f6ddbb69d32c7ae730a26e9a05b078acf797748ff8f127721ccf958e3fcc605c29cf3d2c7ae794fb3a94f9e8bdbd0c267bcb91bd5ab8dd3f88ddbb84673f29b04fc89e606c66bbc181b4fc66bbc17a7f1be1e7f72c8b538fd00617e72f825ef190feaa03c1d382f739d539d8279f1ed43fa7f9cdcc5033ab9f3768130ffe433e79b3327243e6bce017d0fb8028b2c7f721d82fe747568b90cb0452440e4bb3b64e63337790f9b2e84a94ff3d2e6691728bb497e906e643ae60f210c38b4aaa30d8944afbc1d875ecde993cafb03ca8611e9f4fe606d183162a46b1e321018c14407341003285a367a80484ab03022450a1e64c1c406346204b6ca47afe6ed5a055d5e54aba07fa85b2aa2eb206e6d094c72dd5d35b62e6be69807bde27c06efe7584f3be6b17bf5ea4da7f035b9714fd6d32914a6e84af30fba4ca99ace302b5f831162792aa47bce0cd67899a65bcc6b86596f935580c9ab3379fd8b5b26492d6aa405128da48cdb1613267d92f549964be945a6490c23233ea25ce36b25a68baaf7ebac65666666666666e6199aae5738e0d0abd8c4485ea3695432dabceab1d79e7d92159b7c9205d3244669b65aad9cff5a09ce7fada46605e42506cf7fad44464a169022aca29ed17a8d6ac5584e62ee275da8fb5998cb9997acc9511c0f936715c3300cc3300cc3300cc3b01b18e4786c5e63359b3a82eee3bc5ef684ba5ec5262e72c6a9c726d4672e1fcdb8dc0b5b255d3e94743dad6cf2cc1be2a963d128ca1f21792aa774529638924bf8e8b220120e48fd94efed125077eb11d26825f105ead60e91ecda491691454e2452cba39646d2255df04916d88e25ab9afcc3bce45f2fc1eec752123bab24869999999999999967381e26e73bc4db6411c6d936b63ac4b72eb6c595c233501ae883247272dab96c755bcb299ccd2e69254cb85b492bd990e29528594d9a3c96ce4a95a75f4b41bd8500a911aba8d32898bfa7a4a478141435ea259e7a34b24631cebec226a36353c964ed0a5b7b26cfbc92639e8b57af1f932c9acd169c8fad5e9b4ab5629e8b5b1793bb58dbc2c6a6928b43e8cc658e658d61188645cc318b619086e381d960315357e4a9b3c0edc0f916c93bcc5258d84cdec95b5c5028cec7deec4ad5b679d5ad076d4c178b75e699297320d3675ee3bba412db615f2bf9309fad64de19ce07bb5f86e2785837dd8f1d93a554b7e9888efd07b39088ee93ac22bc231fcaa2a7d2c953e9924fde762ef743a14cf7e84bf1114e0e060c2d8114b1b49e3095234da4f4158904cee0af1ec3dda83016e323dea1d64dfe592f7910f92f9c4fd6c296a25eaaa74e4a9574936739d54a4a57898b664fddc94a16ab80e2bb385512a395438423859ed630f9c75ef24f1679ea362e6ef2e6ac144ef9e6d63be214755b442759ad84ba2402fd932cc9e2b7ccd0ed6739d53091f389711b3867379538e76214a323de71b9f14ab799a0ebab11234bf2e45b78d84412a26f0e878bb7b8d69ca914e3ec7c7f603ce6feb878cb1512e31130de8b275b5109efb85c2027cedb6052c9fba0144c570890c88a43918827a7034752af1c9f7cfaf46e945a5de7d67b9871c4f8e696c3b1b98c6b321e391c3440f1331f22ab979cc63a90e9ed7594731c0f93d73b84ddc5378ec78bdb3b841dc67b1ae5d1e8d87e60ae7db9f2feb8dc788553263f792d9d07395539224f23164ed1183c5f8d678f57285316aa19c22162ff58b5d92250b24a1e018a8f79aa95a052a91ff620927ac6f960afc196ed74f694052072f433c7bf1a7c64bd4b3d74c1bf8dbef0c027af564d78a555296e3969b558a66d5cc9d4b59c5c5e60626450332d686a6c6e5cc8e876e0bce65b2ac90a2d78d375bc9c4bb4c4494794b5b296dc5af028f5ea2eb886c3dd70c185179b8e97d3a2544497e33aceaea972723c47c77bb887539eecee9ee132bcbbbb39d7bcbbbb797ce5dddddde226ef6ed71118efeeee203332dedd1d646706efeeee20ecdd3d83c490c1bbbb83d8b877777777b7c7257827480cde413cefeeeeee0e02c383e078777777076921e51d44e51d001a4d430d6c868c980a00777da52100356860dd303cc3832fe325e3c5bd5e3c9aafbc170d93817198aba5ddd42efc2d1e7c1e0ffe6ad5d22e2e0ee37232954cab969e9169e19f810ff3da99a1b33276c6b68b5f985e78fc0c7f8656ab154386927d61dbb2b5a1e1665033fc36f0657811030c5badd5e5b9d0f83d0fb65eb45aadccc58d0bd60b168b8583a9e0f1e378f0e52da42c7d419bb24be5425541004cd7999ee3414e692b6c2d78d45da89ef2fa658b57ec722971357115bdca2512de09b2e32b2cbce2d74b1691473e39c4ab82989c73953712af9ac5ea17aba9a882c4f0195ce5bd04afbae5a4d54f5a515e15c4c55b5ce53dc4ab76b99ac8d52d979257059171982abcead7cb0a962e4225c7698c782559ac231612ebf564c6657055abb5a4b544cbc9ab9c5b2a6716afa4cbc5422e1e72311116183c0657799cc22bf97a49f1aaf2b282e4c26d5ce5b1885793d5aae9d6a5f23804af66ab551349eb0895c7255e7018aef238a4827bae28e48a2c9503e1d54449d14d51f90dbc9a2f06e038005ce5395e380b8eea78540eb9a5ea54dff62a4ff18ab2705a701d57a95cf094ab3cc5dd505d9e4eba9e59339887f9c5ea15f67ab15eacd7c45cae96abe56ab97a85b55aae96abe57a0c6bacb196ac5e592badb452b67a656dd65a5b6badb5d66aabb4b55a6badadb5d65aab95b6566badadb5d65a6badb5d65aadb536abb5d65aadb5b6d65a6badb5d65a6bb5d65a6b6badb5d65a6dcd329a81979e3d395c35e4a0b406918028a6ac80045388400344366a57e06badb55a6b33e9e3c72b871fb5d656125a4eb030c11113f0808dda3f7cad5c5ba10318210b206430031f9a0c61a3b6d0d75aadb5d6d65a6badb5da4aa53d9a82631f3f5e39fca8b64a5b6bad75075f5dbe566badb519a556721dea71822509081ea8420448680a08a1f1c0080b7c1802a20657f404243300b0c4a0034f7e20b2812b0b16186123ccb22728814da20425b049d813d825324d7a50bd1a4eb1531a67e4a9415fef47f90ba25ecdc14fafdb34e5d94d5378277abc353448293f1abef6a0e3e81507a697059ee335bda00edb26745fea33bdda659ac8244db349d825b27ea8a8f1746266d99c52cab6b6e79c73ce2ab1a694460f5a6b6badd18b1886b5b53d67d16432db4e6b27149149f4ea6559d6d6f69c4593c96c3b31dbd3bba722ef547472c2ab7a63679aa661d66215b3daa6cd2cb36d6dd7b633dbec924eca993df592602ea393b5b91bd60412c330193dec2d9dd1b36f65f4eadbad7a3736a2479f7a49da67bc42a9e84a469ce25e75ae56b11b19b110d489b1bab800ac3ce86a3e6fd1cca443e188f1a5578f3eda60bfd4775c8f3e6e95071dfb10a47c8f75025b19fb02318c3488f3c5b49e7967b3b18f1ac3e6d17f99d6dd95e8547472727255a2a6cd5e89e00ca45e59f9d24b92797ba5a356b1cf39a9076bad94d268ad955e5b568f49ec224c28b66158e4a8538f376e9c8aa00ebb974dc95eb60448bc631485775aface279dfd540467c0f982b2dbec6f2f49e6d613721bd99530e8be535196659ed10c6a59768342e8313a3bd1458718ec61092194d57bb872043815f55166b91bf36648465df6958e5efac8d28f5ef4b65ea26bae74f4dcd9cbe8bac9237df16792ea1977635e9eae93be091f247ebc2523a8c3dd772afa4e47bdaaceee62eea15b12744350874f4525a35e558fa5531166a3de9251abf889eecb90b26da31ec66dd4b33f4b1bf5eacff6b2e608e5a4d56299568a69c59b241ac4d1204d09bb43663e898d7fd3b312736972121f6cee0f366ee4c633efe19b9b9b7973bd553defc7c34fefd5cdcd0dcdcdcd0be6361706bb5fcf4fe768ee17d46448ff8fe9f0639cf37ef15ec178bb26d3fd24a9de79e56e50b7bc2ac2e447fae6a61881a67f413faf0e17bb9ffc169f5e8cf745c0f5310e391e276ff9620c52afc0228b2c8f39900e413fa43e76b5ba59eb71c667e6cc6c213393e55b9468687cba86f90d763f2037362ee39057ee9e5f87bc7af193435eb97093d796e92fb3f33a5537dd06f52e50f57e9da96bb9a539efd7e3b12ccb97bc257320ea1f0fdf7287cc7c75cc4bd3473e10751d7e5a7cc67f5a7cba36b37981a87f58c933ec0251c73c933d8d792d3e5b3c6bb940f526f9c1c68dbc783610861ab7b1f19714843a358e44f703ca869117b7f1f654af6c5e6c5e6cdc888bdfdc1b7f79b981f117948b1bb9711837a239e7465e9cf3761e18bd72f1f61b0f42558c8d07a14ae67e414d7afcf41aefe3e103f2f5fcbc330e3f633d843a2dee3773a76713553df3af7a56ab633e3d8c47f5c11c2b39e6c12ff1366574087ac8a9ce63bcce4b5e12cd61bc17cf85f350ad623f795f95df999860be790ca88f953c629e4dce07f3ec7ea58bdd249c4f8ec6e7e52f21c5d73c345ac2e8bff80ea81f34a72b499487dcbc343ab021f1ed6540fd21edea61720f1dd49683314283bd6ae849eb3deded5a15abb71ba9f70342af110855df0e3aba67d82b29dd485fd9b52aba9176ea46a4cf30c3c70384324018bea0ffa0b3bc10c2006de8601ea4b7cfc8a455cc3228ca39850663a0d3835067baf430a7994b3bb1f8313667038f9fe824285262f4b2e8ad3751f2d6bf206bbb0e8572182f659cdc8d49a3373d1df1e364c9ed883cdd5ab6913ffa8dc1a99e2e5d937046fc3e0195f787504e50838f8e49c7aebc742a6ffd8b9f02a4678f421a4480f43a8400e93609d65ba7d2a96993d1591a1dd167b7d5964d46673d460bebd479e00cf8ed2dda698b1c0e3ba94f4f4a9fe991c6877ffa90057c41d1e7fd220ef6a44b9c9f3706ce6b2f9bd6713b68dc81cd1b4309a2870f3f72d2b5e8c9803aed1c843a25ee460c4e75f65f74cd85c8f7ea2ddc8e28a977ae69764ad73cba23d690b2a7630f8f79b0e7eda2c3703ca2cf79e3959e42f2befb5bc677f7063bb823b91b54cacba35ed406e10cd9426bb141de01a22efd934fef90f8b32b1541dd56ee86209f171fef0f75eb3aa45b9f9c0f75ebcd01fd4c21f1bba302ce90fed5ef454ae9df941c8f8031344c5198a2eec2659e9a9ed2d44b4b44d791f9cb79e951c6d607ba961e591207ee50674fe5c09de9fcd4ebc9d35b13031ac4f9e6109c619dbd54e5e706a540b7dec7fd705ef2e674703e9c973688002adf39d639c6ce4d798800144479cd6b1092defa96713644d7dbc7ec0fe61da72336e932ce07eb3c0c72ca74bf9ac7ee67fd7bda7af0a16b99c79fcd394e073be793f3d9747075cd35a83543187b96a66f31be79be1a2bdff55f1f7d1bf1cec4e1dfe2f6ad5bd74e9b6db95b677acc4d260fa8b364f93e3a9a42a5adb08e101dd1c4899194571579657e1bf10ea7a39f7c2f1c77a3ebe103b36cd0c9f1e8e135dbd9fbf16baf67af3008d9d55c36c9ede8279caa69a3f82e1cea310e745fbb34b75ed4ee8779e578740fa10e0ff6eaf305c6294b45a84bf79e9ca8e44b5ae97a9c31442409008200e315000028140a86446291589226c228db0314800b87a450625898869240c86110c40c51c01082000008000080c08c890600e40709104bd8cdc4991c0cdf99468dcbff1eb2ea1996c3899d1e046570b30b7013baf5a6f011ae345e59f47151c72ef438e35f68aadf80f163b974f1b28f07df2d81b74a5d782c9dc9cd0aa01f6dcec9cdb9a195269f98f32f5f7d84f040ac6798c69803f0d8d62988931cf079df4a3d3cf829653691968a1c0df727787058bc38b7578867059e8bb66e4b68acbb31a15cc2507b92a0ab3646ea3abc099d56c0fd9ca1e6d4468e8a7fc3ce2aad0e1f14e637841c6edc4d4c7ae4a84c57c093e4f7302fa620d822ddc0f4166316de9022393a4f59942a7f0a1e5363875d5750418ef2995a13301ec716d12447802b9fa142f23f49bf8b1ed1e40bf45eae5191345c8f8eda7bbd5c2823b6f87ef800d1eb9ab0edd91edade6af1dbb3458433961cdd41b88912bb1870ba5b2736d81e2b473504eeb421428a5aba85ae1c6d95cebdd2e15cb839807d8d683f6bd604588ef879aff4f824c7f51bb402eb65fe9fbafdbd939b5000fcd33a903ef5ec41ccc928b396801fd5bc9403e9bec628d07ca85739eabda3e467a4e5394d4549739d8f82cd777daa02205bca69f49ee19b46f0b088ec4e4586f994d61dd37f276674767898f7440a592d904ef44cf0ce547cb10ef67d688b3df8a03aa4c10f3d7a1dbca0b7470822f9a7e8390963f26982f25a01e13f1e46a205fabaf35dca27bf6161dbd6a0b2046e0bf5dd3b598ffdd9b810e774210b03902c6ae9db71b1a68a4da9e0d5168c3c2869c734139396bc7d79cc0ed1c6565c59fcfd9e5d3f7d2fa5a2110d9a42a950966d472743aa49d358e44b64cff975fb33cc3cb7006d2334efb0bd4981e20202a95bae0914659e8c6ff8a585a45bccd6f5a2811acb7278a1f594866e75aa60923f420f9c776c50f1f855f3c381523aef04396642b79c1466880cf6a22444b702cc650677a15bf4557325c0c05e1f1037a05bf5a58a380df41e45ea197ed5342ed7dbc4f8ad856db8b303dd8a5709dbd68f43b76c5b28e57c4a3ab5397fecdce574e62453a2ff60ac42cf6a1807f56d02fcd6c0e2b98243b7b01235a3c6e59f35279b930d4f4acb87202e88885863ac96931fdc120cc9b9c147973f4e480bc3ecac16785854d1a59505fa51d804b8410c248d6d61ab155e66b5c0d409997bc84526139f0047646d90adb6b85ae8c23b19e428981bbac6822f37d568908b42d91d48d7831d1cba3d6124ff5b74495a64ee06f848599d7a2731822eefb4adb300ea472aadbe973db34ab8546a1778f87367c8c251fb16ce66d1ae11a44f01503b6201693cacb34d6c61ce37909862130eea50bbbc1e0d3786d3472159aba5f77efae84b600d1cba2868c9d4f07b7641eff139948f5402431beea21120db0367d8b2f2e0a2d851a7aed62b502c1b3eb2c1e18a3e66989395700d29d1f579d47cd90feba58c2a59eecc0201d5f4d4730775d11781628d8b45001f0b4c34a37b317daa8087febc557dfcc6caa011616b0fd94664f52f0c2c9c483f9898583062d2629c66a9b8af45658458930ac7defd0e99ccecb845ea6fee6fdc36695f33bb5d7beea1fa3b13cb243579b544c4f362c651524c509e86c6e1af47e381de354739d707b48b395a58a263053bf4a44c8adda0eb317937fe92b4f7cc50284492bb277fc495e79831399d558cbad93cb29f47af8a42fe022b5ee5f19e4068da67938a7f82305136c74aa8d4c8227007229a4c2a011c6f7d77b745ad16fd0d53a96f1147e42e8a24c39412d90118076fa8a8ac1d2b7d69820cf68dd7dcfdf9667f8bbb59cc74f7f752dd29c6d9396db55e035727c2739f829af7f4ada35cae2bf00e8b684402ca07774c2d390e4ac3515fb9e342e54f0f667bcd5cf240a1661eae4bb5baa30c88a30973235ae3a7def05554c6bbed98a4d7d21f0943b6e495efa094c44d81ac9d04bee14407a4c17f4623cb87565411942e041cd4156c0ceb065a08c19d9abd4b76761af3cbe6766bd3dff87e30543d54ee7df00570dd7b28cd9176b57d9723acde439ca8a1090004f03af226824760dc073545b7c6a54714752d29fcac45e42fc7fab7633135879dede5d669eddf6eefb94351ce3822819087e28d2f966e441219176b4b284b9f02675cc7e68424e6b96ef8b6694c15f641249873f6a9d065a0ebd1a97055b576925d443317f621afca04aabc935daaab4c2d82d41afee9d87859de8c14ecfd267452bbd44e4450440335a1a5c13a386a93751c66ff8c33bf1df517e5bc906b11499337b77e03636930d7b695dc59b556a672c816835c7bacebc1fce495099518baac748de895425783df9388fc2ce6225ce19500b8ccd4642fb8ef583be8c4554a6f5dc08c4a9edbde057abec11bdebf1bc8f6ec711b3fa43887519b03883020dd7029992ce57c69da4ed3ddb350049052db5d00c26090b2462845076d4e754543038f1d6dbd4e4fd2a45dc2db3a5534295a065963257a35a5ac1ea6998269dec17030685126ab1510b3c733dc9f542a0248517d3572afa01f7a9ddf40faa7b915d9416302b1de96d2783103e850172271b345010f02aca48951c53ae01c505154cfa64943102df51457bb0dd3bf317a5d14b7bce124952a6c0edef604509c065d2d66c03617c608538d6c9236cf853fdd6702e8975c6b05e8dbca000ef198b6359a91e867f83b8242006a5f8bb43a2ce1da775d3cef1fb441a8a533167cd0016065f539cb77076b8759d53d378b6efc524aabe0dbdb85b0fd976ef68f41ff4968978e21a56847372b2892dc49d7eb8f9ebcc57ef592152416038890bfe04fb4256dde0e0f233dd1843aa2785f61624b131bf0c243b0957e4f3544695615ac63801c729d904044d8f4c055fddc68b85320c3e47c224bd3bdd1bbf678db2b7e1e440f8dc211e77068448e1a9bedc9355f8c359d495fd0b910e201184fc06ea0c8f2be8ea0d780ef5ac00c01184ec7f8ae92c04fb93e038e54fb72a0a5742662098c55c666d04eb7fd7c44e66e5b2c456f8b63e1a115a09f1713bd2c78a7c21e66fde519b5f45c5a26478efcdf39f27148cdbae4cf38c96b0a6c4c5de18b7f295f29c1e615a66ac1f34a23573f385f21af9a1d0c9d469ee866a937457b1b5d7229ce2ea51c934ade0c0a1b3ee8e7e90f74f2e8b2c0faa53c7394bbea2d6b3991f169de014a1900a6d8bb4f9750c94be83513af9b8a8be4b380bd20a884e42624afe87e9ab377ac0f1878c09d34b6b77f92858b679cb5c389bc3f57afecf46a07db63e8667845af7b86a43e0e88f60da01c45ad6f559ca4d3a2a5618c3b3a1bdd84882b2a1eded8dc46abfe2349fa9565e7ec46962778ce2ea3355ecd76630a7d54bdb061b926185643a63771c7c7c086902860228b0df45b52819a9f943fd77bcc8c2c62fb82dfd184e4e10583a4ce8270f1b787b0f04087ebb0aa11e097a05426af25c1f798b6b57a58e84c3d9f03d8e2c8473f712ce7d122e6cb8f6e0a2bd5e26360de5fb38e1265fd4998d1841d9a06f052c3b6aae206091129153e331f710c38d24d85d4375dc3cd58de791ca8713fbb3e75cdddd29d8a7ef019c646de5a353208afef688807bd4a3dcab1969b5eb645064399938f7f6f758d2b840e7ea4a05108d70ed3092a8fd16ff11132deea744945400fbc5ac1d8fa1c55b0a9a6df2af7ab2b972cb9ebfed94e36f99a3c05ccd4043332df7551015094929840d3bf9a956f82d5933594101439e35f758f0c2ed73b922f1be7458feac3381131ba41ede7542ae1dbb35888e905607dbe5dd8d6981f76311fd54cb76ed17a89ece56d4272153d0ca601adc7084ad33313bf3bd63c06aa729836e2bef47eb5f008371cd368050f766200f46b837f461234d791fe89d2351d0f346cf5fe8f959dac707e471da2ab4ec80390ed809301d5eaf696177a5ccc8d97be0392b362003b6007c989e5a78bd6268027855cc98c2c2038e2fa87e8cfa6aa686ffe80f53b21e07c2ea0c41ca81c0ca6f73338597870a0c9bb40496841297626429c9017fb778a87986875c6bbcca2b43bc56e0b0004a88f4942483c26392adf1aa6640de5364444c56394ee21b52b407217ab2438ae6546b2416300154287f0bd9afd7e1ca3cd25611e8cca32ba56d069e621b5a426c1c5583cb056c1066944f08d924035d16e2ec356eec6128b08552f1bb434f10ba68e28dba8a289e0cd3f44df25aa1d18ffd77c7ee231cd9c4afdc189a4f752b1fcd3addfbe768c9e647149f5d6bbb00928f2d3b8402d4d26f3e228e6cf8a249a2828a2d2492024825415458ad20b26244724b3d5a8fd31a1983a8fff548806f5667bdff53af75fb2400ef59271236eb4620c84ee502f9d90b0a2dd6095eea6fc75e530233c5439a6f7b8624c4fa20524fb74a909836286fdf737a40a16107e68439706f324b3f0c411b123c42f0985c27d8a0a4c903b13dfba946c03c644809f5f32f595f2dc68a0f38f481a8697c1f3a9d9be7102da82b2badc03fcf634f93f0211fba05dc1c1a77609b104c1d58d3b8db155520850bff200106318e9abc2dc11fddf08bb98393111a0c2171b1cd0addab6dd970e464e5a2e9d4319d94a31e589c562f005966f414aadb7a6884e4e05a4be33ea3c6818f4c0a52391fa7387010d62ea5880cc0572aacd4f429d7da2670ad1aaf77b1ec730764f34a58d584ecaee75a0621a3e86d8caff68d450710206de59c3292bc18c1f799d8a609c742e87b7480be6d0945aa2095b3b6d474b741ee6e55e33e426e5ce99430f627ee2bc59d727180e3c897fbbf2df8593a1743dc427ad2aa0a9f5be8f3ff916007288bc994cb547291a72ae9ad4772af1c5c02699493e6cad3399f4a02cef158a09f8e6c61039c6cb004a53673ce81f30342a03c71a79022eb881867e9d12a220d0c51928bd7a1dc436763783b2942344c14f168c40164341e4db103d33d4f08884f68d601f2c57b97836a6789ce4d08552d8983c597bdd81d66b05a2202486766498128152e2fad9c5c48095bc71649003faab512da0cc1dcc7983f24d7050cc77068aeb589aa2a8bcb47d291637314233febfd7f6ca0018ecdbe11a15ad8bcc4e83f8531ceab6b9dfe7cd6a21085675b982778208a707975091e8c8bbfb3d4543c1ed460efcdd24f8c09b22300f665b31a9f7f42f6a0163dd5cb5ac636c710fae9564309c4caa20862b0fedacc4833bf9f944ed6476b80280d44aea97677797a92f588f6403bd0412d99a4828bc4431fa786605f1e8b014c8f82b169d371c602b6e407ec1085e2d5fde84c5f07bc5f90df71b6b516783ae29b6f06095b9c59840ac0634f50f31ed4bb13fcfd8cd02e266693de5312f680a1f4eb98723fca28c933b3be31e3488f1f5a32ac762a7c688706982ddf08afc4ce0626746b34b7da23659263faacdf8bcb1c8e42e47405b7380cd20700e17fcc29d68d311a72287d34794437058ed1ad583b4de34ad9293252019684f1f37e9e473afe68ffed9be9d2b652ee814e9ab0280c5bbcc4a797f1764328632c50cdd3c4955d76dfd49d4c2155116000a5584c3f44d6d633b72d55c4db4954c4cec4eee5b9e4387324d398018fa44c9821652e90ee9aecd5798b033290c78ba81fcb298362c757a33965144bd9697b16b3bd2c386037ede2049fd83c53fc3b2648f86032ec03357206888fad7eee3628f931ee5a2855624cdc4dd593b760aeb5730454cdc027528408936982eaa2352bb4ffa86000a641025b2186672a682dd100be7903c9a82c075625898b29dcc92d1224bcf41d0088bf0d84082922cd05283b325ccbcc30e3907e15d081902a4659e949eb0b435694885a392b5db39f7541924a131e119b11b280d4d6e5c30e411676bc17e8319aff85748f72c43d7bca5ee7c07ef79028452aae2d9af9839d733f8f82e2f49142f0cfc20166e78cdf4a9b0d1c7aa4b26148edb5f6f4f5ce5eb0bbcd053d4198a0e44e79612e541a0050f1c1427393e8209c3b22dc6915032cb97dc8dd245b71dcae15565ef2af6a47592fd881587e48f96c0130df02b0b3d428e62986deafcc91adb61e88dec2a8005ddf3b56c0375e35948abcfd93ecc125535c749c2d2710664d109c23e6183cf2f4318f81c72ddb068852c222c7dbcf30033c5389321371c5e864e1cc9faccd73698b9d7cf4463bc989c22c7ab6173a2a2b15ac2fde60c301612c88d21af468f35e1bd0ad80b5f44db23b63271f8f932cf5a2319351d3971460709a3a700a9e4fe7cc940896628308540aad9c13604ef3b6ebfa03c2407633a91c5c8805ab4109b937cc074b7e07574727cfbb7345a9719285a7bda3eb2b4db70f65280738bb4ef93a7a98a82876e0cf34a887b37e80ed6305bd97a560cf286c03ade07a42d7d89f138d1169bbff467253a6030a59ef3be9b3a1888ef446ef2e9c857b261918422b6eb839e1009b9a524e17e4a0e9de69f1c736e3d7a63de16d4c5a4f73b93b6d7cffc53433ce81eb97100104a63e0648051e38a2c621015c8528c3088051118abbda961718024f1da0e7279aaa17d722a32e383373c1b1fd3151d95c7efed08789b6069fc62d7543d294c42893b1b0c892b1e4f0ce802175d451b009d54db0e717a026700e823e2e74ec988d8c8cb64c81ef5ef7e42c405931c001de9746f1ebab008dfc1246031cd2bd009c817dbd0d24670b31864c8029655d04b00305e85b995f97e4fa48ae8c194574f9140e6508e619d15832a65a753ab3b2a64c15ea22e28c22d5ac67cf0a70be92e08342dd003aa00574e13d914fa148a5cf1bf9f4964e4c8a81963016cee30ef852c69e166566c5c6d40522690ec335b83d1711b1951447adab54189dcf73b89532417574e00653404476b9d00e21fe39869e89ef47cbbc00d5c12bafd95d79025d88ed35ea0bbf2a64aa962449b11e80968648098aaf9fc25089a293dcc604ed94e590d6a186d9599be76acc16afa0301ea5a69e21b6b1dc5340767ebf4df2afc1a25e6d177a87b449d782602d5d3f0ea71ef1f7147221520db2a1d672faf7451ce2a474dd45ab768ee6e619dd0f17f01921ad82a254c40d99a5ac33c6e1c6052b766a37503cd21db756b80b10ee514bdb29aa3de68abef62fecb64a53a1c59d3147e1a199b2582034500c46d0a848bf3613f847b5ed1577feb48fc45dbeebb2929fa904d9c8e3ce85d10a9107c29852c34170481034bc5229029a7b7dbfcc9dcb74f874bceab56cfdc86a20c624fc933c14de78770e0fbdb86dafff0ca24f489deb071f632827ef2912c110619b4013eebb728432aa9e963eff1fca810fc4d3429eebe93fcc35b19bfe952488962d010384a3b23e6a08dd4ef76c0d658247ab883ccf23df3f7f842f6ebd80002d4cdf42b7c1a88bdc019aeddd1d553a798ce1d3667edbffd83e470a2378c540c0e0381382417f6aa7595cdbc5d9c62c6e170235950a9de17e183a4547a61a1137fee97e876d81d7a1f85cabc951066b28379781fa5b9782886b57a107663419f8f1426b0d661cbadbeef3a017b89b1d04df44351ea73194b8374fc9293d3ece67e90585cb663cce772dbbc4faa12c019faf055314c3a92dd26e8a5d748e268d118025551fd0e32dad5317852af75d510f5431ee254b8e70ea6d2218fbfa49c705119ae0fa64a47c18a6211145b54609bfece504b2e5301ec8b143dd0b079ef88150f0250e912304be20b9b29819600eca4b528f17f1fe03e32efb7053af7aa4525e9c0d91d9dda2b8bf7b8b7a5718224b8442e33dd2f847be7ea3a955dea852bf9c66a43a066a80a5037950d66fec70c66fd4437153f1ffae2b8cef4c85e31d25b3bbe658b528daafda6c52100b899d3dec208c6cde1f870c58242ad81164559e4c3e5d02302209366f368d41f347a40affed94c45d46be9f1c707a48398b9a5bb90912a3860f24d15c924d4f33797b967179c37af76267758ec87bcac5021883b8860aba8f3d891cdad900a9b64973cc9a0d47652fd166b547159a4c43ec2bb80d17492ca1068f73b1c74a9c572808fb6c7ed19d1a618777c10e81d2fc66c87031ac1b4ca870e062c766eeb67004bf236c2915c8f692c64a33d24e6ef67e303cbe4adfadf602a6d29159e7262a5d3cb24b2581fbe3ab381c1abc3e46b4c1fcf9747743e9c827dca6e4f40c3771f378a4f8139dbdbaffebd0e54634057b1a3c591e28cbdcdafdc42dc09473ac04c54c75064306f6664e6868afb1d8f0f5e26a9a9487498656f26530f8a8c3b0100709321a3ee1dcd03ebd980d052e12e735d4aafb8e19b78384d0ea3ee2e562e5f61d9ba3fccbfd83dd60e418270ab22e369169b55919d701521fa3e13692a090e46c869fc23f0aa9e16232d12e35e8f21847a28b61cbd95c10b83c35600cdd11030e2d554b5a313eb13697346eb9f168b76629dd2fb1366096d349c6c7cfefa6905f6e99f92af40de13e9ce9c6a5d70a45f7b521e0bc11fea552c0f3f1b7914054272469defb851eced269052ab5614a05f512fb67c2464df49ebbdef9b5454a5462877d5c85e914bb31ce155e2a705b27f5de462841adb8029708e607d8e53c3c42366da9c698fc09c9db53f29b74f260ddc5213acb9f2ace32f5a5a093b972db14379af8309128709ae3282abcc0300a716c23f965a7ab3beedca5c1d2468f85ecb24e06a56117a9eb1f45475ea837fd430608b9250668ffac05e9f54f508ac5233c23ecd369b62fa2d3dfe495442c44810f8e626273fe7ead796ecb9e7ce6554ed2052d6b098807e25d720925c0a875ce105aea9fb213052420c06bab3e527f3f08c4fd2e967ce7d39f16cc2a61f7955a46977d1deb534d5e747168d547da3bd303166b474ea3d3b744acad540c5eca0a809878279e39c0c4e384a4bcc934057f8eb4af7e1b264bda5ef38b4597753200ae467e50746aea6f169551e269257544a82415e8f6f0c3be3482b9eb7836f30cd2736fed1f2cf1677b8fc7ddc8ad8d8f4e02db9bc5f380b1b8a5228dda7370283cbb6d0f2ec1cb773972511035ec4e2c53f360639080c6786bed2ad6b1836f8e6e7f0bc5a449b8d4e8683f0b27c46084e44e941918ece5bf4234e5a6434646031fde1be9bd3770e1d72a860ee30fc13822fd2c48e6ff67d24d8b2adda010d9a5a24c59dc1edf6181269df4d265908008d6f01667d9e36be927e8ad0391fbb5a378a5d6960be9b3b50fa108d69fb7b0bea6f8af8100b91f352301499212d04de751dca27fa484817b19faaa81ee4c4a8552df528ef11d946571b668e3866b303c01a615ed0acf0d7b9cea5b453ce0ebbd17877b064302b3ae9785c34179d3a4aed7ea825f3d23c0808ac47cef24284d425dcf4fd76aa9248b2b3b7faeeb853f4c64095a9177adb34f3ce54aafe998637253e9ebf1f19d8bb61a1ec99af2b0287d882bf284f9dcd6b6daf239a1fa241e289a3920ed605906856bc226b9cbaa6d185fe5a8f5fb48ecbfd967bd5e58ec7f28ba38511b912938fd3a1b9ac851f4502fd9fdd021a2d413a82063715642a99c127d9ecd72ef2f407772e856b2c5dd5df1d6901e390c3928205874299d55eec171346640b7034a96372f2cbf71f3dff81d1c1647fdef2d0ebd74393a5a27a4ef653af3c71febe162265df2c1b6bceaa5089f8c120878c19693b7eabc4a539657dc23bc0b8126a7d028a718b3c659ea792ce57ec535c612bda74254e03ac6274af7fa7bde7e7f2a7803e4ed178c34763747a931a46adf97f4c1b826a9bde050b7b81dad1f140926506e73e6a4bae5233acb4115e374f8e9fc2cba02f5742222f0f82772c65914397b4e75f28c45d0d5f9af49de2cb0cb4ca9d3c7753c553ed0f356be6c00418d3a878c4e9285325b11dca40a462934674e2da25a68942ae00a60f0395bab3b6b77b80990599978cea040d32520aad67f9c7ba5149770a6b83574fbe2fa59c521760e60cde69fc4e0f3a94cb86a5e18e2c82f6338be7dc0d40b6e83063258830f441d71c835c01684737a864293914d33f21d4d72646bea4ed3f0918c7284d04b431a0c6d203640269c050df9bf970e69e3f526e422c843b4de5be776f75cede74e9c550d2f7b72099a5c310d755169b398de8b89025cbacb1cc82d5ac59b2c01a4b2c58cd8a6596acb3c08255ac5866c17a962c59c16ab0ec65a99bff600200c6c066ef2c411c15a13279298372911e05c01859fc4dc520a50a383dc88ef179e2c04f804e6667019ef78f0f322bca528b37a7b16cb3548e4dba3c447ecbd97341b2a3c2b7d4fb47dbdd1de887be653dbdd1461c9bba1db966bb061670ee9702e1c18cd564a7c6cf9b10fd7c04b86f94c8e644a2a4aa7852b0ed7131edb6160fd5366529bb24464cecdb07ae0dfa629428dba7b91805658a68964741b92ecd05d128e5437ba951f21ac1b78ec8de3c8f4f8691e65393abd5c86bc44604206457d5658ae49cd739d90af43dc411862e5447cd4421af93a2f9253cfe07973d92d7cb2a32602fe6230c1d32902aa6038908ccf4cf91a3f35ab0ef54a0bbc888e6a00e073ad248693752671c15e4b5603c9ebbba4b36ccf6ed1415413f0a8e11e5f5aa30485888312f8fdfdce298411455114b20529cd7bc169e0e6788f285bcb6b306d8e9ae6d202f1d2ffdc796d36329d7c6f9c2b9d99d36af91d6ca3ee875bc7b6fa537db22f7a0767fad79d859886a97d2d685b713b50e1c19d57c1e605a9d66ca6e9c7416905964ed622ca63b3f8c1b8c2d2f447269a906eba295584bc3fda77ba91b77c5962cd0e6bb4f6d262666d065fcb26b9dbe43bb422d4b2d0f8b5c51f32dc3c25cebd571f11601447d8a3af4490f619818c83674f988b991f349dba9a7020cb889361f22f370515ef67dad05ea8541041025d39461905eb7f9c8479cee86c1ee93fa365b13f3bfe15f2ac64ab9d9634e17d6baf57869f1391f31ba94b2ac5464993edefbc3f230a321d07018baa1084526e6ae9fc1847f631b43064947d163e59579783dc6b2d6da0a5fbc58008157c5bdca2cd2e2e23fd46ff5918f38fd1b83ad5f45da538012d1b2f28187d1fc6f8d3cf89e4019ec63be7bc397ac114bd2028417ca2e89c5e90be5a60d92c9efa4692707b24a2c4c8a09f9ebece4fadcc57301379712b0c0d438e7fa7207b08738987885f497542827f66954c1a6c5efffec952d13870c8e4504868c504758b330d84429bf201d17bddd87da0b3bbda45de516252989e09a5f68ffbadba335dc5f9213e7667e88d13503732ab011c8268f24af2d7994a41984807af586846007f56b743024c314ca54f514c13e1b92b65404f0e144fc566c74e057347dc92a7eec408c63f35c213a94b633684d31bb7cc77b24ede6272f546679e5f9d8c4fd56598d6006f3c1deb8e46e4fa6a31c7e1710dc1c335eaf180f978a3b19c8538a275b39a4f3a4e8c0c56729e4af6b09f18bace4aae6c29da2a101d3933c8589c1e9bffba4b4cb3862d894acc08e8cdca74b802d77586f1acc85adf56be44fb02eb38ee13fa0b6a1fb2b38cf1dc661a7f0f907beb9f57c85e3b187f8d941614ab05c23936d7067a6c4383fb0c65cd33e7ce15838d3b629f8da2dcf1efcf66ce645d1920e1560c174d20801304a8541a8382adf5a587bb2f08207cca2c215788198371234989abac1c34f385a63b307ec86352033fb0f31d1a4229e4c3547f8d9801ca8d75d9b972890dc0fce4c654d27aa004ff241e094eed7030c7296890700568833236d34e248c3b84cba2f5cf62c99ed9a8239fa01484199891b6390655574b8b52bfeb757850e59c1a683f5573317094462bc14d957e6c40d0b5e78e52770853ec821a088986320c3fd704eb4957bc9ae644d75730a24b9e150df361562608158ff49db8cb5823a8d3f4ead3cd02ce881bca923ae352bcd2715b7b32ab2b4e9f98fa4a5faae240167b27d6899694f583b10520cd1896ece886b6a080c2cbdd8ff2631259426831edbfde7fd3338152a65928d4772ef6f3fea7e83cedcadbcc5b564fbc1fe3f3d8ea513e3c60dbb45ca36d3e1adff4ed77af1b000e2899b827e8a0d7ab1fa34f92db8ca9e54ef298cdff855f7129451252613bf4702b80c4bc6412eb5ee6f10b342ee578601e5fa918f66a0cda0050b42a93280198c66a0b62232d9be5b6b6e308b94f008aa38d614d0343b04b8681e38edeee3bbbe1e33b83fb39f4f56d340d9cb57a8bab3e49a19c6aea1f04c021b1bf42cd1fb76325167e3f8b04e94f792900e22263350e585c73c3ca403d8a106496b5069383d5015cd3dd6739649021a7a08ecd1a76172b0f15e8048ec5bfb77c6aa743ecc805015a7ce6d0da7cc7b05a7347312c067e9278730a09296a68e9a95d5a23264715d4b9670a69851397d8a6840a131600a48b8660afe08fec7d6fb940d153485593ea2637bd4bee79fa2486a84be908fd55d00223433c5aad391f3be8903c1c6dd203434f02a599fbe7e4083b94e5ce8f7427588908f96507b2b7ed4b500e61661cc4e1fc58760eeb902c554f3c0464a9d0a9350071c8319e9f92ecdc619d492f9efb8bb81fe708dff6f128e00b260d3fd4a1bfa3946a6fc71a4ee2fedbfe0d80eec231441547eb07ac55ff8d391b407651cb1a690006c0abdfea2f49ef831eba22a6c05842f5a24404dd7be33b07deb0001e8437bc998c580beb6befa3796d8fa350a8632b40c76fe7caa156a82c88b7724cba3bb0589b2473a3d8489635e4e45f2f3dac1176a111195f87c3aaaca191e4addb1b615f975230dcd2156d024b15fa8d123fc528e19abe9ba6dae1bf9869a6c7f83e02eda6e1661506446596ce6a1e671c14b25cf3d518f0b3dcf45da8d53cb6cad0e03c2b092930a925fe0276587f56314b68cfaa3e84b90ad1b2ab4a73c5ee81c0bda7c414ad73f914bd3e0861384acb5f9407530ccbad881dfb0eda1fdf0460a05f187e523934f814997233bad3880d34ab6d0dd0f0fbd2674617d4908a9a94ac5790e46c90094b45e99bc78a8549ccb7630b7c2dda8ff5d904ac508ee4285ae52e9afdd43acac18f972c2a9635e181dbc1391c1e20eba408f13583a7c0b8027404744d0088d2842e902a36970e8220565111d32da94134bddf7a246701fa34d72ef73aee5e85e6373d2984c77a068ba1c12fd6bfa43c328dd63b809b311a67587575d537a20f5fb34ff83720a92f4588103c7aa56e3bcf2438ffb5035d6a78e31019a6ec4555004014ba011ca21bff074b488f5a95161156cf83ef72a18ef0c3a10e459fc997a4647cf86c567fc6daa7b2e6090d83aa235d5a2f6a089d05ff6bb294174d821512009746ec8ab7fac56703eebbf130de3d83c671080f4a2f65928a6aab00f69ccc2f867cdf99149b625a70d458112327321ca06be88bc7c05211a63adbc3817976fb45f7eba3037402ec0690038f608573d349b4778408d2364705e7953d0f13f380fdf134cc506e58a7ceaa9bba5fb1a01416b22246b598394bf33cfdc26eca0aed6de10584d172d7a1eb75e40c6552e54156ede68b314cd3074d2d383b43848cb6b7db26cb2376a6bdb54b598f0c8e571d49c73534b2ac615a656a14f9d630cc132743641515b11ec4a660eacf50aea77a7f56407ca20f5535f27d35d229b6539769cbe84a8f6b92b23fedf5c76e1d6843e2cd1621c4c8f0272592dbbc6390f812d39ba53c748af1041ab0a9e1235be7cc88ffb330c6d634c304c70089de4278a40855b682083adca707fa710a6bb9eb5fbf3706ec891043f560f974bacf17254010401a87de90125a20047ff872f2bb9a16b04fab724807c3929a2bf7fc676f25707f353c4d5c3934912693eaf145e117bbc1f915e6af77c76539e67a36ead76f6e5f5bb94e4fb6d97bab3301da66e83a9704df7e7af8034ee0dcac65e7803586b00cdae07c4dfea164fb1771caeac2b3bccaa4c139dd0f5506107bff235551a2c01e42174e9ee6ae5f6ff627caaa2aea652b62f05e2b22278a5861d6022a45d32b926d1f6505ce8210434d3bcd062a363c93c8977f08939ab04fa5c98be0a10a43a94288249e1278cfe0eea200b17bce3e8a815ed67c409734988af20a5bb9548502be175dacf9c7d71c7ef718bc974bba4ee4691e228b8096e248e69e96be586616fb8e5c0247596a403eb477f222e8da63f297075c309026b70241d2f7d1528feb9d67536a0179bd377c92f6f5a90c61892c165555b0216de579e59fef7ea656205293fe400e718d8426f230ae3e8df96e80efe4bbab6e49edb2ad1c4d8994d29c981ffc409e8404ae55e516de70c823134d247fe7f462615f3f1fffcfa9ff0be67ea839a8cd99b080bfcd9e747ed77276c7fefa5e9104db8931ff6ef16fc716d1c6b0280748f440283f1c719a8dd341babf0e3d2d0ff3b09fba2d99f0bf95460086e0c3fe2206840b43c2ef1a51985091da92894e7d88322dc6de66ccc90a4a59be4fd6f3ed6db517bdc529cb29f25e47758a8df55b4c51da0d75878a5cade5c7f5a0522c3edcdc5560dddd2f3089af2ccdea9c108714ca0325282ad2948c4dd9011a1bf3c8e0d335a0b81a6bfb49b4b52ba08e8e9df91c9710663ebabdb8a430a514997624491032aa98b535d81aaae1d40ac18380834efe2cf0058f7070a25149e407ca93aa67d7eccb9acc74cb2d1d4c69f9f27d60804c5a2bb7ce7ac2914d5a56743dbaf810ce607b60dc3ce8d288eb058b4c9be7953767798a5ab2884074d3e082f548458883ff8b4aee261838b047f62114d16a413836d2c9bce38f487b72f83d4d911e5aa9c0f3ec2a0530c55a96723836ea2874eaa70166ebe714f2ee58b451592ed6eeedfb073a99fb5ce1c3f44206c803768b491a1e1b690d38e4a2db4319511612ff0d430c5ff04b54e9492752e31001ba54d5ff718148c42938d455776813fa2f29f94155f9afdc37658ed6461a42b27583f2060ba063b4d75b3ab9765b45eb5786116198049b2910488abf4673ab41967546499082eb0c1130e81cebbb3f1fe454143bdebd49d186c6c625e30ad86a08071653332489519f99ac070696640199ca1a6f7b41bb5cdad403f0ae8f74a10fbbe42a306d027558d80c65687df6b9df35642ef014c2137805848d3ad7a8ca5c777c1aec83ae53b8d89f00f6f6b540183afcd457abd4045e16a566366299068ea08caa7b77708b069f8ede57135516d46287b71235eab74918063111fa93a720eea940c6429a4cf7a184de2e588a52f58eaaf9ea46b787911058459ee9d91e59cbb4672fa2474a0147ac96b7d178c3df4b4743fa308e39f0b05986750ce16d1c9e6c5d4928a62fa7c1eb25dd5ecd9380725e1128a125ac527aa667a143b945a956860e419e6f7107944e8c48d1bf2add6e3036f3504552df75dd4aed3abd54ec39b2fc92927915dade0e450007f06ae26585bc18dc74b8323d44843aaf2b100392391f54db677db5beaa3efc10cf44304184f1c920e07c5e9b4c53d730da5abf5d7bd88269015a6cfbf26a69bd0804c5789f5ae48974e8c89a18c02fbe9280468f92be641db09ec63ebac341e3ac86306f6310206098314590bbe7c3c1a3e26edfdb19e57a0da0fd5223eeddc0e093bcbbaae07e4cf9c6f8211e8b4b5e0565457ceadad9198aab82b8899242d5db197b837f32c421b21b2758ff8bd8ce43f0f87f292299d5e66aa298243f87c983b8ce2d06d2d68293b88e3e1605bc3710312df4505dd3c9d454708fb913525adaac541075307f036fee1e215291316d3122a78e21df797f4e26c86decd529cce296cfbac80b77256a5f7c56a7598d1a7ff7dacbd4f9576df4bf26bee9eef6f03037d11904e22f562e869feb9a624515a7232dff2166a2132008e8747bc6fff5e1f7c3c76a2091d151450050831169566129740498204303b298a629e424ebd37ab6b4c895fda3c1a9f0069967d2b9969103f6f31b85187b227e87ba73b7b91daf93c078779c097ac5218fe400e2fc304373de86f1ff681f69dfa35f0321d7969c2c829a2b28d7a9e92bc711b88a7507826b5fdc4dac81f31f2ce23b4750bb0a96542902fad35f47f4192486380f54a0e579aebb2a8ac2cfba27ed3a6de94395dcbdbca0d53e1c619f19468f131ce4f12d6300562ba449bd4e9c66d0fec84bcdd64705375e52d6a591623f53b2e300a877dd20209d8aff7cdbcabbe2b228f696a63729cb3afeac98af407c214157c88e8826ebaa3c260a6e1c481de58c70b53588feda5294f6036bc710c9f9bd26e8aead909105a3d4c4634b0df602a7f4828e0399b3c35647963d2ff28aadb94cd5db87bf8e0ceb45760868957eaea028aaa94e42cb771df638ee77ffe203939327e0ba8c6758d521e1438b115a38fb0af226ca1583863efb708961979a07d2502001461fefbf15ee5ab65bdc7e3bfe6322fbd288683cdd993f7af07140c12a38352e45c9a43bc38666256f9ae4f7cd0742d533e82a85dbffef8315eb730cbcf6debeb0624a5a9bafbe52e0962018624b29220c29532569482adee9f326b8aa48a8874bb8fa903c7185aba96d8ec86f261c773dc21306062bd65cd428c0f24b92900f587c24686b6c15ecdfa6931c81152f06234d6d89eb3f1cd08b914cf1175664230859bca3ee75364039d1612361b26cb9ebb2987f5693c590a6bb25c3b3aeead08c34ff000334cab78751ce8ecc160a9d4e48199be109fbde39f13c9a3653e0d2f60105a4df560436935f86e1554e9ca14ebadf0fe1035ec532e6452e67eb1aa417df05da2894137ba942251da06b20badea0edc41c1a93705017ade4b1a2382d0fc52417c52068bc52f9bd8924dacd4475b2bfd07a8955784be75a9915a8d3783728729c012f188aa377fac872d13803c60de038e44fcf5580553311511692cbe337ac19431efcecfcd3694e771cd59506eec701766b179d98254361749757b6980a66d0b5f408b99c13f03354a5511b557fd63029849023ddaefbd835fac77897038649b74a211c7852fc5480bcf22f6e4b3e6ddf09f50a758947cc277c6169ece897c47ba6160a9fc05a951695728d1256ca7cd76618df039afb20cf038f1667611a93de5e874b134e3e57ca768598b43638021738c39f3ee8b35698cb2b0ab4fc1d8cbda2d6351c60f927f870ff873f857eb3b3d33ea82a6f981b918bb4678b9c6835beb36e78c1f63f3248ffd0b0e6fda94b16af91988a3f18adb1092f62e8347a65d9399ce9f814c0fd1bc8e0c7d120a9799fd778a87a3522f24ee205c452b6fd2954ff7aad44748661aeb7801bf418e70fbfd3bb7decf422f68dd53b8cd6f76a8b97d940aacd58fd07d009c8d03614d2eafba7a8ae3d5072258d04bc97397e61ba10e48ab120c2e15e1249a9a340b41cf65bd709a96418c6311258a02b230002517a17fac28baf03ff5e150992945ecc237a6f7148209cb0453078c8f277e3c9d97a37b99d39627677f0574f43c9fb309f0f4a120e5483bfafaed779d160ed7d42e5d16470724c5dad5d696075a019980c73d1b1a1e8477587fcdcfe4f862e0f0a82e707cd04fd585de64d4432338ffcf1799da19b60bacaba17da0e2845afafa21ec4b46b1c520f0ca602133ea5aec05ef47dafde9dde22bf54204b1d7d89cdff609bfbf173f0edc249a03dff487483a3c0f5aa1d5ebc4f9f8be55484dcf15f986302ec2e0bd0e21fd4eeb894960c16e813aeb4468f42dc0c09faaa1965432674d3ce6f50783f92b065ec92cb28da0859bb739cc142096720d78f6e88357ea09dbd8ca68ac7aa64aa9132ea9cf9954d60bbbb19df553d48cf259fc9c26fc7a0966a6933663e80cf5b947599f15f5b4c044fd45c039156fe21443c84bafaffe431ed8892944c12b83f48529d082650e794a90996fec4c73440fe1032b22017fcf697fe39401a37f67aa2005d12d1f09c664887b2dac3c8d228ca6f62c4786440aaadb22a2bb60859a4ddd55de10750ea77e97d8416e821d32fae869285119ae229ac23a941a0c7b030469140848b39a0b419dacefbc9499949265763230ec2985ba8a92252313f3d70ce68dd0ecdc428264b843c92e6beb872fa05eeed5e9ff3f3fc5908002ceb54a98cfd54aeb670f3c7723c7113d109921cef4385d21d80a4c2975f8b1127a6e797310e038ef9844a85b9498910d082817479154aab7c084cf146086778bc103d67ac9056d246109f92a6be3f8c7408f8fcaf10093ab31df12e53ee8176a89c6b95e336db951a8a1728c2ef1bef1de7e95c65735e046666972a3329d1b0a1eb8bb02da68da2f722a6c1459311ef1355b0a40d72cf09bffbb7c598a2f2bd90b3966237fbb2045104d93729bb32be384fea1373cbee0fb4f21e7773eb02dd2b1f47d269e07ee53290603bd7433fc36ac019121f43ce643f20ed0ce8931148a4edc4906a5a5355b3eb6c2a5b10f87355bcb62428f1c755451b16bb6e6e794fc4d96458aa3661372068eae61c1221d4698593f11a69222cfa4e89f7abd0570c7379fb0e49ff024ddd11fa82ee10a4c0445d00c10ba49e8d42f2738e490b787c84987840b1f27501adb553a6332c79a2a5319d3c26e4447b725d9b7f4e24e5a5d792b04ec2f1f4a1df923e6806e0658a1ea6eca982d31c0c1a54280f4dc71e15016c1717e25147e2c73a0fdc46e29da206328b4adc6de33f5c586ddfd7fbea3c8564fe1eb3798117385fdcacbbaf57f976c31162e3097c0d22be570180a9585fc361180e01a82847fc498d3ea2f028073d74512bd0efb88e89e8e5312754a141d461cf7df3814641ef7bf44512c1bc0bebaffa418e91edc5e4c6c00358cff2ec9c9f73277638270ea601417ec9a10693494f7092659a79f936628a468703b159ed9abbd1c08f674c91c7a8237de7c11e9f1676980a2c0a8e8c8209cb9ed9bc069c4f469e0134fc64e58ea7c585a8a3ec7b9119998ffe68126013b63ce6745da82c70ec71987d3bd28cfbcf1115db4c3e62f087af9a7e7498ac462149e87c2762db2f24b4c9622795d51141cd89e50f9a0722bcf4726d6897de97b2603c286f0dfcd32dc00b156cd021f1a38193053ba1b1ed86a3d4c717c8596ae2b46ff68b82f4dc0d854ccbee85a9da28ad0382e68fb460b9aa9506136025bb8707fecffed36311cdc0e5f55356278fb050f764b3f64331c94293f8714a7930fc57a3924868a67bc3b857d3eccbdbb12b47b2d5c6072b1d4be98247745f4ccef8ee3675138376d616f9b788d9d1b2dbb23abe2001a83f8874c951f44e548b9cd19b78e9829892bd3cbbca1002115e07b3a6a46dbf4551c55f6da00b3cf38692ef9e99e54c740a7d3b27075a10782c7d772a40f66ab485abc5733f602e784b0cfbaac3f9ab4311131385f9b43cc20071599daaa846422019f22fbef9be989f9f6d1818af90c37cbc20aa5d14b6de32b54982aa7fc880696a1bcacfa67f5990b26459376888022489dba70d2610c1130639a7d55d453da4ca4811842daebb1b6acbc0c8248ec4e128fc349b6a33240338be6376ef1bf7f2ffa8bb02e6156a7a8dfca3905d309974f2e1a1ad7337d9cf96c35f14f62b05894fef3aaa2f266d8b974ae9f98de7e3f3271aa0c29186af5504f5b50ae578af9a254a3ec250f15b9c9716dc7efb0456dab01595c57a3ebbafeb2e70b7079ac2321c1a7e96373c0fc6e22ddbdc9ee65a7781a0a822661c82f224b459e04b034a9649a309d16e64994c0bd23f2b65622d1302336c9cb76a882b2cf0c6733be0ce4611b5238c207769a50e317fc16b8cefd86c756695238aca20b56ea82f60ad0aea84d4d427ac994eb35b1c1eba8bd1ba24c8b1c96ee2a3233927953a4611a0bef9fe2cd2bf6bd4526ea3318b4c0118e3da33897e33257a8c22b98fc15317257d4b613ad8224ef1ce253019d1f3d851a19e18cc2c101da5e2c4240716b3de8b04a84ce95143287b905228157c07682110c0bbac955c2a21f95f9edf9225ecaba223954e1948945f1e4296de1930c6bbda6893b1bafdd0d913dd49fce970d1f0208d62f3e6603ab205436337afd0cbf473230663ab271e7783bfcf4ac32849c6c3a60f1d9c088ba0f0f2ddc2f73ed1416db061059e6cd24f5c38036a3845feeccef8babdd77d0d7279b82518deba855c8d5ea4ffb394332ae7af5c2c9279014c2926b4fac01612751554e520890fe85288825a58dba642383e6238258496caf17c976566a0ea64b8187059bb4e073da996c85b83db8e50990a08bda065ddaa7ac7912da76a9221e4d883e738ee92fc70dc1516b6c323a3479ab103175d426d2b27de7ad1a59af90c95446b59c52c3ea6402058ef1d99d67bb63a8b952b4f0357a1048693631ead70aac42ed7bfe53cd93baaedc50945b14baa7fd8310a2e53af7b479cddc3ca82fe2bb70d4c960c8ed1507e71d8cf8513955a11d15940c9cf1c8e48140352982750227bf42f01c7d012b8a8b75915361861b87c39ff25dc45fb7e3a263df0fdeb407984a4bc0a2e8346883dca69122eb4e73190d63a2fa09db5b40fc34915f193983846e1ee8a1d29a69af94b21e7278e491c0794143de0780277f50c1f00f3dceee1892b4bc51b1dfbc694c55db1ca9282445c5181bf49ee667555732af9c049ca91eb288013e6b6ca88f9a44515ded623ade32c84304b7ccb3a2b9b9043d746ea389e095a0076150b30c0ae55812ebd8a1894cc257325d0400953516d4474da0a18e76309d71c748461ebf5dc80908e706e8007a7ab983b3dba594c9cde22208fc7505976ed69f091210c35038122701d388f0a31e55d8138c637111a952bf89d2fe218c0a20420bd1fb2e812f2cf1137856167a0df84d526a0a36978a8a7f5fc8dbf927bd8bdf51e11425bd5cef210c7ecd8a486b973cbfb0779e46972f6ae316cd4283492ade709964bf24e488c52187992bc029010c56952eda2ad3e7acea79ad9d14b6d025c6b10397f3e6c1da93cab3ecb946afb4e25fb96d99f155d5b5bdc0d050c083cb421cce928cbc447bde71a4a4602afbfc494f57de01a77286286e8f1c09ad5200dc0ebb7fbdc82b9ae446c67a012e5855949d9f3292c059f3e1ad04d1c545080eff77f3ebf14718b2928d464b54f391b61537b3013553eb415c8afb4397b67a1df9deaae1592168449237222a6296894c2b5d86eb81188e308404ab901670501f9836bcfe1a9e15aee858d54287aa2207a2daed28a31e1d6535a2d0f5083071c0f516ff696d8b7db039e2d359e92a73c73b4586c689e54dcfc89e3b4bf234b263190cc9acfbc107d8ce398455e8db8e45c1f850d9db332bfa880b9b4526d35ea96424bd83d0d3297d05175faebd79d9ced51a442bd8816869d66532124ff416b9005da681cc63edebab077697a4a79e66e8441e918fed788eb10dd70777352ac9e4ee0a11120d58c9111ac9643129241d904883c07af4697e947651b82093292effa58554c28779de944c4a3e59e1283ab996c447ab48b98b54d1038ca96a2cf4ee04bec3573f9a8174f0aee9016ab156d12fa2075100e4e41e82f6b79b3e4961a74391d891b2012624b53ec812232e351861034c3a983f9adbb03a31568cfef2fccebe4bee69d32be719dfec2bcf704edd6cf1238c63f380cd4739e3e829b36cc1da02e1c246d386bdd1771dfba8988ca31f9efc486b32d004de225b977697a0a640b54ef16bdb5a64a39a7c93b1645bf00d674e0eb0dac305aae25ec57b4926c008625f72f4191ca962b6b679fd7f2a76f1c51cc35e3eeae38a58dcc1c9cde31b9e7908fe96efcdd5dacdb6107f6b0b972b52fb79c950db91bb9e11df6eb0374d1866a95d19457eb5370862d4202fa26cf36f4af042541e0c9caca5401bb2321a505d7e0909d00e8616952cbc6aa92b37bb8326104413d132fd7b2b02a09f69c80318a72039b1b059122222e5ac64f93b70acfbd94547e019fe48d2071e108d1495649fdd04b5715176dd3ed4a3ea152e7c13c20246a8f8b8174e4a42277fbe622d17517b054435d458dee9ada4cc09db6df170b3661e808193fc44ac3079ea8b6b40a0418f94a3a42e276cb9c19034e0f9e123a18bbe966dfb713b0fc1b4ebd55c191927649c863fc6a5b6f4b3df7e47f039364dd902ef9e3ac6013388738e8e5b20c31ac31dd56a1bc69de9993329ea575d2386a6f93656051e6d7127e4ce484b8aac4e9e7917c7377c3ea34a043b90fa10e3e92d49ad4e3389978efb218c0667b356e40d3b87d59360d8468edabe393a6cc1ee4639f7725f37a429382c6ed1a575fa9f939c692a7e580dc88a8b89e8cabda3c3eebd4d066bc5cfcffefd461a7408ecb000f60d5f9983e58d18343d304f5811a24b711e1d96ee206471fa7dce9b5813e8973359edbda4a112ce6d5c7689e520c3420cc3fe8cbf078cf76500e55852448e70909d8d402f77b8e54eb32cc10ee1926858af6f217adf79a78bfca6ca74499f459ff53d595372a5eddf9bf7c20f92507f3325f81d9ee3151886236c17ebfaa973be10d465b0a725a9db4d379b0b4f9fd43344199221e00ab570f979aac4447b69bedc185b6b780c93a05b0d4812d19ea94491a99e21197dfce5d9428f55ac8dc6149167a1091bc2f299f091f8205638db002d4861d20525712bed0c59d541161c2c14dd4b5830f77a5b66a04839368dc188396b3326182c344f6686cb7d7e9c55b36d4e92da27325aeee5dcb8e14d6364f20e7810fc6d5cd6cc5ab71a2afceec612f48b66725c6cb9adc1f709b61886be411f03922dfc5e075b125cd030d844a11961f89da5f537ad3db0031f1dff7d1e9ced83c8248a549dc5424246b747897242edca0b942b4548aa6da048b53f0a82cb965338114e2079db27d9c645f5c8727838af407d0698ba23bce2ea052193a2bb6f6959e20980696ee60eb5bf169277370af681298d07dcaa3e61d5377c4b21eba647c6483cd266202c6bb7224304a6e376563b3218d3d2203fe8125861efab78c0fd850f50d220e5d6b824ab139a58b5307554b9c75f3da0467db26d39815243ccdd74b2ee1363a318310df61ad991b140125b607222eb3e02df82bfab03cf4902c4619241a685b4892196cc9793767977476a5d661f0e0c7bcc68e92dc0190af00c952b031112f7a26026de36894035d2159590f2950413f9094b291f88e04624c6e334e5a2fe0276be8ee20a26864b44eddbb9501191d370884c7a0a183c6be18d1a222b5935c3aca77cb92ded43c8e8d20dd7c1b8829181a8e9a95a020ead4ff0215cd82452fd0689800a1b4f34b81590952d9145c3802b6cc13fa40193f54ccd0d5727f44338b4d377cc1a0a024f83d9c12e0642e1133bae70c29069b4f2c98734eaf88c60464c2610a6d61f34f1a158d3579ff22739f3046b76da3d9b263413947fbad9923124bf8d5aad7c1196fc69b4450744d729d7c98e976e1248ff9a8c6a620eb67a210c00e42dc542e2214b177bb79eff4c0f7b73684daa629fe984a9fa5fc5d6b60ebd354416a9ff5fefe9f3ec5cd17869ebfdd34a8917be84c8bc480b135bdbd5ada8d3815dcb2ac9291c5647835ad58fb486582369ebf4b25b1416d430d6d019150a21e8252538b2b52aa866462ea7e1cf15f7712fcb113936d6458ab5880570750018ed9f7bd991a9de622296d0fd860e26225edb277766d7b06d02b17560012bfde59614999f41a2570281181fab95b25a55d6d07f26d1109519c456dd1ae512469189b71c84c62203bdec33c29796ec45da25ce5e7c6c9fe21a9c7fc7ef1ef97353fb17ad23a7a45ae7ce49980c45bb0a171629e67993d085c61f575ec98bfc5a6a829223c552ef241a41da36e68f916b15372b996721e90e7c45114204ac02876511879c7a996a61f6e219899002bf8c201899116754fcdbb7c75865578a324839aef76e20038c1333a85afbcb569d7799cad08b70892b292d7a8daabcf22870c8e66aee2acbfb455c1bcf72222165f11f3720414a932ba79cc4c274477268660ac77d9f259dd61a3187aa5e9bd5fb589d0e33404754b3524c25337bc9842c9cb1230e1898f34d62c84566aff494b1131b27e28956ccabfa167a5096d8ba3fa40db4012d3b2e7de2a2d828b3e49e11da8328dfa70742b7e2e5be4c4359afa7b9eba7db6748cbc857bb96b0abbb660b5d044032694d396cc0355a130a39f2e0cc275df3d237346dc5f9e28892d5b4f67fb83c61e9ef5935f319cbc32b3eaa2dff8fb8dca18220935802617078a89d724abf5f55daac80e0ef92f480b1dd2333e24ac668f1aa5edb7a5d2c62c30f6aa18d0b57ea62723a10c2544a536bd32660ad7cc1942844f6acf0737cbad1c24ff31174afd343d379364244c3ba6cc2e4d7e0925c12205919cc0629fd8b73b94807cd71b3da8c8539ede2558b39106d6360d0c8e38d7f7984b91409a69dd7a186b8f04164e07c101d389f8904b24fe281f085b8407c4d24f03e890d842fa205e63b31755e27ea84ee4d4159840620f2cb4854e8651ca8e8d1e89d6675051b9b988625e8902153208ce88abb7603402a8fb2d4cb7c846d4131a6db484a2a1bc32e80838e0e53831efaa8aeb8902a8a78508d201d1524d1e05aa0fb7fd26b3ede820a545fceb690dbf63477fe8bd6882d3b4b637802b8df0a2666264bed651c6245ea97127df8bf8c41fc99feb57244e8fefff4dc29a8245f8fe0508484755071cc86493404e56aaa59a2aea55060c5c6d4907f67aa52f89908c1e6249dd61c9acca1bbdbff084baf29452890b57de1ccf911f66346c5e57da5d7fa42540c3f3e9b62945e7fe5320acbb76a309fbeb426990fdd6f014083dde6f51647abe232bbb341b36347f3f6c991cc2ce1781a64d4feeace32609b6b1778fc4e6a0dac81e474f1868c686fe32010a754365ffbe78411fbec0e299516526760cf2902dd1f7732518ea714bb028d2c0828e58cb66a5a850bdd119da573948fb61e3f543e99c2cf3751ad435282c0004bf91c793c5f23ad4e13491d4b74d7d40611ed82a842b227c0d3cf8855b59a4cf262630b37c73ac09b6a8c2caba3b8a8085c04d50f94bc9acf3783895e0b474fc337916ab68d9f81462bb1c25aed8326722db99ba492414069df1d309e9488b9ac86549800fc1ad0e85cadfda09ccf85544050195ae87b63d9006d0eeedbba236abb7a8b8aa2a1dd22df0a2d9c1d0ab1992ddffc58c9ea0251c78a58409c692dc0910e096b96204b4cd20099ef52dbfa89cf6b26956d3724d9633c05de8a1e931ad39cc8ee186b165c49d49d5421bb7be1c1f65e077f29b37544c957ea0c3e8c37bdfd1e68affe7c74a9ac99c4b943573365dd39bb8c4260d923c9336258ebdb315fcdde70e4bb0ab762b6614014cc7de0d00c3a2fe4af57b8db90d833c25c2f0f9e512b80f53c053b28117c0c3870962d221c871ea0acf7205a90d0ff48cba2ab72c43688903a5c692dfbd210e82ba93320cc1e88459722d07a171e847720db4759288ded448727dd31cbb95e32741d0c648b831601bdd1237a6716fcaa22c74e8da2d3c1646cd7d27b2319360f74d07311d0fc5f2ccf0936e4dd051db78a29e74645fdd70b9c46866620fce6f8a26b564081a38b22f50b16419cd27ea0d816f4bda04ce73698307fafe91cb1a29fd1158d18fd22d80d176fdbd0983326a45802caab99575d4014daa803d62fa695b329849a279edd618819a97d108601b7190305d73e2e27f6b59f63a22e1b2e6aaf4e81db014807a271485d7b0466fe099467f7ca0a969b5623e0812b0648a39a90da0a6d56df9e1e1f714bec4ab2a59452262965fe051b052705f25ae1749b4d380d79326cedafa66f8fb6fbeab8b36fd309cebb3d2cd0bd816ddf9e99cab028f3fab61ea3dca28f821ca0dd7c3ad1e789be2ddb7e637b7ec6d2e3c4f8de9007646bdd957b7a1eeb996daac9ce63b7e7f6dc9e3de3c424978d7d9a035c7c2dd991147338b0eeee9d47bf769476f844c3f42ec63ddda3a4de326ba0e544f1c5a694d229335014a902064272e8810e4e44ea639e7b1d8e1093ba7184914c90191553044a72e081d6c0e4052fd6476683b83029220f91a207af1e5e3b4db025f087202220024f0d50dcd0249b7eea868ccccc6b0708db0a8d8a0cb0a0b076e0818a123418827a7521401c81c488111f864421440c2ce0c510f00813ac08822c880b902047074b00e1459322201198ffe2b352b20229a418394204122a58470481c4942045a8020816f885c19960e011ab000f18625238b14361ee6d81dd21c5894fc91261a5d91d3e96f8bc5c58e8234926c1c0235681989423229710d4c4c007430022042ad0d981af8008292d500b0c1bcb0604882645502145117c80022c5c0551a0b8c0b3e77bef3dc1be57b35b5db1aeb9166adabdf4ded1be33359a666bcd35df7befbd2f9c6bee5e2bcf14d0bdeeeed6b57b35aa59961ab2eeeed935d7424ddb4099e7de7bef950282bcdd7bafdf4a7db86c06ca45eef5a2eeb8301061dffbf8de177c870fad6a55cb5af6aa390bf6f1813006cd352dac8e4e870bae695e5da6c6352de7ebb7d2aa8da0c5561d2ef028c0054df37befac62df24344dcb5abe57ab9ab5f7de7bef75cf5a76cdab7577ff4c71d95aebbd93065ace42eebd95f2608b05a94e1f1f0863c0d6bd5218b4fbb9f8de7b9fe27b3ffa054cb105551f219d272849b250627b3176011ca470440e3c2481081f84b0c053205397d010504a290e015d628b999a0228016efa2d25fa4f3f156efa37644679dbd10923b870e2881a2e120cd0a00630881f74a0928302cf2109244908415af283cc088a912c13faa498c088203a14998d60898e124050233323f332d408a529d4600958f4a8608a276637f4072396308267a6a600358480846847275192e0d2e4882e8650028a2345dc072236b85010844f064e2849c1111fb44a37221208c328b01d848425702332a85aadb556ad0130191742862882c8114ea06db6d2aa713eeb4c4da5557bf14915e082a655ad565a3507d1e915e071adb556ab9a4cd59c564bc45a6b2dd534ac554dd36cb5d7b509e3d1de358d5a1b96d4dad23c88011638d881a5640626780d5177d4209c04e104aa23da5f1c86b029a5796547275f0ae615f4084f30f1c4131a5a32150441a02801143ecc0001b2e0091436b87670434b30059553be885450ca03a57a0817e4a0bd5603b5f124891f4c27df0d9b6547273d28610551c6c4143444d1031d9260f1e53065b0e77320e7210113223a599c00882c7a28226ba061ea707d08b1d5e9444e3448f244ca0d35d0a2861b4b82295a59e8605b90b5d6da2c78b6ede8932c9adc10066ba5d081ecfabd97be8f1b6217259872c50b8818828b2245b480c5a0c8a559f8b059bbaa22930511ceda991aafd6d6f02ae1855e29a680fc3aa15a3461ddd2ebb14a73602da59688b5d65abb23022fc05e70eaeeb55eaa4db1b9bb5b6badb5d6a953c7d85a6badb596c617dcc7142d98b3240426425842430a215bd8800b2957f4dc30050f4eaceb3841a59208949c3a279e77ce110c11591cae5500c55eaab1e7a76a742cd9f335dad1c90e5decd08e4e7620c2f664620c8345f440073e30c28b227e0083115c213ab038c20a1f9ad460881cf80e4b342184d21a991999979944e810214df0a00a16e4a0c40dd561b5040933a9989fa929c013213bdc60e2b04169c1671a464c10516514a5ca2b4a1364c0e0073c78e2c4ac0916de5a61089d1a78e14ac209cb73d07640526405ac1e2a663bd80207135e4c101141018916123f5c214d10317b4862f6e084125764193b3aa1c40bb6684727947041d18485841c1c79a208112e3eda261ca69452fae4a5834d73ce1f4a29a54f9a10c1a6a0238ab81f43daf1850509b6f732974a11a37984086eb8e1862623f062ca153f10e1851443603b62cf1128a53e5a688e6b843a0e9b52fab9f6daebc329a594d24b31c5f7628cf1bdf7de7b039a4692a9ca1f928b0b8986cb057cd1ddbd9709ac7d344d1b695fe5ecf9a69293964cd524b94c2e268c7194a82552ca0eb5a4f3bb91462452cf9e2418e9b5e7bfe82aab3d61482e940be51262f46444fae931e17c64e3a341d23492d0709940d3cecce1d9f8f60493985cf34d4b6c7cd1269a40928906d8ed4c14cf9e2e9f711cb5b327c9dddddddde549daebe1825ae223b95f3ad69edfd20dd9f34d5d6b4f54933d512e574d536ccff930dae472d5ecd9f3574cb03db9d79ed3c4b3e7973a138872997e50ef4ce04c4d926be6c03f9fb484b4336980345c2eba4b3253f333226dee8ad1e6e55d3aaf87873b77e00f9cdc2eef75e07671d17293465a8ea0f932ca2fd947ae5b5c74dc1d38bb24dd8ecbd78f3a268d6e67cffb18844322b5c49677d151866f9348efda73590ba1edf2f21ecae5a2e57647d100f7dc2e9d09b4f199401b5f76d7f85f4ca027c3b77bb8c6efa2a3e7dd34b5f624b9a6fb672d5a0d87f2cbe9d3a74f9feeeeee3e7d3a3753d35158d16b733091638cb712dbf333f52abfd27d3512edadbea00ea554476b6dad55de7b2fb65889fcf7fb19639c573927b3e2c59ad5384dc320fc59cafbd6d2ef097eab7bd02fb445c431ff7ed7c84ccd248856338717da62cf904a683673549939bcd016d1264e21b87c3f83706e8c71565fc7f419133ed331bdbb9fabe66f3cc042e13572bffb85b33ddf5efc2bd7f106577aadd571635bbfab91f80a349be0bc5528f49f0ef32eaf5cc54328c45adbf45aacf1a658df4dafc548ea5b9d736897f30c382f14aef6fc5018b220f74669f529edc5f19337d08a85e921c7188f4567cfcf334729ada633e5d47ecd9f4f973fd2809372cffa9e0c2d3b9fb268da4797792c7b520f93e02a0bf50a1bd8cf2d6c5bfefd4116dbbb3f60c29e1f65978dc0792257f6442e9c5f7bfeed228bceed4225b7f8335e20d762adc4185de6a1cfa0b4b8bcc7d97c3e7e1e69bc9990524aaa735f378a48e7e5342bdef5cf235d29a5946e13cccc552b304e5b74b69bb5201ceeb51bed7394534a17974c477a6e4de728c1e0f64c3aa6cfd4dafedade8c170f30259899c3ccea36d277b768cda361b486b94af7e8d8f6d73d2bb0ed3142171d23d4f4276f39e791d459c1f627cd70d171a6beeda1c0183357f9b3e895afc55a8181d133186fb2b7f7b6adbbd5cce1f8f386473f4138a3cf4cb0d6335da55b99ac49f499fb0cc2e1b6193da0193d21100884d30304dbfe2eef514aa9a4944a4a5bde457b3d66d8606f23edbbe5dbfe269591ed4fd2d9fe302ad05b89025365aa1c66e62f98d976c9f7863e33603e20cd068e934f38fa52b7fcfc80ebc2985c58b7d25566441171f84bad6742e8d98c28449ca8ce8822dac490a667bc3ccafe41691723a4a450e87e088473f16fdb48dbeda291bcfca0db9bf18ab21d25d2d9fe261d83ca4ca15cdb7f05dcfe241d6384acedbff26a6d7f1d0ef5adbcf614828b11ce141e024c15d36ac6cb695ede6384fba58b01337be2077591f6807943eaf4cb55fe9b110e663603ca54c9972f6a791108a7e565686d170fb3a03d3c9c019ba1671187cf78cd382fc68cd7f647ad660e4fcfb6875462cc625491edd7b318b01ca367bbcb3c9899b7c1cc9c467bf76066d1e9afe8e8f433a85a100ee5e7441a89f6d9e5a1ce451f945d50f6d679d906db3feb8fa6a3abb08ed26e14471c4ebf4d69b4c1db69a7a240e60c13089e4102b117051d30f58d81fa5ead8e611681ab3db62ba514d93eb6548b91c61835102ce50eb2cf724bc96e39a7dbc079188473bd6701766b367018e7d044c2b5a504f5d8b4e03c1ca3c76519610a2d2b3129bcacd472d22119bdf272552a47661260b27c2d9edbf3c24e235ab5b47ce6e282e9ea350b800bcb8d00a4c23f9542db4983b8f76e28c2a1453aae9ab09e1b5a748216e109b2421ecabf3dd106f5f36f485733c7e9e7d39c994355e3e7d32119a55b881b850a1de16a3cea559fd2353e936a7c04e1d490fba4e546e916900b71d7e854dac69f74dc2b9fd2a29c999a5f63e5558aa150ddfcc8eda4b7fd1a498c3c9da2ab4e3a6f91cf5c87ae4aa1103e696d3b69bc65d093be5bc6a35ea3fea4eda63a47098d6e0333ac368db7c1c76a653abd8ccf30201c19bb3bbd742edb49d71da3ef8eabe603405f1e57753a47c49a04986f838f2e748355721a9f75c179dce9ff24236daf91c400bd9777443953355f6bfac9d0a2d54ccdcb136d50b8099cc7e110ade8ce2fdb493bd53e73d5fc4ed395ab5ecb4c2f5599be721afaf39457aea2a2d50dd6a97b9fcd1c72b76cb9f92c54da4e7ac26c272d4f3aeed74862bc0c8dd25ea50ae7d108433b9df4e76168ed4d3e4b797467cf278956de739cf664b6275acd682bb53d9fcde8901f74c3347061bb5ebc23a8c608a20eb33350203e839c2101e4a04a9f520a968207cbe4365332594fe642fc8387b74cd69365b20f6f30427ac39eefc1d85326b34bc864a12d967097406fc832518f4cd693b38c8587869ce3c729a5944ce664e24e299318e79c33ce18638c31c6285f7631e2582141b8a71537767b2ecc5538b3990c87ab1b52d268ef61cfde0d3af747e728f1d7f17215bbaf46427f50cac2d83a0e354dab9f9c7369737c1fe728911fe46fbcca24c0b6f90cbb57f1d94c4df199df9c73ce79038140dbb6b1664cccf007e48eefbd1a07af5c672ab324acf02adac44fe8ba5bcd6af8d36d5364176fac50b41e5a85567bde1ed4abcc4258c776399c82759c86d22e873091cc63aeefc64e83571e96a218a36c61db483e8f57af3d1fd623f16adb5e0e757218e61054c467b24c05a747088483effd2aaeeee1b23ccb54b04ec4317318729e48b627d6d9f3af16a188cacce1611d7c299d2ce10c13c8ac3acc31c6fbd69ef5ef0c38f972eb3c25701ee6d9f6314fb4c952bb30096a41db55d62aa5acf473f2a92016f0ae2f719512d78a3dccd3f201d70a0d624f8fd321881e74d8d3db5d0bc805e79578c03dbfc48379228e89795ac0fa2d5c448e319e286c2995b88ddb5a309672c35c4c2af5a73fc594e6c4d41da7526b67142ef688d24a29a5941284633fd77a65f49047b1d6653bb8ab65f6cd32e1e4f638007abe84e2baedbeab4983595cab6658e6c92f2877a7ee2b8bf57c2f5814bab1161971ac7394dcbfb1ab33692ecf9ef7e5dab1f156fffc6159db5d906bb985e0f297bf18638c36c66863f4cc431e32531a68c72be6b735e59456c88f0ed52286643b423157cd2133b732abeabb3d67ffa03bb334faeda0aced614aa9b3eebd2ed2712dfadc378a7dc665d156b56faf65bec5b8d6c984b3afc3ed857d4038a21eb4e81319112181f344a027ea614f3089c8255a42453d50eeeeec595ad9a896b15e1af238b0453c769ef00a77062e6cc7ff806be7bfdab34cb85b738781fb567adb96d1e6e4690e62e1dec7f8931fe7eec2228efc3a26a6c27917b6f39bf24b100ba71d3ac2cd8ffe21772585b38b1c633c14567b7ec47bf42005a98dcf55f3a5c5548221b96c7c4ed375363ebca98dcf043231bb1da7b93e279d3ea3c498c5a88262b90a357f827b4e2826d0dd1f306f4c1d6ab519e13cd40ce5224d4d8696873a1eba74609764aae6e748a9c3084d49664a162b69181ed37c41b99c068677309ea8b5d691ae9ab5d67a25914825f797f756a2a0b4ad562be4c10384e38079739f8737638487d35cd06fef4956688241f6f41c1980f933b273d64c4dce8a5941fcf33d47ae106300b4883baf0ee97ec8edd5d59e397bfe16d2f4e54f500b13848304c7fc111300fda79b010604e4cde7e5cda7636d37a067d19b9ccf07c137db5f2d6f24e8057a03ea82d820baf9fcbc99de0c9b9631050d67c7a756ad8b13a78246803567a6266b7b57bf158f7923410d00b23b50da319436dd1b885f6c09a4863b02a05a4b04ebda13075c2b46a79dbf8e695b9b62c9715e893e0f9f3dbc850347755cc7017e533baaddc0c9184e06e0d780b7366769eb468906bcb5e94c451a8fe0ac8bbe288bb258319ff9cc6702f818e6aef522c1c95d2ded24d732bf34ddbf3eed7240697d4aa90f1cad3a66aaa6a54f29b5dccf54107b29b5d74e3ba723c932f82ae66cd923860231114b39a9d31e31b38b3e440e11f156cfd49149d72c4484f3f09e61ce2a70222a25de6a0012b33509fa18e816bd273db025f759d71d3ac2712f1ff4b9827040202eee1148d39da7dfaae7e6f26f9ff148c46dd9725a24fa951ffda67fc4c0ed4d03e18c467283749c97cb9c8e31a43d80370fc08c57d3765310cee7ebebf08fc6af2d20262626e496096eb1c540b87f1f53edc56043473e5fb5fcc8fb11b4804d03dba6d656ed3e7d0ec1dedae10141100441d0874c98927dac2672de02c39adb0382200882a08fc8d5d4c8d4f48061cdb4139cae1d9e17ecfbbeeffb3e10044110047d805e6593d59adff77ddff77d320682200882a0ec932ebcc3f1945e0f4bf5c8c4beeffbbeef93b1584cba3e199be115c72ab562fcbeeffbbe6ff6c98429d9c74a3d1c0cc7d784c16018735c49c64ee1f2842af8f18d01d9db7f3e5c027a525ec50920aa437b6aabbeeccaee484fea80ae590ca547980d4b24981596970b8aee0ca7f3f0a658015d023a8f4b219ea0e33435dcee3caea4a3f34a8f80cefb037406e87a9cc647c9a6f34aaf42e77d4de7a5683ad0552fa79118735c69a6f34a3f80cefb94003a2f95428731874217b32ba7999fdd719a099b3f6385633a0f7300e83caef4baf3fe657436bca0d3b80caaf36452313a2ff5a7cefb12d7d2e197cec31c572a3d4ce77d2a55ea583b7f1e6979435b4e9313e46f94bcbc921f2c2b3f9fe2309f8620ae509a459b969f8dfe4593be453ecce70bc28181a9750526ca05572d9aee9791872c24198b6f925e893315f7c4518abb65a459481d12974ec7bca1ac186dcd1e57e5d731ab88935b76354e4331e66a746aa84e0dc61c572a3ded8921e834b5d5025b600b6c812db05531e6ea4bc6ea4bc6ea4bc6ea6bcfcf69eccaae3e8c39ae54fa4fedec39594e63c32b23934afd974a1c6743d6062f7841e7b9a0f35cd0792ee83ca21bebd9f3edc65f705e6dedf9225d459aee6c91f68dbfe0447a6efc05375f6efc05e771170ce50d7f66284b0394b5eba52c99795545c80006a3f3806c180feae0a05fcc7b1e3be13d9f01e03d97ddf847e9f764f67c4f6e195ee965e7e1bf9f4f1ac6ce723b69138539e9d23e9d34a90bedd2c549b7ec8c37ad737ca709f0284df327e802fc49b36c1c5a8903e40d0a394a50a71b863716a3e54d013465f9ec8661ceb47bd6bccdaba0c2cf9a1a156a6c4035358ab6e9a30d35b9114cab68d345b45121ae60f3f3bdcaccb1c20a3a461b97b2e5ab30842dbfc6971073d4682974e53472166f00a06f68943e9d1ef5349f43201c9aae86a3d172bf96db85b84f1d4a23a17fd23908a0e92a76d22b2fd445419fd1165d51564b4bc985948c0c0c8c4acffc4e4ad778d3cce711086766469477c21d8f1272db498f06b0c20de0a4b91b5335493a9fabe6ca55786565dbe84c0a806524809316bd60a29ca9027d01981aa8c40d38e534ebd0900000002008e316000020100807c482599225311ecbe90114000d639446705e3e0f0723d21405511cc420c410430c01c0104308418829466404005e4bb3dfa846327b7419700a75911989a67a46c557b607727af801e310989c33f133b2874e945405e5622e30792a75f00ac33f920014a32057a5a83d1b9ab697348a07b077d0603bdf374c9b62e9c4a895f363ac6afa9b1c6207c6f5d3bc6e1cf83f77479b48fbe4e119c4b4b04c338660b6d6a5ae5b79af837d161754886804cca22a5f2c00ddc4f6a838efd6d5bc0ba7bef4abb88191270fd79dc8792e87207f6cc7d118166f511c0b210c96bc740d1d0350837f7602dc2f5f32b5bde291a1f3390bd90f24d8f16472e0634db31c79e7df350ad03190da8e27ae5aa163a61d7e30750e215e468470f46a2464787e0000c0095de96a7c8414e698299ad18454ec24423022ee133afde6de85d000513a825c248d482bbce412ffcc6ea7b129072c634a4442f54d09b512b20052e44cd9d24c1011a9495a9a5aad134c40ff389351e560a344a068bbefba5ce8d806da429237aa4b9fec0a1fb36aa8744c8ad512fdc5a082fd20a143ee1dc2b8e0e4020688ea735ca8ae6e21aaa6dced89a3a4c8c3bb1194e5eaa90f26e7ef30de0f31cdc1fa61d91d532ecdcbfc03823e6f0d2e7210000e3dc169cc3812e17d422d58452d16368d3da2e246bdc984596afb3a22d872eab92e08e95cbe74172a37a32cd711430e82bd957270a0bfe7ed6373ff9a332fedb519216d222efd30fe34de2a6386fb3003fd86b828c2a9e131423b4149aac9eceb90770e6e8b8ff10dfac3d6552b7ed9c047fec9150708d07edcaaae0cb672d0e952f9014cf0c0c980f9d274700690cafded14d5923d0f244702921eb2fef0442157391162dde8fc91dd52452e7304baf323a5a3fbdb88e537c6245a1017406b4c690f0d108e3c05ea6c1c059edd832285acd2e85066c19a6c4ec93069966a5428aca67f9f574c6e45e44b7a713a01bc69824a0d42e9bc39bb35e2b7d6387428686f04068c5d4fed99c509c2b523e50206e7400f410ecbf25f585e04c98f9f9243448b7677d0339de9cf0461142e4802a9917882249b09b20c4bc71c2836c6239d2ce30e83dad93b1ba085cd24e53295b94993e8e230093a69efdab41d95b8cdc458d12bed6b15ada1f392c3388dbb7cd168aa2440c0c003d47cfb22b6a7db3c50341bf9a313a6d6b0e22dc224a4cbf0e81d9892e2e45f5d3ba9942286496d5e467dac7627b3a240415c4ed410c9ba388e10ae5c95403036b8bc7cc5a83fb3b5e4ca39548f8703e757ebb521c95ae97fa3af12f219388983958a359607f176eb0b6556ce574ca01399dc06882588184c84983390fa9f533de6e02e6f8eade0501d77d287f6cbd370a60ab6ff0fac2b64abec6a85258d38cc1dd06c4b8f2706bbb8467edb004c99706e75df9719adf6a3825f0c081fa1612368094554a6a30fe037582b739dd9266a33a649c128391976cb38b3b14c1334e53d0e26140a911a6fa44ecabc0b6973793732c4eb8b7a6b0c593ff2a6ec6e0eca48990e9e25ed8321a25aa63b2b6cb20012fb0db2ee4e3f834f08ca2df5490275d98e02c48d63df678df157b753c62d8ad0c12044b9ddfb6b9a08a1dd2219de0ad8081df0cf10c5b3392a00c1258178a4c42f816687de91c3b33df7e90a40f468480a92869033b7692805cb20860aa4a361e93c349ab256222626c954a9b3be851393acec3900fe8daa0b49890ba31c1aa304ffd703656448f309940956a69864b1eba9d40b98301f6e4397851b3e799cf84d69da3785fa57efd3e78e49961e8b75a9c4481765501ae832ac5cd832b07666ccfc9aeeb26dd6c92c25007f6071341d032fcb50f01ff82dc8466c55176eeff7cfa652ed1f7a0e5a9f2447c1c481a9341e3950c5ec1a3d29888d92d40094c53ae10c728a0ab1a585f5c0781adfc1d7b647834a14b09804612012c51eb2b8446140408226b9a84c0f44e9831623045e2678ac320183c01805f8c2921080726ecf61befac94bbf4101ba884118b49c8f2309b12c054b491a205362acb606eb1183d2e036f0f521aab0e673441e1a8a8ffd839df765424044808a221474a0134a1ddce66491f8a680aacc8b9883227468aecc331a74024710478f368c06d8a2c1f5c0ccd1068605026a33c470a84001fc392a0c1eace80376933d8a16ace84076931864d8c312d25427c410181310f42a0b31047904ca82800e0ca1d907f4adf0ce4eb0b10c47d8e589642339b2f3ae6fb6d809eb17bdaa0ac1314a15133b52501807134d5bcbc3791b43f34a789ff8a81d93b0fe23ea23c577fdc7c31f4d917fd9a1c314025b3524a446e0e1aa04188165804227eca38df18f36fd75b97cdf63eb07c7989b1ef678c0a3810f0871b4f87af30b6c7b1e86e4d5a39e1478224985c7f45be2dd8a151eb170a57b44584778dae092fae02775090dd08ee5903d10c5c76e86bc9eac38dfa030af20a287aae5b05f5e928d0e7b38c08bb42fe021d5baa02b41b305b686900db505169e4547e494065a3468a474a650a0484f0920967234ecc932a536097c87512ab3764008bbb079c00a4d8bc53e78758402c07372e0f1c217924622e1637d2dbc85b6c118080370592dabc0bf6bacdcdbbfc81373ffbe0302f6f4d9c1800a69d86d852a61f9455af76d5857d8cd496e8b7ed47c61a861233028d2d2b2e8a73ff76518c5737c391b5be653b6ae08a09243e689f3d80c9515828642cd852710c2b0080864a2e8a253271d5a6b2455ac48f756a7e365e5493fcb6ddad03e402a0116fede44c4f86841e5e733d89b743c0584296b85229296375ef0d84a762bbc369c51f7f739a352263114fee6046711204c2856b4c314e9f13fe24348f8394295794250899d08df80c4be35051001f65c393913b1399b50a0371859cbefc17bf359b2e421e2e49d8d38f9bc586113c9254595966a65c39b158fc5e16da9ef866067b0a9c2f186e0e55f6fc29334056b2b8833aacd934416762cb6833ed39d353cee5ce6fbb3c237046376a544f307c931d30ba42024b7a16a73e273d7a94ca6af53fb4f3a3305d8939faaa18d1179639a82f31d48069f8d5647650da50d83018c95c37b00a4652bc39999a4d4e80dc13e5e42c60c5d6cdb1af2de771a21e02e1b404903498fe7478e74da753d5cac362b73dd680595d4d99d9fec589823fef85547e652d3838a89487e7593543904876e5d941939ae38aca6a854662a03a46db91fc2795f9e7cc8891a202a26c15ec4a14350f74f6f11f340b7a972b0d0807e545bbb01d511f823a953f40f86b2b204af0c1fe804e29ddb6f13488391d23ce51b85b4ba253fb06201797a4d0a1b9933f56695b0d6e85f94a03f02b7e5d1cb9b4104de070ce65b219db80135d01f7800c402fe436a8469be9e8c82fe4eb51cb8eaa8c9a2830ec1c9ce924da2d4e689925678f017a141a92c94f731096857616dce3a410ea08ff3d70c9b37cbed587c3d3ed9c36b44e6ff673150d26edd9511dad34db83fcbf95365022674bf9294012091d545d2f9ab173438b08c6e17534adeb7bcbd7aa6a0c7f9bb37f29b99e7d89945e3738d11650339bff025a759dfc9e2daf8b4c04072a1834f890f6cc460343199c432a3ddf2813595f53bb17fdedeae2612ffeb034c8960ae526e1176f97f373bb6a670fbd9f767c744329889c073e2d0c5f306cc68e1f386fb91f1b39b7bd12298995285805962f06ab4a592cbab0d2c83a0de7e5a27f114bf05bbff504d0fbcf364035bfe9b9ad0919ef84c9b4c1fd93976188cb927f2e09fefaa8b071f1a78f9ffcd821553052656a08b67fa94415a5eb6c1691b8ff927aed5fbda85fa47137d9f5dba76a570c502228f2efb922c1f6f4ddbc824062bd336abeb6d5cc6349c4bec2cc4107667644b8d044b9beec77b3c01df38cdb74edb16a7c9023a12afc6684491c66964c519e24ce0c498cfe544fb29e87ad4f358f18fed43060c1b3d1f8291cf0751f389d52e63dc7ebe95ab95b168e33563635b3b349263928b346a9aa2bde2010150b0f231e42063466ecae213942f29659187d345f81e23154315c5b4129f19860c01fcbfe318562a3d3592750cf1aa2730b992ab0b2f42501de1d76fd479d0a6cd20c30708bd9d1bc18bc6d25e444d43f0fecb6c3a71671654363995991f51d798835e26240ef7ee1b1efadb31002df56b06645d2c61165625bd65150b6ee40cb330b3f6c801de4b85da3428cd6df1583c0e656ee84a01663b9d95d97e5494598c88bf02927e40ec744d1131fd10404d1df5d6f95e4defa800ad60155b4c8a2218b1a0303683bd1de2b8fe14e27fa52c27afbb55e05d9a6c28a2533e838f20be7d11fb6f3ccfd8c27062c41e283a7e40c1037353fdba2363423fc36990cf494c4136505be7a098bd8e915e9133e4d56f3a0d3a8443e1f9e0ad6253a0f69a4b1284f4badb7f03c8fec42b8c0ad169da6bd2796c76fffdfc0b34a1f08da7affa0e8e3a057d54ceacd65c7696763bf5cc0463767d147f2f3553fad6c5e3b0ae11ad04bfb5aaee7e5797bf7f4e47da422696ea3e26fc6691207a642353c8ec2392baf2cb3131ff9ec4f16abb38d72fef6a4658ad474ea764f6841a0b1b67161bfcb59b011c29be70575dd831b874ea3db9b03d292b8018707ce0b085ebcc7d36234c624094990c2f18b95b123cd028f4e9b49b8918d758c800e11e26691434aedfa4198e89e3f623ce2a15dc2d0e9470f2e09f1f00abf929e05ac0dd05957d1d007095fddc3538b5e990a922fe06b776178b787f4456525cd741581ca796a1340f0c517e4631f697b1f542a43d12314ead0ee81169a8d2b58b263ba955dc25ec6e6fdbe5afb9ef851546710326477a4721d54163c1686256866d95fcf65c03f5991212d37890d122326dba2c136c1eec82e0a0528bea01e30fb4a0bb3e838a42222a95748a4614830b47564033a97947f975224c151fdee398cae6ae6b124ef7f516a21a7dfbc86123e582d9696a70d8770af392482124cc82702d96c66ca0ca6a56c2ad41f8567df25a96b60e4a940cc4e78da5252ceaf4a3001c2c07247cbdbdafc6f879020121bd6db0da514016b0f40862d182612997c2cd355b61e990cfdd5e5b79ba22f37e1d0e7cade6ca5c9567721f192213565f50e818d123fc83599c76e09164761cfcd7f574c93409de81b7e7bc7163fd23f36cfe05f327b2ee57721d7ebf24be50d227d75a8001edc599d1ef3a273fc12f566900e7091f84a18d01f7fc5b181d227b4272057e083d2bfe74420843eb20a8a4477a081517004957161b7d6b3102447bc54f8b19305636edb3bd1bf39f52a856f39f6a1841ee08583866ab85d68beccae23d78e08d48acf9029d09202a71780b0982917d42413aaf88b034b69b67a031799069c0f453a07479ca5adcb043eaa33c83c0c0f164c3be1bb0fc0469b53c6904c8d2386ca1c7a22c1c84868bba4e5ea95c990dd1f0f3bdf5fd0a7df4b2ac38e67c9474c8429884ee973505fb358e99c00e12537108ac0413691813fe10a3fe2759d6ba8caf593f15e763692bb5b88cea29aadaf5ccfe2b9362e51550a05b03562b71dd0d04d761f1dca9579d748bf90637356919f72e0896f2318f0dcc53c0ac8a06c46adc33501b6b608d55e2b0061f5bbdd14e30dee541c96f11fd3d39785a8631101c86c8ab6f48cd7496715214d40fb2d7460d6260c2ba7bc8308d17458d8d792d172f80f5ac1d69f7457edd76d8fbe2589d8d7493ee45e04ad614b0cfa1cb914b3f8a56f69d83fa21742f17e2247850291b9878f48494ef5462b8fa221618c3ab4319654aef3985ff534bf48bbba76143450a80bc60df27437a1509d1ad0bda222baab24d86b82b76a15fa9790e5d133d6efeff6f79b9b00c881927ff237d0c7420e882e07146504b06741767377e40d8ae4b4f6c58e5228a7ae38815416518d75726ac8a33b49c8c3a061afec885cab66e6b2919c55e059ff662482d3f0e2a9519bcce368ab737f416d470abf00562cddfdfd8fc4c247df689caffbe85c7b407407d5855e382259b26134d4bd76f11fbad8a0314133eefea9378874c7e453c502c4134c60fc93905dbf6c4a7695168acac1ae50a5e38041753ebf7c703f01ba2e8e7abb63baccb2a130fa0185a63588dce9686738d29f23e470be03002127a2ac85f7800febb3d4bedc798965d62bf9a75ef4fa022d0744bbe2c3807c8160293c0c20541f3b524c54996e998cb7641b91894b79a93e0231ad670c3afbb72fcaf4c1fcdc01a722c8f04d60cb0bef605127a311991ff14217d5ee88356c5df957256b0008172efdcff8e59059bfc78c6867638b28e339682f68428f2e9b3764cff6629dc140215931e37ef290c2998281db72902a0ae2c02a8450ef8a5c1166c38706e00166a91d7944ff4c5e4d3ae30598414a53c507a6fe28138953716f3344a7685d6fa9f9bce384c67ade98c362da078c45203be83d5124331b2db9756fcd2035d81f00466690ea1158af073bc792eb1cdc10dbeced6a21ea47b5c2b847eac75c71f6761a6e8e00815379356a26ef6f4c86f1e373ba9cfc7f9ff57aea8a1c78a970c2e721a92a87867f321013bbf055eca825111379257e2260cc354c1328f0a42d8249133550b5a543b98c6696520b61ea772609abfc3806264f72ea2bc319018c366298335173c126aa2ea661219814720169422ffe65f4871e2996422e332fd1f896b1fba0b85d2986c79d80b6cb93307c728e2a334f664f67229e74e5327c83726effb7611bf318216cd70752c361c3b37101f90368a0dca88703f07e00d88377bcaedf17a7e92b1c2122e8df526e0bc525b04bd1bb1857f314bf4412d5996df3cffb24ba6a65fa29a83ebe1124c5e56f56a61ae85f5db368d523689ae9d5aa431854e8e54b149bb0cbf76793c67b97fd1ed8809323c77655966340adbac0c67b3cdbfded4bfc298e6e66085b78035ce0d6d198e24f608e8220d58637ab12c7a048b1e71888b0f71a9f2721b8cf42a3523e42a6389d0a13516f6502be2ef597aad0f5655692807904e6658702e76d16286227b73c842de69bcdce2e55bb9699df76e8f220c808edeb4e8ecf7f2f2449cb787b5afdd1299f47760c77215a6c468e5a8b3f82e1b57dcde9d63b39116882ce1f1a5e1f3047f1b9adf8bc1ff5fea6d312104fcbcf48c65fab3a4e351e0eceaa1f48f54afb72e8d9ca0f79815b147df55bef461f2d631bd627a519476ed4959ac4f8b8bf4b8807d52e5f951ad97423c83d96de92f935ea0c11f635c3a9b319129833a2611173203e61b2e4ec2b6fc713abd659e7ef5d8fbeaffbbcf8f11d2e6e8080b27ae0933539161ee4470133e0c5c528c662cd813ed05711466a09ac7099139c1bfa585b5c79cc0f2311741a2df1309b739fdf153df2da9491db8942e399be0b81e4e7e34b0bef976d14420cd0317a74cdba0e0856ea94d61bd0c2a9cf9b57db1b1cf4d49cdd986dfcb5461092ec65a888a1c964b502094acb12cddf77dfdda74c52d2b1f62297ab96129b751afb9f5dd8dc2764bafd2fe510dac7c2358fc6bb2321ee8cd7830a6e6a5f95af39a5fc707c68e6e5bf3db678a77569f370faada7f5d700e6e9e92b994773b80ce139387796b582c7b507e87425c555ae710d41ec2fb4d3ce6fba7b4b55b436f3da3db8006ffb1c7e4185cbeacb989768cf19faf8a608ec9862f43c1bd50a45caeb90e35489c397f412c169c536847596f8570b0004c906fae4fa9909463c1d9e11813977ff43506616f3ddeccc1788b191f8e0ebc839560d6f494c4f7e208cb91c2a2f9473f0cecd2090454f0654cf4000b8b0569528c76761d16fe0a22a23b04e7a46aa4444888d1e3173c1fa15798739f4fb991d3cf5e3d214982e47dad6e618d36125ebe5d33d9b7204a43cc5067155f0d4a61add6718790aecc12b666e3c36b7215207cef718f51594def81668c543ca61da0634120640db266e0da57b203f70d9b557c039e16b001157bb04de8cbc515672ea94854c8e0a77c94eab1c852e99ec424377daf367ab76e44b8e9c330e86da3965cf067bc5b816b426ade5c3c732bcae816e36684c36b55d24389831122e3b91637a04592b3ce590abe1efcbdb95b576e6f0bfd3437eacd17480b8c2d0aa356777a6b2f43d9c44c008b0f6a9a4c767b83faca48bbe53c87c95df632e16b2ed95854322c7470153650f3b23cca2b7fd095c1964d4ae1b570a837547d006bddb77b83cb63e0219729cbe5946cdd5516969dbccef305b8f962643866ec89c690ac099a29e2c90335782418e5f94dc6edf87b4d28d127f584ddf7c29df142f14cad692aa975bab633ac4428d5235003944665ae914d31b8d210ae0c35b7f25fe075cb4b07ab3b002da53317a0754b57ab2e2a05c431642832ccc4191c0fab17567ef1b20af59b6ebae3a89814752804c60ed5df41839a97822c6d4c675f6783b850b8053af2997d3aa5e01383978e364fcc6985f26c593b5a1f3a9b74324635e7fe74231a362c8268096831e3acea047bb98205514df97d0731e356521bb9458582e044d7504c312e1faa72eb17472b9680f783386b68be3b61f79faee2e38fd6a328e1d2f7821505b8dd14db0495fa5c02e6e86791ed3076579f126add3c6f02bc44c59af7664c953ee7169f7432c5cd56dd53132be59b63c97726cf1e3f501904e7745cbbf3a266a4e5ab523c63680d0daa15f0396997616745eb668667cc7f288528031fba3158ff71c52643b760027be9d1387ffc3dc7c8a20cb5c0bd94066c5ae69470096c0a0603ae372ff329238ced013ec6ae3c3b8549889f8ea9a471921eb3908c166275cff9c31738d986a6a09b416962ab290265d21af9cd0160e8b3f151eeb5c267b613f0ce8a950e2083aab224a7a4773f20c6e557a3efd5962bcf433ce13184a4ec0c4283846a32452d3a5b3de5a59cfb70a93f437b7c8f187f2744d5438584aff5414f3587b09ac629cade30585ec1ead6a45d6deb09a1c1b4456a5669e9b5b510debb9dce13956198795eb1f7e545ac2137213c12b737bba6a74dca1c2af421cdfa2ed380aa8df28ba0658c6d1bc1dbac18af214c84e76403a96deb0a9cc984a49ca9195262a876681abacdd6ed7fc8a9260a371fc6721293972ab77d061b686f1d456993a96f2e6dbc14d775f5b8654935eaaebfbe7e55b76c78c3da5f6b4ba7ab0f36b8ad4afac4ed9cdec48969f43552ca4c963397a3c8b0ab64c3027bd8f73ecd2da3cb6e1709263a0ab9436fe4bd9536a2cdde06e981b028ab1cab15c414784382e8c60ade79c8fbb0e00362e8bd412e9f31211302935f0881409f345a750493b01b9d8d0976f9a52d67477b67b4164b6909f0616c260aa2b41ee4c4190aea4785eff94198e692511acbe0e0eec5b9067987179c1b3aac07cd4f79fcc0863337f87dacbb118f8d2d5d472e0fd9b017c49d415bb127505219209ec2f0cc2be1ebb11f053faec2999059c87bf96f3d50db1e188b098ebf027cd9fd7a1268df3fe64bd5aea35620b7f233108c1c1e3fe77a400fcc0804a45278f1d452202694fd78dc46b01c140025975deee7cb2c5e4befb8cd3f306b3b5b5c7db290cd5063f5e982dec21fc6fba2cdfaeee7cdc99be5746b165285321652c10ade5442fb2601044b92a8d0752e8cca28a04b02a655b478126b88ec6b23444ec2c15daa8f00c4dd3ac438d5b8972b5e777a3b3be697700b02241dca34735ed4ed06dce1d3a62257c5a2ce5f6155daea9b09ac875929a321e0ac841858f584534979d4058ea385a094a9ce367d0e40479524a0e242485d7a5ed407d9f9080c124093b5529f3b542be05ff214fdefe28fde71829f677a1a01fb3d027dc331d1f98ea7b2995fbafa7f82df3d471e62c69932254003f057be4e6dc46561aeab43c40bade4860a91d0abc2aebf42787caeab1e65c4db11f97333909850bcbae5a56b5438c717660fb91678dee04cc50aedf85597a39504850792450c689eb0182d0138754eef66c087c17fa08b5b213a2444477eb0328e63f20e0ab9b81312b7dc1345e93281971d9c6d5dddd1cc6e00f5bc8720368e4df3b7cf4da76c479412d692ec522867c42df0011f17c34b12091f933f0008c2decbfca179a8bd7b1bd6445e91605c54289f6fb3d1534b9019233c9845815f133df220fd83f584fff8af4fe657e6bb00d1f5315ae95a13808dce1c9a237c5d72175cd6b0435a75179ede4a3379b22d973e389cb6ec0b506a0e8d6dcafd8dff1f29c008181f5d56cc6928081c396c5dd777c7fdd2a13b6505be656f2c42ea93e36d6798137c3496e39ee75c85de08280cd5b266df25893ab09d4bacaaef786a4b31db75592104cdfaf287af872f266653cf061744739ec8e1c8b8b2722e2499e7a32a416709f812110b96f9e5211041a0953f96109f6f249854715419b378a2463275d5a3240ffe8c766d0c7775e70edca3f2c23ff4e794ce13eb7fe31c847e7b5415968a87106967978c1d4850f2780fcf05e023711059626daa95f84d122e55267ccc0f39e38f9c8cdaa6e1a2b354f6512f062425f30e28d2aed774334e5de024880fe13ab359d2e0c13a93008ba3ec0c21754ce550ea5d3644b023dd3c12da7465df72ad4cc876dd55949d206bb32bbf8e7436721525a260c94342c1cf4af023bb4d21122037ddd2732c5c4ad7ac7e0a60456d77a19d1405b3f10c77cb6e052e82c0ba1b51dd6d937b11ecfca89cff352cfe2f134921dba1a9c4b315964fd4ca46c0b6e22cab27eb088a9356d7a0cd8afc665142914c22ba4f25245498ed532bd962860c4453cda5c0d89dd0850337b061f6645ecf61e081f0fb5c9fa2d73c13b79d33f7ccefe93fded277ff96fc17806be0afa3991a39332b887bd112a147e5ea6929da6b54d96f00fb586b7d24e583e6ea01ba510697d99ef1d897bc94b87a261f13901664edf1e3b97d1c9e34f8f134674ad91ec1161a91c3ea8c3d5e232b22ae1da81ea297932465f20486cf7a6cc1cae062058654affba6929e985a853cb007036c1540498fb55242b6e1b144ddb0bf16bb19ef01528b1d321c16ed3b245cf604d21c1a8e0be7d6a92a73bb710af9128096513d55984ff72ad98403e0f9766c72855f41742248e2c83c4e9f408108ede0cc89b2c2d489b9cd6fb1ccdf808c3df7bdb421af7615e12c2d0819ddeb629a218b3572d6ae1e9c1e86e7b7a3c5ce112cf5f12f1a0536b5246086d8a4e318a8959d7728672614c6fe29ecfdfb4d2a137e8f05e9da9c077fa00107dd18e2aa96210cb8b50aeaf73f536e0edf06a1543400ecb81b0ab54678038a473eb64b11fa27d08099a6951b955391ca6961f9a782873b6f79aa480d1cb7477316bf28b668ac6f1dd206a9ae6fbe56d421a39f36ae5d47130645f9fec4536f75a8b1af05b8e339a69cc95a6b9218eed3ba10c11473dbed329fdfdfc832e1cf6fc82846af1a3375d6a2282c78d6d45f9020abbf59bd899a6328626778a320fb5c82f3361a9fad2118892b49c570212eb7161645641f64908bb17cc83eff56ff568b4e21093426a57002fd326e7ab2cfebcdea9ac81baf63e4a2e9db0e8b415a277d1941361763539cdf57438dd8ba2626eb94387ee040b70e5ac9e95cb2a98e3987aa0ac8cd0e93f1b406c24b48c96acca4c586632af3232e4e25fff1be327ff2c970560ac0ffe6b6663262f22b16d3418095f986edb39e518bfe42b69b6a4305104a238980d4abba0aa4ee207337501249ea25079be430247711ccab6260bc6ca36eb6920fcdb37644717ebd698c678993a3488b7b2756d8326f131fc2d441e84b2c034be85750732c66c04f9629c5f3d910f67aa54e1d3cd2c96b0c6db1770de11f7d4df8c19301f24bdb5d40d5d7981b6262ac121e414a216899aa3800f8cd3434b840a85e77d3b5ecee19cd297c406d505fef087e30ec55fb0d2a0193220dd4ed6e7c30253677551c45e8dd80cc50ef617d6de0be651fa791deca47b8a123634cb8c9d455e6bb814b51a85fb3562272ab3a756a05a51649b0d8deb0f433d2075edca2fd09863845245f45597503ab73a68f300342793362ada8180fde5a9f9b899142db2c897ca4ad90e1793997774b4d26fa6b6404e72c42c74061707a78f60d07ee3a2649f574ea7ccd61962aacdd08756abf50c8885989c78859859a5bfc5de2dd6a61b8e185e727edbf689706a9fa8a12d662e6a6fd1ea3c7f899180cc3c47d32b82ece2292223b93684b5395b407872af7858da491dd729a17f51b8a88bebd3d7ca254adfabc196acd6ab8d9a2631fb4f46b6c4e05a07217d259580c59f8401620375d8298344f838040b6fdd523964bcf73c52a84fb170ac8007121aae587c447d0616e98044bbf8f7811ceeb571b15382f8cfbeb03d0611818a572c13c98433506ca04c3dfbaa1dbb13dbba05af10ce40e243394495d3a6a9bc479dbb68ebfb99a0e88cee2c8a5595ff32213616212aaca14acdafb70aa45a44e06386589666ac8c14ea32ddba3bbdba5b5e84b51339c9b8a3cb08df5c1dcb03990a8879889cb37d52aeb4b9d9d2dabe0959b99ea6a438c6a899dbf87a12514d6920118ecdc7bb81881038682aaef53ab15b294e084c88098c47208f58f345459c57cd0da4640b2d09c4a03b3ac2e80826a493280744f4ed008d17415d89598c46f18acd7afee01da0e694483d0d0f4143abbd3a626645d9cf5ff8a346711c460dfbd5bfdf3fc11906670b0ccdee776a3cc8830509d8a28b3592e379874cc7d477a320a074e761ac19aeb7103d99c39a6d1d6da41a2be528cddd0ce7b9da21431d0bac779516ab1db8cff0f0dc3900d62506f23aa9330c6fd8d661f88101b30787bbf883e8f189a4a9c29dadb9042b3a2bdda0c9a1957c4dcbef7162881de75db7a85c192d5caf3d22bb3dbcade1e1cf0e5f49bc469025d05a3ea77b43bba1c6015da9502157976dc6467ec51ed9e62886b5a4e4db80330b175bf6d0dbbf7dce7078eb8a8ca47612c55210f1c776009aa5fbb96862d2a4e6e6e849521221a991985315be963ba9cbdc79e7a064f30d13d562cf2be19c1370c458343fb9261e07b9615d698c56655bf38e43e304e2666d80914755ead1157a2b4191a92dceb56befb6a1806d042f9b4e5beeb951355fe8305f7c2d86268a61a27c0b8bb02be93f6ef45621df69cf007299ba6d60298d93228f90dbc81309eea329208fa2bdcdc0c08029f22269f1c57e482e2041a0887cb606f17fb4cedd5f5900cd1e9692d991201de6df0927970622b27e2d324e551f659e85248382ec2756018b1c4d09dd1835543623e026e0601e5763286646b5008afda720cd28a0b8e0f167009df0f942e1e77a097fc85363ddc28db3b8b6d56557ef99faa66351b20466547614aba9ae0df62e7c7dd1daef26bbcdcaaa56f00483312082af35da040c54e832944509538d94b0df15fba79088ea1155218dd976c2f1db6e4e474a1550ec77162e3f8a16b5149c73d02f590326ffe627e284dab29fabb06a72174b53d953a616dea52658aeb6a0ad9a252c1f88d6a7d9d4b5ad68516f727555ebd3582c25f69fa33d03f9f491cbc1a573e13d0a1f08b233a25ae58515697f42250c731b2d744e681a10cb49bcd2b4785e585802c94114ef17f2eba3ae5d1761f6b5edb0c955d12e1603f5bc36676c89dcb54f114c2ccbcc3de564142b5141a277c0c27a08e2ce4a30bc256f74bac99c6be11414f21cfd0779ee424ccf2975cc6cbe1747657b5eba906425038c21cd5fcc185adedd1abce2baa1d463c95382a5fe31fa5957492bb4bfd7307fa94e7231dcbc6c80ce2388765fd4d0bc87c1f80f9328a17a78124db33b7f4abcc82763cf72a0c8554a2496bdd8c4307b1ffa5aa50f74c7c3a638e01fa165ac5f1b920a5fb4b308e26e83667985b88f8ebd0dc8c702a01314fb837b834affc89d5f6f3cb50621285e6921cc9c89fb3717a8447268c9324a14a7c84c29933a9bd35bdde90b90f8381c827f10c6245869f42b1533df37fe295fa6cdd62689d82f08a63af877a6a4b326278612a6ccbbb151f6de8a76b1ea9d405ee94b99231a0634d0642ca976c15ad05811765f356a07e713832c06d9491eb18650ed6a92cf8eb0f9ddbef00b994f9b8682b9386e8187e841048960a1591d94006b57ab5cce9649460a4fc9666cfe74870a27fd62b91e62eaaaade8da30d66055d03461a23dc918cf515ff099516115f86f4afbf1a36409baa59c40e6b3711b0c7f26d7a1a03cefceeb422c7f054184e2c9941806c401e3ebe3e9254269c820892fb4373b430708bf6a1c3b1608e52c641739a60679b1b283a8a7b968e8a068f77a7aa299ee2e65ff755f4ba144baaac4e34603957433c3bca3a1c37633656266c0b7aa02910aaed97b5c432e777214120e3b14a6cb65efdd799b54c81a872b768ccb314c82d297a71638862d2ed7ae863257d8ffd0b29f96200d736d5913f9fdb583c926804acb4d79d6cd760f639dacfc0ee04b4e3c4d9ebb8086edd206609facfd5df637f482b7ae0a691c7748eb44ce71acb5e3838fb9a08f5d74032f2f982f320ab98260281205aebe6103df15c721ca62620768c974002a24176932b6ddd5c5f61d63c601c1cd6ebec9278b32cc476e6b2917d411343dee16634233fa2c1fdb4268d0c2e90476b2923b7daeaae8d3046caa0880eab7ca10f645fe44b454a3503f5687a8382e79609ba43953402246c35616891cd5bee94cbe372a1e410d7a1df11c3563e6480c0764219d0973b76c30ac35904bfaa1d65b92b97360c3f638cc4ad4879d57eb62c9c455a6c5ab1bfe0417a1a5f3f8e0d9eec567eb3cf7b3f20bb99031b5e73472ba652fd52bf828b0a7eec1d2ab6bc01ae8a43a048325944fe25a542a182151efca72fb75936da3dd6bbe204d7ff58503e76fedc34c90b16fd16cdc2b32fbcf498a561ef76cba72937d134e92909c9b03ec7b5234f4bfe623151e0dfbceae2007d6bfa45fa7513a9d9697ddf88449ba3516269b4f5a7936d5db4b7bd82575b2ff95d318fe49d7029bd43f2739ca06b47725e3a916ed25c110e09b6e4a0781f5548e4c5a3287622ef986b719da4dfc836423d27a81d5354a8e9de060693753b2547dc9b9f743b0091e9ed02f63cedfadff992d015f2195976981d962134ea6c7ace2570c284666d257bdfac5914d826448656eb980c9476c3161e99511930c51699dde257624889cb8729d60bc9abc8287b1540e9612cb8df6cfb6497966e1c4df6904fce9a1905baf7dff28f33cc04380f1a55948988898aa43e165f6e43e308ac13bad08e81b168e4613a470ebd4f96416978fd8b1d3d67512b8d6b3815cbe87bc1b631c5f6e98fd463659db2681d2e98ad8770556c2b0f93a19bd09482e74e1c1c52120163b54f3ab378c0bfd1b0f151bc20f65e90fd42abcc2d12132d95b88d033ee2143046af4465d67ce31151a6f4581451348c54524a005a4d612c0c2c9aca964c16e04c33fe98577381f6137b9f6cac4337f43dd10d98080eecf1c774d3eef95ec91807872115b703108786215ea80617d370574ab7afbd6df25bde51abb0a09c59405b02739565c261f2470f5baa63c422fa19ca4d6077ce289501d6fb94fe32210d080de851028311ef5cb0291cd82a469922eb3a78bfdc22dd2a26670db6aad139f285110beb1ff9ca8e8ad7c01264f4fcaaa25a4421ec59e6e3202b5a4ae0645c8ceda1fe11c10dc293c9f105f6859a63183af5ce0a3aca6b4c8376cd9acdf1d30a2ae4e0e8f88185f92be691881a777e11c5ace94e03002b6fefb102a3c691603023dd7aabf626c72e0660b93d869c8525365d14a9457bbd206ad773173d8fa75cbef4691b4e62d4c0451c9baebc5ec347de0875229204d97953012a690235c04c40aba0a092b02b118f9092b2ce57620dd41ecca24a7c01604bb5067819e90dcfe905d5efb3395740348f2290b81ad99040929a16d26a98888d84e61ec7328981126c4277e0e2d5761c511a3986606a45d5de65be7af00fb85c7cb93a044b3be7823ee3c0e159f970f28302bc20591a74a1d31df1c7ce8cb7f6ddb7f71188d2ae1c668f2bdb40ce5051fe93aa722efa724711d38f98a6ba774117ddde87e2b30a7f18592128202ad3c0eb3ab58dceeaafc557aa79b40bc20d04607048e8a0500e104f85b33c29a9323cb54601a233ad44d6676acb359e8e43101e69fbad9cd8825e201a6426938c30d4a8efd6e31d891fd9b59602f5de7cda2bfed105af555ead3f5d9217ce95413ab4373d21c22c1bf6bc4cba6fe61b40314680c45fc4e55c2cabd89933107c11a02bdfae9d6b04c967e12fe698f2ac03265c1cf92dc19f9320eac1e071fa60c06a4a25f4e553772d91ba3afc99303e5af223d1259ed2d9f3436055bb3a9310f15933856e9d917ddec7d470edb94130b86953e4013f264ae5bc3c53b6985408891a41106e15124577797c5764ac1211c91e7bbcfcad0d8a4a46e0c45434af9d72bf391149505e161fd2b02ad62219d582bbbba9e311b998612ad80aa663dd6e6ee945d2a60fa19812069f0b739ecbed8adad88b1d6c4b2d69bae4db2aa1c16183f0573108edd82fad82f66ad0a8dcef0071e269868ddae2beb7cfbdb28e16a5966aaf54f7d3f8b508bdd738a2629b2b29ea6cb45772a0ee1ecca3c7cef7384a161b20cd60d2543d9787103d4794eabd53c6aedd7f267c76c4e8046ac9ad007926aa6b611d69b3f2767c409fa224a19fc01813f5667ec6f225782650be3df61a510a3429f1756029fab58c1e6a4efe951c16574567327e792142a7bd5168528581732701ecf943e258e93bf82f6a31d21d2f2744b8c8dff04cd2eb21ce8b0ffbafb0a393580eecfa38a89f4c5fc963d616f0d32c83be5b2ee20e9b83089123c4f6841367b2e294b6132bec2e0d34baea986780a0166d260d5b02280041d74814cab23c175fa1561366ca1463b766325318f7ddd7e35734ee3a1e09e377814793e742027e0cc7ff74d01a98efd833696518937c9630d21dba0f5e25ee2258b4d62732788150aca1e70a2851432bf650f2da35b44ece5ac36fa55ec55873116a520e21ed2a8ac1a3cf9781a0b7566b24516c6f3971ec7d1baa5a83bc782b15138975a2cf1ef903840a345afc5f3db24a557b053dcf2c384a610635383b6049238c5ff7416ff6c6fc87c4b43f1f898c2081755c7051ac5358dad84aa554d16dad42e943a92b6b3dd4a53b9ff1d1a1e094fc865f539271eaebe5c54d29d35ee252b27c8ac26f23f97ee4963a2e875b6b942659c752cf98b9408cbc2b887579d96df521f85d310fdf6b1aeaeb4cada616a4d52d9db1f7c48ca3465b846a823e37f2e194152f310dc3ec46080901c149a555b1182781c2b085a3525ab3d1e222de8a821808c56b6b479fc0e60a852d6e51bef802d0b7db72e03598162b708eb95fcb722f3fc1738649bf6802171a369b23c3c4688a8ca01fcaade15393cf87ef42a0ce0b205c91c1ff968c282bffe675340dd156382b26f0e63c9ae65d4de303e89194537b1225d3fa74203d122387d68c43618d5efaed27150ef9b51682ab0ad978e86f741f2d59dff3826d7c74bfaf162b6538a9ec118f3379b31a360815755dbc22ad74d5f73e144df21e782e5af8d4380ba02ff642aa0af84d090cc1fc4cf16251382176f0e2ee512a38caa00c2d9af4f0457f9d8f18e3a623f3c03fda5b3e2932c73ad3377037363a9d4a158135886f0d1182d5677b63a2863292bcb8eb302ade12bac9772a29789ec03340d68d49f22130241927121cbe818a6f02f628aa383e2065e47bd3831211a0b2dc188ae78d2cbd7d1728a8a874e1e3778655461a5dadcaf3225f4399d97aa071ac9164ec502c0fab001e39865ac984dfa245c88a833c34122abf3dc028f099aa75e398d378592381139a3ff14d63c9d484a52dc4c87786e8903eefd6ad9f21046787185d368f0e57f92c5602ec5e2fa650b05adcce84c5c2ccfd640f61d81cbd22b3c5c40ee87f1d2d75455d6ba2752a800c6cd8db6fd5386856335624b59649906fd61b8896b10a5e87af71c68a682baf5a6170a4c07e96515a8234c6c5f696bc1db40d3ff3a4067053cc2a327120086f230814d2219eb027a7f6e959ebb259739a498a3dc495c527b045fe5d77ce5ef2299f2fff5f9bcecaf70ed232a604977e2e4cc80324bd3abe54b9e08f0d5b9cbc2c1c42e24189d4e525016d587054a167e4a4b0e9153129a7e8e3922b9041b2b4fdb512f9952531fc2a2ab1ef2cd4e66f2aaa591215a5d707c9487e9a4b234e6d63a9c89683306796c4aaec6ebc946dedf3c312ba57de8e54e599fdd5d332e3bd3fac08946d6f63d062cc7c1820f8ff78e6618d34aa6d2943fdd9cfe0112c216bcc3fd5d6a61df9241191c1e4b11612f37718cde34aff3875446ac7058110ae12a8142268daa82092ac920caaa4eb80b3e24d740f2edfa8a8ade43596bc2d3cb41c8005ac9d946bb2262acca68379a3273f63ec818f3c61a2968feed64f6861f29882e391c3934f1ec3ad1ff47112e4648230708e6a0a6c4d5507aa33f970be444b3b6c7ecc57534a67a72eaa48921c8c6235c8b0d0b2b1e1da45d144c988c4baece5134113fa8bab0e896d99da8dfdd82898227eeba714e78c0e044946fd4fff3b23c0a12d6446202d86a48d4938c4330220dcd23d153950c7b99aa2a6e04428672f6e795b315f020b20937fafef8e39f7fc5024ac59639d6014f15a1e3b0bd3dafb91e3fe0db1522e4aa82cce77a87cd3f6c9b1dbf8b34e9bcb5ba4414ef87dce3f396dcae90725578bdadc5cae8912f5a8d198bf47193ac0c6e849a4956c66523531d074beb5a72fa29685d8176543a86e2a132ef008341ee20e0adc73ef1ced9920957a24c4c790216325503f6ceaa6133b0cf8635bfff7ae4bbf7feb3f0a69b491ac3a58b380a209b68de1277bccd046bfa5508188010714d54dad514b0bc8dd4d0c759af0fb291fdff514dd046cf26b49f41271c36c679ec3af1d095c5aeaede2ebe21eb80ccbdf8265cbc17cde03224bc9e71e0d5ce7f04bd0546394a5c4ca51a673c20f836f0651c44c2dc3fd0c8d1c85c79cf1692251a2832450f1aa998706f0dd4193413db348838802982720be9562a02aa032793d54622fd7019f431757c40084728654b4bd36624ca301cc27056e0e44920c56205e55493ab96d31dc43291142ca0dc66f2f12c65c8725edabd7c470b6c2710afc442380e0b2e2d6690630550087920a9f3c07bddd34ff57b71da13826cfef7fc905e5bd28dfada9635bdb766b84904608217b4bb977570c870c830cb15b6d429d73a14f1eaaabfde3a13afdeb7068df91823ab8abfda9d453f6e3a1baf0d47e3827cd7e46005df8eed7c5558841ecbae6d531ef55e7d5e66a7227a0f1a6598f9d80ce6336f2bca669ffa290f64cd354b771280ad518c487883bb10b9b2d6eb58630da894290c547b8126e4744a06cba20d9600cca5195d6ec2a075f3b0e3ed0c5ea27b5fa616f0ce8620c8478d3dfe90d3210628dc853dc2d72918db6c901d13d55b7ef74ec80e8ec1015066e770cd57587f058aa62f5a72f172f0ac66f1beb58b9caafaa837bea5bacdbbb62d78ca069d78c40e5e6a35739b6534144c9c5e1422a88447161b7d91d315e03225359976bdf4e7547cb51df6003525fa182881377e52aa87aaa5f764fd8d61d853a779f9306380e437da7777c2cd7de7d7baa4b39aaae7cc09e3a0ae5a87775e5c376eedd77fcf4f5c5af080c045d2380eec942681351ab1ca71da9633fd91d9ce93ea76f9c066eb7d92f065dd376ee64bf784f4739ac5f7675d04398b2f327cccec30e050766aa3b50ac8f784f3f7d056f5ac19f8eb28ab608687db0a7eeb39dfbe91f50d03d591f9d6273d010dc93dd817ad7623f16fbd3283506dd14bc41b7ab3f3d7639525f39ec7c54bea2837e636ea572cf525779ea2a42a820123b1d2b37da1d9845c205fcf6459773d85d2a641666bb73d7c0d591c2ea87fab655ee5c8e8e6e9daaf1db109585ccca3470a1d28de7be494ea5a69e9a9d0efa935571b1a99fd6ae3af74c878e78aee3be40e3610feca694ead8b7ab2a64d6068fd54f03f7fb79aafa8837fe8b3ab6dbdde8ced5edb0f3417d853df51376da68c58eaaa7d3b98aa14e5fea1feaddb7ba4a591f96158a9e4edfced555cae9b963758572d4b16ddbb653fde297627d58be3a3df5947f7575b23ea9a71cbee5f4a8ba423de5a76f2d75e52c5545e55c5d794be5ceb2623f2015584444b13e285fa19e3afd87b23ea9d3d3e1bb6f29951ea5a250c72a7d4ac58e5253879d4f8ada0f0865217ba718dd4ff4c19cd2e5051adfe33a762d7ea77d566ee4a01456f9c0b47d7db295d9f5eb7acb2b932d39e5253328e5255966cd8c7df24efbc325d8a0cc4ed3aa7205fd70ae5ce580ef5f68bf1f86eca91a624328b4f258a01fce67f4a18cecf2382c0022f3f2e3e1329c13b4ff1d1a9961939c0384880fbef34a9ce7f76a1ad3a1d91fbe157b5fc64a8e3ae8ee689b80044537059aeaf3571af6174fc2e370cb0647b1ee14b6325dfb78a99f0012c42d216eb1147511205cd11129b0e13224c3103c22052b4c5a1f5d6ec24fb805a3f0abbbb13114ec359016ea20c92cfe141ae9a26283325f0741014511cee12998358fc4881546498e9620315182056ca27421bdad84424a777e785151e120794d073519e2bbf28d44b01763fca187241d1bf14444a023f418329f6ad8bb0cb7be0c26b509829098d218a50ae8bb07d2d86efc0f9046df786859655efe697c842d38ef109d43614fe7e84056bcce51152790628b1d10300e817e5916d44136797d728d56f2d5933fed65b739a52a04b4b90c10a9b3d8e9a1b16bb02d072967b1d267b225f9c247befdaf9b33f86519ec8e31fe308641c884568425fd2d3e5e980108277c84f0f13d3078790ce34fe61e584f0fbc3c255ff9b65fcf77cb96378cd09ead7c60db556706e6657be2a7fd6c0fec5ed78a81b2d86c889ce345216a64e840232438364cd9e9a6ad4a78c24ebf7e9d4c262ecb4cd89561a6cb44a9099aa4e4b4d4764d5eeca6faa2526d1858f96c9ba6c96bbaf16bd60773a9ee0617f9668f5dc31ea77d8b9de7691cb3e2cb0ba7f5e01edc7d6319383870fb66833d1df6f83af0a22ebb7bd8618f6f84d279cc8a1baae33ad369fda93ff468805ba6ec9a0eb9851df50d55319005baf231fd64b2d8101a8104511cf499103782b822a87388681653cbc7000a8575375057f703d0cdec4fdfec575cf964c78e61436804ae561dc0de1057502222a0812ca3c7bed15ac409a3278c52945657a9f7c04cf55ba5ac0f7653b4de3071318bcbbd7b8f93fde9815d3db0bbc2acb7c2341f7db1c03109ed10da4002e32182098088c96a3db08bd9b804067e9ca0f1b24794016d8628a7f8e0aaeeee7e8c3d3470e7052fe3c98034e421bc9956af67d7ec4f5f97955b128dc761267c4f26e35e6a2ee365dc4b8d8452c84b3706d8eb18b4d34392a5202018f8e11cc8d3874474965168e400cc0d3cbab9c54bb6d6b6970b2fe3d5e07c322efc74ae4acb65bc339f4a07042104f3ccb4edc475372a5555a097a2ba29147a29ff81c74d9dbd94af54083d95b3f840efca8a8da9f76437e57c941e20faa2fc871f37f51f58b2770395c4a9e3b62ad9bba149ccb28ecc8d3287ad18df10b2c42c898d9be33e7737409679ecc1232e3eeb9c7993b526abd98faafe3564968eb30761d703efa9885ee6c24c0712021bbc8734f81a5d1f5777bb24793beee4e3ba90461171e9fa40b990461131e8f618c08d0fa241371e32ff608332cd84ca88521cb9910c361883262561a24854c42d7891d86356c2ad799e33b2e56c429e9027647154c21e5292881491b8d5b1638c46ec311227597299cf302722411623110d25c92b60b27b01fde06fbcac0a955645455573c6983b60165c8377cc49557ef84295cc604ef6695594ceab5089a95c88030a2184506657093608010a8f48618a9b1dbbb22bcbae1882a5ec6ac86dd9b6c52590b66ca7076efdb0a12ed8dddd383225f3eb3bb067ffb0abe64d6af0a04d94354b03bdcef313e71816b3aa3a6b88f68d3913067308c11033a181b2a04dfc5e5417eb8c051b0e0e87332176288373806496884e8cd1275a8ebd791bb1cb747a4aca0364cd1fc9aad08136f36a82eaa8700b2671b3608331684329c940e5fbf3adf83933edca5f1ebc00dac07b799002c8821a07017276786d0c94074208218470061b8cc10335a981420b71402384108a608b43f546bd3df2525e5ebedeefdda18d3cacf0723ea0f25f943c826a3a03fd1e2fe310ab417e2a9166dddd1a408247785094c33c1f420827dc0f2eb9fd9d1eb60a64bb12e7d92c11ed3a2693d589da61d4ac0df69ec82a56756ad8eb693d531ae8f9dceaa87ae1d66f5fcb5acaa9c4a61df26c59853c3c747a74569c56579c5d1d00bbf60598b46fa6bae2c1ea8ae338fb1161aad8906d019167fb86b83b7dd5afe7f2d0814957d4ea2ada53515f3be4996fa8617508f61d863cd9103393b17b0d2808bb21ab0fa70ee3783538dc9216c763af6f8d57852606226c4163c39224254a92962c494a5aa24449122548484a922451a22409129215484747485658818464c5d1d1111d182139a283a3233a383aa20324477460a4723f950a7662608ce303ade59c7362426bf8420c966c6083201414f9010aaed6a0d05a8609e6074bb4ec880e6cd0173671300581a3832323881b96182283279810011b84b40e305e8299f92a2a1020114210b8233a28c1e52e3ca28324aa00c18584043978e27e99188e2440e1112894dc2f83476010bafc2c32a40209a2cb900684aa1b619675cf36d8904fdbc9ae72603f1d07f6d3e94097fbb8675d35715d05ba9cc9c6a8197b91af29b9725de42ae413416e1fe8daa0fac8cc42e8fd905d8e79db07fbc8a0208e56870772ccb7ddae1e9dc51320621637da22b0ff6417e8ca661f7cb1ce4736c73e65cf6c8fbe58033181b0d821c0c171c2e3af7f3c702e76ed7c7584d0267ea7a1c589e7e6eff0857363b671f7ba7ad9c631a580cae3dccb745d714a6b019cbba3f908d95232210ac5c81de72a87bcf1d71e85ae663a7629ade93bbc65d0e60827577edbb0cb1aed1785b22b6bbf6edbd7b17e512866713f0d421bf99de61185eef6283521741e62d88661a60a25c56014e22132ad05a2d0dd213b684a243618fb5ed8fb5f5f59f481dff7d157c68bed886cd8a0cc27f9c9fda406655623542354a3c4ec1aa15b63a406484d508d1253aa82dcb03d56082bcb496f3c500927108c91e56177c959e1b95e9167fcc5107ec6abd88350966183321f37c4a493ba20d8cbae12259d93b58018fca490149242414152281b621ead04f493194200b7954212f2f431256c4945b321daf6937c7201ed24f793b779b49223a42bedd7f391268826e8f6bc586f8837fdebb2f6679515aee669822e4d91cb7a126fe4b1b62c27ecc9ca7a43bc91bfe40bb73ea06e259dc33c7cc80d5d8c01e9bec20665743829eb29fbe7b9cca9325173d2d9325553ce9799ba9d9fd9318d042ab1864cbc51d53c064aa65eb6ab469e1651c7464d0c48c30768c3cc5feace0bdc1da9773ef47ef24600ddd47554f6e3fbe9e8801e9fd605c407c00850c0071b3b3da458a354ca7ef3a8c7d3e54f8fb8b342c9833ad90f687edbfde011cafde0d1113ce2e669c7197578885840e74a2b518e884052666778737e665e66cad46f71a572a9769543e62f7f91b13b5c54d5bebce0f0979797af70b097ea2f77a930d5eeb84ebfc3457598cfbf4c9539bfaad1498d4f5c2a07b9a81c330f5339c84a9df3990c36d5552dd529ab5457a90ed993df5435a301555d65b317fb6514e52eb5e52a95d5a135dec8b1277fa841b0372f95cbca9ccf5cec975195fd68b7d81ef6e6b7cf39e79c73b2b0a8c4a522308ab25f966d26ab5d33bb2676ad5a8a40082f55d89341dcf8996d3837b408edc7f110773eee74bc70eef6aedbacdb5593a0a6c30b2dc0d92b66a653535569b203c2c58db1ca2b7b18927dd61c7da7d73cd07919f6e4b52b68cf4e0f3b945bd80b9419f7ff6fd31bb60d7254e4407bf7a7a669efaa65d99b02fdad47b7a671daf6eecdf43e67ea2e47df143b1d9a0e9c2740aee9c9ede6019f988680344e878f479046e4160309928456016b44202aa109c4e27ef18899c478f4c5a3f88805e7fc0093347972630bccd969166c99dec7606b6b6939a8a7de379202eca1fec1325cf805f821208d7821bc8aa2ea8f1f5946691f09c19ee97188a993588192e254f69fec9afe4d1b8b7278e0ce772d22bbc67dab1fb7a4a35ecdf6144b1d4d9d34a1e06da2ce41d92ca3b4898ea04d7c8602aad2447ca43d9a6e32f1d2556a26846e8f5765e551c98a6d398234f8c6778e6c53a6f5b57833949f6a5dfa5cdc8f3fcdc482b2752c9ad3c6a2d4b70d468ea76c66916b2e1645ed912882a0092e1649a21b9b48399decd7d7874f6791c56687d01ddb7fa2a9eee8ca65dab5cea7a5cdb21ea21f547aa48f9ed2c79ce40aa1f1303b016d236e21e9ee68057b1185a2fc6b22a215401adc4d8ff68bb789208d0844f74db106bcf1da4d9d4f5fdbb66f5a8d4a505f74c28ddaad8847312add6874b4d3ac188f50b1885b31bbb121c523f6b0d40b7ba77fbcd49d97b8093b89481c17c40fecc1967f301a252b62de78c42dae89e2b34bd44433fd16fbc13042006e9fc5d2fe8a8d477dd4a6538007a401b1ac731ce0754e0f64f59ba8b0a04c522c5442331be8652855077afd54b50177a0d7a7d506ec017a7d54a59da38211883522bc695573b71b3201a26fb23adc0f5f1377ad6625a0998d0b39ab6df683470d878036bf3ebf79afc72ceee4da435c2e88cb5d135729c0df7af08dd820c7bdab66b996875dec3ebca6ad47779fa5aded6a329d3b1dd9b56f71eb1aef26313bfb53a66b1ae92469b4b019cda1cea100542aca4e28e6523add8d9a96d7ecc6aef8abd678ec2da136c67996d8accb5e465ea473224f57c41eb37ce2b6b85f16638c315e445713ec71d60495f7bba0b8cc2ef19791781591338a7845c11ecb96ec98451657912b8a1823668db0c7571446b033562f235711f658fe9a45b815851197689f509535824216b78bc0fd6da11696151bb3705198fe92f209547b465908b35fb67d5a1bb79a55955f35451621e2527b425599448828163d8981700bde68a41545d0fda29288e446a12814852684cc5f2cc3655984bbc3a640e7401e0995da6ed94637d5969db927a171d9b52dd3be6526ab659e4e8e2c2223e37e19928b5925bbafee880974758b252cd3c5c5c5a545d7d2b5e85aec122d57259172558b4a85a29e84cbb995732c2cdf30eed4b1a4beb2d26118b6f2d14fc592fae75d148cb2fc2c6756765926f754e772c839296fd1e2da535caea5ae1da59a2c948e79e5da3b3ef61ddc75fcd9f14d6c7bacd8214ba43c25e51cc7a5704f623b0af5941454cb534e9bcb5b9e0484aa279172d5af940a21ab05eb377597fa51ecf0a250fb6159a52d35886bea3a96954adfd5211b97751df7c9d92370323e8281322d0505cf8387b76647bc37df0383d93758b5ebf397a669da951db3674fabc287d323da6821acf9a0ed81fd8bda27f6f8697b6476481ffb3966410f5e5ca8564b423b36bc502b469ed92f66ee0a002f67b52454b66429b68d077af6e0bcec35e79c3d9965f3e35120533629bd0a694c8e658036b2a80145b618bb1b2ccf01b656de48cd92efba6e4945bae8251a4823b6f85dd84ff56297545f5978a33a5631c8527da536f454bfaaea2a55f558e352ac01ef8645211719e8c11ad86a89d766557537628c2db1c3d172d56fb8fcf328f54359b958f55dacbea538c82daaabeef2966f2bdd8d16ab43552d2a15ccffadbbaa4a96d56af59716ab556af5d212e7a985ca0a073190edc4a9aa644fe5f1f56be120b7fe717ffddff5c07b15abd88f0777573de255b90f79e37ba06eb4d647bc2af6537dde05878adb5477b98baae5ea321e751715b75a2e1f6b1bb1275f6b23614ffeb58f5ab8f3e130df620b1d2aa64e47cf558e7ff5d5ed0ec70be633e63ea48bf35f56ef81ba2bfb16d73a1d7d17d647bc31f68b9fcf3a1d2a5f591ff1bed82f7ee53b1d615a70c058170ec6b7919e82fe83472d6a74c29ebc0a036121f6e45b2a07d9e154954b32a041b0279ff22f2efd905ac1016feaf1312eb55c52b13d6d0f7bf271695b8313ee74f4e37ba909b79c401a30473fa2f8881705e51f77aa71a9084c7b86695665b34c0ea956866cabedf06ef60be2f6bf6c3bbcdc63dbb6ed4600ddcd1aa1f561fdb06ff070ab26784d18668dd0a0b53d309bc4fcb494da27a162a079440371cb0f6c50860a3488d839d8e5bd1a6ed1cb231eae94a1339f8d8dafe5caadb9ed4ad90f030688776eb00be2a67a70ffaefbe84b81d4618fd453367523806eca1a71e21e4d47d579234e3e5c2ef4becbf69876086697c09e44966559760dd3e093c0ba9b9e44a76d5a966516c218e771d89b524aa09e9817b0e061c3d34cd74bbce989025926def4a117ffc243e67a6119196b783d7e5c5edd0f1e6d26adf6311d1a6f76187ac0d0f3851ea51e2ff474a1870b3d4c7ab6d0a3859e2cf424f560a1e78a9e2bf42ce9b1424f157aa8d0a3a4670a3d52e889424f921e28f43ca1c7093d483d3a7a0cd00344cf0faac8d1608332b0e395c943f9af5d6ea0272f29df02d2d041156bd4c41b79790f65e3ca7fa90ba50b25b8701193849818982a60605e8e5e5e564858ad5a1ca1450b1723b8b8a890a8542d54b4b4b014818565e5c8ca8a0a3452514919404a0a8a005050520148a5a80d4a513550a8138dd3a9e3a1eb381d8edb72b6cdd43299b4199a96c9c8320c001876c5b8aeb9c395f19e94379046775f791d200d66bef2369046bc570369c06ec62850a99a989573466679ba9e1605fafd5e2ff0b2b72af6e48b133cf332e84e999b1de981922b4f5536a972494518b7d815005e8ebdcb6a4968ccb21b9f8d0b932052f3e90a24991536202b5e831fc53428d0ef43b46899038d209d1776c9e35c2717d0ebfa6c1fc0972b03aff6041adf7cf105a9ea480fb0b81f3432c2d2ed2ec68d0b620f878788761ea8fcd9a15d560ac46fef11ad111bd4b4c71a8f30badb65a7033e6edf860127d0229d19a11d61d2b51a129defb833c45477861cb1d775ce12f3495cf38246102234c5168e6054033528011ac20d564085330c7182088ba41d293021c5132594210657e099ef47a5ce59227b12d8b379ec1a40117c2085156ed0840954c033ed122a9e24b05f44e0911e18b9985d4235538268c108492d38d205243c3230a88213848804290114788868efc7256ec1a02156dc2f36b9d1c96d069209b9dd4ec40b8f96045d9f2b9870ebfb2092cf154c6ebc9c667a9b22e4c15deddcddd04c51899684f44dce736526cce224880359f40090d5cf42d2172b0d02dab49450a097f781e2744ef6cee6633f22754e66856056bf2d44ca2e26d4426605d1041a7d586597e3226cd43938909154cd48b4b96c490271a328692468fcc7ddefbd048dffb888950feacaa3aeb4ab1c433830ff23ef90a0d50222cff5c87359218e675ac85e430eb2310e860384299b99391b0212c11ac490e40d4d904248089a072e98b207710c6120f28411206c81054f88215202283013402b50b106a2378421092590610721b0a2879d1ea312c8e09e2eaca20442ee9705c5a80627977f5ec3e5e344365cfe0eb7c105164a2083154c40c3187cc0c34f2e9f083e05b815dd70e192933ec2257fbb352dfc6139a310762724b9332eacc2094d5ced2847e1a1bad865e1077427f7ec3f0caf2c5ed8c56dd73f1e2ad8c1599f19cded97062d10dab7adb98c5bdf85fdfa780a79e78773354db31f367fea72982eec3a1cdcb19ef0c23905b7e0e797715755d467cd4e1d0e4db33debc746f78339c6408835e23199d23e9ee2629b8d3cb6face19222561acf6f9ef875f6c8e891dda6857f15168dba6fd7ce0a78e79cdf9bd3cfbc753dcabeb70609f76c7fc760ed21518f3bd58987f1207fc0eccbedcd4e9e02efc3b65b1f9182b2d8cfde4cdec4b86c5dd669d97a6699f578b5b76adc3819dfb109db3b3b26c24de7ca75dea750c055b6e7ad762234b646a61875ddbae41adb33bb0a73a06020a0aca29e7401e14fbf1505dee1f0fd5072d67775cdf0f43cd7e919340a402a8a2a2cb51cc786e7d5750ffe0f2e115c434ffe8635425ce1323468d423c83cf526310109ec1c7a93148ac35bec658f4a2b22a646f465a8c48ce80126144da07e80bfb7990f91cc4cc0cd97e58243151b284f934187bf7c38ab8b53a7f8b0180c3c4d49aff363f754931ec975dd64e251a19f31730a2b004cf0801980167208b28bb6aa6f6e57796d1d0d86f7e877f2a79a2b93456ce987c98f7ea0e3eb55a002a5defaccabaa7c443a4c672ecb1de25750e6516ebcc3a0eeb96f51cacd6f9a0c37f99bfea7018f5d3b9f1631d763e3897885b36676b81ab091b19895ada7809e11601ce2dec07745bbc09cc7bb876a459c1ad1ce71d9270cb46c9921f98f0352cb815c4f9da92d644e67ced09b77cce87dc01d19978788a51560f590701ff7012f0cf1302860260a0c0d001060c5ad42cbecd700e19a7e77c80d44b4a4b6d49291c729891c396430e326a74d418a088956e3c8e778479570c3b8439f21f0f77ee10e31f0b00ff6a8d7f2e36fea502902380693fecac0ba006a0f6afda59778366e63b4d53658ec9540bc02377e672e61d7f593333f2080f111f5351e7703cd82ff3b98a53f82623d539fb6528a3ab8302eca712c27e4f80fd3c04d80fa7653f9dfb998a3aa70b324a52b9149d8a2e679b91d1e517fbd103d84f1544e524ac842b320d758e296986fde81624c37e2a19d76100aee8ea0084fdb21feac905f4c5265ffcc58fba1e785f5846622f7aefdb7c9bdd0d1bab436d6a9c8c84bd38057b71c6629fbc3434d863fee2347ff159b7abbbf1c2ead017dd036fdfcb617dc8eb1d8bb13ad4fbac5c84bd1c15de18cfa6c22bbd1d2e3b1c3bec60d9c81be8674a2a80fd321ffb511eb8244ee192ee934371e355a2a028d4c5cdea5d10b738029015dfc3139a1565da8bfd543d49dc824354c9b03216eb7cb87118dbf7e13075be45bd717aef7eff70ee771d1cf563a59a5a84cca17ed814d892cbc7a91ff6e4f26dfdb2266e36c5973db9fcd74f6b829df08100ef2641b8d5c36fc4abf4607568ec210689920016b277090115b9f334f58348978663af716eec56410873284684bdf84cfdb21b912e106ebdb0168048776e3c839865a39093eeeee9a4bb1f9928d6904197b989fef1653c7062d1b11adfb1766721dc22376117231046d48f1dcd3c46f3ee6eb490db48eecc2766773a5668827883cd4ec67e4057e6586d21ec6132a8d469aa023877c7e928df36082f9d81523f9c8be25d945f14d5c5509e71cbc58ca3a0a09cbb1b302d7ac6371e68cd8cfa01dd19ef7f30e9faa78af1ef00f8e7d5f88763e39f4e00fe412301fc834703f8079176fe41253787e7f1947328b35a89a766cc6a56b700ead165968d0a9955a3420640851ce32cee8088f3349f014474671ce646e75d6fea17efcd7da0b15fcd7ff8dedcd47863cdb748e37dbb39cd8ed8f603eaca7a1f46fbbc38cb7a30fe22d2bce66d6bce34bfa181d7abdf8f7b03746fbe3147a3eadc1b198fdd0d1ebef140b1263a9cc3a838fd1cfabff9ecbf9f03fffd693f1d1e7f7540e4603feb6d3eedb7c3b43d7ec4d3bc78dbd5ccfb34b1ae66fec9d58cf5617de62c3b6321eb352f40fd8befb001662ccd65c080f1193b1d6d57f17dd62afec567b43ef1de3dcb7a6ba61e8695316377d4bfb03bece7eb0f57fb9acb2ec7cdad853ad89fbe39dcc6ca1dec4fdf03f1039183fde2fd5fbf236ed37c7e9b9566b26eea99d37c5a790b048d959665bff89fbe454538ef9e8f44152b0aa27daca89b88008ce32c41189f3787f1cf8af35abf1fb77e763770be416e7967fd341fcdcc67657d349f6155ef2fe4ada7690bd9a3c1790dcbdeeec0919d0f8efd8076baced41d303ecfff0e6f93c3a9f3b063d90fe8b24e53bf1f97e63333343b3d5369ea57df3aec6eb076ccc378ec72dc1cc6617cf3f960fcdd8bd354d667eaf7e3cefc45d5c1a27985e1e17cf539f7ea77c48571d8f9d0d89a57fbc317c66b702a04ba300ea3de3c5696f7f7736bdeaadf8f5bc362ea6ec8b03a94876fdd0f409707fbc338fa768850e5d1f98d1d22741e9d19b586997983d9e124a5244a8ed8632b82403f8ce8ecc1c08a5cfc9efdb2ebc57c7bf1edddab1c2fde6f7ba98002091538c0e26e1bcdbb76e7c37c4d0e3e2a7ff1a242f6622c0c1c2cb9ac0ba960e2881d222d6496779657615e536572b0357d1823e6295a15c38a626badea836f1f4667ea70b0dea359871d0c8b110181c6fcc388780af67a44e6a29ada25d58e49944a50acc8624466d08c681fbdaeebecb113985c8ee6de074404952eccd629716bc67e8b11e634ffea99a85bbeb5c0e134f69317e6f3f3dbcce425746666da2e893d16cc7718de990a6fac3ca0d29df9018d676e9af399a8c5b7991a55d7a4a0ac7fa7a09a1dac8d7187c7ca83bb38326c66e8500f6fbc1c0ebb1b307e0ae2560edc6a9d7f12e2168cf34f41b8f593106e79e7558ef8f96977a43c1e5e9a6f51423eade6e17dd1440eadca4d70d12b3bf1446528b848146cc407142b52036d79cc6f58332aeb505946e52251ec50790a36aa4c14c37de395ac4bea98700ee48981b98bbffcfb5dda25c985e6c5a79d2f22cd5ffcfc87ef8c0eef17dddd6d6974d0a16f8198b90eb1760fcdd9427650dd88d94fe65a97c374633feb70d85c067b0fb51094ee46f3d6028799faa2a64587e7f08df5ae9f8c33d136d1a5b9f71d6e13c41aacd31c72ebc67b9ca14386fdf8e31672697090f1686fcfbc671ebd7bf68b9106c3e14d6357de5f7cfe14d439dd8c1cfb511d4e416d3f9ff8d611df347d1a7b597ff1af857cf1da5ceb70d0bced8ebe0ecf3a1ddc8da7b16d8224d373eca76ad98fceb02f685a588783e63b58337ed1fc0aca564c2dfbc9fb8266c60b152477eb3a6766666666eee9f0c2f631220dc6713e537b28decc7ca765d41d7e53efd69cf79978effd4fe6b6859d0ecf66e6ef1c009c5fd3f21c0e008b117d879d13c366cd82f19566e1dc74ca394cd42dfebd6b72785b99bb83e69146e6b2de2cfbc54bf3c9ce687bf1168f9e5ddd7ce6f318118efd54302c91d69f91b9de0fe35787c3fb8e68713e3b1ddcf5e25b300edf0186d7c7999f37e67653e3a58991a6cedb3435ca7b53e1f5ae43659bca4d54cea1b21346cd2d58d6e8f24c1572bf99bfa81fd07df102e6dcdde00195ae8b33ece67cccb9f389f90f4097e63456de997b67f190b99e6d13c49b99c3a89fbc332faacc672af60d72cb04b106bcd8652abcb3855cd8359f8d702b665bbdc5210ef65325f5ab294955e3a2c6b0c80fe776f77d553f793f53e554a7207a5956eaaa6f4a5db5f5816f33b9a7a7eae9d8096523117bf0a5c140afa12b686393fd5458d6b14624c12de2ba455c4dc49b5e4deb03df7926e2268e3809e77445b8084497efc7459799d90a8ee2f267ecc84450d00f23226a825b478a3074afa0a0a1e6eebe2e7fd9d57c8b119e1f2d4678ae37f334116633d64440a1aa595db7d4394c04bba4cec158c5445110c1fd30a2cb2cc85e1ffde0e87a171e49e1c4fd81910b8fa4006273e1910fa27073708c10e500092df0c1139af0f0639703bb99d5cc40e1910f9670e315494e499a3c828172e0ed8716644606da5c84bc3c746e0ca28d805bb007f6e077d8e3cb06cb187f1d4e8aba77c99692aaaeeb19ccc17ed98f7907cb0c3301955136d723186872f6026e351111a000115148c5d30d93767a2022024c4870e12313b14544f4fa7005c21444eab3605ab61d9e0e33e8a1ce527550ef9f2bd4bf8a529494ea5255c6689d01bdeb3a3cd8c071e7fbdc32a0cd3523c79d3f5519785ddfaa09bb1c70276dcd6b5a1becf589e89c2894d15f98242f227109c8ea97e0f6fb465108daf4756eebd8e056cf4b5beaa4eeee4e8291537901e2c84392528e3d66e66e567299638f3968c39eecb8c931aa549ae9e22185220b4187655c3eda6ea09aef3abe2084b1eb70c4bb9d1842be01bd1ccf4b6e11f2466b043332ea42870410ce109411d558c217ae10c2078e383122451184864e3d9882810742a064061c24e1046930f2810d900004ed9a136820c2134cc2a0440f926610c5d10ca0681c04751782d80a3d30c191134a10a168094c98420f9ab68d1fa0fdf100ea1895685dd098684c342e684cb42e685c788a4605213807f200dd96ef46bd7be3e1dba167b0eefed6dd94d253ed4129a53702e8526b44f768b36fdb691b82fd54bbedd16e7688b4d794371d7b12a6eb5a86f5d5f37dc579e140c639af1fcc961673ce795db3a585cbe77c6a9552a552aba99a38ccec73ae3e55c7e133e62fab9867317789391673554ccc9c73ce0b06665e308f818930309f73ce3961601ef31b2e647e9da57e2c2f38bce0a0fa0b06131373178781b13a34062626a6cac8d47861625e5edee2e525f5f296785194d5e774f97c7cc2413087a990bd982a65626464643e23232333e342a59a2afbc5fc8ab98b982de62eee22c6ee7051fdf3e573a6b8f88cf98479274b952e25fa9d9ac413c79de6e9743a49f995240ef54dd6152529bf22ed24b272e28ee0510f77f995ba5ad9b8938acae5c3e0e11162027a904708099e10b42183714f15c6ed51cada644f4e8a108236a8dc94ac52157a35a1a8051267d404288a34e108f302fd4e4f9c3449e212dc952d408fff6542b28e33a1152f406c25e9747e0f37a565b292d44bd86b269dd44cd8e3f9d1faf5178e30f174df665d51cab1f2c91d428eb35d25c27d3bd515a5bac264252975bf952478777845895ba9d45d49e2967ce1e1254e200bde4fbbf211e6dc254b9005afd19556acb84326775e7bb93f704e54822cf9a52b39e87ef0e8e59aece9097b522e519eaf8f326e232c0bb006bca6cb5c1b711c5f86474b58e2d613ce511559c12d786489d2e53e1a8ac2e5963086fb759346ba9cc4b6202fedd505faa19eb03771f0c98994524a989d3ea07b0a72332120d811a71c2525710d8f7a609395eef4c4772a82478e10c5959de404c5c5b2006ff8d81664913e152561598035fa08bcd902a4d154401b7e66538c8c34eb745a09c25682b4a09f30ada9d2c952258c2a695609d225ea24052435b462a912765d0c7b200d78b45a05b18a371d88075e0400f15c07e2b9ec2ada2284b86eb23fba5f4700e4311de8aa5893cb41873cf4a71950c8735dbf6cf7c8d3fdbac912b1405c0a0aba90e70804b48d9885a87358863a8736d2114b1ba51ce5a91b2fea140890d4af0351b9e92b8942a12e8fa2f6878a35fd47ca02f16ca6ba92575d49294d76058f3a10cf0fd82c685707b86eba10d74d8737d91f44a015c27494fd61b2fdc3a8597c133c0e78538e289d92b2a4a4a4a4a42496a195248a05e75ced1d754b69138ad94f459fa02c6c9666bd5490cbb65342324ce8f283a480b0479fa482a813f6aea06bbaa4a05bd6ddc88a5c7e149759a0600f722c4e48092f5972401a3ea80fac21cfef8134625371c4b404cd0edf419b62046d50822ecb50e7ac14e95e2952a408cb50119621a5221ac49a34a6b5d6524aae354dbb86d50fa8b7ee8656a7a61db2c77dbfa7cfa23e41c8399287b39f84377537345377035a1dca5919743a1551a5ce59c9324a55aa7f256825e8ae16603d60fa75c803ab074070bdfb8fceae16607af7ce7aa0fb71bd3b419ecb9e8e9a858068aa44563a36601b411612121212920a924a2629a79a2a452a45978fa914a52ca550ce264d9b94b274bd6b126aa33e6aa45ed24a9afd54eed746d002f1f0af0ac4832d31f6845b42904654b91f96f49351b38c4037fb9d968c502cb0246893056a84a48f3ed3921528ecae3db41155822c3e84dc46271937259d739d2a6554da8f46db45a6a5ad8fdae8a24a9d6597134c4b6db4925406d85a09829713600ecb907ca273aef32f2448639e57906892518166e10ba7a2cbc9c532d4393dcce267d947552c43972a15ddcb09029ae7fa0ee78008880c8044708ee999d23d6a16964406e85137d0345cfe03521fb85407a4058034684fac41534860e109bd140d4e809abc5661b70ee8976118961d654037ae2451a5cf846d1a13f45b49bafc399b67a5486c9e95246e7d2b452e9fbf5264258a1526b3b2185d40f18828b521c09022e5e5f528f44525542a1e2523938bfab21d2e721c27e545ed609db5dcf8ba2666a766b1731d0ed3a78c4cb8857dbebb1b53b31cea58357d56d461e79c8b421293a9ef072525dbe1388edbea4ee7d067dd7162973108ead7df3938544a198550578723654b39cda356544c98fda286c98b7aa6824a414d21a8671d0eeca65314aba1aafc4e63d7bb76df9abb4c524aa9a12496e3ba26639fdbe2348b519796da0cb31f0f8e07c783e3c1eda0b08cb3395056da55866323131f0feea27efaca7fdcbf18447e07cacaefa050f63b5908599cfd62903b1f998835a4fd8cb09189c884a95e575e794c7e5ed3b2e01111484b51c18c58c65139796acfb0f705676482c98550867989d7411dd4845763a38328719eed74e9761017557e8267d4b0c776e703343e11a3e5279c080223c771b2e37f380ac59bc89d5bc5c39dce813c1c9970979cbc84fc4411c75976a247006d24b4fc4407813691089ee3de15258510cf6375d010345a01692c01d24839dfa404fdb80895a5bec1c3b31316859fe0c87c3a92a00b8f50b174ed8547a850c2f5583709fa45131214ee302fa101a96f877601d4fe886028c243bf7d05d9e3ac0bf45c643b08b2d8d44114de4c0a2b6007bf588483088815f59dc67e8a4517cb1e916c968b90a09063bc94524a29a594928b8aa21351e6c422cde2ab89e60e8226101435900e92d7d5dd1d54d4412dd4411ac82fa3d24baccd166460082154ba1fff8739f8d85db0c247269785dc1dde380a3d1e1e6e6a8892bd5f694f56a57d335dcad44ddfeaf64e89162a7556d5e070cb748a5c472995b57edcdd3ef90e25e5a60a74b79fbe283632116f3a20a92b719e9425a23a3f32d175a7373aab43237d3999deed307dbb3caa9e5c404def2cfcd69cacf1aa62a7c364d2ba1b9cd5a126ce6432598e7970aa35ccfa34704dcfb00d5c1c80b303373f74f080cd1135900677eee426d9d33e007c31be1db21729bbaa50f69807cc4ded05408868998d6e089fbd31ecdd31c27ff19af5d8c3915655c31ed3ce0eb3aa83591e3d742fbb83042d03a5d37a9fce11822ebf460612ece9b0a7c22c7ef1a80904f4d3b181d47d216d300655bafc28a40922d9a594524a29a594ad42c433f8d710e2241aea565a724244bc2466e3107b4c14a390a30ce9dae9d84b50c9b11b1bcae43b0e51baba2d1f8762d0902a0ec5206e43c1c673ce39e79c73462d43cd438bcd39e79c73ce39e79c73ce39e79c73ce39e79c73ce3937edb12b10c7ecc90663509a215d3ea7b2249df00cfea6656104b4e117016df83da00d3f053ea00d3f03d086ff036df8f1d2803fd0c609b762944b4edaaea4f5215e0cdc782f2cd04f2ec199342f9794321e8d09fdd849544a82361c93b2a3ce9931492e4d251a13f4cb94482e0bbaaad8e223555179216c451a310ccbb0a67dc1179641e2c95c10c9bde40ff9726bd893b92e1b574a9c531e365497952a1fbdaa176cea4419f958e5b7a892919721e2f67f667784f37427cc42d29f1e244b29255fddb1bb5b76cbee777777777777777733d6ddd8b14d4a79bb63ecee186d774368d3382d654b29a594524ac910490c01e5f79cdd9387fcb43c1f85287f8b56b6fa8ad7bf18e3f52fc64ba7b72de31673c32336025591e1646b46ae31ff498e73d68f87ce8d8fd3d6d3d571f10394ef3177b5efe7b69536a3f20bb4460551e88b4131e889cb8f40b82523932631082331611293ae98146dd2a5404c8a4a118bc8c489067ef0c048b04109d0fe971d894189cc32282327b015b95d5d0469428f60e8768547ee1685de70bbc227dc8d9740ba5d6bdcad45206f70bbd2dc6d26b95d5fdced62820db7ab8bbb612bb85d5bee9615b95d61dc4de362855588600ab72b0f7733994ca72a820cddaebf71049b0b054204c2d3e643bc1b85d896a250b2123be1163c628421f9e489d6060a8db4a0743f56224aba7cc68273228f137ee24382219e012f94f9b222979b4427f1c994918f53087b4aae77a1d1168adc2057e642a32d28dd88b4742a5a03fd95d7d64051404f175621b474a5fd7070aed1168a2e8c0b8db4e0e46ae189fb72a19116825ca48c4866449d93696ca045fcd09bcd2006f0c688c91437e64223264d5ccd7e409fcc755d11c3b8b92ccb5aeb706837e23529a5c934afd9e18816da343c166ba0bcc44a51d0be440155b9d0880b4fdc1b6fc71b63e45f66ee370e0ba1d737fa2071c8d99d8a68bc373b1cf6ea70cc1bbf61a7f81d86368b4d3e3b1cf15a9c4244dcca02d59cd01dbe9628f6eb0aca8f9795a650ec1c56824aacd457d0a4a03146b6526a525e58a0df14ca8a3e973ac7f403348fa9ed0797b2c32984d5b8c4634949ab31293251035d1a8a465a30badf14e2d6c74a973f4e622653885bd0480b462e7f0661a5ed6a97b2e2e01eda7de02b6510575e26b1c74351695e817e405762803dbe92d00f2eb112fd81fc44a887a48c31c6182d3624c397ec51b8746710f618c618638c31c6282b0f19cc4e216d89493485e69090198405f4a3dc72825b31e741ab089fc110618baf02892617568104932be3c22a90d0c19db7ef36b9ebd4748765e00536204a9c67fe7a0fcfe0cf1a04cfe0cb30d02fcba6b044a7e0441574216fa859504951b320235912440f127904891546aecf154a5b73f23aa181eef00e5f81456f91e3253e5724710b5621d4c48577e308f9e4730516dc5ac9c72b6dff60a3028a2697c9fd7e18f5c9fbf1e01a48cec3c844bc0972f991053a5c87fa7ae337642ef3177f718a48454344425c6ce28b4f44286291280ee35f9ce276348a486e472be2b3186d262b90eb317e1e6810f6d803419a07b47970932042d86324ec10b287598814838290df6126aab056965b96c7803c4f5cdeb0886133acfea8e4cc75c5510c9daa1901004001e313002030100c084442b15838229224c17a14000b9cb25476501c87394c29648c0186100100000000000020491000ec832c0de614a017f6ca6831122ad3b95878372889cda6f3a8bee1bd3da258bbb0f04556664a536af61d37c142e32a98d3a8f54b623f02192ebc7f37c13983ccb92eb61af42cad4c2953a07f4ab3fc9c5d1fba25e9e38c2618d761171da960c436c6630b41308b98530e653623c8a4e5f71e0329d014f4895f67249299e0883adf00692895f6f44990ec464ad81d454b8cae391415c65448278d09797f89b9b03e695b003cc6c6963d6475826c0b7818339bea411d8d78072fb60e51345f11ac7cff989a1992cbfc97c9e2c31f50beed3afeffc803ce4ffc7dc38c9b7606d993d7f76eb834a933d1fb2c28f31c0c68121dc51a0f74d6490d427c67b595129e5302c3b1e42cf6f3b01374c1e4a78e7ebd6ac3270bdcd4bb34da5024dd7ce5cfff77f7a3a3493fb246bd52e39c9180b3d5eb97d06b3749181472911379f6dd4b458473c0ac642f433dfdf31a12b3e4ad934626e49490420dab5bdf2206843cb614b9cd2f4371c20c8e60b2e5399c322a1f2e5cc5c63e69f793f119662d110ee737829fd1563cc9de5dd6b5ea38a685b8cccb2425f073bc527b42a0ae56405de06cfc60abc51db5cec403ad2c0dd7c52a330e86365403337fbb240efd14a930310ce68f4904a20227b93cbf38f4ec10e3d326ea410c6133af18378b4dd76c1f8928c7a99556c9a897aafa22adf94687f8fde53025cab62fc94c8f2f149594bcef26e4dc8b20136dd528129c25423b4a7678c3971931bec891e7f73e8ca3ed97f82298f14f7cc5747c2d503b61fa703518ec264003b3c14312ef3e9324c427c2ddc31c5127206f8b6dbd82b40e40ff32f85e3a22eaa7b2a8f8bd2916719144e3959391def1804da5fb5e988b2213076389e9551cbf2b972441892278b10f18a4d3b162ad1b91ca002b51b6e280da70d3bbd884521ae18fa3e98260a2d29d4078ed039b520e56b0ea2df458850f80cf9e242744d56cc14e29ad94a31a9fb26663604160cc82b05642ca75592161a54c883551c6f2ea4a3f61f26a3f639b9f0622cd94f948f9b9c26d352aa58e534347b45bf28d6ed6b4d741c2fe02145bd9e1e76349fd804d68c27112bf51c8592fcde3067c4137f028853b8ea549e52890b287302fd65bd7ad8382f84ec094eef65eec4e0e764317987662b9c57570b11f74fc474762450d0687b646caf68d33a9b4622dfef843bc21ebb693ea63fb8049fcaffcbb1bd5fd055677d38605d6d930db9f4c08b50f6a4233001a052e70d815f96c4ad1874287bfb644f12a1fe91fb642fe2a5de41a9154436bb30eac06386d3522857fe1f9c8a50982c8496addd9bd04c0062e2d7e8722041c684a5bd500f24c3853a3c11a2137b93c69519fd8b8486ac878bfc06c566f8c6607b6109151e052d7a8bf64e8126587e95e0957d52dff600eed34be87f86d904104c721ec3d572668acfc84c6356db8e8e5502a50859c725938b7a7716445ebc9c257869494102beba436d214a56876084cf5534ca381f9df8b337e61e54f9cbab1ff6bad0c9c2f13ec2912108b175a26fe513bf8f91813534fa1f3e137b432bc1abd73f35247a27b24b7efac941efda3077a36e2b27a24339ee88f59b7093439f1bef5c27485e3cc2b6be0869fefdf28435e4124884409fb186ed52a3461bfa0876e835753e7f180c41faaeadac56f952c3c7196cb37ed83c7bd3e7f840150317c72a9a0095a5749de4291f5de4339159843c0af417b804bff5ceff6eef4ac6e5ab496b2cf6f513bb7fd8afdffac77a2dcd1378f3a410c94bc6b0a0482375fcbdf6e4a5de147ee5d54b6f8229a2a2333e56a00f6aaea020d84fea35b1f0c0060139324be9b33f8ce1d53ca1bd9d0765f64ba6990301f4e157c3421cad1364105c190b9fe418741fec203e9ed57caa68c8d2da70f6630114d5859e29bdcfe116d54fd7b92bc5f02d44004bcdd03e9b37f4e96c0e840aaebdd13b04aab5af1b4a727bc951c9e5e8e99a6c4860ca5532f3ec7c7de50fc3dc36d0afd19916ec3e705551f8214b6ce35491c47adab2865100fa130848d0a1cdade223fdab8c4d39fb1d0f41a321720e1c5b38838e3d540298e5ec3f12908ba355ab19756772d317a1532f2398982ef0a7c3d67f3461a81a6944ab66a99aa8b76f0aabf7d0178e020e50ec7443a52581cc02e87a2dd181ef04a403b6a24d2d960dcf244e14da8c6cc6d3821b2d7a313bbfee7ede81c7fb8823ba9946a28a4a10747a1cd6ab8c837f678091919145ddd1594df33f1416c6b5cc109b9a891bec2f6f47aa2d7648f1836fde292a2429c55a982d77134aa1286a6a770bb0eaedc9e48e4c211965af54a39935521c760d345e3699a9947f89785f71c146096bf9cc38998b82da65fa7783e15fea43811d29031ea3a3685953a5dc7a2f0cc88b9dc0447ca28c871d0423ac412004ade48119d60583249e5f2a700aad489c0fb544c3eec89140fbe86c81156152fe48db57d92cc3f734aaffd9e3243d7bd3c7552877d422089d5e13a9c134ef0dea1cc81a80ce96608445891213fcf48201009536262080b0044129cb134bbfd0dbf32ff89a9d6504c3ec982aff22898d852ea8b913a4995d04805da08be48892844442fc74bc5fee8332d4fd183b178962f158320d0d27ae4bd540743e537997b76b76819122deee81bfb2626a87b427a4c2ec111512cc6a48f7e0c524d1b48696e609d3f2cb43d96da0d2ea4976303235b2e49f0b92c24a02e2fc9a1fd422fa819032fb12318fa2900ff770e4f143b5a243995a95a1078fc9843859da1607184aede4f2265ed6aa3825ed2cf26618c252b919eabdb4743c578e0a6d46cc64a3eaca6e37685c1de748b4541e787bb76273816d4ab03c117588d8147cf88c07ba08229918aca38d2e8b77214b338a893ca9c3271e8fd974b93618aa6b369d15297e31e8ebd791d4da903c41ac2cc199972d7f38f804d6264456a74b8ae54a14c330127350d2a5da3bcb8433da4270a9c06e135edbf1ee61f4246b5c7ec88c3a7756083d647fe5d6318df7d758070603814aee474920fabff4cc04fd946894fd91c8da2fb9571015504762a6a13c0fe500ac0c84a63a72cb468b3772c6c1dabee1fddcc88b27acfdb00b714648b07a0ad479e3d8adc98f94f52f9816d28d4fea65c38ec4530bbac807d91d1d2e4ba28d7158ffa14704c5aa385eb9b950ab48920ffcc3ef71b9e676ee55201cea14af1f11111a061a8881c66afc5aba904881c08a19e4f5153ad160e54c5bb1e55594cb40b65b2ee5eb09d66bb14d44b1a257d94cc2ef87acdc1b344ba689d6bf204eb7256b34cb78cdb1c690088e28479282d43234c735141f0dd0b6e7542f293464d99973a4d189c7dc826af41183cd19fae6455bb27ccfb91e4e3c9037faa4782cc16a5d62adea08ab44f5508b6d13e15cc53e947bf9aa576f6a92028694705e64cc866df34054440a8a2248cb8719065bc620f7cd7931c1208bc7aa5b052a6a842cf134b8bd9fec2f65624e19927aa8e4433dd386c68aa743153bf96728f2a5afbbd468a0210c279e4541837aaca2e5377500c8c3272ec3037291ccf9a5e9209ff5d6cf1caf596fb6951ad5c8530a189123febea3b8cd0f6792a5d99f7ee137a4355bce0bbe07f0367da800c4c30e13c3641ad1bd01f6734e55036dec7422442b3619cb3e1a3aa211dad2e80595593c6da2a7b678d23c0da12b9f5a13ab750e196687fa89094e1488f031054b2c2f5550d0c93ec48372526d859c4f251223fa89162e0e31e0dc3340eb756f16cd5a87ddd9d5626d611442425ac12e00ce8b348c63e3f1f740e1e5de28a1c55a3b459d0b0f774b95e7235a8238724de1e5389d835a4afff2a24359ae27735426c20848b0322dd1c8c62c8038410ab4c344e7edd6df70bc65551c4340620aeaadda36197efc1cdd23df18bd1e0de773c1aa8c61ac721c384100a56d9d2ba6229a52606783760c6f046606ff02a1ef8a3ca31039ad804ab6246f416513c96e8d708c559eabb0ef88e22ba972f96e076bba9aba5984b8003ffd1e0c4e14871756589481b61cc37b264bd6bda24cceeaf82edfb771d40067212e095b860f8de7b356918a498e7e263bc606b3bc0bc32d4ce8633cfef90cf8a035fb97d57c312991a5e57c57b25788aa442e236035624f386535d582ca06bb81909c50b8c5be9226de933acfc2ea44a1fec546c71342e21529ae0356ece6089c81a5c6788d3cfbb0778dd285bee72786cfcc3e6a082d8ca43e35d40eec59f39394b6a36907aab2efae3bd22dcb10e6b67dd5a6c924b8330e0c967035299e4fb1de02a8bac7ebe03d133bca4fab41f51eed6547a7736b8d2386c6bfc98647cced9434f4e28f69caae892f518beb9478889dfa143579e1e790ceb766f285395a9ac4c26cc6b480193ab6ccfee5b6225b5ef8098392ec5607a56fd7f7f1a4270fc802809fa7342733ef8c4b3ad932136f219b149db2b703f8f1cdb3f74c51277ceb9107632b5fbced00a0a8ce58bc2a3c592fb08e0f9cad6fa59160e39c7d279800fa890a18804ce999f62d705032df8cea20d722ca622f7bcff25e4457d060a4f904dc8e020c5dfeaa9688c0dd9d00011f48bdbc190a998823f638a82059f50ca14345d17aab06fb48043c25f9b054493d8dfae5594b3baf7b2aeb1fa575ed795432160de9122f00624d5860f08c3c26ac446cea7473e06ad0b36c921cfbf38a8d23c647f7a25f50f7e3e56dc5a5fa182d7985bf6d44a84851e354813616bdb06668d3f0f662bfbe9b433fe720891700d61f823144f4ae82cd18bb2a210210b1c4a44a7f551935c6f3892acb9bdecd05e5383977d60a9d9f2d3ec39dc77a0c0c4ac7b9bdd24051d19bc1dfbb928d6839831ed9430dd2ddfb5590da130960f3d59988a5d752da3fc3d1c41ff21f00c7e39da0e6dccc69fefc77d7d56b7403df0ddcda2a797d5d16b4e7707b75d9edd416293b0a35fb51d73cfa67f09d76855ad0680130f73cc4a1c76e6b3eca17997a3445914aad04dab90284f557330f88bafef0f6d1f22ccc8df235eaf27fd43255d7b04c88371c00aa48417ab1f497ebcf6c2ab8554a84333529949b63a5970f7816357440c88e34d9cf81a2b5b0df912090ab79d014c4e60c5b2556569f9af99fb81c842cfeac1e77c7b8c84c6b8ac54262f7b7c4b33e6d1baab095ae01755fccbd2e9ae78e8a14f1c582ea50e026fbeeb1c61a21d3f0b1aa08c498c62384586820cf076fdee07204125aa19688a91d3f5fa34992e7b4d98bb8f16a1193812709fa2192044cf1df8472daa0698572e56afb8f0ac811c6277cb784da45dd4e12e17d8ad08227f384594203e103046c7982ddda23d6ae97c0a48b9a0058362b37d2db6412f162e1f27adc826773ab7d737c09ab52c7bfbb6789859f0de4adfffbc4989e234cdc4dd6e500b3669d9b040e44b5bbe59bd05b9af0decb724763210483111a1db5790f21d386e41e02fc50cc7f12c330188a0ee206d7b6e518bae5af85e4fb54e04cbe7843d56cca69046ff3e48e5527babae695c35f3fa1a5b437f595ecb0fcdc622cb8c93e5f31f061818fa26fac47dccfd2228d80fa463b20a7c86227464af6043ad1da70af8375c917ff96126143035a0100c827ca0f2485cf5cfc1b104ad9e05f542ae800f886a4b0f394e625e8bf2a55218cc0e682e2753317e37822067e8118a9900b5fb0c700c53c71a962c57195f42dd3ef7285ce47bfabb413fbe0667b2c0e737b7b9de2c992fdb9d04ba53871923c8db2c50c608856769d446cb0c975591862d938f583c9048ae7b1415c550469ed64bc09cc98c0443f2b7190802da01eeff831406b8314ba5344a5fcaa50ca5315d3db0ac5ef99b12b61a5cb3594a599939104c4bd19835aaaa0dc9ba93e094847106fa53ae437d50b71272d18b88f27d835d30a090c0ede0c74e7da6422124318865b4b5e1a167ede0c3fa553acd8be9ae48127ea19b83869ee691c2a065cbf957e2a84c868a531d4cd84b3417bb6ba8b47e60c87c916c9a0635a3253df0dd091060bc5d2e2210c911e8e180dac9222f79ae3a2c9a63c76ac231db36659b6f029b829898282884b7397c7bd9e70705a89020870f46f6ae50623800c23b93abc0e8a1a733a53c214a8bdfcccb8931c28fe44ce0a04d69a1bcee344b03588eeb295039919d699ad74da80e915900eeaf2b17840500d1bdbce2b5c6dbad9d799836f85b53b95c88baa04e7a05d8b2865e5d31a7f4730ca6c4016f775e65e1f07b0386cc5cd3d02d7ca1e95b0c50ddbe0188a1fc0e9c5ef6accbf786fc4daeb4113868c1c5e57ed921bb1f415d9ff84f34e55483b1a6840449771c69d5ca8f998ed3fa064add8a36c52cd1b44f596b360c8b1518048a477751f1150392cf018c3a4d79a6088c7024fd120907e664f8b50f7822fb7d9584d1eb01281f08abb63bdf4b11fd920e281f00b19e7a6ef36ac2bb343381c09a715351985b848c38d25824315474266d23cab69de13e4b5004b9f04ab09525994d75920270e2d2b761cc0acb579c0fa71dfb1dad00b8509ddf70b20585e0d8d0b7fb025899b62b0b18f399b3a68182a5ecb4008aeff4634c0af6642fb3adb3d07de2d9adfbe6c13b203ad1216d51954b04266c177c8aa0b7e57d05e9a94ea52912ff3857b383fd38b6282002971a2f18273a74289e024fcaa8aec9a2faee864083300ed79f171dded200c286045d053ea3f3ae3e3d67d0513d5c7ae7468a9b1b1ee3aee3bbb60ca6b5a7423c3e42ae9dbf895bb79d736878e308ec33444f6b6c700ae8f59d2632b8877494a53d08bccd13c0032e81cde57192af82574cf64ce69da777c70698f6ba82b34f774edfb13534ed7ac5b39f779cbfbb6530ad355529ee11162463137a64554a3fc01063f1878539a0e6714e96fb4f9ac6f1a73eec7fc141a4c76b1812ce4869018bb11fcbdf55ba92a5d457a023db1e564e7e96ffde30c9b37369d5e6224de18a91a4435593aa547b49dbfe8af387178c32f238b44b1935fa4f3ef4a56ab9f8b7155e2a488e3c60ac504e1a7eb379b3c10ea714f6358c6770502599d36c36c3d437e1fd157ae52e5925807fa21e2b54451d6215135bacb6be5f14ccaa82ab2f8124d648ccb18ae88af42a67ef796c9d24525b4cc120b1daeb4ceadf5fa978e5a11f31ff13e72d0c0e199bfd398f88878cad8045d3c3b6461e7447324eed56dcb93d5eb1fd4fea55331d0a53f50d030e73a6af9d78d1e1a197f3af5c8af69d6c6a3ca482084940e99c0c5daf449a36e3f4a4d6a454d06df635043cd7978ba7d60e21f157f1a6489713f48e6e81e50262009f12d5cbfc7988eb578f813d500c2addaa1f36b99aa9605d679916fe95f29d128424c1a2a1c560ec35cf62a4df839db75a2e271077c1b507c2476fa4e25eb96972dd1f4358f60fdd419b13bb9d0d8bb5ad0e5990ac79373fa045e4422989ba61c6e029e90f5ce02d66d1fa1f8e26342514e826251b6b4f0cea1257f6c8a82ba09a49a46d180d3485358edf15ca10a785efec57574f527aedaace579126179ef05d580fab8e6ad47c4680b958e245a5fd35970f8c957c2a9795418abe030e3701aa99dbbe3d6d2a5eafbdc04fdeb313d4f3a7cdf7740667cf556f7aaf185c1a32abbf05455447632a07edaa24de046f04bb3db1a8c18323e6a0efe322f78c4f4eda3d0add084e8149609e64b963226868d14a4a99e242c98a903a07fc65424bbe5c3313afc9fef61f361b0fd4b1193d9bc31703a8b7423477cdf4965a0a7cdaddd4e421ad8ecc53adc0545c4ea7e55954aadbd5ef4206f111744bd99b2026d8c5b102a8209f2883b3423a3ac30fcea3761e136e1474ec1b0f0e06fd4b8a5dae89ca433e6d454d1e47f823f5f0abafd6e9d753f48ee76ee342e14ac20af680083995bdaa93aae7882d39246f1cfb93740a09459f7b49ef460442967e79ab5d49920167488fcd8f5dbf21ce1bb639d1b3fd6913e1c6e777116603c6ba38ebd1085243e48057ad3fddc68e689fd28385c69d54d41bcc8cd9c3659d8c623a0045d1640e7cb48a84abb82a053a48517703f9cda62aee5f6ddd9c5d4f2d0abe5cbd9c1c5ffc8362ee03bd3dae59e2baf2a31507f7070d6935b3a89c2839fc25b26f87beba3d05058241b95333746abc0c74437af2f106cf4b69270cf5992ac6439b84438f4a445dbd5d2e86a53654549ac7be2a5cc9be43d99e1961ea8eab01aeee0acc71d16f564db8eab9deb5bc0f831e865b3356d15c0b2ff2eb40dfed52c815a935cc6d4316ce0159941fe8e2281fe871fd8a62c9d2f05c4036ad2325a949855c7cfbf96c693a1dd9fcb678465b9c3fa992d27d32c324f8a5560b98d67ed206a156884b3e69647371038888d6310308aafedfcc7a154890328f1d6e7f92d19f9131ea154f7cf226e260e284f91627d6e9f2436e9c8088653c33d78fc7145c853ec469952cc3e3a96c798f0d41b30370fe8a0c6cd87c22bfca7b8b6c0af843968e4a3c2469c0f66fbf70031747a0a785d4f46dc748ad494f3c218a0037494671c6addb4a46f682145303a4fea42c47e6739619071bb1ab63f3f66e57cc13b32c06aa2cdbd07b00a9c84e25196506944b833aa7c77399173086480b42ed0c161ba27a6adbb5c9e67b02329ffc74287c6018c898e82fc6a12fa5ddda68ad8963ba141b60cfa9ab9e7a07497a4824c985008ba0d3de11bf1e76d28f502c026c77c51cfd62202242d4c37f4488fdff032161759f7c05a36775315e76c4249bbb47365c8ee26413c0f929f8633cabb704684a341fc6cbeba66da5d5ad04c77d656a340493d0dc140a118be31500c45a3639e5b42ad8f88d13223fd877c41c0f84b7c8ce46d823c8efe9ae3b195a5212152d49d6a202458971fcf2835929ea1f699cfb755bb6b069fd8974508b550b3b8d5945b9e523a62dd3067b85c71abfdab60c9e86ceda6350b14b1a6136e4c0d32cd9e6cd1f0d22949f5decee3aa6436df9cc0f355d67965b6c6dc33d93720aa7607c4288fa3e9e9b597b534570ca95eda8da460577f6fe3a57567af8f596184908925ae41901e0b011f7fbda0bdd300339b2d768ac220f3565975e22a63052dbe59b6b4ae8af7ab21b779a82fdd00e6241c496df6b04da1f7d8c5bf18330e7d975092115a73b0dae38fb4da55bf5659f08e1205b43c1053792f9c2747dfdb81c50e0da2db5551ec0ad187ca092a47ebb49c76de378dd98ea489fbab9449d3b09c846684263711f4cb6d69912a4379984894f5556a4faff5f919c5f3abf49abf79588de8368c9ae5988d24771b3887746c4a7d35f8730ed0782e8079c1bf99068c8ba6223a60f3d115635e35ab81dacf2b9a9a75c2dc5836ffacb9a664e08e6dc0c06b659606c8f355ec04abead8dcf25288506270afc6366b128e8760b57617dfd8f140f06dcdd0e4f2779ab74fe4caa6b3a4f4f9de04b94ee4731e4a0322bdd07cf0d18114b5878f1b436b528909f733939b552ff1da4013acc7813327b1988c1bc049d149e0321f5559052650aee4d44fffe70cac878f650e2b05604e21bc16ea73c69a5f28f20ff541f902086f866c556b985b6a610611146780f699b0ff795e0411c60f22cbb863a36c8e52d93644bf078cf217964ebbbb05e6a9beb254fe8875100c155cdcfbf23488d72e2891d9481ac7539984a2e513d0c99ce42a472b86c4af0be141abe0f607529c9dfe89a2d6cf02a6a391e6279c70e80c8328cfc214b4231f3800289bf08e60427a5440203c82f06d9f3014be07ba03410a66c28113645b410f3b63ddc8439d51c736560c087b3ffe0d34cae27254c60162f32a5fe8426c873214a745e6a36d445d0ae384080200ea88592bfde1e8fe98ebf2168964676f19823f2830d13635b2916d5b84c3d9d9906b884ad3930b514e6a8fea91630fad3b0e6ef5dd43f3fc288e2cf585d5311635d0c49970e0c3359ca699640040b24357b330a46e2366b88a618c5621ad9694b2aa47b2251f0512030216fb274b4140a42ba8a9b4c73d08b85d061ce7b7d55fa80048281c88d3f71dbbbd61e247ffd8a6f2b289ad3cb0eb6c403c846f716f80c4242642d10300f4e8d013b119332c29e7d007081e07be8bd44ee691c4edf614f464b124750dd432424284aa13089efbd838ac9ed7a695a4640127bf954d456d8097e617258ec26deb481ee8740c596035a79205c1f17ea41835049c9c24ef5c883f3eae77e061b230a73ea775c8acc0868bf718c2058fe3a8970409968b7dc7086c9677d03deef1aaaaf95e36bb0220ab976d84b7f966d7bb2282e7ace2631af12820183c72e0493b57e2e26554051688b297fa926ad0df188006f19d16bde65fcf3cacc9d3ab3f23e53dd86cb8770e60f146ee6a4de6da7fe0350204f2956b158bf932abd3f3e290cfef5ccf83be87a685620db976f3280c7c4e1145c1bfc91faa487b06861db35475d8a99860a3e1f1a27218cd552563c5cb8c576c10e4407274cfce21ba2922f411686b52dad8ea8431d74a136f50d9a304662e083c3472c81b92d7882253a865b64e04386c3870f7c276486a13f34246d194d7f968c19c660916acd34d30e17d40242a23bd9eaa9018d98824d9af8f25381b60d7e9c5a1fa32cca1f87098de71deaa0993bcc2d5b5e8bb463fe06329c03242ccd37993c092e71257ff65fec8571a3be206713e979e03117a8c2a859c26d9a493437beb3f0cdc6e7b89cb41d3cb36f38c16910c6b2fbe410acb6d6aa5cfa22e08e7df2f2e5a4ecc6f0347f422e960f68f33148245ae7b180bd140a480eea8d2bada41114b4b58225dc6f71f415c4dcb8bd8148e0fee797e169d3e1c3157ee0e8994bdaa4a004279ca34daef2d6bec101f3037c913a06e25f32068bd91d533bd442c13a6460c0578fd8f39b2f06f9ac00ce6542f3f791412fe2d64d6f71947fd52d644b46c23d70014267264de600d4fee7b3c2971ced7f6048130d7804198d96d1ad88d6096be7171e0c6f879250a4492761852d23ad5d80fe64786f92439b3761d23a96900ab1903adf3247902e2e55c2508a16e3a156a74acec2af882647ad18c33a509908e6a3a8fcb6a5a9f22662ae4024066a84d9af5a11a4caaa1e0342cb0de7fec51d931f1b7a1e7a2160564f68c8edb9e3e0b1f5ee58ffa00ff6f47927f1b5695085f3f6d0872ee2ed230ab5e55b2680f2cd0b9428affc46408645874ccd8483392077f1c14b2eeba70dfe5ad42d609711f7602cea1d5ec5fa5816be67ef1fc321ff89020eb216f19946a28ea3b6a5460c0d055efe115b3b90f3b80e8208aaae275504509f6fdfe6afd1c05cffa015d8784149c6c050ee11d597be193e6c0b2a5268ba6fe930fb2abe5cc598937e2fcc9b697190807618b755a50c1020e3c7bb59a3007c0d41b581dab30f9d564a1681321cf23c1e196ddf479fdfdc1492114cc9513c37551381492793437da2a4372075cfa6a2933d26ed68d513c6e8b6ffeaa6173b60d368a1237f5c37b6c0505f6d91810b3a33d425e76f83722813b28c3396a6442d43758c80694a5b73be437f7f300c5173d68d690db72b81bbf92b0e5b1d7710282799411dd8fd4acd736557f97a52754f87b1cbdce0d8d614fe3a52996646cae4ff8da1983c666cfb988a66b21e66a064f680444aaabf9d09a250849edca04053845d686ec92794c385f187c8657fb04da7845cd46cd5b73f4f88976a529c389a0dcf9ddf5c57a6a3dd99132d73bb988adb701c0460541194ea33caf50e7376c0224dcf3c290fb5c010502de815a533138ba62a407272d546f8054835fb6ea47b754ab7504e1114c84e8c22d40cf7919305a5564b9055b1f59fbadde177b74e704338e4897c5f85b4c2b9433b74883c232273bccacb86cdd790e7e08f355435a133f42e61c3ea1832a3c676c1aece0339b5673e0c969549f534fef4d41cb3b336ba45495f6cb178547951e739121ea5f445ff4099f3989de0c2ddb639f4ffdf8294740311ba852805048300707e142a1adac46eced943a74ba05c47f3e281568fef8746be40ee78086f2d45198204fca3ea8e98bcc7cc83caa29fcc2db7775cfdf9dbfd0f59d387af5e8702c9af054dfa443e5d95bd3538d897894e02339c14d08ac53f0cffa5d146ae35b235ce837ebca1af21df37a23f3a4342b7076f309b64949d73e4d1ad883f70057e3b1cdde308fe602eebd71b285d0eb4bcfbcdfa833f051b405e29edb0de09c11733416f04fa3a6e293a6aefa4551fdacf125cf3737b8ca5b742131cb74d9bdc5006f9ea31ac6b5186e3ad8fe9ae527957ebce7e6b366c7692a6019be1a378db2c9a0ca036b4c7dc28a46492a3a3d87d33d16e979b1cbf86d0d6cd221b8a0995131eadb67168006659ffb38b2cc24385f79ca95559a1c794422530d17264ee3478ce0092b6b9aa6fc3620c01cd2b638d3cefaf33c60a7e7ff7a7c3037ba63a72f01a249ccc4415f7460120f136ecc03c82816d9fe67800c51f02ae0db678b2093583d138870c5bb0d05a1711c0f27c74cdade7d503aea6b26790ae2d391ce6de3f5f59faed961561a01f8cb46ce10de9859381ff3817101626c83d5104735e2ec0f59bfd31d9a52a6193d89f808ce794877fb5d9c89ee514db94573ab71b6b453262f8153ea01a7ab4e45783be412ba2b49ecd2370abb9c9bec58b1e5a68f2da9d77aa87c16737c1c4c9540e9810a00375a2bb5bd408e617629689ee66aaa2f36eec09a93c3f84c114497497628f608e54ba352b104ea66b2eb49f2b51722da74ed1ddb0a86c4720a4ecaf6e4a21cf9cd1dd40ee018646777d6de9ae2939dd75b496babbfb5f75374abdcec8da552b032a49bfa25db2fac71c6c7797d94eec78da21517df67bbcabe8482a3ca4647645c2b02a313504ea665d9e346242a3034d97155d8d8760d5dd5756a33d9c9fd28c9fccaabb8fd5f22fabee42f9ca95091ca88cca8b8afae6ee5705f2c71781f6307e1a8708bea6f1f0ec071c8fcc28a3e37d6a32586226e5dc3f0114494e915f04c397f16305fa1186597c9d70fff2b29f738b9da4230cccc42c5e4a3a6c898a9f09f925eae80099cadca4ac1fbe162f5a997826b8f603fc52a89a9bc984aa8f46c48777560cf329b9e4bf1be5a09b2e806875bf7bdd9ca71206957484f93e02fc0b2b7c59ca429151494a2ecb788f6f14c5484a909fb38e9c6dc9547b28c862a04fa01679608186e4717567344fc12d0f92b66f043eaf516b1a3a596667540dbd200a9203d1b1d761a9cac93dfff7999516502de6ce9342e098a29aa2008d09065cf983a555b6d541a8fc6154d72ee37d76f3f11560891fe3d638d6a0fcfe9a2da4202c3482c46aa9247173144827c9bbd1eec4cdf9a9da54ffa1a7ea8e0a892b660111e96d7de807ac10f33506fe4c8cc31e56d233db846d9c8b23ab1608f0d3b84e730d20dbdd9166f7d5af6450d4cbeb42dd5db6b0849f0bd4c791211dfa2e831b9f1248243cea3f5a34c6aa3502f79275c952fa8bd65ca85c1bfc630494427e00b0588b0b539a4dc39929315b9f237926fcc6d687c4d7161c855f1c1c1b44949c8c7cb0470992b5f4a97ac0b0e8e78afa58592eb977f1392ae4bc41582290fd9f56989ad86164c96a80a6bee6060712ba2f3f6530b9dee5b5bdaa89977ad9383969cbe66d0fe543bee44d4b1dcbbae03ce1150a0154b26bad07eda88c0042e6ec168aa17a2577e4a6a65d89a9ef78e8399e40d5146f9dc482a115adc73c02692789facb118caecec0fc1aae81b85ddd79a297f532bec60d88ed86f06fee68a21092cf078c9c05807addf5a2eb2b09aca7cbac73cafba968af02bba17bf920217f4115095edab8b2c8b555f346af386d668647a1214b4be5cf06fc3fef0d3b98af12560c312cf91cc6458e5ca9cfc274caff5ef5c99908865d0868b01986479a5d4a6aedf60a17c7e81c757e71907ec7fafc628e3ef6d0d61c7fb38553a78fce762e510ab452fdd372311f27200a9498857c59aaa7aed400142125990c4d448a2aa9857c5056b01546fa1a9d9c23bb2810c54c02013a43ee585f6b824f28db2afa3ad993b66ace7d6d1a65f821374bd0617724e1cb0b6a79aa5ddec4e355dd083c3472b2c0477f17b9cc33092b3a5b38033dffd204ba623abf3e39d4e9009f3407d8ad4152bf5f973eefe73697095a48a1f5d7a06a1a9f754f830e698ca82aa00dfc2e11550ece635e34138a3266bff2526feedcc647b2aca3ad98ba18d6a2fd588f19245d5cb0e5505037ab38ebe12b8ba1655e9422274c7d062ba38a107dd5551ae977a71dd7a677abbc5a93cf58c603f42923abe470cc781377c90bbc069e1685e95d33ec94bd37808612b593ba3d452c64fbd369fdf1722fc760464227b275ae2c65db245c0db40b04b238d38a1da929f9547e789a1f1230d324e6a97733e991f8061d0bc8ac8a3a571b2003c129dd469f7bcae8785005853207b9b63c961dd69364384d1b716bbec55080367b7201b118b11541e7ec719ddcc3eab9027d883c3a5dfd7589a72d94141dd07f2173c7ec16dd59f1728856a77f821497cb901bc0d17af8b4cde456950b699b01481b46123cbc76a3562702259b3727ab176a8bdde284a961ba38fb99e882a3f2c9e0303f9a6550f26d3f9f43bf5c9ab594e39f6844a4ca8594a54f0cac7571bb0dd640a1490b1240cf79ebf5672a5c7e92c06ede11665f252a4c448d8a0329d71286ad20a865758a08c19e9256ec6b2652f3fd596d986c71e50650e1f841eec45568d75bdb837bc43cad697b74bc6626ed3e96a958548badd4cd8d7f6d308be8aa9af026d30fb915819910e258972719186ce600ddb0231fcb08af48bd804da422434f6cf3d57d4c5512219a10d607275094fe9cbe4a1ba8240857b53155f1fa82df5529957daaa674336f8ea491016c2ec90cf8bea8902c03393226ac5d656817dd0e990c53525cc98abeadd17e6405bc43328d5c70c68dd19805c11e46fc04a086c475da9817d76cde2b641453ca8ac498aafcd689563491ddc287931f090ea2057991001c5b222f6003641e0b8893292fb5ede377b0f07989ebe4a297a1c2f51225285a202ba23212eacd971c85f8254214d269ce150f25840f8b7e8a6e309b4e4755d3fd785dbfaf4cac81d43fdb73ab03cb4c16d9a05fac6367da78adb16def56ac3fb171b9cfc5bd602b4310d62d3f104131738dd0b5b5a40f6418d8ca130b41c5e92ed045d83eb7ab41bb50fead730dab1457200bf6c52976f22aab628b1a0df558130fbe86ebf67f72120f9c298210a9bcdb58804913711c8968848cac9d5ccda242e5c8ba09371970b456147c4dd9745d5818a92a0a44fda38b417c94011e104017ac7b2c7d0aef4af9b522dc23dc0233609f3d967633c7caf149568487108332f1cb03cb8088c2208305c4a04b99207bc4c9015439c69dce1c3848cdc069b85cb550641668f4afb6bba33ec5fb7495ef57972e08d4c75bed34bea4f2c864315c3faeec0ba5d0b4ea68b1320a0474ace26b6d6564544cc14d9dfb78e52489e7565a4cd51751d6b134a6996a535026d92cd72ee9726859834533167017dc0623ffc08080f902c6bb0a08614f94ea92c6255e2c79b75f2898da947e34e6c089232989b09c48678992d6c079ffbee32f85202f45738a9b6c8ed73a0f860e756d3a46159f65fa0354b02cad0bc28a4242b06a04ded43bddf94bc3374603e0c37e480834f1cc7ed4aec72793215160eacbf222bfa1bc7765970914e826fa63d9d4cdb560ee76ea75c3257494e43c2c5e87c22ac29aed59837b1992603978dd305b94e283bef71b55162b4406c9e4e4c9ea0b00cba025d8c25aca00706703081ccd629176b24126c59b86e60551b2f8556d9ea8ad61020002405512dd701b1a242c9ad78bb078dc7df6e9609bf2cbe7a069b9538d8cf007c75e01633ee2e284f490e667ad3d2cde4725de10dd97f844908f268c3fbb8e0ed53dda145c03133204467f785ebd493473ae6c112de6acedbb36e0331808b1417d03ceb416c5ce8f707331946327bcb54dd75a9c7aa66f0d7cf2e9611c4edb4f4ca8d43f1cf7a86e141c091c6a932dd54afe3474304f1338a418b444ba591496aabe7b6bd65d00a23d8573c1b9864fc3be39ade1864363e4529ce4a1af660e31f386b086c551b0fefa720bad973a8fa5164ff21e4b6d828c4526163ab52224cfe5eb4e74da5437f10464d03ca7448436020abc53641227237fc02a155069d22769f1a072f1d68884df8a1e489717ff6077a9c888bb5189838b164505e06f3a071f03206427ecde82a58c40cea25e9023cda67ce7e13bc6b799f95fd0bc0f3cf3982296a16557afbc6ff7b23843a0aa9fbb651f45481434c9e3bc417479d4d9a5ec94fa197edc203b8f5c2426653696fe0f5f1dee3a2b41521c7f38cb44c1881fe7919b3132e51a49b730aa688a7a721435fab444e8037e1e8d8d3ed4dea5142a677bdc8f7deed3698a35027fb054adb5e01012d352f69998fb4dd65710532cfc26e0a8b6d4ccbbbf0cce4c04f101ceb92293699c94e1aea9ef17085c467ff4b9a5098dd7051d61c04ec4dadf0a1191d465362674087cef1a9a720f4852b33add35980ab2348a617e961f0f64ecb6d9711fd9d2b0ca3767946afa3ea10a48350d94d3c5263b7b2c9d650dc6fca3026c2f3b6ed96da0ce9b2e6349efdde90810dfbb79f991a41c6d6a761fcddc2fa09f056ddf0a211b236f5aafb27ca715066fd884c70add73d01993284f368474c9b16560f23911f01826c9bb2e37efc8f936d6f9a6349b9f26a8b6729522cd6eb4782f7c1768a4a8c517da8a0bd4c69516284aa23f0597e3029d957bdeca01501f3acc9319b896e0abc1da57c7eb6cbeaac21326f9234d79c4ba3642a0810bfa11e78633f8ef6710f2171173645c058ede0ebda67ac2ad91340023ff4edf00bff4487db1420f66366f13cee01ae0fe4371bd7e8646ce3e86e0ddc0da98e495697595e5758d1e6f14c851f2e18d82821fe1219c073f79ccbad1701eae873e610408c55359e84d9c092616f28679385253ef662f2b260236bf4afcb66d47e472941251f870499887620667005e36d173ba0f49d526800bdb2f0c3c7a85da915a42b7861c2ea01aa9f7406f44a903c7ee12730cab82f3117c6e4211b58f407466bad49baaa021504eaa4a3dbd1d4bd05a06152ce8361e723c5bd5778c608f7e5185021091e635a2761468a1d7513bb1fae815c3c0702b692737663557f92dd8928e6c3381a68eee80e05f9bd43516b848f436716f8e7abb573a0eb6cae4c5c0d9bffb718b37f4f83bf8ad2366207188bcdfc10000d6d62a4390fd369c406171beef6c64e50a7fc1d568e0c3a051a5e00ee7b14843c0a8f0edb7306679d35e99aa013d0f4616c172b4fe26fe10e3ba28fe933ff2513ccf9a5f2653035a74dcd4808ef7205310412f8986884b6003243e588fcb7c42dea095a96395be48903392a026b4a3623e365bcebe0b8dfa88ef48b66b335d851b6848bb580c35ced2f469450d42e62ce0dd47c2a71590517f15c482026e55a632376855641a913b51f3b15a5da1d6c7f512b0006cc0e8b3bf417c5b91505710130ace841df79eddce4d228fd78d561a3ea80ed04aaa761c7d0bdfb2ab1f81f3120ae0550018622352904bd8adbd49a2b1a88b2feaa0246e848a363da9dc1237c1b2137845c29263d6d9d8be074d82fc34ecd39c9af0d978c473e69011c0e48d63399b9d88386230ba700cb3001b80c3b773d1a46477d5a313a7669c17fd855f54c6f1e64b1b5b06e450216b37da119dd8b89bada09304736db9a32ee952d4292b7b0fdd80581f64ea20959bc0aa555609694475da3921cc298ee77d726266f20d9ed2841a51c91a40d79992f89caf100e9c6c720f6ae48023ac3389f8d11641fc013086483d56da7cc1b697ae2182c40a65d3162e3cf1ec4e628cb2058e631a502e816739fcabec46e130193862cd776fc12c859c5566d3fc3d3825b84640ae53d4b2c576cc737dc5a1f043bfebf1db78011ec0b064f364dc8880df05590f191d841eebd47932050d20b07d22235640988367bef083a3c51238ac1ee30326da44046095f02f2118e3edc1a89b0113159f1432b30fe40a9ad9d6c7ac84f736e784b3ab6380bdabe93920e8295918c3686beee6130885eba0873e88a6275509a8d3045a1ba3e01f8d4e56b71b65aa2abb254d564f39a1dcdef724732903d23f173034f7dc720b3893422091c8fb5dd41ccdd54ba57a8ed80892d1a9b01d183b4b3057da5f4720695f1b31b79a6bccb84400c0de29e0d2d2ac13476e6545b61dba9cb2f8b7a288375e0a781581a710e705773b0073262af390d89cec840c57d31a2f0b238bcbd108d15a8b8d530808114153f7f1b21ff9f270835ad7b6d948fecd0a29d40b348991bb6e036411111ea7aa2bdaf71809df1960a7b29604a98b417b810cac6a80245ea80c59e4d4ebeca5575925289d55c7744021de014598c1cfc3af6571255b4c2f8316761437793704fa8694f176689d93768ec785da93178794ea747891b14e69e2a5d67193df166fd10e3905f3df8f48e4b8d0b92ee1ab979aa5328d0b8ee86de0d877dc221a49d06a3f304b2a5484f00d3fd5b1dd93de73b180e9f426c4140ec8f196e4b1e1af499ef5b81079193c58ed1472db05bd96d48e3b0a8ee0a3794996b876559e6e1e252efa0f049a004e2dee5e30d74405db4420f966af63373ae1c441bf7685bf192ec86b3863c74d5c52d55a39e5d2c55d1f7596c0b09e116f32eb58ea3fbda46dd03620304c3f1d41cf2a3f8d182ee14ccf4b39b330ab9c5d9ebb51260b8e62778372492d298de42de184860b6647b159901c2b8f5f9ad7b25467b63a83b838f076075969d523d0c1cd662d880e01e0340866dd677c1218caffd6f4faab9465cb8571c7943f4492c67bd9eede7fd99096d0f0a750a90e9bbad492e64eff29ab1b4d04a8d922d48609db4b509050479082818318758739a4bd83d021dceb98f1b27e4a8ea6da7ad01c6c0470d7befb34200c1d9267679b97db3ae659d921590640c5f2b6eee9705bcaeeb4c5297b64cff6ef16aaa4d2c700915cb7f2150afcbd7ec942221b8733f532a71fb9c5c32e8b47155dd2c4d877fed450dde295e094d832864be59c172bae331bfcb13eb6d967dc6fa527ff324680d4840dd460d7a87a55e190e129ee3bc7efa3813181b8f4a44211320ebd391904a0694415da7cb6af2f439ae4c82a3b274c4025686875f63222201325ea6759c5889a4ba2d18216692ecb119309ef661014544300a7da652f23a6216fd818260a1b3276ac11917db0f98b4fc9711595f16f43440197d6ec56f5c547462ad687c1993fea91515ac0c11ed0c25453bafa0641f5c1f8a77e437c05f5403ddfed01b8dfb8c73d577786f743371a6df8b9bd9dbc9d4170dc7bec43f06410da21be64bcc79bc7b24bbb8fd18d154c02cbf55e00fb974d7f765d515c4ec9f90e7c186c83fd3ee3780c4221baa0fcca61e97ac78440667ede011984f69fb2dd7b9a4502dfe9530641a0dfd1dc996afef729b1b0e13c1c34f583eb9c66e438567d1a67101a622dc11ee910fe78b8bc8d4dab35dc1771b8b1ca8d6a8e0c100c5f4a79681806210527f5dbaa25a4d8e0575aee04f7c4a2d0bc7878deb2fbbc6f72860bb74b70549c6804839078c679f8fbf6f6e9ab6cd4d2d956181c55da806ed36f12470c42ba0462e56b0c02ae52ce20200b6450eec4e3e9320354cfe7806700141236480ec8a83c9458902bccc21683210c4c9c3108595f9ff8b29bc6ae2753b3188451a3e8a1a4d2f776108a5ac25c2aa394d6614ad976a769dd8a64644695c31f2c453999550c61959778ee2a8ebdbccad3e04bcbe1a7fca3aea8cbf8ef418fadb961dc9e646cb3ee36f34e5b0100fffe1909182574f3c4dea8c6e24a991607b8c0b9f2a0bbcb0369675c204977856298d9c946429087b6cbbdbb58d97dc87fde5775aad07e265727a0a9d7397d390ea74dd4695d655f4a144f0878ec7a397b6e7f3218292170a3843581c4c85f6a398b4a487bcdf79c101cacc0b4da22382ad920d5ca2a5ed03e119fa609ce4becc40e049382afcc01420762a58c4221d910923e3a100cb0687669c20ebced67a8a5184f88329b72220bfcef5b6de0c151bbf0a541e2ba65b1f15503f71ae4de52044779ef04b3309aaad6a90062b17fffb09aba9621cce4c9e6b4a9dbf205b5e773e0ce271a3774588b6e64b75f099a7b81f741f55bc90605acf8adb38a32dea145b972c56039c98661e79d38efd278a2ea81bb081f5befc1ca8feaac87a36fd9ea3a312cdb4fd58cb12f749820c18d763e50daf224ddbb7674b1cf67a763199213eb2a6e82fa7daa726907074ebc96399842946b451a7695d6e518ef8a11eac3af2022c054e90fd9ff64e262b55c689e76cebacbff03269454031b3088d7241538c754b0eadc464392d85a5f61b42f13a680d8617958918ee9247c32c4c35d4931679f04c2e3764f75395327d1134b353c3664dfa4284ff2e2e1f792d89c09b678a2dde288df3ea9a225f887409531818c32fa50f895872ed0d177d03fbef341689bdd242ed3c748fcff85c17a2d97acbe09b216da167b960f701b4a6651f7a99f4f94783add90b561da613ddaa5a1ad4a762a1cf1164c82e78affaeb0ad9dfbe8285059c25013090a00b293f33d96da7c825cc10444b4763df0e3f80964a1b98a35f4fc1519630d8039730a55a77c49707de0c8a221fc26dd569fce156733ef08457c242f82504d6fc2745daea6aec2c2376fa31c423a6e22ccab27cb91e2250360f41a00257200a86c92e1d4e059e90431a01882d832b0f1a4c79e0b47e46ea42ec884ea376a00091f8fbef27d0b16b80d414208d54c001e37ad2c609d9bbbcf2960c8f193d83a1e9d2b147894a7623ea9cbc337b1d7348a18c981c8d29cc9a907832a4e9338156b73ba90864fd2fa93a8835290c9cd19aee217a9f12589b0929ffe8b8807fcd1ce4a7948e08adf2fc20fa3e7aa8684df5a95a699f1e817b0a090b33662c51f9d59c679ba218242ff27d5724aa86b2ff1397ce78cc91060b3c78160d40f059c1cb138cb1658dcc24b7d8471a5f60d5c252143a22c951f3ff0e985afb800a2a5c0fc92ab5fb7ee1ec8bcdd51de657330669fc277d14c805e12d72db3133d7655bf5d22da6dcf41581605d2c85f964370126d7421c331d403c18e982bafd24e95588a9166cdc9e6cd548b0ab7200f750722a6b61487888a78330d583cfc2807ff9415597d9745b488e594e1dfee15c4f341570e816a961020117ba321ece58a7bad8430d69229df3163c2ddf6b015215115b3560aa02fba913183e2f1b9744360a2080119a9efa56e135529002561621ef8010b089d6f4cb934b402bce0d38328a0591bc08e486ee5b557d068337f6b8afbd180007143ece645f103ecdd4e0328bc60e771e45de14521100d175e7793f064cd8620fb87f3d82a2aeb68184d25fc7c61ddbe05917f1a6b640014e9e3e5d772030a4c9e3f772b43319a0d01e6b6d5f056c40e0d5666f8acb098922562fa2d24b3be1a05e16c2314fd28eb0f5bd6e095cab00609a4687ce14695e500fef4d4d0a47c82275f360414946dabc9ff962fa55ce58bf377e42601eb5fd4fee4586872c4ced955c3c30ced19f0ed2237765a72ca84338f4cc84a944f5823331901df6480eddc9b2e0e4953c32b7a3a3643a96c08769f3914e919035708aeef48203de665780e87cd86800f9d92a873146b874340e056240412beb9a8ae9a25cc7c4b806bfae534e75d9baaae62b114580812f553e53d3c04cd3ce0e8973c67a1f39a3700e982d66fd1bd90bed790e911e83475029e7fe7973ade516148febc8966186076312c824e7ed477681593ff5da55b0d2fbb981e082cff547f8646c96d0f5cc67408588ef7b5c9b249bf3e054b0096faaa325926e736f062dfa6e3f945394ee34563b4e7ea00a639b6a621d497590ffacad08c453a28ae612fc89a2149742c4cf9137601c5c205d451a553be56cbae83784d2b803e2d188b00462f291e736449c94cbf701f0614de997e02718a9bba099d2734d998b0581c6068646a123248ccf54c54aa68d71e8d16520fd7c9e2fdfbec9da0a4542b18a9663a9285670f7cb46722b765a016b74cfca1099de6f0ab910c85cd6567921cb17a1f58c63b487c6c01d0c1cbebe988c08a14e5cd334038a8f0b7ee879944d5a41e0c139e8d551ec193f792901b5a1dbc04b31df53b51ae23cfe753bebab570aece11f19148faa833d7d08749a1420c6a9058a212c3031eedd180cdc927d003a5af4cb29ca6c04879b51dd6b8e89d70d6bffa4c25535226365c91a6466b7eeea41991389d410992ae44eab4e28288c75dff8a8a5da01a660ad95c9861fcbf79c37adbbdc57b6b66e069e2d615d036ef7aa5fba5f06a8439130d16abb147a2412dd8c5b67f5ea68592309db8acb8a111e9bde0a68ca28baa58d6380381047f14fcc17ec0438316bdc9cab076ae30d646b3476f0d00ad5c352478c016b4a0fe4580edf1efcaf7840ef270784d34fba7b7f8b448abd383ef9e530ebdde1d518bde4a3a6abc5e6e1e2407d9bfdeb68893a74eb7b4ac162450b75c30ae6b8346b5d101000d7cda9796b92b4ecf867d2682253f880d291c49fe4f1f6e0895c6e65dcfbc9fab36a83f389595700674b2915ab2645ebfc21b1e7e3611ff524e24c6b82b46177cf4dfe097634e2b5d57d5e29df5e1c82cf14b9fd07a9d3a6bcf3e41557c5aa8258bd17a8ed9dcffd39dff6f9db2ff3df853dda6df72d62a7dd3d5884eaeae938a8915588b0fa07b831ba94ba20d34801882cc874cd62664e7642b53c5da5122d7c82f3e330e6eeeda06fc1e6016ae9ad3c4d1d36564c8fd971e26684552717027d732fcfcf0829e1a8e61622aa5c9a99a23d7296a6fd84f4788b3a0660c28c8a7b3f6d3978d32ccd0f24a3758bbe472c09802005664d78c4c1e98e86e166a6e8e847ce499065354046a4d45d47d3a10c7566505648c306a1044e81a6151cec082d1c1e883d281516f9acf1b7376603f560f14a9796385decbfb34e9b8d082069b7e40862d5c7dc9a217fb541fe945672e824c1a29d1e89edd4661aa0ad7ab49642462efe8975cc322bc0a9f5b20aeb50534c6223e54bd751476e5f77c6ec120739214f5105ee3726f717cf3702191897028b2bea60543f21bf36a237efb0942575c32ad0a9b266c99494701cd1ff15f4ec72f0082e3714ca0e85f5479fec58716e59e13ff120bd6b9a5eb6e8526e3c2c96d309a73c8a59682fd1f2e5f11426be020a9b63edb0b22598b42cc7afb0195495ab65f7ed8ee649a2df56ca95ea960b2f35110fdbba57eeccfbeb781d1ddf7cc5867ccaff8b81dd7357bdd0f1c9b11b15b478bcad16e6337b2f1d48b4a1be4e9b80c2657492fd52c59b60ecf2e0fad55fa6d6a49bd1a8ec76a3f622bcfec408f849c1be3069196d132ed9e05ae71f2607411764befd6616e5eb79f3301ba703400142040743ce05c1255f2cabdda0f40d9561caf7a211830cc580ec17b922fd6100b30a658c0cc9405f1ebed5c0327a1a1186870670f32e95824eea41a7f2d5ac69d8fb082b77455304b04ef20dc3270a0bed109d4ef0b84ba4e0b082c918b26e6da1714996263e2987bf0cf5817b27b31322b99d4d80d923913642e91e7e8324749a4d70e8c891c1eb5d764b8093122d7af0c334c83856347b452851305a34834ce1f71ad99242ab81f76b34bff02427987100268e798ea9b6e19cfd42a24214033e02b01c473de890faae75d0ab91f1f88507def92c77d7c602654992b807e715c2e514aa13a724929d9551ab9911908f5b899b0605eee497b7a09a30b350598129af0e518aa83caebd18f5214ca4946e8b6c9632a70522dbd382c3f1f3575aaa2048aeffc6dfe74de5b177ad27d7f2a48b68e148f97be338e06dfb63c4140d5df1aa09f8cd1840cd18fdfbcb1313a86a73a1bb234379870a454e3090a32070d18197a7aecb28e1cf27fdd184f2f0e5551c7bfa504c6b0cb94ad22c14f56f20dbed3105274d050682f0db6a9f4c442ab7559265b0fc1460573d54ccf9e6e3bef8ba59e3627a7231fc8977186d61401652ace6d868c5f3a5b6aced433ce1b7e108e622e15522a7ccd185f9535810360f8031ca594bb42294d424fe51e65a74c7cb6e57a5af2f966e185ea00e2637ac23e1c3d8373ef8f6b9e6f3b287a8e2c12e886bbdef861cab31e4080062770111422e9029986df3ca4acd6e53f106dcae8eca997fa87da09c9505aeb0534827a909733e8f8e3c1416bb6375f99f969ff987ad052769ddc3bd0220720704e9944750dacf6cde94de4ae82fa06f479198126550a83903ecf4346f819dbbbc2e6999fb161e8d5a19674793e238aac007d46ae022535557554b4a965f1ef72e5f9b4526ea14219d0ebeaf93c3dcf6b8dc0540ad759a087355108fc37178f24365bcceb380e2cd83e9f219ff1d3444154e00337278bbf081aecf001a433d1222aa389b588bdc4773086c4fcdc1e356ed6d44137ce80fb6eb6fc5c7f500bbe731cf19a08ac21c19ba8118e55bf6944d1e45b38dfdfd071ec27d3bbbd644c9b2dace07a91931e212fd21817b52c2d6d56327b8441e3549c59b04208410ddde4b323b94af841ad82e6632fca8a0ee7d51e7d7d1001a68cb714951a7e368e6916726984b6e22bd28dc9093dfcf5afe13faf6ea143a1d4ca3a6864ca3dbad976b5ebf8027b793be15723d4cdc1a31f1cc47c0a6d0748006cf5e6e78084c2e12c155ba61e1c5441364adac4dbe1af0915506826edb1451d51bc1293f98ad460a00ad0dac68793a53db040a2348246f249b0a0b64d6e3ca28d82995e3158bb3f6906317f4dd209e6fdd3c6cf473d8e97d8ac567223670ea6a12d3aebaa39b026ae538b9b2aaaae9ec7290b8b3fbef7dc7003ca568c0635e5210417cda1b4a50e8698f2280c498b698573a801ed1585f039fef6e4c4816e0590ea5aee1f9c88d2c9a3373915d077cbc9a319405cc25b9ed2688bf4fcad3443590201a3028819e3955d561948e94203a3442c7be311bd3594f17872564c0838686a9e492f7e7c11ec769a24c9d936008faab882540cedbf80b7a38dd5026528bfe9c9f35a742377efaa6992cc7036d8e346b245c9869201ff8825bb148d57348fbd8aa62cd48ab2e3715eaae4e9f7ad8447702b47e292925cc7ead81b594263b63894c35a58931d6c3a45e7c428b02cc5273fc7b223393fab46077106d7c46eb699e87d73a33819ea0edd55b0ae50b20ceb994c3e6becce0160fd70bdb107ffe1386d29e244a513f49369f900ab445599d41243812c580a8af7026bc3899fdf2e88006a74973986f6974466f12a3b461f90627a2fff2ec8fd6a391dafecaeff380175b0dba11d52d383e5c46f9cc55ff0c768eb294513492a3f8cac3bf80758957551ed329e15acdef27e2269cfd549ce2ebc3352849a0a2859224a835c2e3902d19b8c4d519bd1f863e681702329a11f06d79985a74244e7ecd63ee2b6ebf44d6f175598f17a6ba0bf05138c6aa44cca1c13529a801ebb1a1983574fe669ae941a12f77f0b0e9d4d48891f2c286a66765f022e1d014e52d36dc4f01e46fe3a938ed656b20270b51fa4f52601e534422b4e8d60fa935da75fa34dacc778b27c5e0ca35b109fab82c5a62096e7d262334ebdb2112c92e5ec2358e859b8bc9eef3e2556e9486c9d5939b400bdff98240a5f616c8b46df3753ffe62ed98015e8a9c1f05be665db803eef7fac52c5f4d28a3790ea90b52e9efe6e5095b0dc5d4ed754ecf23d68d5e61f0b3b85f21bc01ac98793302817aa21c3ed69b78ace6988a10c23bfa296fc780bebfc878097e5533b10b2c28cd9a23be1e9f2951af8879ea25d6d1bb113acabe2d43770205eb1e28e5fcf687a9a23548e99047ad84ee4603bd3a7e17ec3c923b30cbd38025351f0d2d86522883a74bb9341a60e01d8d0ba1af33818baf0555786749c8f06a5cc19e00052d941be01b30b9012711000809417887b8cea04eb747257709013f1075a88bb7bca2d072096021e7023bdc18a19b994614e9e037d01e38cb1a47fa749d19b364aaffca7b9a041b97b605f9e462986efadfba73be7ce2b77587f552509c8e594b5db1458d695afb4e228ad47eca66463d1662340cd003ec96207fc3e84c4dcab0712a6e808aefa31671d68e72ebe2a164706d8b1492071741959944c452378fc56d6c94271e05e55287f8eed24a365fa8b9e1389d141ec0e44db486d91eec31f72d088deeaac2fc98cd885c4d771a22326b961020188091ccb7faaa230e9ed9653b08af969c116c2baa2fe6647237878ca7d007ed6720ee9fed25939be9ec927b93b127fdd07ef464dee8fca245384adfb94ed6f5d00f4312998b44081032c8617dd7049972a5de0f30b0642392ab15c81435d142030326ea98ba66527bcb71d143c664019b38c1c3d9e3cc8d140b26302e5b77285c2f03264a3f84fd9545e66c646efba5f6d9e1b1d6d8b3591b9b7dd446fef4cd82b20fdda6306617f2ee8ddd9b7db536219b18768a18530abf90337a5888427d7085c01277d1044801043631890d2fd664949956c0f5aa86064b61f549e3e6c7eef2ef9c620b420b87b997a738f1911aaacdefd620011a553a078a7d85922024bcf9eb34c3683c9d229ced0f5cf8b85d5a7e305b85298fc2ce97f79765a5f53c8b894e164a93a44b4f2cdd9232a3098dc6de6c65deb49b26b577456dda6da296f6e9045d76a38e56ca8767960881298158cab6586adf65a350ef69edab1044fb19ff6623cb8c5b077259fa770e57a01192d69a70dbca95fb8728ffdddf7f7dfdf79fffee5bbb7efdebe7ff9cefb7bafefbebffff2dddbf7afdfbd7ff7f2bdd7f75fdf797feff5bd97efdebe7ffdfefdfb97fffacb34af51b66939b21cbe83ed5e285a9f5e44458f264717e5b26e02dbb23d38d10a3e426691233b86942e89ca3b200da0f07d2b4255d9359c6de05eb61463619de02ccd08b4537dab939f4a8730fe58ebfcb81cbd4e7c965582adec45c00eb69d751cd44425507f95b4fa45611e9c5ff25f9e1c744fcbfc4dd7e5adc6719fef637c3febf76677b2ccdfa037e97e8899d98cfedff01ceffd9cd73aede479a7779df3704df7b9f677f8a67b0dee77669bd9fdebdcc763df93351ddf38409739235a00001d4cc0e8eda70f39335d2cb592366074dbb690a5142a339116e10b4926fe629e098022853c4591b0adc76efee9e597f79a5e4f1ef856c4a25cce4809f63ba58bafb1ad40280914d60a50d42b51305f3025a378a24a7691399ea224bf67dfd9d13743272e665de3317d806406230e4afd6b0b2ec391df9808f7bf2aa41ab7444af5aba4830b63aab18cb56231c1f99036a2a32063a99ce99782bb5f52b6fff7608af558880f71bd9c11f34104f6b301c295853ba88e6cf62294a835cc3d483d2d795bad4d05213a86fca68b27018f69c5480eb6f90dc3f9e5963bbaef35425de209e4e3b1c1e3471e63abb011b2d17a4d3b116ddec976703cccaf31c53a5e784851a3e97d03d71134cc9f98542a91c3c87edbf7c2a9589562ef46e960e5369e51114a7a794f50ad012c58202691de998e84720905784dd4d588ab3e8c9df3391021880e836c9291d9a0f0295c0ecd7e4d8015310b9652cb6c29d6cfd2a839262e785aea4d2e0385e47f464ad8d099611e38a1cedde6caf8b91f932cabae2dcdf8840e9ac36d2e2af2d35717b4a723575614ef318f2e9649ac60e60b5f4a6c7447120baf7af5905649327435f493d28eb25e2da6460fb4b1adcbfcd202fbefb92cf48f2a7cab445020fe45458d037cb0456dcf84807f6847efaaf582563682d2564cf9551fa38efc2c9e5415da4fbc3c91e9e0ea4d0ac3b4162ac93a8dc5d4b4d1b7d38f2fd576af43001e9ef456b48ace8d27d0db509c1f81347e0aafdcceff551255103357c3081081a91688fe9b7018838ebc1d6a94274592edf4a07e2e0ad4e4ec05597e06cd6d24fb85b0c528be6279af614f5d298168d3d37405d4c19390930bdb9f81b350491c278e852f98f6d6a8a562ec711de93dd2f15f6d9a544af66367da6f8662c89fa01f6e1aa156249ec5414f4d2e122d7f0c922ae2e1d1aa36d18aa1b06ebbe64927715e463baa16bbae943283d35b8ca20825110341184de78ee2c4d1a7cdb46d6076193ca1a6d83c8d61a8d8073d120b5f3e609b1bd71a80551fa12ed77a5ebeddbea1f094511902ae8b933502eddb1cba68f5bd012ede8503249a8b6273ab2143299c1ae11359750cf07b2f6a05f79c5b0fe378971a9e9728a86a8d8467f5002d99d1070d1373d861e320d47160efb39d068b5dbb47d15f136d016893c780104ea6e28fe6721951881255d592bc68b25ae77191b459ac03186d5f074f40a51cc49252c3373e9ac502320fa014fb448ae290e0b4b2b41e78b61bffac5e54eb61ea5ee194a706becc9cf50dc96113ce11951a8e33b94ef80de09eaf787b95ce4976995a45305ab73774eaf337486d50dd41c6fd6e4768d6efeadeec971671747686c0de860e70fa4afffef1bb60a661b040bfba4abcfb285aea914965f21e00ee91504e58caf60f230a1d36be709c0a453198236973244fd17a3871f8adfeb7390a722fff8d38c2f6553075d311513a0417c4033e2916aa74e6a373ab1b67339f2122c74b2253197e0d69b9b78e55dc05c0281c67a5cc50a7b16edc48da26fe844437ca2a72560d53d3bcf50b1b48299435dad6ecbc3aab996d2cd29d16f34cdb2b2b55a6b7c521d50015300a3c16cbe4481502e7b6dfeb27feec3bbb6ae2b8976cf649c14ceeca71864e4b4c67aa16c72cceb73d4038e7a0a5b2e2563884d3bc2c39c0dd5d614b9566284fc941c4eb5cd9d13881ee7c041b831638b7e2dcd6451c10976f1f8a3057d903d1f2c86611e619639b526427f6a80b6a1d6e3ead2c647064d637d8154c33b9a1cdf873ffdbe215e80581f0f8de3e2646c19d62a988b9a522dd98a889469cda03a6660332ff47a23062b53c0010d83d0019faefdc2896f1591ea3fff89d11a02c71c47db480eef992c3a3a0bb69872132d2576b5b187acc0017d1ac3f42a49160a53f0c6dfdc13a7be7af5509386ac959fe33d4837bb3e0f1ef1afd5699e25b2137740a454405e06f53d216ffdcfc58e07375c4fb3ba7e40efd73cbb5ac133a0ae0d3eedc3fee9451285c8c92318353055a3048b84d7c0c565c4df71157156849a9f52925b14d5461a3d691dfdc33dda834aaedc9beda7bb2312bfab6217486d9b4bdaaf35b3b6ad1ff918585ba1bc177989ed2b34988eb7985fd9c77d9dc6b0a4b5a19c0d9efb9222c555d616302fb4fe09c3e6c1102b0d40c8c0318956099389510f830c1ef39765d9c20c5911f68b9ee1a9c4c2aa2b3c105c76691d27f59358c16d1d8da6c1afccad7f26f0bb4c7659af4d7b056c948b0184ce8d91502e0f3639d911bb999938ff4eb45655d2e395230a43e093472ea147a612b9489c35407e06093ad134994d1de85aecdf26c4d1a7478e298031ce10823d5de226ffa7709c2d44fe2f8a364a9a8549ae1e41df8a14ea785ea3b9c98e8657b243f2aacb3646a3f1b405763904c90b5198b2a420930a9f304192a5c17e781be169ad63996fa2f64fd627a07c65da820ab264db6382ddbc45f9362fa54306e469681ec4381c9786d4fff00f0e5799e0b3634d0c596d5450df818c7f94e116fb77263fc0355e5b094f9f4361811127fae458eb7147873b5d8adf7b686598be8865fbb1462980a5b6d18bfb95fae7a376bb537eb08066b361051c1a667f32503ee091732db943302a4c9ed83c11ffcc595a0a0b19b58578afb35979938dc270bc02c07be0ca96088d6286232f06ea39857be5998f33e36dd4ededd45b723a05fbb42478446b2fd3313f83fb162800f18109845f6f561c152fcc5014fefab30c8e72760f321cfc003910ec119d75c9b1730095d5cdfb261f3c2f6af4ae747bb45dc6b028e2f5ebd3613dca4a4bb972c32330788f5ec83ae1fd223720f70dc98d945ca1364722d0b3343cda92bc104c10162c1790660b9a8f5e2efde268e685b901dab0ad336b68839a2598b4c86ab30661b5721fc7538c9d674cb7e177c91b5ed1e3fef5091c96e51611285fcae62681e3a86779a25be9cde57f19bad8f873628e81e79d9d690f911284d39d16d29d0b8b91394d17205c8aa1902f5c3d14ce8b368d83a4dfa9d20a8f7b24fb1213b3ff4d5a1e1c27bfa22fba196d9674411cd1ed46b899ec528ad090fd20092ce86f8cda832385de3ac59474d06a6281572c1b6c5bde68c4207d095e9d0c7f9f856da383da48397f34b058e52237b5f1bb706444ab197aa49e66df8000502730a2917328b1940e041104810e0f1132a1130fdccb33c2517c8684a68420ae8ee258e7b550209f78fca597dd0f72a77a9486b6fae9e5464378b6d2d138b13c652f68a22bcdd20b9ed87b4da4829bc6ddbbcb48580f2823761e7e3d8b10795fd15ee61b5e6670e7d5fa2149674fa0023f8d19f5a1a95421bba5d3e3c1139f1c21b2802745cab2bc8a8e6302d58dca44a3b8adf7692cc84c9b8ebaf8914a36ddd61aca8b1d6c2f268df6c92f217e7b28a52e2119de2002f23b11d30cd01c65e6fb8571fa8e27c2e996da55ec0c9e3c417b85df99f79999c2a2f4b3edb57240effc4c83913469c69e7b82b17b1461615e9faebe2f0d6e12879db0339adb68d29aea9096b4aa86d2e8f1841b31419dce6cd7223e9db689276a7cc11eca88b7d2bf236601941ad80568a226cbeed8d6a9b0b06f76ed8be01f00531b480d7bac91ce7db9d4010db1885f02520582a52462ce214c14b9f864204d5df81b1d41387c3d0cddb6b2b8d05432e6218b677ef9a691b57efe4c0889596f8b1cd5ac0204b57874e742bdffd973c4a3d4ce6eb3c1597ccff5837f96a194604b6ada530f0a3172537694839c7facd359e015d6641a6045d57ca5d74e80381bf0306126955a2b20d6d0840427387c12bc7fcc160a72f850b882a8a650798ca030cff3caa3e5b8b9b3322164761d813d02e8633b65bf8be7eaec4aa03c868e8ab9843db7b4514c447071d2bae5a231e1a014bbb7c34541ad13cbc453795e28f48aa42354cd51c8c95d7ef94a5f01b855e0cdcc3cae3b679bd0d5f68cebd7e9512a6b18a8e93b2b7e6d4909a4ebcbdbb24acd8b6437212cb8f4354869ca62bfc72ad2726ba560cd1dc19ea50ed6e958b04d0f434ab6413e71e1d7014ed4143bd4db7a562e2adc749883c52814055cd7224ca747290db8c51a91de6d9a9d7dae036e29b64748b42ed148d7c4bcfb591eaf0474743bde0945472421b795d1d600ee81c423ab3db747431794c9f602bf1448bffd59ee6de6d6056ceb653e820325df22ecd6b4028ead4901812f046d4484372ff94d2c452e475594e4c629dacda93dc2e04da49b8339645ccf50df491f39614a32a1cfbc44f62d0478e70a7c357d87578c7e663463641a370cbdbf72be9c401eaf80e5286cdee4e6363085cadd13b1544a6c29460a15adc9d4f3fa5b6e837355494686b2d5eda959b91ae4bd9ebf5d42033d5b10d44d866a95ca5641480fae69896e74fbfaef51e8744068fa740747f9caf9666a158f75754fc65c458e8ae31d019fd77ee145648175231762066e0c2305588d9267d3fea5de6e54fd3238f22fc6e49bb41937b811e8755bb9bcdc3d0edb1c1714862a543477c0e96060ff0120b70e71b159029f73cc86545c577fb5dc7f0fd2098e1971e89c7e438a02281102a3fefe2e9f45750be279ef33c9f2989f0f5b205f59b98f63f1442faf9d9e67266686dfe2dc63b24ed0b4a074cd23a9f43d08190259713d75abdbfbe5df1cb1e871c75978981eed2db790ad59c25a6fe7cfd4c5d0f53f9e4f5de8dc6196e09a800d5ac46e09b78775b87186273a9fcba8bd7b4e2f4565607ba6138715b64202da087e944a23821732a7180e564799d0ade43bc42bde2fa8a436ab67be61a49477b04caae2220db6a8cbe3a6fa5fed7db5a2fdc6fc4eb3aefcd4f04552f94e03500c9e549d3b580c3b11fce13c0e50c97c1b69808ea201079ea7699d52b66800d4fed55c996d641f92ea47bd19fc16aef89f739efc30300db2b74f30999949acf835aa8da27ba0fb2d7cc15bba721ade7b5fa444e1ae13e1558d4aa61d382375278be9e8ab599354124fe4a56f208cae9e0c035bf50b592264d133c4f6ca3e5e6202c1b7c38e94b2d02b18ca2c867165bf81a98c89ccd074653b7a803af1624d8c33c8a376b82150adf9c75046031c1f7dcdfb279efa3d02dd9ba79fc583540cebfd35a481616c991119182898d9eb4c46360be7e143f735eb3754b07c854cc7d76b3a151b8caf359a308a5d5148d8a445ccd4fe5d869b0d70a66361a31c2aca0a422cf52b214c65473ef9fb0a5aa9694c210309be246bc682e68a6a185aff33460690d45d8433b1f4af191bdb924b47ab0a128f99de388b872a997d4d9d02e4fe1120f5dae74b7f7414da42e6b8e934a3d702baa53f58388f9334f9d2b052a3c36b9bd3c19564f9d57e0f0b358731be7090d267e7ae2df9447a4c2a8b3ea08bd92447bea780a13dfe4ee555dafa7ce6db9756689e0e7dc98266556d1a29e3add494f1dddf465d00ac4e1614e6eb7712b8003473d1943ed94bbb32447783b2e1f59002c8a2a62a4596cad7d859369eee59569505ef3e2c15e43c2a585a3d9d809b74c3a61d7339f2b72a655cf48756e9540b5a31fcc1143aa7310013da51f3faad303eb2bd44d634cd72d686a19955b5371a8dfd4d76f0eb94d38a296431bb47c02b021d571400ecdacf102de58548ff53df2e299e50b168cebb3ff8577e95dfab350b0e03e6dc75e0ee598cba23bab95601a739f3853b0f4adc57ab27c7b1d15980d18f7525e144027c8569dcc53098ef73cfda04a4029550261a22a8125aad21896b3ac1268a8dd089b8e45392e19faaf13b71b9eee5dcbf8902fe147f132e72812315ae9d5670c716a0bc90bf04fb4ed91d747fbdd60a58826ce4534e567d4fd1dd9ec8981e944fa18249a9f30cd482d64c774749da73f90758ac697da40a03242c5837aaac90c9cd14aa0941589cc3a021bf6c791d5604f58c76feca09dcbe182ca16bb9b405ba71c4ffd44fac3b33ac851383050e57dea28c4e7ff40b46b33796bdc676434fe701722d54e4205434b37575a712a96f97f8af4dcd317704e044739a2256bbe1f064667e14f60b6e753ca5be0579fd4c73b02522918f290e00c8b148364350bade90abc7f4cfe473c61038a13d3b12b050d4c9d941e1d43270885fb2347ab274460587edf560752ccbd21503e6ffa72c73a714c402df5d3d40b2558ec3c51f72f29ada372b9378ae74e079ffc135e7c536901fd7699af47e831bb86b8141066729e64e831353504473827cdc347215a466bf889c50e80097bfb99b4f6935c184754a7ce6312e943e7a0ccea6d98712a1816f1688b98f93340002d637e2fb4e01e0dcd93d80e5342fc2612c9f5282680228167e6b344094ef04209285b64bf8a82047d44423a2d7902f35334bbec3e0908e093191fc1ade4c27e12c0bc06682829a01e4bb323c2b263a5c177ba819cfa9916c1be91062150a802387aa2bad7ac56671701026607fd28e18b7603fcb1c2a1d2c2f355c0d44f260af2160cb7f9a364f8c2f23ea297f66ee93244239e96e053f3dccc0827b932b4d661a89458b964ebebcefe6893a093914a20cbf040d7eac3ee3dbd1638e9170a177784ce9d933fcfc0502bffb43941d232717fceb97c6d654a751a1529da6a77bc2580ea7f8ef2378330181d7612ce908c809795bc5034c8af57644a57da4241a66b9f68d52b34c43dcd3c61d2ec793d193d2e7218898d434c902ce1b8d7cf83f95b5450a76d7aacc730c2c09a8dc1b360067dcab3d3e572c1801e249f182a64b761f84fba218528bb8710da8f15462e57d0feba49ddfd6116f526e796654a8358ff07d1b1b534737ad5706563bc97315e823f939a6434115408cd7f2a2b2b35fdf68c3805a94c39a59613ea5638ca39e1b862d961c3753cf1282db43d67ce7fc5a3ed2592ce8afd4d2117f17b3727d9aa2868813f2747b25d66ecf4b7d09025b501bed1faa671c1ac01a66db1ceb7c5d01bfacdb729ada4ddd2cd98ca3414f5c093bc6fc274d3615100bba9c125c426cb58bc2c3f8fa3e9e70bba470508956e8610f4899b3388283268b32dac4fc8f6ac8dae72e76409d4c16d546696896c396efabbe90a2abfb74d9fba2302b67d1253b7400f0115b11ea8f560c7ca6c6d53187b0bc750ccbf26891b70b91dea44c2e024469756fb6fe5e53c1164db9f0d89fe4454f735b755bcc60d9399e23771391af386b484c6683c7085081950c4fb0ed2fa681806ce5d817be13cb398959682f274a3e5eab1508ffda5e65e1907ee408c8e0590c25a4a3545dd47f0813410abe34a1f9d4011d795655c2692d0f0dc5a81f09d521565ceefc325b76e0ff43c47e8fc1e78785c079861500d0435a67aab9ca661a1ed0029fa37d215e3e42bde19484fabec5659db4802dae0e0d3d2101cbf9ec94920e6f6ec97ae3e303aa13a52b25eda59df0006360d14ea1321f3dae008b2b78632ff0c4bff38a513a793dffbe960d802296badbb53cb26fc2226769a0a296226c9ece47ff58efb505ade878c317e32413267f890ba4b4cf3e204b17bb04d3693674cd1a422c6c6fd28e128a623cb8cec1888a6925e8a88a14123fbebf1b0b48ba88706fab543316ac5351fda498b5ff8c6924a7bc7483c6af5449d283a7a9005e009959acc8ffc3476a0313709036a5e1dbba519fe222f4a664e6df389dbc76ca0ebd390fb70e9f3c2f8a0a98e9c42a6d284cd0a18045a41f4fc88edf312b5220db80d661a9be8aff19432a7d4f36f3edc6e948c16ea22a81b915d3b1ff907ec4f800eaabaf8c3dd63abb7dccfd528314daa2d3980a9a6b4078005f085bdd44e12271ae8a50b6777389f44063b9023d3e221d10f0dacd50cd597cb58cbc81be84a8be70704a45b02a0428409e7383f2660dc2c2641bd74b3488f593cc9b301e35508aa9fa370cc34ff409d80b80abb8ef2d8386ed9866cd0456f112dc618f77d4708cc59fef40381d004107b964ec0a01295690a45263a44e86529e712521a00fd9db1caf0274c4793f202ee624990b342e0d4f9c72986ec5b599e1a09d752a5d0c2a1ea50d9bb57cbdbb11e10cb2fdb2957f26856288252ad8bc71fc9a189ae10847d9b752d098e4fff4fab106c5fa80720ae19d41fc991411068ab3b0b494445ee0e27d3d920d76412fc735912498afbfecdb286bd77dcd14382e736cf4812097eae982be3294b4052e9b64b0423798d7b30d6baa63454d212524bfa0814e3da2aef6ad2e2b7498b1d2de0ba80029d113837ab82720bde92beb02bcefd994e2077a50be017b4ac0191598321d3f5da36951ba1eba532c5a90a64cc3f7f7dcd99ef9ada8fceb8716d69451d1941487ffc6a55cc39e5ecbb56a1044d33ce42267eb58c7fb263397f5b04d3afc45800722a4005637b662893133a354a89f5d034394a7415173f13ba087bc2a88a2e35885bf061f1f12b3b978a29e303b5a4e88f491a95510b1d3840277647589fefda808f75ab525536a0be6db8ca789e530560958733b08b0f58bbc1720d794b358f6c8273a7cca421ad709379ce46b4b55a0de83978193dd60446a97d21bdba7ceb754acdf3ede6e90806ac25779f32632374bb58e6780a0c56869bf16039d1437ccfadb655f3dd213039764bab64c8b4d86368d2f690cc55c00456eefc3b349e2f5a5e9d6509eb07ffb48e5259aa92871c470a46c33440b88659594f8e4fb783d64e4124940309f1b8f5391ba264d4ae3aef12c03c419cede5896b2d99ea6388909b38f550499b78f4022308e56b4cdd09729b5cf40245a2c34cf447e4340252854e89abb2991aead3301467328dda72d180192d761dedea57ba977dca304dd044c2bee76c823ab48c4162a0beda54caed4872e7251e2be80dd761401abd5a7d3d0bf4765345a43ee76fe07c49071cce4063a03d5cd5244a73e0427f43d221cbe38f2ded43e635221e81c1a8721930f0305a22f5bf1488ba6abe93328e59c4748b986f379a3fbac4173c20e84db6fc440858a20a3d374b0c01c7c2961eb5738ad69eb2bdaac390597b424efba5f783eeae3dc3369794662762b64cdceb807eea74f75ff1e8100e0c321ec7314a52b349962cf9c27f74df2c2d7d96eb801967e7acc6a4f92cfe45922e8b5d0dfdc3b99f5f1b8e10f4248015f88e16b4a8be70b8fd0d71a223793c46434860939e9f244171100c5cce0b1c78b39e8679176ab7f0504b6d6614cf147bee24954a89d1009b9e07cd89b085c58be0d034c3b457f423659f6f19625dfdc1eeb7f7d186f73f6426015fe4b44b4560eb5bcf4e13e711cc32df6d3a71e3a7401c01dd61499c05e5b6729da1b288bf4b399401c27ea875ad1dae2811c28baa278d04f58a18e8e20e3e3a1038efee8f4d625aff94211612ccddcf630f8b6204936268a55c45780d380c9021a1926558e925cd994af6830b8e2f352622cbb3919cb6f0aa238188a62a14490cc5eae5c285a8f71cf7ce42478fa0a7aca0f1110481759ebe2819e67a8434a6939bddd4d9ed037e6b71e0c6267fce13a8cda3875912f50055bd76347507ead0e53c281cf378a852cb2bf45a011a02c5cfc9ebaddbbf38c2ea774a9eee25835c0ac10220e0c037ff480b829eae944b213ec53a4ff6683d46d86190805e5ff9f3e161a2503ebe5a05e156f353af8eda1bbd37625160c5e8943b508d99a439ee71096c947a21bd134a37a0a3c83e4458b36c64967539a6b7f0584ec9e643817b3334eea35c7e32151f8d4c54a565fdf830549a2ac553641c9aefba25a4a49ae2ab54a9300e7dec085d60c6f87e86dc881d4b12d56f3254de78735f5181958b37ad78fba628f4f8a1252e20ac0c09df7c6acd9324f2187a819992007fb75e2dfa93b61fdfe35ecc20ffd73d8d5073b624dbdf5ad7c0fe42ab5c9895afc5f9b01d06d0d2c57b2c41aa6524717c3aa8d605aadcf9bba14763f78f0809f9fb23d91e75eb2412f9643c37fafc18a2b9e92fefc9aaf13c7f7e4311dd547e13fa6d7fd628ce61e4e007cb077195d7ad09e8f202dd799900353e87849a9f64041e11e2eed617cd248bdb355c7a9dd6ad6e8b7082c030058c15014556b66e7f43e295a6289c020bd8731cafd62650c9b24595b819417f584ef7db844dcc6bf485c35634bd73bbf1f936f9de3eb5b6ea5a7b760ab1b788619b42c7a40de33a849d8226255e91ae1e4ffc47b988480901eb166b9b4ada8684e52a1219ae4f01fa10f11535b858f60f364983f5b1b14477bea3cb97684dd1262c1508e4b0160801d4277c9a9208107b8f15f630c7e2ac0cb72457f1bfb6937e1544bb115638a78f4fc60b840bf2d51a6c721cd92f3c9c75c1bcaa69b28a42faab0ec25e517a5be8f5c4496c9c07508c9b5f1ef96e93f9fc6d722c3d97ee34fdb112810403402ec5d144df12ebc8b1ee85a65d0292f15cb410449f9e93ed4d89a9631e0b9e76516151a938d3a49e4ee5d673e3989e8e1510ef6945bad864dcd7304459816073c1b95443167dff5d257b24815da0b6b3f05ce5dc16cb8f3e9dcc851461f46a5322f91e5ae9424863e1f34ad28539b9c725a58c19d9aedee5d438f45141fb19aa485b9d4178e311dda556300347600a22dcaa93ca79b0e8de534f0bcc6d1ec9ddd21c90707932eb994f68ccafa490b0b9f3f8eb1f7ee6e2a59fd5a3f2a7fdf056e26da0b60ac0c4bad4fe40a9207fd7f7e994c3febb095095c7d0c02993ba88e1a68c549e6cd5be1f7c136cd8946641df16a036eebb9088682989349f548e113fbfab09b36106b886e19ecf51204447d9d68338e1b3c5d494a529ba3df560a75ace92c97558bb879dde8c387e3c8499ae944685a8e67e06c5e48d83c744ff6510651c2e1147689a2169b31b367e0308f794acea59a8233bf280a1b6661598465c3f1e7321b12fb6fd7b353f906068f42f90a463098eed282e3577386f70eed9af98dc1fd98533f8d041eea1969f4fd8cde87cd610d5b352959ae206a864909f64c05ae10108fbc73cbde257e761b7a7638059cda7ad27e8b3632f37e37990a940aad6e7e675a1e84b15a484833045b11299a786105b975a7e324ffec4bcccb5d4396298c609348cf341b2ebd078396c5d01588a35bf3d259229196cee0a2f53279129b8f2a6c31876064748483f87f1710cedbd6dbbd5edd2deae664e6433b14c04a870bd26445b24f974516c92a9a757eb660a89394a4efe820f8d42625cc1ec9c06491c51740a518322ad1e71e4b5df37bdb0580c8f401d6c81c6159f4c371506582a56bb04ea848b5eb239de5ff431fba1944c463748bffd35e7d0a31126b501e0960bffc87d5973f15d3890ff228d32b9ebd8cdebfb8c637c2d0cd46791469bfc3aeee6faffe320be1707e25b64a326b7eb0cd80dfcc3352d80537123fafb9f876e4750472b03dd0be161eb703bf21842d82d9bf2770b4b862cd6278edf1ff711d62d946e937fd957ff729c1f59adec73ff7f30bbddb39a46f24312f568280dc6b3ee30a3ab7ee0c4317e0d3f9aa80fb004799f3f28d2c8d3f5ea2f241b37f313f22c47708c2cfe5b0b1fe71958affb20400a5ed42d47d6f9707b89d199ef8e75428bed3538452c784343561ed1f62e083fab8d9e9f1f6756406e5e90188048b27a8e56984a79eb040188166fdc0c476f333d6c749f4346b6257cccc023085df2132d2a5c2f8d8bfb8ee395c32b1edd8c3adbf8623f8f0ad6ea3e0fba203f91b7e91264f0486f43e497a45a7b5c0c41a2523c36b1b8e450c65b197a2e9f25a71ca59994ab4bd59a9f2d48a2f70180d0ae9eb4ce61a695ce8e97183cf8c02fec01f546680460e581509b1fdeb35e147874a27dbe96e2ba819209c60e3f12f7fd1e22dfe8c3966f5c468ff7812b3aee106af612ca7697a4b9d193b62e81610d0335fbe28f56088a39af51f3a4f9008c19d0d14702bc7d4ee8837cd5cd88e832b24ab84bc8eedeb675f30c4c84a0e5beec7cae05f660f92ae1562c95f5905602df68378fef288e898a5cb01afbcb0a05ce48ac71e40f8c084e61dea6ce84adf3fc69b4926c00562b6eaa57d7e06d8c7cabb06b3ef24b152a65aa3e77a394436bf21da757772672dd143978f8e2d069292198a7409023b34772449b3a969f37462ef58a4b63a1d55277a63201d0428fbd45d4628a8b042526fa7090e5b2eac73d4912d473ef1adb0ca9cc65b928ba344f6c6ad241a2b481741a3be9404ec4b698d42bd749adb72835f1e2095e20658c3343ae8c988b6d0bcd70bb2d0968849836465f709ca07d644114c1f3d2851e0f051ceb6eb1a44203dadffe2890c053aa65df1ff164d00776d95751ef90447cde06e093982d06142738a57a50de2f0416364e8104ee2746fdda385612cc627fa8e92e562609f0c1fac58af0edc960fcd6413450646065d795ac7916141eedd938abf1cf4a0fdea283bfda99461b9d8fbac6b11e02d592c67d61808a81de95cfb4de0f96d1b39acba2a960faf4bc9f1af7b3ff31e38f465571888fd5055156d107a1adf59fb7be8468a2d51c6fe531955a1b03cc75cceebded797abe069b89fc2187f616af8d804ca1170a3474b06a930391a4cc895ed19bb267ad701648719143d67e13803ecfd19d56706881f3c2015e287297940a1b4c171a863a09ea228a91e71341237484cdf6c1da66274dddf94062a72eb6f8ad73888f7b223977cd3f37f79746b6827a319d7000eeee789a842c4fd2946b2187a45358706c2b288222db36f3ae0eae9352d7fb1c57591990d9975d498ea0832404bd2ee8d4a524f8a6cbd0a5b80f076aefaf5e40c25c94408247d5910cc52bd59d379620f59a3d90574b89c036a4d971b9b11da7f4239a64c0ef891ddfdad8541cfb986ec10efb623eabba57b468f27d611474f05d1c61e5aee43eb29ad5294cd97c1e5b13d500d1106ba291e037d4dee76b1bb64eb301121ee50f96cfd67ef66acd43933c4085b2497e78f3ce067a1fb2f819a37a5f92e2dc98b04e4a41e2520aca28517234c479631ba6e91840664ba22b2f2b1508d6cc13ef34a3d251dd106b336b3e6308ef2e7589b5c2c041c9b573219ce555b668e10f94cd765e8ab2ceec43496d81c75fbaddc049ff2f7f21291fb47acfad49e352282962a621aa2bd624d0752800311eead4a292c649974acc063124d69154f3e8105301b01e98fef0c32d0bd40ada72328f44a870686a445675e8d4b9708a5177f5dbff4434297aa681539d65079c8fa71336d4c7e02092cd05cc9c3f564bec0c4fa3458df1f798f2f697ee483c14bf2b03af0a04ab57bb6eb0002ecc362d5d3a3984ddf8e4f2f23ea806c0eb4a59a0371f966db332f7f0a3de36328f0acee46ed3bbeacb2e990d044e45227810fb9105305e036c590270cd74a4d894b808db610a5d7f85f2f51754f66130b0c776d4e17aee7ccba18afce66c0a9267340aa5185ebd7fdd1ab8893bd17ac0a9a26d26adf34264a2fc0d5df3601fb9be5c78a9f85b733cfabd5d2e9990780bf241fe6e9272d6b49b9286e02b40727a349911234324881062087e1b9403921aee72971861de42ee77a2b670d46e30d59e1d4e6c150b9501c68376a37e5fbee98eed61ebd6cf30ca18f46067a9a7d90d4837dd28de77399a8ae145911e790bcb4f6d0930cf493cca495a70cee20263be28f7e27d5b9a5f29a3a64ef50295fca6a544d5658d215c6d6b2b5663f429d65b3be1d2ba95b981fb7e20b81e9c86aed08d69de7ef61a03f3c33505c3415ad0d42253d0199fc3e673f37eed69fbe4ca78f43ab5021b9f155c7dd4905f67736eb7cc6fe3b3f7ebcde96a8659019fe5ec3625c8824804be037c1cf50ed55572b5b6032aac05a364cf010954c1288cee8072b04f7830b79f7de44d293bd04ce3f24f5ec561e2540772109284912e147e30f2cd77ecb6183269797d880ae33e463a86eb9a31d03dce1c64c543c78ef32507a21635da1f352c6acc57a859740fd6e035ce4b24e7154af50989c74e877302d9d68dd2e4035cf938fdb15d8fcee3d9ea69337a9b5628977fd3973e5cc46ac61d412d6199133c669bfed2c5e708d1e62394663e72c4e002f66ec6222615e2b14b7970ead41b504003069c0468dc3e6c3f599434aa5ed4909c1c828cc63260a73c5d1743ba44fa8f8d9b2cb0e151257da8eee43a91db40078a325dee7f3b04a42c059af5dfc655205cd9380755e1e0465ab01c53a4c2054bfdaa98e870cb656872ff71230d491607b76356371b15e0094d6d350a8000a9a018c010e7cb2ca10b73a2dfc005f9332144432a9ca121befd8f2edf767777776f29534a017b0c370c610c229148d41f0ec330dcc2500be9f4b0c330247938991872cd8193f128dd908b6bf86f3318cb8fcb753f2e317c7003ffe3fa187155683faecf7e8c7c665cc504777327abc5cdee6a9a7722a27bfaf463a4b354745d7719715513275ddcec27e6a4ffe72616727d6ee68a93cd908bb9cfcdf5908b93ade870f3c613400ec008458b32975cff23acd5d038a95181e340f8cf5610638354caede894eb3354a34e6677770168112e9c683894cec7d170a0cc224f50aae168336da641f11c9cda77d4669a56c455fcdb6f5683e2adc16cb41ad71765f4b83075529ed3a66c335b91236cb519106634a66946b4232f6d76692c33496f4f710bccbce22d62137015cb88702385d640c0557e4bc6d9d974c45073cb2e327b22810bc3c8b1db54db36cd5a1a84573e58369335c9c22d59d6ac39758d5df304e400cc56d7c95ad73f34b5d0108526123ccc3b10a6f1b5aefd89c74c2d83a64f2de51afe343455724c471639d77f08271ca3a7a6df5dbb50470a09633f77f95b081d3d65280d1d57652143024814979293e32aaae2d81b9eb88ef88aab60138bc312bf999946c649fbc655a547b9307f02e5d674e3c8d66b928cfce117e1a4fbf8219c74f5835f059fe7caa3f0ef27509a8b96e2df53fc7dc65bce62cfcf2915fc6986f788725862ae3cc7617c93e3b0e79e9d8cec0f9b28b7bc7ddd1df2143dc76126271d88c8372047f1747a06091c8ca5e96ae590dba5d75c6a233a280758b02e5f5145cd0f97afb8e2e6ba942db3ed9c9339c78338d984902646531057f537683272a78b260763a36034f94bc1398ae800abbcf787a27320f144abbef7cf00e70012c3aaf0fd83740e254a275ddc702918e783bcb514d1397ecea86da73fb530b322b8fee0f31b980ed7bf5b82e53081365c2d300e26b8864fa18d82ebcf3933278a2c8e5cff96201e23068c13c080f1c2042f5eb4b45a5a4e25389d5848c0c2b232829515d38cc9541241a9440a01893402c168246a9648a4d2858a4aa80ea110880e20d038651c3f73f87c3c72f078c4388862b81386201c40f07bc3f7796ef0bc4e0afd204e3f88b3e1fa3bfd20eef48338cd00e3989309c6e14130c0389a6b0411c2384cf6c53096a6308a207335678cf237e598d88ab8067733f6872efac1b4e96973e76c1b8ff8ec52823ad7351b979b3bbbfe74bdd9dc174a29b51fa3f49abbde3e54a41e4a6db96d315897bef8719d97ed5df6124bc14877f76dd379996a4657a78218fb5f3ee266cbcfa7c04f7d497d6cd9d55cfaea49735f5cb5d19f251883e897cff6f9d07e71156fb67c79d94ca6cff62970ab2fdbdff036aa4abda46e34bde164dbfed44b99ba2f4e7a2a75e3656a4fd0db59244430bdd7e13790805e875f7145ec929e3ec9a20d4d2e8cdf1e0b32c4b26843921b80cb59b061a704735eaee22bb24892bae14dba255d386d796386fa7069bd74e5d2cfd347710e30c636fce97bbcea5e1305aa3cc7b0254751b1d4d20f9f138da04fd2bad72be58d84b39dc8c3ef66a7cb7fb51c53efa4901b97becb73e20e6a6f38cadf8509a5221a4840a4ed499d2d69d05a4e9bd96c56337bcd1d9d9d9dc9da99ad9b6e8643bb17cd58637a51875d9aa23298ce0e0be6add9cd6c86b33351361d6c8cc95c2f574dbb5c134563ea160cb6a3a3cd26ca29a59cf34f4c4e84781753cb28ea42d78d4b3d733561b039e7dc992badebe68e6baeb656cbd572b55213e5af8da3c9947aa5ec53d85c6daf17ec057bc136d9963351fedd4e0ed782cd15376bb9ba6e7ccd5c73c5cdfe4da6717475dd3882a6b033fde78947c0f8ed24034a1419f5878cdfe18318bf9bad1586adb015b65ea1d02bf40abd642a2a3215994aceecba718cb1e5dc97c6bd34980693b1e60a8c71b318378b71b318e8ea58a0ab6381ae8e05bab41cd05dcb01b59cae1b4793e97fa6525d9296c9348ecdb5ba0e26a3962b2fe377a844f030e34f3c581e7e79f81dbe885416527ab0a2c45ccd6c3452b0b813f0d54c77d38628d75f88afc02cdac084871d66b8b84be54b65b0fcf89e1ad3c4e95f7ccb73b0f1f35dfd52835d7fae08b1cfaf7c27ee383d678471fbf8a75e3ecbc1d85dd18afeaba5b7b57ca9ddeb93d275afaee450bfba97b76ed9bd682d854c9b4bfa3f11d11243ff644f3cfaf265a92722c6186a4f9e7fbedb89fef77d4df544c1ef3b3a75ffe9405225a918e7747115b54c4c9bab912adf913d6de047692ff16e42bb6903a3645a0cd0b86d85d0b8202e1503c151345a318ef6e4f9be65ea32cc874bc2e8a9a696389852ddab9bd486359369069aea5e371ca575af1b5b4d4dd884cd55f762947faa7b4d58aa7b81a4d63804cc98725c553a8983e3049d28a6161a5c2801c984736aa00a7ab0bbdb9eb60755249e09f4a653bfe7fb8e2df641f5fbae3c1ed4fd6fa2777ecbcb8417f4a509f43a26a87e7efc4c7aeabe7b239d24b4a7eef94e338cdf3a38a6db2667ddb0a3380a270863696ada38ce126d75349173d5388cf2779689368ed370f3eb02599a9c9073fd5b18c645890684bf4633a6fc0ae0f4eeb907915b76b6ec6dfb46406c7be6d567cb8ec77173160f4084ffe76c8560c9652d4270643ebfcfdae22837bd936dc369b40d57710dbfd1367cab31dc9b9cf416279d24910560d25f547934e9af528d60204aa868a46e7c3fdad2b91f5de54e43176dafc399c05bf0144c2defce71506877b3227f51a8029a693da3caf682edb3b57f23e17c18b5d7e1637b53010631b64feab66b1d89d00e02f2e8db3232f70050ab294253c49db5e3e48b27e8c4d4a6d9f2f0cb218d55c4190b168d52e4fad31c1bd812cac455f308d75dd57352c1f21d9fa21a71f349e9d9cbf1964aa51c277d3e992f6f7ad39bde147b7037f46eca8e942e4a1428344a148db9ce285044a6f7274eba4ff129e5c328c7a733264e7accc94e325f4e76b7ede88471de3801df3f068c17a06547b57c675bbec5b6b066da533ef10a6bd67fc25cc5b0256e0c9d35612ca98ddbb84a7bdf5626cc496fcb762eb171f24593846a3961338acd13b464cb39bb3e71aec8963367eaacf86c72bdda7232b93e974c5bce79aab39e46e611fad6ee386a36575dd98d27f61df1355b8ee28c821dc5557c43ef4fb97015e85d7c9893364b4e9fe7eb11bfeb4733525bf6a432da15c5df01c549ffd24ffabee353fce78b99403363c427cbc5f2c14c3269cffcd0ba8553d2199dddb48ab4111a45760594d965395cbe620b5188f2893b4c5faa2618367dfa7e5b5623607cb7fcffb4658ca7d6521cfafce233ff0b9adb7fe2a7d57b8de5e769fb9567aa697489cb62cb2596e8df7e34396cefdb9eb6f759eb697b3ae73c6d964eba15d1f25ecb73f5d440f420d7220268f55a9ebe673d3518a9ed235a5eb3312defd99817cf2fa3b558eae48b0ffd1489107fbcb05cadccbc309e3edbf22d8d61c4e961d8f24fcdcf736ebfb5f6fcf3644b2936f1c7d4eccbccdb94e2b8aa714cdf4d719c9c3514d0247ec996c42f957ed37ed6edb952f188f99bfd68c6ff883fe697469a69e35a7e8caf305a58b8abb634ddf9b61c2f2a86dde196153bf2341bb37d49fcd2f625e66ddbb6955003442e2fe1a9296d6f5a79d26fb59ce29674dc32f42b5646bba5ed435f12b9a5bfa65215bf89d4dcd08f6ab9c40d692a2a2ffe27fe185d31f4e20ed1ceea3b3e65052385c258bacd35f56bb7edfbcefc549206d9594aa98d584b2a1ad1c4006662b74f3f26134c6cafbdf7f389eca4406c0b4545f29d80fc8b14ec808a1a16cc67a7f8fe7b7012318099d8a5efaa01ccc4a84532c56795d057a2843efd3efdf001ccc4ee1489d07e2b7bf06de29918c04cec6ab7ed297523b5a5a0e652225265e8e2528b84c50afffb290630138361857f02d2fdf79d1dd230270658293c86f918f07d684f0c6898f01b26b4439424806142f0ac01ccc4603e7b6a18256d4f2f4238f902e47bd00e39e9f011eb22a801097107124a4c9492d3124e4e00e6449f613e9c1aa436c15d8bfbbb8c451172704b6f519b28586418e9cc6d68ac0d1655c0e09674e6e28eafc8e833ae72ea2818bde5a42f616ef1531b27ed8eefd0b4bc8893fe2d6fb96ad24ddc31278579abe5aa92b2685c55c455de2d27bdc5a8b9a236adcbd477ac88c35c79d78d2394d1a605826eedb48ab45a2d3a7392717c8735e374e66e73fd2985329a626a055002b20bc8233bf309480f216245175d74d1453f1118b0431a86accba02602e9e7899a5f96260fc1587697becfaad5d30fed7489dc1987f1fb26c694e29c01e4e6ea0444a3270688ef79cf8bcfb3c5f949c6d1f5604f155dc096d0c5e5c1dad272a7c9fbee1b3bef888faba393231d9dce2a7cf8d9a524c5ae9025428ae3836bf8cfd89475311271801f53c633c63bdb8c39e932279bccd89449b10d82b1bb7358b6cd26d747ac09b855318221378584b7db1d041a8954914d8f9babedc31fb990686cc9926cf90193a60663f8c22d5d07055a60a1734bbf2982cd5784b1ec9c8699f95b32965d17b2786a30f68eae7ca7cea46972fd2715dde2fc49336d0cfd69e7ac930aae2fb5745231fbf6a4992357ea5337de855906c509af3c344378e10973b179c1c9dd70708570949b54219db40821b844ca924ea6481a4ebae8674dc968374c35492325aa26da3fa7e941952e71a7fdd1e869fd68c629a319d177f4a49e6179faadee27d85cffa6dfd1f7883b3cea6931a2e358be6d7972dbadf91ad8238ebe877ea7f2dacfaaf2612d97b86148ab27d183afcd3943b65c628990d6d67eaa3cb527d1d33f89b8437b12591f7c3d35e3abd452f4e2f62adb87b6bff420d72202fa862adb7c15eba9c1188636667b151b23aa32da6629f7e24f9188d16bef2dd49627cf4fcfd3cef3d443b516bd46c3d7be3d761aa1592a9a3f9c7a2c56b77af42c9665f42c2cef513a9fe575cc697a5a4b225ad7f227d79db690ca33a89a3ed56355acc864a1e8abd918ef59de452246cfc2f220d82511ef4b96ee6e96f744bff2218bf8222ba35d96173deb7975b422bea9964b5cf19b55b22f23896465b41ef42d147d473fc51fa33b5251995c18128dc2d1681433f2541a37fc45c7104558d25b326edf2a7ce29eeff6f4c1177d29a381f5dd9485d1b401edce18b0bb5fa4f2e1eb98140aed86ef89429530140a35ab9b42f8812f5f2ef11951eda1557ccf63a1d04ce17332da059f137b800f5a7ba2b6594e7e43184bb20bbb6ed6b855113957cd62142b762d49034e318950185f48b98d949a234b6e703693b9a72816a394f68fc9d4c54c5dd408a54f7c3562d19a25b40646639452ee358f508d52aacd9a6e90ba34968dabfa6a5a4c6b72ddb59beb3fc49bd533a4a7eabe9f5b97b6e66ad67cb4d259f3a2fdea24ae9a5fc34ff6ab83189b39766171078b9c35b445b59a92dad0d6a4aef9eecf69cc2edffc6668c7ce5f9726d18e5c185017675302c19399ac0b532eabe1f2155d2822db7929a1a363448a8f22a04cd96a36d913989439e9482811850ee7c48c50718b68f634c12adc38d9b3ee09acea33748e9393c719729288f4725689aec2c7960ce5c6550d60d23b89e8755a78cdd50f46f94f210baf2fc45e73c53036af980f232429c2870e65194da769ade3c97ce8380dcb7c93c98068bfd9210da3c1bcf83b0da3fcbda523a3a9d13c29006794cc71da6eef2ec9cbaf994ca671e4a6e5ad76b4d32c15e2f2fb1bc6fe348cb373d5d8d1aefbbdf244718f3d3527dc8c8c83ce4bc3d442e9c835da3b46b50d47c631dfa7e08528976597aff042913b6b589027cc2801012eb4e97d4ac692670d9ba74fc929fc694ff39b70d9116f23d79e6617d9d902cf9041b8867f6f81555c5c80497f25be24b4e4192d41c3e6aa018cf22f030c361ba6c4770d81599568161ba74327679d08c4fbcf0e398d264a867104d5f064ea46ffcf52b317afea98056958674b53e3348c6c1c25584e648666003900e38c638cc33a4d6c9173fd65740cf164ca741108f79d1d72ea46ee2919c60e548369a29ea4c1b1d44b13ac83a325f149ddffe5fa70f71b4f9d52777777eaeeeeeed49dba5377ea4edda93b75a7eed49dba5377ea4edda93b75a7eed49dba5377ea4edda93b75a7eed49dba5377ea4edda93b7513e3e87ec24add7849cda6904aac7a0849532f22956f21422352490768881e0fd06414b77d36f665d4c7bb1f2043f808d9d2412eaeeaef6edb98110993950093fea45a81263120e351f40064c893f1b7d0250c6658c38cec48b259a08e0937a9d41637bab04588eb5ff6a59ac9e42385291b89d730e589fea6855d38825a45f2755cd976ec6e55a2fd575b0fe33d989a2b8f51feb3a666aabffb7ab0356c8bd051afb14c758cf2ce766ac90e6ed9b13672ee55f12a49728b24d79fc62b09137ed9d8ac1ac6f93e571a9a162209df23836be2ff54024a11936e73cec993528fbdf1e5a4c785b1243dd629817384a115acaa62081d04ce216a1b3f609567f28f10da7f247dc6b21ed6cb5994e5af2d8ce5b411ed06b41b33df662e6924ad8709a73df52309eda92d49633696fefaf9914df6eb45f6cba55f3e6d9cd5afb6e19d836c1b3e601c937e5bb10779fba70d13ae3f5b9b2030f92fce9570fd35afe2fa3bcb91705fed44b8fefe3d300e0702d7f0246dc39fc9f59fcef2225c7ff1f0041e62ecb0c50e30666831e3858bcca5454616324ed60996a536a1ae7c9337c560428c120c2c60905e5cf162d4126b119dac38a9b02c8125b4a28415908989692c25a1f4212181e4191d61248a60a250c5082a60a88ad0072a02c81b978cdd87081fce3304cf260ac15f6e1306817180140402e3f8a62b611c1ed7a0ee491847c735a8ed19fb66a90ce00346bfacc51652b4903247375270f164e6d9241a58e7350ef3986cb6069b49d831eb56c5584e1b37e235ee9a507869ee7ab1e6ea592c560960a68f5d7bcbb9bacb49af795da746783096da6bbaeb41134cebb826aaec676a63fa295bed359f6a499c9c6da996c47acd44d5602c3beda5bdb4245a0cd4420b28cd5a9d906ccf30da53ae4c66a91b24506eb26cd3fabb7f74e14987847b5a4725b4f051049420c62e1c59a684fb1dc255656712a20b49ce89eea2081fd4494ea5dc85a26014ddf2af98f140a4cd2d06a316354c45cd4e7e37fd831853b73fc78965c554228d442a21d0a8519a23fc7e671ca2e7e9f77b8c6332e3d8be1fc423ced17d7fe9034f95a5f6c035fc57aa0f6c836df8972a0002d0aab6e12faadcacb10d7f50e5b84617324972bc710dda36bcd3751b5c6d1b65e8fab3e7fa53b0c7c79011038685f1a2be68f996538c130b0c9695172ba61653e95422b190462b239149a45252099142a01168148d1f958f27e41141623886e007fc3c9f277a5dd8712077fbd3bca63866ffc638dc6fbf46dfb2748803ce285111fdd7b476327332a5df9cdf227f27fa0dbb9d737538d8bd64ebff9e7947f7df277e2f52a93a9c0c79f44129a53e58878fd8104ea6b66d8331a9624915dbf63a7ceee0db723b188cb976156de3a3f5eb5ec7103ebaf33ad224dbe9c216feed451e3cb71f79fe682988fecb88466c0ff20b7a3a3ed39f203a52d053db5dcbde1ef4b567f972377acb4eddb89bb5447c977a628fd12fe92a1ae6aaefdb534795df9ac92d5f3c83be559ef41eba3decf20acb7bbe73d5e93d56a5f47c292404d998ed65bc4c5d5679168de0dfca17d6e3f9f16737fdee259da39f6d7709e3c7d1e83fb1077fdb987ed07b3cc717250cabe225bda38a8a8a2d8584a93b7ec72acf51aa3276ce05bb6a9eda77dbde031a6dff567b49dbf0bc8ed952e793aae94ff5f32c35f42bb5f4230f77dbf9fd1e7f10e888d0cf1e795a0868f43a9c37cb1b7d15d0c812a1d20fb265dfd17b9e24fb3d9bca9336d09b2ae84b3554a993e37f6a47b265ea7a9e137b6c1fa3326e9b1d67570112774c70b4d1a9ddaedabda3d07b6ac34a22d7099eb329fd29b2e4c6bf7d0ffe4d89bb3d91fbe387545ec576156dc3f3a05ad2ebf9b19634aec723bea77e5f45e7e0fbbdf8d997b161978bc1a83ddbe9751e779af4d4b60b6bc86ddb269d749bd4a9a68413502db46f8a26124ed144344dc6928e34c9a274618b12d664e8a59d91b124ef10db6b15c9f6347cb53dca4927321ad3761c0b46fa6d753033f33733fbd03104c754d3c79c265ee988755218653e6437d7bf08a6a227b39bbfab90904d2dee543b328e461c8a437128b327773371c4b9a2e350ae478a230ee5d207b99b3a94ab7df760a886524ae9a4de5a53fa211a72c942359f28daf2fbbe2fe4f95b8ef88ef3324bdd90333661d34614df29a5e2875c620dd5885f865c624943ae0f1909d5cc0fb94235a11a235ac855c371daab6a5cc50d7aea879b8de5e7f5a971510c45f1bdfa894d9428da528843b9dcf7cf8fab0623f7e5c76504f454efbe9f58f79f91afc6c9cd27272bbdc92d43aecf920f6b7e3eaf89a2bd1a65ed2aed9b36698772c159d93fafb912417194bf288acdf5f1667e46be9a9bfb04e5660d7e5adccd9d96939d61845dfa3ae60e8de65344fbcc38013c7bd29e613caa3d2773e22477e324e99f97abba3f3c05ce89836010e387c59f99328c2197abca959c1027731272858c849288da7bf5037e5aaefab49c74fa8a5dfa1c8c6372a9ad9fd6876564a43fc3c93eafb90a7d5e54d3b89b9d1d1bc7751d15d7dffb5c5de7846bb847df7bc2397132889173e2e40d0886a12f61a41c4e287ac2cfcee73385db0962e476c41d42467107b5adb9a384b9c3ed58295d6be466ee83913e484cc2830985418c5c941097737d6a9a3635cb45a11c1721b1475f953088917ba222eed0b42823a5f5c9750e0a6823eab84da3a2e90102e86c3a2230199bab0e06e33cd644d9b8caab719208acf274f0a69969f4a6d74f7f0cbd24decb49cf018a816d3815c3759ac32831746818dd40618e8a75b2f1a6e552ea5d1a5e4ad6f007fc72d2695ffa5e125739417a493c1b6f0913c6d27b75d80a7f004271948585adb01580cadd0ba0bec79a2b10067a81497f936904c2cdffbe417ef117f55cbf2cf8b38251fea01264bc3f68ff8339e905567d4960d25ff51eaa86459c54d990c6b3612b6c5d7f2a0b8b842d1e6c6932ed60cb71445918e20e568394ebc3652db8d0830bd2b087ca0f44a546907c2f80fa1d8cf44c823109c6245800eabcd101b34cefefd5b8ca8331e9ffa56e569a994ce368faedbded51bffd0edbef60cb0e65cbd1b37c8471788f9aab1aefcfd2f930572c7f597ef8b2b3f1a569fb9507407d99a8ed53757b1b75fb1feab63d8deac3b3af687cd9dd93e86e7ffa1a155569546654e76d4fc396a732c6e1bd3f7bb6e31a4c96423a128f007b187ff6187f7bd0c52478a278c869fe102230df4bf17dc338416aef30b312a17ddff7855f073e3bc461c29f6212dc873f638c83bfe5c142efe52ad03a518a3ce87b3b74eb925ab73eb0693c1b271d4563842571c7e7bddc4b22a469aef8a58de14709699aebb18df1405465a269ee1773d27e4c3ed8a3befc60b126ae1222ca9074cf5566de1d1d33a37ea09e51cc53fc71fac18f7a94c540b7aee6448c4764d60677784fabe5144b5cd59689a6f15e9e0d594b6a85ecf02be20e9187ca2de16c404d03a3a49fc8e55e263748c139c01cb6e1df604e7f0478e5c1268a71ccf82e79f6cd5a3c5f610a6204407381515e79b5eac00fb91aee75847bf50d51203e7bd87a7f0dc6ec317b1eec3a95511995511919e357959965a22f3fb7a4b3d97181ba8f46a3d1e8a3dc7e2ec662b84d87dbdedefe1e87d3d4962df7074c8ab6fc99e946d6ea5aadcb59ce86a77ba8e544fa846b895cb75c309654c6d970acebaf2a853475c2b52ad7727161cbb19c74970a7a19b5d4aeb5e5f784d52d678c8451cb794bef896ea132d12da9ec6585ca4435c65c28a917be26c84c5a3f1faa1c151ccd91e65e9f07559abbb923c6ef4b8e46448227aa3f6ea67beef96fa8759be566caee87c558b68bcaa81327fd5bfcd2fb6013e51f6c7eb05286f36ea8cc89abd842c15d19bd29e77b9af67d9f76cdd567a5f840f7246898eebbef2316c9f731483a704aa261ba1fd230ad0e844f04a66138765b74801d42040649f7c13ed95c51d9079babf9dd7c302a9b2cdbf6d3ca60578ce5f7c13e265f9d4d1ce5418c1edd1ac9f759eac451fea0b8c3b354a6642c1d069b6513973b463189e2c23a98abd8c6fcd6304abf8509cc6130264c441a8e080ccd8b91427777c7cc85fea9c369a5944df43f4b3ded3b6e0a71fbe77b37e7d434db39d9ec9e531d7f5aca50ede9644a3b2e70dca53fb9f9a1b3b9f02161f4a703bb010d979f021c05c73463d38d9186cbea27ca47cbca5531ac0a62c48ca1cd24fd39e98ba143831b2ad7f041e9749171ecc6a4755270efaf84ff1025d43e8b0cf0e7826cb60c72e96b9d93bdf980553de38f4090ab1c3e57c5072bf7613d027c171df0791d931b811c68cb2944077c2c4f90959963e949e297842f0922e93b50d798951f815f2a3d6954fbc33f1a759bde7b6651f423f1472a3f7a662e656cd997e7ca8e5ec7dcac0688dcb6fce38fe28fec89888e119ffbb631e183df772da3b840dac39ecad5d201a0e746cf55d16adfa28aa8624f9eff4e9eef5719ed131eb1db4231456d6346cfa3ba624b13e9fb55442e7d835f227dc9011f91f4a552e9f4037cd2834ffa8442952710d07f9eaba1288aef01f29962ede7393f9527a9820f3e5779a238eb8031882207aa3c450f90d0c75339ee3d9e2fc7171fac27cf691c7df85c3d897e7c8e0424f419d5936734fab19e46d287eae7f361259146220b24f4a771b44040404096274a0c51b829fcd354cc00b2cb4485e365d1e9daef4bf032cbf8658c11f41ee7f89eb7207c526de33aef0343d1f319412115d1885432adb09c5a5ec00863dc7015c7108bb06408d7996d809e6bd07acb0e5fa6bb4fc88c9707d7ffc8135098ee675ba6bba195c0e5de2b0c91c77f0c245cff17228f183160b4883c60c078711279bc78d16284ebcf22f2686939ad883c4e2796225c7f93c8838565a524f258f127893c4ca6d248e4512a9144220f126924f2188d4421918748a40284eb0f1279a8a884945cff51e4110a81441ea0fe018fb17dc0e3f3b9f4bb07d73f1479782ef7a97e896288e4fa7f228f3004790082df0e787c9f77c4f33a1ddcaee37270fd359107e78d83ed729ff2aed12ef77d03c641354a6dc038e6ec1a300ee71ab6ca086fb88ac31b29eab78dd8100c62e4c6fae3834041dc1a2741b58aebdf0921083e681b477a0849344cbbae184b7771a9d0a61ea4e20e109421fef86c2843ec6634bba7fb942d89749c8bbf6c34f50dab18fb411d6202c837460dd49afa9c4efbf62d67ce36754edf2b4fca5962d22af31ca9e3aab65a8e4e8ecee462ea74df60616149bd384987eb4f5958486dd395f45952373a92bde1a4d312c94412919ec53ee9753814921413171d85f465cf48f625959ac235fc532f24d3ed0e620a2fe9691562baa4541aaeffa9aed439c549d6a8f35931d2b923c3ddfe8de52a86429b4265b8dbbfc97412277be6343de2ab1d6aa6143a3375688bd250233b3a4bb8657877dc5e791f92d220bba0cb58a461490d1a68eebc8c051a507041e631f6fb93ee3e7d77534a670e3d3d4e94179481a07faa4cdfa30fa39b5eb82b20da394ee2e04461d1217d5667c5866064a1c2c915abb958ac46f3f7b342c75fa3f96c6932919cadeb849f15e344c354c32c036bdddddd5388be95f0005a1f04ffee0113c0b3a3efde631c6d13dec9dd596a978198cf9564a7a8be664e7b8eabfa2914dced32148b20c25df0c30fd8a13f711514dce5f7f71bbf11c51da44e94e1ee7cf163fd89933fc018f0dbde80ef4477e14e7c9eb4b8a3d4685c395ccc294bae8b3c3c2f7ab09e56be6c90865bb5a1f83adcab3322e82e6094fc93a083a9cf60ad607b388052bbed7dc9ddeef9ed7dabdca8a8bcbaf77ef42cf218d1d979cc641cfdd84f1fe43822fa298984451a8e6091062aae40f264138f207dbf9680d1b758b6e56727a53a4efab713fc52e894258c312c7ec12e8451adad76ae8181e06256d2bb0864f49e1d722abdf70dd3f220bfd399ab54a4bcf852bbad14cc8b2fb93be777ac82f1f39b09f082bba7dfacdf9caacf9430f63d7de9275bf6cb757c86040f33438211e6c5771fe3a5dccf973d4d75c2a800007d579905107acf6132763f26c11355cad0eb04e9f9bfef62484f9f890c39952c112c1f33bf0077081118efa5f02c0994385180cbf20ed3302df36745f281111081f19e2b92ce76c0b3431a6608094450001829ba2f000c1118ef754cb0451e48ba9f16c907a4687929605844c2fb0e787688c3b47c12a36ff99e649d28fbb23ce99d85c514c5655b9d20919e644b4b77ba7a7afa94253c893bba25a4535cd52c945e128b8d21fde93f9677f107c9c6b07c1f71aa50d0db364e7eb61540fad3cf1c5771e12affbe9b9707e94f55865ed237e93ba69ff4a4a7e28fd393ece9875fd243610122972f157f9c7e90fef424bb8179f989dc7e2762589e4ed3b354be74e5e9149d497748e28eaf241641e4b695e9d1bff25058e04484dfbe2b4fe4829eb863e541306c3101a39f555bb19acb54b552d5a820954d7f9094183d4faf05e39cff738a6af9b496515cb66e0356bea21abe8a1b261caeff58cb39e5fa7bc4b62ef3261ebbf127478cdd7f4908bdda30b4f2ed5e8de28ede49e9dc296572e1a48e8eabe8c5a28b12f07083451d70a8ce2cb243e3372eb8e57479b0e8e275cb7964521d2530b965781d877168da6dd9708d171246cf0e190111180f782fc507bc2741c3789d95e203dc93a06138ce9ef847179ecc1c9d9c2224b9e5ccb95ef60bd5ede0145fd6e084d55d5048bd74da5174dab80a4ac0546fbfd339fb45e0373581483886311942c7cc588ee3d5e68685d9c4d8ecad1967b13a6f752c574dedca50a661b1583890ddcc703e569fc00233bc6c6035b33569727476706437b3d8ab8379cd1c5d35e787ae9ab69419e768629413596932b1606339737226179dc9f48428d7bf853543c56ce16a4d3dbd859d755d559aa8cfd01edb702332cd8e7b6de3ba273bad1bc7310c6fb6f626a24bc931074727e77c6ee3ffd969b6ab3752db759d88c5e85a3b0d96682118cb698344e3774a69c9f5f2df18eeba6ddbb67e3133b7b66ddb38a7f33ccfb315ec6aed3aee26eab313d676dacc25d3063669a6eb4c942936c22e8d8da96674f9203b13ce38b3a179a1b9558c1b115eb00518eeb465cb2ec8d57eee092c30c3176e19b0b91a9fff47ec876cae42aff2654af4e5cbe84b8eb11635329bcbcf1205d9e527dd8c64229597500a448e9527ea6312c72763c953a0a1992b669eb63cc2634f3efd7f74e189571e539ce4ef9d0b2bdf98fea9bd0745df39c3eb61317e11b1226c64979dd85cc6820539e031c5559e7502cde5a74e801303b60f3fb4529cb46f98210d13b2d74d1962670ea1e364131df77a22117fde8c49bc805745d870123449b08055ecc408462e7f1144e05512349d93245cfeaf0aa31126320a3497b7c0113ffc03e08007c0992b23d6c0287e28c4210704973f0a26b8fc07c8d1b9bcc5cee550044d842fd6f0db42abdf6b4a617c2374e66afbd962021866476ba276b09ce4d19a287e4a8626b02ca806b036819dc0bafc3c5873f5bd0b92cd9dfbaf4e18f729d03481e672c953a0b9fc6c8dd09928fe8f0a63c95be01c00e700516aedee0a71b99c8531428aa34eddd6081d30700f16a3780aaccb6f840ed7e00d0e63c9373a50d0b9fc49b0e6aa070b099db95a004dc953685d9dcbb016dc92b3605db6020dcf741019a7f810995380dbe74cb000320c53f0bb19bd4d470928d05c7f8a339bbdcc49a67e5c69cf166706656627946ea2260aa71b67d6339e331c2838331adba28cdb4e1c74264a67d361d98cc6665c17407629bd2863d936773a394dafc39b3557f4a72947d59a17652e7172c29c9c365c6352d744cd23e8a5967b4dd47c1d3ebfdc62aaf9ec326d8c77e352caedb5c12e8c0953d1d64409fff6446026f36bde6b3fa47bee89c04c3b7ea8f0ee9e34544c979d2e9a6e2bc348a970d1700ddf74266adbb95cc539f5774f0426e7d4f69404f7da03e15efb7ecd0e51d2f6e6fa6b768bcdee26bbbec1b869371baee1df83ef26041886d9ecf62a3718cc6cc2486d495f9bf5d4602c27cddc9928288cfd94d3884cef5c3a4d44b9fe3249344c4b1023b7d4ae6261ece709b0b06d228a0f22e3e4124e5aaad384ab681493d220418ca15f61fcdb7de007142235e1c4063810050f61d259e7c39eb07391515fb4b090462a3ef4802279d861868b0c5b3f068c172d27961553893412a98440e3c723862c2e66d17507f2710bb19b8091655bb0293b5308621c7d6fc738f89a9c7471157c76707777d9316d85a42e7d21a9db74d239d98f0849954252a9542a85e332dd450b4dae3f9026647ae6d3cd243199287cde3c0da980649c74dea136b509277d6767ca6bc9a482274dbda46c9a7015b5dd8748ba6711c8c822b7c3bd0e5f754f70df73466b294ca70dfe76758d6d1d1d22fa4e167768aa76efe848a1dde6cd32758d3869ed4e6bc79bb1b542eb35a07597abbafc8c5a7adf998dd336fcc9aeb6b619deceb77ee7775adbbbb41197d7b1ccf084a0d73dfdc95265fc8c6adf9bf12c2c333c21e875483c2fc366ae70485b8e30de1b1945ab2dfd968d83447c974a99a45faa1d93f4b71a3249df7aaa73b84fb15246d1f7d49051f4c32a62923e584ddcc2cd36e8cfa874c761d46fcbfd94fb3b3dcfed3cd7f0256d9fa0774e8f5528bacbd92c79e22465175fe22ace3eb1bd4c77b9b213c097de36da12279fe89b86f510fdf63d7b67f9e894dbdbe87b9c1680c9a296e3b686f9bc6010e3e899647a96070550c30740fd3e555dde46b5de6c1973ce5907a37232aaf7316a8d7f51edb754973fd52f0cc3167df045f2798f8602a8e107a07e00f02e35f5b6da0040fde15375be8deaf2a01696aa280aa7904831d728a31092ea9cc6e1d58c92c9a55abadcd2ec66b394c9d27c51454c96bea59a982c7d8c1a32aaf4304e2d0c44693e58f9720f8240e28eede9f7dd6a5f2a7a25d1979ebf24020415451c09c3edd3622c5bc7b694d671d29fc5ad8767114543ea427f781a4e805ff6dd01d9f614d958b64e5f99fa9eb8a387f744d473edb02211bf467d16817866fc135cc8d1f870d208e7dc7ca0f1a3fa3468f8f044f8f67fa8333ffcf7a9026094bf5873b0016c4db50dffb0fef055112cf1c3732118b92f533786abf4095d54d35aa7f156adef527bc8b112806be5fd3dc9387a923bbfa28a784b8832c6a53f59e5c3d3e758153e7d90573b3c7d1556d9a75f6295cb53fa2726c0f7f449a00ff53fac3e5401f08a73b00198f477a93d02c00c8032c62d534084ff3cc21aa0a36a5fdf29750e1aef3ea09e466db651fa5a2993a59f3564b2f43dd48ec952c907942d55fa3dd4f9a8d2d70757c41dd5be8cb36fa9f4a352c925f499cee18348e367aed3a83ed45999c91e6a6546d98e6bd097f12d7abe54f42519affd90d38ceea5e8be614619df0f7aef30332a11dec7d02fc0252b121efe2b92cfd3ee674522da0e7462273e1dbbef40678738ccf83c54afd270d2f3b422d9c18a6c65265d2a33075eea5d5a6a32ac13a0d76a69a53cecdb1209274ab0ae94a03b69e0f0527767c6835d4da2f38db1755cb54949dd1933bf0a49fde02366542652d76b9cb46e64fe8cd40d570949a590883fc5167ff0730cf3cf193f67cc79fa317fc6cfb018485dee895c7e8ed9be7fface74b165376598c818f37fe36a89c4a5df535cc59689d4d59eda7f50141cb108229e6ece297adf33181f76f4614e5f3987ef3cfde61c309ece174fdfd4e204383db5a510977b33eb9b7ed237068c0a4537bf854524eee07aecde89ee822b374ee76c656fb624725954c2f394be602c7d67cef07353e873c3582acbcf5a227139dba5aaf22c75f45d80eb6f1a95aaca936a37f17e42b5bf22154debbab2efb42d73b2634e3bdb364bc497e203a2f83da51fbaca7bfaa3afb6a73f53b709277865e2383408da04bee353c010d494a39f9a9a2d3bd0e582de7726f80daaf3cb6264679fe22a6a9970b994e30b721c651718256c37a0ddb648ccd5f83eda4fd779ec38773c71dbe146ea24124e4e71df4939ca3f657d876f46d1a42257b1f51fe9f6737bb6a3687bbe9bb76dbfd9d045dd65157d7f1cad9aef2f005679174c4e12943305d777f064c13cc1f52902af830bb2283202ba43bf9fc8ddea13740432856f53f8d71f202198d19afa9c4ebb7f4eeb447741dbcb002260eca74ef2f3288472ef1cc731d134dc0e249b90a6e93c07a49921ed2221c771eeaaa695cb812ed7bc9a4718e5cf8162ab5bdf7bb89ae99a2ed734624b9369e438775117e3e09c13bfbf69b8f77c495d353c65bf0c07b68bab7ebb88afe6f78f9ffe74d145173033dc7eba9c34e228df6ec0ab7675a5466ec02aa7386014772e98b29b469ca4dc7b3c9ce635ae0ad9b26fe8398ee3382ef49fcbd597753808d2f0b27875382809f75bd5ee744d23f3c837eff73d65d5f8df77acfafcf7cd393c94c23408729e0fdff5e1806db88b1a71b2861e71f24571c036dc690dd7b82e271d0863495d25d58147b5ab556a84ce2fa98b7d4efb99a289f454c902043fec068e8373c952380dcc6dc327b317b812ab46cf0f83552195caf3d36015e95338509ce32de77039b1e807926a7c0ff327c13946fe03700e91116c00ce61e2c12f44e7682900ab3edf758e54c9d2ce7183da6ec50ad1e16d5389d326f8e1347dd1feab7382a00b96e06bdf3952a59f25d248a4129af6a3f4bb5ce882b6fc9e894bbffc7e3e414137663ef83a3cf16acf19b854b325f89a062efd2e3f70a98d0139fa03d7e0ec0dea725f3e1a3f300e02708deffd0615ee93981e4cfa5b817c79c225c010413eebb1171dae02ad76bd67d096f4b57ece03973ec1a4a6750ceb7ce678446643570e43a138d1a14267e6f33dbb9422cdd784911f6416629a3aa5bbddae4ef4c79932cf491d369b309b300efa59c1a4bf7633ad6095860526fdfb96ce05e68248348e09f0d88d103d9c5aa68f13c5c9493f18b8691e2c87c3c1f16073f5c1ece620f82294adb5e6066d8723da6ed641e9adb5e6ded11ff954b67d9c7bfdce5f7ab0f95c8eab9a7a24b55118871858b5dd6c5560d2abc0aa6d0b4cbaabb699935b68edd24dca7ceeb8463fdb72d3b9cdba33dcb0c0aacd0b4cde78a1dc76ee6caeb63530ca9f63b5b8991aeec8b6065675365cf0979bce0d6f89c7b19ce4669ea06bd8b8f01557335135628ff1f9bfefebb4d04537631bfe9ff64d7366a69b5166a231ba742d5e125e784565bc9a316695e8c1268b33369be025c183cd26c05e9899690ecf98f8f9cff3c4c99976d3cd0f36e707fb987c399f145fed50f335f160df936ff6e17c5c7c320fe6aab29b95da8dc7a49b693773e53d28825c1bc635fca76c4e99ab9cec6833f4c98cd128f486e6501d3a85ce66cc8a196b18e3a0d71d86e4aa5eae872beda1f22e0f6ee156c707999b5b3299b9ebbaaeebc6b18e4c6edfb5a6a84bc1573b466ddffd60dbba1430179b65f7e2a84d85d3b5dca54563d6b1451b7f7b2ab40ac40760a6fbefbb9793defd804907828ba13cb24b01a3bc35fa1e94dcf82faeeaa8b46c16864d0c95a21100000010002314000028100c874342b17040281846b93d14800c8eba547c529aa7595021631021000400000000000020902008008e97e3c4a890b06a0ccdcc5bb000c7744b1d5fa2ed3c945d40800c644051946158bc996f8a215eb82e7e37d7aac9a5eded3a4968af4c555eeba870471c1cc57898c263664a5d0aec9637428660722b6f6e2d280193ec467ec850e594eb08e8117297da037099af66f9fd682e506162744bf829e842cbb3d72cc72e6abcebee6b627282ac76fe50eadfa21e719d86d8a1c0c9f8c294880b7231dd640324e0910ec6f45549a6082aa38b5550b595fa80a173ac15007d7b6abd96d7463754c1c0fe0d14e0950fb889a4287a3c88599ceca173e476258a84e0636d0bc56814a5a9cf4111007e0126bf09e068e235627d123663a6182830931bc616441bf559245b098eae583013b6785cbe4b5fd664d37e2defe0c6b8344a92d1ed420539292712de7f5f5c6c4305218cde6b83dc4e526af464ce0f0e66d2a71bc633a8653e528ba416c9a72ffd1820cb3d8629b0a2295c241efc3c5b2c5cdd41c3e22f7fe6e74bf28c447425d198635ebf74075333d9573bc6443330f27cbcf705b17adf1908e153867324c2707415b0930b84611d8384417270d3c4461c4572107be44fbf8592d01870b26c1df71de19ad386b649fb176bd9ce4e1b186859e4706c209e78691e6310733ce069d9539ec0606cf197d8c3437a608e856b8869a3970b45fc64024cc0c9b2dc0d2527c8430c2f4718206c084c412274add0761c11fe8d78031d6f0d523604945b41a90df0e4aacea326209f7b9c951d251d63c6fc1a5d57aa2dceca22f8e370d5fba434b48f80e9e3c522e5aecda903f5794ddc51c08fd8186dd1473e8f65160bfaa7abd2d25081774592f4b79c52900783d73a7134c0b287e4489fce77e628074b4e3167e95732caabbce20b4c87cc3fbc4e18c53fd09afbbb1f90bded5ee7df720d318083c528dcb4d1fe65730c5a87f043f0c23b1a706055914316dd80f52866bf15d28140085c0a94f0325d5410f03dc24ba2912bb3cf54e74e050ec3e652698eb0d9a04a7beb8a152942c1a274f4039ed0c53f25fd3a7c37fa0b6b61132692041cb96493eab50da821f7576072ea5929382b3e5a597f972caddd501a064ff921135c5c1de58e243502cfe8479c2ceb93ad0e54e01c24a964ac1e0bf438ab372832bbbf90493cf26ee092b5cb0e1c589b6c6ba05838790f13c0282135106df50c4b3e63d094c8a0640466e3c4863ecb57e40b04ec920400b89d3633d83bb845becc21d722023d5969211ae41835bd5b0d4bcb3faf9d8e625003d04c7fa0fce1b3b74c4e29831752d8c8273bca1c633a04a80053f2b4342889b145227857a648a275fa6e98a15c64220f85a320518d92520fc05690de08ec1b0fc4cb3885feb5cc3c8822d510e14c94dc4120e47ee151aa9bafef481f5a2692983bbaea0520e503b8c5990356177425d4f780dfb0d302b352cf65cd96afe75da741c1596ac214183eea0868c48b59796fba00ac5d44f1ef5e5a047fb109ec01f54e6ccb49ab33737f483b990d82eba2f95340c992f7c19093c221b2199c4f4040d7862f617ed66bcd5ebf120dca52a890405c6741718b07a000f6c2700463b50348fb482093780728fc78999e77257a40a729a38d94083b6510dee794b262938cb7b1a3c01c88b38c25248d6fe17dc66bba8b9d42638b4766b7cfc1f8bd6098390bcaf024076dbaf779121783612944015de6a19ea3f0cca16f7d995760f300ef18be130b8cc954dc4293a0637406ee0e582c5bba7e4249e986e05fc02bd2648c07c12e6e445e76b0023f7f6bd110c39c4145df6eb3862239a81639239d2995cfa4548d14bb76c2246a665bf73ccbed1193aa6a6d5b9fd0e83f9b3439d99d66dfef06f7cb18647dc5f2e61ea672f631f1dfda5d2832f062232b46a9b13cb25866a823f8db24782f94c551d262585838102d2845da187856aa29b65e1033ee08b907b0b2c0162f8dd83f5d9a187c582ab17ebe04b1fea03462faa424b1ffa4d462ff5129c4fab912c5f893e22f34025a1b5532f3ff4d2816db564ab735e9f1b04b5e2b94cac5190ee835f612d0a58c4dd4b1a7feb8c32959b7f27808b7794ca978ecd4d7a5910464731979bcd0149b63290036c0579099697599187ee0e6cc5c4844a6f1de24dfcb5eec3d87c9de019789fa97c014df061c4f7b81d18a145e973b24f6669dd5867fb203113ca5f233f4a06ec0a7c888f982287a07ddc97c588365aa5bdef6e10c7069b7b6e0d206ae00095b2df1a966d89537f9c2a559c52d2c74e386f4e6b83d3d919ba19f929bed1937a543fb57f166edb5ffccc26bb08268a7e3f643db8cb3557f26541ee019ea05eae0f9f6d265b2b479deb059dcdfb2b68bb4bde9665e5c04ff17f04de7a0a98023b4ed2f3a66260322ff93fb15683e1420dade81007dff47fcb015fcdb201104c520311155b7e01d1ac533457a3d8f9aeb843d2acd44a4459568c6dbffc88fd50b3ded9e63e0c8ed6bc832402ec5388fdb8720b30d0b80a39fb7f4584b6100500bfaf7c98da3a251c2aa410bbe004df943888c0314faaab0f372b62f82eca5cd82659736e2a5c55f7241e1688d18a6e0a2ef560a9a8a09d14ff9b400af36999b213e2edb57822109c84517e6058fb0faa2c410fadb5f622fe7af9ad2c8ef1ff8d18b0b7413867d2629e36286ed05d5f6c0a602153125c0bca002a3ff5a1d6dd08910e37c0c593015e0c238ce403c2823b13b067a4ddd6dfd300da5672d81750baaf65c71760925d27833727c61ba4e5728b7a28405004945eb0246895722475b3a42d11c343fafba7a76bfa9327ded144cb220a84f4bf1153853a6e5a4b2338c0ae0265b6e36330404f6c3fe745b1f5058bffe458ae7565fb8caaa06f2c771492aa873faedf6393d685b310f6e4aafa2159f76353dec878be6af66237c8aa2bab8c6a446f3170b053a94639c811faafb7307b413165056ed16d441144cfc86ddfe8ccc29cecef0cd2f8481b109a024d2950497412ef53db1086380a585b5f7af26c00b002a00a8f100d9cb737940e12a140ffe7259816a422cd656f508186552b6fc10d23f8021e13bddc760a8c262071a065f5d45a9aeba722e4c37073fc788fe365e8a53af532aa34af801954c20496720d141a8a01390eab6e0b8cfafc452729877dd09af143ebaa1016840e7d406e7763afc8061c74df5e69de375c03d1bf98c7a5e028e53c179741a02ad01bc400ad8cdfcba6a9d5b28367cc7889912b446da4390fa32366f86ff3ef9bf61010fa0d85191a5f9c248b39e0072eac24eaa564f85e032056b11ce7f602e5753652c8743eaf0f6e5535d77aff2373a1a6ced4418c0ba84d02840a7a5bacffa2e81e4c3e8fbe0a8793c1f49c9aa020dc17e2c14bc755ae579665a533d11400a26041e5c9d68a180c433f61e35deb532f4a2c9238a5f461c380991fd89913e75da1228855d32e7d4b79a044b0f485d73d89d81305a0ca3829b86d1340481d3be6f14d82bf7f6dc2586c39c3c8f5a11803bb55eba0022a51c7fa5fc3f421225ed192b5bdf058cad38c9290eaa99162ef809a7144873963d07580c539361152e9c9c6ba6061ed87de484d567b80b8adaf2f7799e5f9c373ea856fddc7e8675d555c07676fb2bd9ff6711dea6f50f1206123161fe2c808844549168f0cbd213af1e5f1c53f6ebccab11ed85d62432213d61b61b9be1178be3431203eb50763e2dd6274824c9f6f35e135145eb012a3058209b5cd1dfb48630ed5fec591210ca9d3a95f508e20e7f9b55ad11a932945279a5a13aca4ad98c76aa26c01b0858bb87f67315efff270ecf6ef995710f34dbb1dc95e4353558a3cdb9e83d29ca398fa01dab4dc6cf6121b29d80266502e3980d018e4eea763fd4434c31a0a78b0a3ed16efffa9d5a954f34dd1d519cbe20b00b0f8be8d1a1d36651e3485820d993787ee8c1f83399be0ed0a6c4fb47e544e124853b8e4738c6e58f5f314d0498e11aee360f64329ba6edf04bb29b57d04c44c73d17d771a85a33588e8f8f0d5658ca9a161165119ade7c26505e3ec413f511e52e8ea4bb5631f583ece50e402c539852a86b6113a37ce4ff00448f92900e6b0361c613be264886f255dc17181a89fdf4052a3305365f53573d68480189f765953f83d667651b5bdf133ebad6dc38143b295ec7e2532b1f249e75f3bb71e33d5e26cda03bd1e83537656eb99aee8fa25068acaae26a225f8d48aebce8df787eeb17baf5f4aacce24ef715de2cd1ad008aeeb701d5acf219d6c377bd4c5d467e317da28a518f7943cdbce84eaaea4a5f06d175855ed67c0cd084b9bb56b5bf4d726d59558895b75afb3a730f6e5f27d159e0e2cf3746e2ad37e873400f8794a09d63e2c3bd0cd5f4e8e74804b4ec86fbabe3ca2b5c49cda3b398ce68b5203841e962bb62b1036656fe452822d66785993b976cdf2e8303d3bb16b5aebcfe3ddfb1d4bba3d0f51e1c9de36ec969f50085e17c77f212b0b3d66afcc128dc9d2f7678dea276a2225758f3eef6f468eda7dd31d0070b40cd34d6ff7d8be322a9d23f39daa03d36d3c54d237426402a4b6ce000b3981d924167afd9abdcd8cc50e99fec721c4d13a6729471d370a2288cda4bf6ba550fb6bc3ae52865717f2e618fc96d64b87e16a8ffb860142e9aa9388a41af8ccafd02d60e51149ecc55fad23de51f1c1cfe541a008a010c62d08b1b882375a0408a1d76c8fb4b1cda55917b1e3988620807f8498a0f129e64f37c1d3b3ba2837c7bc73a22f260fc424093e3c020d1a30b7a884e6c2ef745f974fdd9e50b144e71b965b6cc3fb30f5070d79eac6859db17405b325d37d12e752541710d8031ee9366304cad18f84ff9672d44d5674ea6adb4a5c1a93d4c5457d8d03317763856225e59617c05097367cf131c477b033cccb22fa0d21358e640c51eae6b6f54ee84f2992c86282216c00fb694d31d9313762bc17eb534ec869ebc232fe999e5145860026bce5676207f1b5c7a58c4fc5ada238a37f6314ad00f979a1f6b50f1f02b39a2d1ccdb463cba8a02f7d9155d71131f181221f497ddcd4134a3831e1f6a0936f537fa86f1185f9ba694e00bfd5ba22c470dc202fb4853d8cea197164b1e3ce8dc4d94b6683a0159accbadfd7213782971888ef39f0364ea05eea28f31ebc2fe1446424827c99c5e08472673baf493abdb58cfc70e5f06b785c78c959991caf8969519e914c28f5ceec1e4e860d7c2ac3ff91161358ad346e21d1bf68b3f9630b849967385858305321c2e456200ebd2380d4c935d7f7264a1c36d78e6ac70b2a5f3a6cdc9f2a8b93870c31bff8fe6893c0b630957a46f84a20a97081444e499e8dee496edfa909df95a0721c9c8905d99920ad56ab5828879f8f55ac49de34405fb1285a3589ec244f27b7c271f3c95a0bf84a8904d327c85e553735058481f6c573286a682571915fc584ffae104ee47935f67a002efc4047b5821ddb008fa7e1f1f1b70175e22a451050484bc553304e889d41dd5f754b0c2bf47a980bffd567e49203357641b2ba93270c7ed5d02af068d5ec94b46e7109b6fc8def98547654ea9a2d9fb13b6ddf4e0f112b17d6a793ffff24daa20a7ed5c7efd6766e48b653d3b053d28de2c3067f23152c7edf43e71fd8011a5673464bad4473b60713646e1be46f2b2d09f16d730055e411078983cffaf7793e5eef7b947761ce6521d297c6d3e9374749281d9daef442c486ced5a52cee15c2e7e7cf7aa25f01accb183a8d7690ff5efe2d67f0d54834b53d64681cdbb7321c3af236f4e5642d6a825c10585ebe2f820d8290cd11df42f712470c5d6c2b5a4b6e1d2d4b1a7b8c35816d39e760b34c861a075fcd73709130c4c2d2e93777afa8d827e0b37185df68635791a97f17e9da88774c1964f442d135c98a40712f63d8f11800aeeaa02c1d295cbe9e125096f2320a4523420496d5bb635db0ab5a5e8a296fcca5cbe3a9a74b4a7340d3969c6c8b117174fcd010f4aedb4ef593801d1c3e88af5297f91844b9fd58a3c7310d42dc833477febdcb11bbb7f33259367bacb16d0f5901fd662fa7dc5e8ebe2c6d71592940ce36217cb2516ebb43a33b825b6aec3463314f5778d9d09517ff9e923717cf004ee06fac0377d7c095680cee6914e92b5482ec2d9f476190ecf5dacf47e59c1a77fa655d2aecf63c9b43043a1d99428cb650e6d2859287626c32982f3ab0260c27ffcf66244064979a2b326f1d81c7a24035ee51d2ef4b724320a3f30d505b91f663e671c7c13732bee2b53af82ceeb1ed42c8f913972ae4a97084f2f20204ffc3ae391c399fbf952ae1d3fe715d268f96d4597b2799032739a859e6d49eaa2b4fa4e558876d8a1244c7371c1f8a01a963ad55ce8a22b5d75ac2bae570789a8c2517b139005a2a05f19bbc1026b4526a55aa6d5775ea5d15c3d2ed13ac4dce1ba6df73b228ede255269444e5366b5132d9d080d361d3f0a8645231b40689f4b57cd967f624fbe73e9ef9fbc26056e25f30cd5ba8c7ccd8567aa237349de3c45523873d6672eae624924b5ad6b58cece8cefd4e6d85e725c9406b67572c5b556b5c85ff2bd6a70cc9ddfcadf875c330ebe58b7d116ca8c59f1c5fe1e458f2dbce4d7fa9eb57c74771f66613b64748e322907edae318f295d73ec4d9a1cbc15f0a7a2ce948ab0162dd7e50e85a50629f10360cdde6a93719c07cee0e26949250452d10b5ea3f43921fe760c52ecefed5780364ea85dc91b0b0969c359e56b9a0e2714dfa63c52ef2f68aa9ba1b296bfb18039682c2ca369da4c071e021bf3dd1467838821a12edb1e70c2d3959055b754e98a55ba0caf90b1cc1e22b5b70fe0eaa3bb0dd1ca3e99abca469ef4a1ad4b6bb6f46bb71b897c690fb8ed16bb253aec46656e6d1306c5035ccfa4aa64dc812636a53c2ea33843363c7d28d99717d14c958ab081af3375dfebf8afa66a6cdfb5ac61b4d855bfc8b8f156ea574f1c37df4e4017ddb9abe207a9c19317bd7587cadd7c67e3e9aed734beffd2ded69d3a79d6aecd22d420cce73fb7af71c26d0c1678cb4a3a215c4d5a7813bdc19260610d98ae5aa0048730c92f52944b273ce85f76ffc09d98ef0d8a161ac1fcf63ce290df16ef4fbf9cfaae64463d5e65fb5fff20307d0ddcaa670246ea073c35a95ac450aaccb574872b5e6fb933cb04f0089384dd84bf887698bfb73d1a2b7e00f2b87a97db87b9cb783857a1c97ea956f4492d54fe8da5cf06b6d04e0aba55f08da43d99a810efa28f08768662a368feef7abb5649d1fb0441a607a3a3091d2f0ed4daf0d91fd8eb9767d07d9124c67b7c7da0f995834a43b5653ab1c306b76af8081f3108702b2abb4b3d042f4ac65b548fc63514a859fdca933a8ce1e67083d3140af94b3834094d1a3c9dbcd03c9c142b36e37ded080f9a4cd174b199f2c77d35f935643fc830bfb45d8373d9914182101e4acf8e0e18a59782378422b715fb5bd6028ca39798d5e7471bfdc6ac46f68ede211bb2fb105c1c3998c4f6cf05a05715a99314e83e5f7d3e3dd5cfd72d0fb0c05d533a61509d1530c502eec2ddb4459b00dd12903c4926291885fb9bf8535cec6f120ae9699563db5295e946ccdebf70a73716e2b539980d1923a1ba5eb9713722dc6d163d58e1c2e5460d3f5f3184cf9f908cf07222c0c48a29456175edd41561f0cd3ca4ede5f2069840eda45b5fb94bcbd39306c95783588e6a5c21e769f23683ec0f79191a4506815a3bf120a9be458942ec8a748e9616e46a5cc748510ae3158ea940b51ddecba25a016ca59f5fc7c7700a205f02a3f7eb8201eb12c5a7a2986e418f68631cd5a372553fd6503d11bf0512fa18597f0429126d149e0c84f5350a698e66a49d422e66f1c9ac7c7f5895aec079c03b6636cd1b993701ef185c35c9595c838e9c055d5f7bf7b931d3294b72b4a889799141417fd99c005ebe0385fffc4b166d9709885380a011fa55f7582b0fd1b60907825354251175b0ca1ff3f38bc0659a37895a322a04ad8d6ee7b3adc26f664f21ad0e682be2fb0fb74c5b8772d7f3df6310d69f1d691d2642682dba03edb7f7916a534ab80b207047dd29f1d736fea46f656cfd0755ee5658fd07cdef000404da3404acffd4de5afc87f7d2d623df031f64cf8b24b9f4676995cd33d42b134bc3c7ffd09f41944da7d21155ff7cdd64b6acd579de4297068c62284de83b820e5d47a475d2058bd9a45bdd9f1da0ded5c6ca49c09859b59a412b90a36db5e6c57f899dc3570f373d13970f5d5dc4a6c636b272fcfc193723529cdbe3c7ffa863e2b36091391002c9c70fc57c6ab825e46e9f6ad21d83664e68400a56c28968e5b47e8f2c2236d68cd8febdebd5631cfe3a00f1408ea4478452810582d7411313e351b7d9d85f290c2c3bf646709219b5109171d819dee90a54bc3903ec7c2bb054aa1873d5b2d6179a6acd2a2ebc1f88dd01915061a6b58d258b0b999489d3fb1101ba708ccfffc8056176fce7e423183b1df24336a56c9d0618bd372cbb43ee0f4d8dcc1e221a6794d4bf6ad20eed7fd17a134e6f08891024d1fd327a61b5f9c6661653ba0dab47012e5b8a4bbd33f1fefba90c0d1d900c57044e0163d4b48f44dca3d50e716f865b284b52c41693b90cf84fb00818bee9482d341543952d91f1a1f80175b2edbcc09791d7a1af1e85f9157b90f00efd7b08fc2d6d2c038f0f4891f131a3eaff74d854ee5fab6c87b00842f8055d072fad05f98e1a8a0f3ac93dafc8aa36e53f890c377c3b71cf90e56c0c5abb6720c24c0259655ad24fd8c92388840469b115e56674561823c08da114fd267fe5c2dc5e72f9526c97f3b6b73f02fe67c72019a76daaed0d69915335f37d913e649d58078f17400251864e07b978854d05d2942e5e410e343d0c7764edf29acbb74364546184058a43b9afb0597b209625757a51beee4a5736c705f9a52a398aee0911bf193ebd647008ca51e67c20f09ea8391a404ad6eecea5a57248ca1b2eee60daef99dfc1a35afd95a04bf3004a077c0f73eb50741959dadfd8b75a148b517e644ea98697ddd340239aed8c4346e488b149ee0dd8d66243ad5fa623d0539c236b81e20a684ee36ee28780516ebfcb0a02423110a0ef9247bad38016bc8bbbeefe5beea743e993c771ac4204d86063578c1016201b9e3283c0e7d607acb94dd0de971b2b873e46c7dd8e95674795dafe3a8472f70ef5457733d31e708c02fe8f056c28202846bf67bb7bfdd40703d4140cf05e22cc64d53437c09193864e8b2fbf1aa9281345e288b1e0726cdce0ed12fc51374279e17bd9b83c5fa5dafdd9b88803d7a41161a6906833ec9d50a73fb8e09514975654739b5380c48949228cc4e57144669463dc0fccd5ac989d5e50880a16c71eaac92142741761f95798ae7822fe2152698aa5cf4ac35210aef1caaac0952f1533719fb92d8c906437b2bdf25b92071606c29023749fa23e11b14f81c5bcd262da8a66dc1cd9437b093fbe7a9a2418f123810da74886ab53423e6130e079d11e50c4cd23ef67b966d8928495eeaef278af5664b5ca73b1ca2b1c91341d25d88a7bb536c713712012f63d236389a4e7e31de5fff89bb04664698111bc28ec0652b517639ce8c0db5ea50f2df85300939d36a19d5e4321ed69531611b03b76d92b765c09c6446b5bda463789b0ebd06586216f8c147b59db4adaea21d23c9e06dc4c075e430e6fb2b32855481f5b085647fbb2f3b3b9a7ed669e1c4abe0a1fcd932487f1cc394d40731516096bc1c659e646ed7a9572e367186bf897855665f4273cfbc18b8d221f6c8d6ff41805df3be3c968607e493030d9bb587922f6273352fb508cc655066c82702e7ebcfd7fdca26f43177d20bec55dd34c94f49825f56502e612e8b3adaa1b25715b48b631e0c2eba420f9d6033f78c7ff79a968739ce87189869d59841ee6d847e8c13da53c088f62b4fa844ff9db42145b8eb7edc783d4fa8b1334f48875bdc7de6a5d8fbf417f6f773e0f97e9b15c1844d42436f8389037efb6f2fe868426fb806faf4861180e23fea867a394bee14872ebbbd73fbe51c46203e23cf514ddc6f4193e8675690022ba86fb69a3da9b850098cde51971e39f87d03ab126cf24fd8599284e000d8641b4ee7f67135e2b6e7b72b152e3caa7d8a15550f521a7ef7f62fd1e4aad3feca9080bf3772cf89188c491bf43fdf50747ad9a9d37250629beca3c9e03b1f6bef65d84582da46e47c340489fc6d88dcff0b86c711db286313fa5977562a49329aa3797e1db8f485eefec4a1dd16fa9b7bc02231a4223765a742861b5dc7bd04def8374ab9530f77468ac3b78a4004937a12617a044ba4458a5b00d2340d7a1d32751149cf79980999d60e1e8b831ba7ad514150f8996f843ab36aaf7e5b61fa4968598c19525fd771ebd71b158f6de666463b0fb52cc9836b1c811b4a54a4b22a66291bb98d039e8da80b9c93ed2a0015d76cf2cf21991bcd1bc8612ba6738a122804053b44fb83b132a60f7ce574cba6607c05e5fd73970e7d7909f4e328c54aeaed518c5eba548619541f5cf5a1b5b4f40e37edd904fa9f53eb889334a460eb1bd5e4630e050becddbd7072b01980b0e77303ebc55c3546feea00fb0d4c4e4929ce3feeb77a17f782bc8a37bf219de6a2f5a66a43bc0a641dd337a3bdcedc6bc17a04238c57c78bfcd07e2d3e77b571d4fd94292effcc057b7ad05fa982d2c7142ab0ab1d35f9700a75e0824d1cbd1cd88950beed6ef7c971ddae40de27eb4a7d597bc6dfbcf9716ceee4a30a061e62f8fcefabcc25215384ba689a176388f560c63371a28fa1c58caa0b8f9de56abe37e3737f6a237df47c7918fb24e3fd07a99fbd5118fe530b226ebbe537eaac053ebe9e247c8cdd8b3b87605c455f5cb705fc4697eddccb13e354164ececef71080312202bbe55118cb97114152ad170be59896273134ba88de9a65f5bb9d43a84de1c663a5121b8fb906a8a5acba11125759351c7dc48190724a941903ff0133580bb67db44db6cf0715a68e099ef861de41e1e340fe137334e3da52db1c852ab3b8f8db152b5a4c1841a72fe0b81be714b0d519355862906a61930ed0e0330dbffc98c499c83ba2401a492c8e470be66f9150093ed1a778219dd1966f0f55b4326feaf21be60d1d9079f3b568c77753c0e92620dcbcfa9ecfa7c0904a0077290f77711fce26de371da1ad2b60860c83f41d0399a2436ff211ab6e59af55db7a2b10098520cdbdfa21674b71d6c8ca7d27b8508cf9d6798af6711a4333e21734dfbc3ecd92ac9c4a62f59adf7d82fe7d57e77c8560259b5e9aa3b2a2dc07e29c7cf650c47dfb3d78fdd6a7c409152875b7388c15a85a152774621f144d8eb9fa8c061e6385d235dbf44373dea356c2db27105a3560cc2e9eca5e90d8d0a83ec92b512bfb9e55c0429648aff35ecab22985b12cae7a4d07f60a39393b6ef7cf8abfe62057f8a99db3fff663fdc5406daec7328140f8d3a2e83dd4640b850f6f7b515f3009e8be28e1dbc66b3f134dc36bc9bce971956d4de490148a60b76fc4d9c4626a6259f22da427d468fe968886fd576432324ba9ad1ce053d4cb28c141702c27fdebfc828420976c433c90832491a0936d10920d302246f7ecda6ac12d8b8f8f697b042e088cc2e033a5ae71510912f31b8b5327044b8ba5e3272e591a1561fe4044ada0c88a08b47df7d24b8efa22496330563ae392fa889494fa0d492538b11a3a65eb773d1d8e4e037b66bb1cbb7a2ab783dece9c89e841f1a99998b32f6115309d77c76705b68b5a359c6db681015608fb57b8dea1b29eac72a5429234541357fb8010946d15fd8a658694dad2b8ec5f184efc421f803af6819bcca87317f968171b2c1bfbff762d58fe86d2418fe1c9675e64027615aa81765a449a2106b477a0eb1db04a61a157e887e42b340c85cfea245a233b737016b30a8a29a9a8583c1583bf4c1301ab515355e48a7bc87861d30dcccb81160deab298009078c7cada3715355234e52f578e9642c4ded7cf6c28dd676cf2b1dbfbf434254fd9621116399f0b151597c213e0d9cbaf06293709b2e04eb4d7088990ba0416907e9e044f1a54fa6e5377897c73bfaf5e0f5e22e49105fc4cc4be5b257770fc9b05d54096276c32e8df679d5846f20c4a570c300bea48d91e76e8dd5941f6de0b3fb80f071e26a0700341642e95180d2166494e4b8722ec951a5d32c477d1a4b718168d08aac5b6526fa8883052f8abf921d76a56da7dd32a7297b86b37a5dfd92c216b95ab7a451ee7101a8c96e38b5991ab4d363328ee56f675b7b3cc6617835278b7c839c4cc5322765c39f47b32066897a2f5e42ba57d6e8fd3041d3319891b655ab1309bc31e535c0a953276904dcccf9c6039681051e2f0c1e867ef7096687e8711156488080c5fb2b5f04b82f5adba4e7fdbec4d125fd8efb5583f901d0a0ed3622b543dd1e08d0e1e5b38e60a982fc529d8918a197e0c01aa94214992571af99df616300c8d2b41ac08f9876a98392a7a66c703e72d7502e5e17c14b6db3f7f216040f4efd9381c5ff562f84bb4a6c579e4d17bd05069e71a5e50799c0f68bb2891bacbffc006a722de47c71d5306c0fec37a4ee4784ee0c996a701f402eae66d2e52c60e7c5ea92dd593e36e096e280d12d54a51522242e3e20253dd94e64f778318d68cfe31a1255fcba3d3d3a93216642fb265d9385a97c68b8468498fb1f2e03ab6521d113e20d02f56e88c9f4ea4d548df11b71f2788158c382ccbac225ef57c52ebe6a2f2516b4083b643f1bb82ed0699b49278b91199329755a162ea68bde77c92b06f0afbbcbada433161e78c0f1fd936b6803dda2bd25ef24cc82dc96988d325f8cd226f65b653d91ed4f6f1f9bfe5ed60c7e0460d7c7c1cb52446356ba0a431451ccb4cd7eb615715c981bc30b96c6372dffe9b0ed876b48d0e87d7740b1ad0c7820cfb10651f6520d2ea9fab2b2486664ede774f85e65be635f96b6d395a597f8e4daa651b9320e976f142e3a6757c6856de4ae1a1bf6f41a4fa88489c67a766c6cac38dab9b866fe4b448de9970e8108a2573041ce2596723e68b9822aaea2fc094cee1d5df25f42a1ef9d10b6cb35a120fa8e6e686d4937ada2eb91bb6bbdefb8279090d85dd09a7fe122e977f4744ab9ec08dcd04993ff747b56f122b1cde487299ec94f8f46ae73539f88c29cde54c5e047bcca7908a16c1da7bab306e820b405f6e1a3d2f9bac8f81414e5accdeb07b281f1803ad5f89e3e9e690dc149cacc54cdc3b27490ef9c1d0ddf6b682af2fd61baef5ac4a11ce715a3f6724ff0872751d4600096adffdf98b478c6a7457b9f07049e9021e77a9bff79c961b3fafe5c925fc79b303d843d1178a71bfd4fac67a4b4bedb9c84e484b9dc3181eea8a12cebbbb5e9607dd1bfcfd9aebb3e55bfe5b6efc59a6e21c7c73db9fe99ce676a0575236c34d6a15f4e2cad0fc7ea793fc03eeca24e8e326261a9480865caa07725e913f9ce260ca6abf46641a1a831e64e74d0b3bfbf32e6548369b8ef0a876f464e9e9d225ebce4813e55df7d314be8513cd12f0e618f7c5065da1b5fee7bba8f6d5f10d620ea5131390389998518cb73d54bf29ba787265d341c20904a1851558cc9adb9053d7862aecd2b5156cfa8ca82eae884483d23f826289e4f109499645ec3c7d60e64b7aa5e349daddd1767143aa25a5319ba8d75edde2db695e43007654b5827ae6b17512873adedafa12265adaedd6af28eaf05422727a2200d625bdda894f0da28b26fae6bf764e81f2410d78f4cf116859d0bfc52f0f19b9fb282b55a54b15db16be79cd338dad9f5159e54570a77555568eeb93353179a7decf8106ce7972d4a944b4fba1d7582ac305993be85811214e1cc76ed9433bdd903fc262c1161b0f79dd20d33d624e8ea50f22cb66b97e684371e454ede7ca2f2cd2a7b90d0ab1e76ed0c9c90d94cb40a734800d4efb85060d72ec170012f3642f2c59c78f011c00e48d3a556bb76f87c5702fada95b7fa19293be443c15bdb7adf9d201dc625d8ce74c1160bb6db389f2f632410741954d88ea9065dc96f756ded434c3e71c47645b41c77d2c16991af57cab4a6a534d960a92a52d62410c835330d1269732fb6a357087bbe9bbdca6ed40ca3c47637e072007a6d848cee7fd26809707b8f27b61b6b912b1280d5087c6c25b6b3a14e2046693a2c89ede84fe4b4bc6d4bc0166e3f612beffc4f6c67ae40e693bc71f010ef800710faaf549dd86ee210e7281d91003bee4662a626fbcd7293c4765fb506abc5e05c6d1cb9001aeff38fc7cd3e74945c4391ad1e2c20602d8346fa1add5501ca482bbab5a668d94b1c8e72b1a43ab5d6cd5be7aeb8910fe2a082da5bbe4731ba03fc6a0e861e79cd2e23359cf1bb95fb8118ab07daf83ee0c7ee0361642fb0e377803da20fa8315de08fe90d7e8e8adb6287e058a2e1d30f0d03999a52bb06f2ce3a2fdec30394a42c75aed2ccb47046ede8a470e5c54dc2409587da85a72cf843ea6e91f41d2b864ed038c76308f163b75a58cbc88e2cf28dcf1551885e23f63ed8926f63be0eeeef80e5d880b91d52f7c64ec17d76425fef9db290dd14442541a43e9a86ac810641e81b9778d7504651f4dc67e39be5ab285bd9dcf9473b7e2b7b9a13f3bfb9297b51dd24569bce8194665a5b8e41e7d299f31b08bfcb121abff88b520dc45614ae1a7606222f164ccf5cd26b2f74852841786351941059c918b395442b7f9d628f4851934c88bbe848bcbfdb5c33479920ee46c55caf11d43a47501de95f5d4b5516b92dcc0a759ab79dca5a9a2efe92d5838fa5f95dde3c5087cda1ba220c4f8532a05f6d21583b0c10a81a3c9aecbceb6b0dbd87986c368f5f929e3a264233ccee0a12b7a9646549c850bdd391445d5710d1684292dbd04355f7e5a21fc7ddc70469928e1533ae7119f6cfb5d731dc4467e9d3a810134b78bb775048315e53afe45d04d2ad2f3904592b5ea564b2a487e92c29eb25b653de334af966f17dd511e639aabb92bb69ffd008b7a9b3d1f767254451c549fb0cf217f14cd44880b0d063dd63753ea1866c8dc914bfaa8e05234e65db4c8458828fd94c4f2f4b2069fae6dc6b1acd6b1afd3b1acc5ba75182b7f3623d68b0644c7f8001198f86240844e1a8e7dba786661b8d82ddf7004f4349390ffa1f95137b9bba130f6087c6bc3e8175b75e0feaba6cb7902059500d9ec693ecc6a59b419142004d36947c0d1e1db8230233459f1df044d18e0a72f18447c353ad1aa56adfef515278307b47df8b0dfb25ac4ab19973a862c8863aec88097258185edd8cd14c20feb1d7cee6db406c90687ffc403c641654ebf3ad5f7434f07abd4e7b9eb78a6921e5f6cab1e1891f4e1c11218b2d25927c774aec7b64836dc4c80157d4bdae13a1c92127d7982b11e5cea4d0370f26fca11895b73d124d2906e831e1e38dfde365c1760d173d6d09b15bb4cd81cafc3bc3075bcc67b6b7838ef1e4a3fe729a6a399bb5592e1e6731a78e0b87dad9f6935fe90ba1b7875812165762036c8242e3687e3c2c165aca4793334f895d3fa8d8d5bfe53aa694a58de04cf8fc799068b4841f8200d647b5120f44c9b0ae9bfc311f35f2f07d7e47097a26c24e1181f95aed89b8568ed90ee6d6bd605a7779a6821ce172e6195b45cbdaaf36b7b7ef41ebc053c5639531b1097a9c52e8ff1443468b1c3529e642cc3ffbd3d2bc315ed01dabc89b2e0ae12245341fbf822f2900ef5d62a1d1a625d2cdaccc623bb445a8ef80fc80e1a635ae7a41388903e46bc8fa3f8b6c080e45ca8472bad6b3f3f8082240089d0dbc167dfe6ba0f5b9a83fa62a58592d08b4b93995953e20b2b93a2645843e8eca96da4d1eabc431f5cc1c1e84e21cba14700e7a6a8a36d05a50d6b0bde007bd9f4c97f6be48998528552c1b51c6ed5a1f545fd6b305aae4c20b8bdd668f2a73da69f7fe934bc8ed585617a13cb78a8e9481323ef113641c4d068d606c26d422dd291e473426330cc1c9aa617fe5914a4cfc3418f0fe0a7b4e3be956e24015e2d9f624273ac955b596a6458b26c576a4b8a24fdd99a4dcdc525a56c67c904464b934a13f6ef9815684b226baee683d13318997e82ac2074e526cd8372f70e966fdf27150f7354b12ff1d0001d69998a2925fee896ad6b47898fe8c37c6b5e8e81185f2f35a368377bb3265aa84ad5ff313e4e47b89d40c8e7667c53bd208367b12ed4346bd95aaa58ef3548dc7f9ec130a6164f00c832c357934ed84f602da8c462147c720cb29e8fd775c1480dbcabe1bccf71bdb4a1f8fab45d9e2fa1521a8e450f9da542cdce78492d333b1eadc00281856f1717b13f9b2b78c63d57f4ef2b19be90d71e0de03ec04cb6443400493d2bb7e277e9c4202573249a4dc6ad14987d9f9251d0f72b7441b9b53ba14409d24554180e191500d9d001274829e99f36edef2f1b5b9e2ed999af4335dc02d5d3f931194cdb06eca7900ca559de11596ea84d7cea544fa8b69748249ffa817815a934344060fe121d307879b758b7d3fe5bcc97c7b2a1fd2dae246ce7db10408894d0e13178ef39114d5b000a82caafc6b083a839c51af89420ca96c2421ecaf12358dd2f6f65f37a7f70a417df458f6fe6826d8c555ef959d7f0e83c054da0a5c0de15afabfb2af4d380a80841ca8ab18a2bbc9fa1b06151272cca1b5f07a8bc5fe0d34d25535a1f50e6d96eb034b9d72915d85d8beb37d0490ae499500f179f23d28b8d31ca360db69840db51d1acaeb80af2cfc94a662644b5909074e172c48696a0881cd72b925f5d379cfa829a2dfc2fefb6caf8d93b1c1f8b71de7eb228ded25388b4f5c68c547adfe886cca3b2b8577aecb4a3470eabb1d6f36af646be4d40df572d0e7088537193ae7ccd039650b670d8249e66946fe2b3c8a401ea1854ce0d73ad33ed6359381914c1781fc001fd60ab89a33c6e4821f9b3548e1d777c0221f7078636e68f4eaf2a243c03c5dded4f154e6e137b3478a3e6fc3950241e2be5b57734c6b56621700ebe1d61644f962414b791c73b1fbf56caef4349e022e86c6a8c4b9a6194aa992178a67d3ff45259bedd7a6e9ca9ca9545d3620722020e1ee27302a9d7e6ca9c08fcd47b29033737e437fa774532c9390dda1d3a013b03124c0b793f41bf43d020292c5375df322ed6164dfbc72680f82bc49d5dc4d98c78bf19c1d157d6b687e4f336f94b805156bbd11f4025d3ca4ec9d491c0401d67c7bf5fb13dafac843641bd90e60820021d5034120c34714fe5e74cb56c83826ebf4126ba1d8af78c14032aff502b24dc7a289e06edccca3af9e82348aab8a493ba52c01f1a110d068bf1e7c674e0b8b7c742a78bbfa8fc732af6d4e6db211d264597452e20f112c643944c44cc356728b86a731d373e30802b3ed700b0892ec5014d4444b8cb0e7071dd7a881510b45b5959b735af296aba4ba6f2590c078ef4095d1dda20e0bcdd2f93d2d9a7b16b42c509962b3455684956973c75d2e32ceacd1178d906b506eec9105ac6d038326ba8db7289c0d538c0ab40c0dbc275ce1f3130287481dcee9812d835201c10ef97e5b16cb7ef068cf73d76ee8e64e601b322e7221f3e90877066898ee13cbba9b2db7949a53dfd3bc29a1442c7bde3ea24a1bd755c22a0bd8a99e70d497353ff0ab3411cc8ef625e52f7afb32991d72bf2f91d73149d079c254d9914afb988fd2348db465d10ebe5e39ff5c08a0e5a97412beaf879cf41060f3200c238edd394f74ab38a214cfca216d3a15ef4743a027d859cb0e60995cd0c409ae07e2d064da298de4e7f3545398b1384e168909cdb87c144a825b4e75e6c6e1b1bf3fe32cf135caa74f297ac944a120359634766b1adff3873859d20c37e613e8532395f49566daa7cc2e9229fce23dbb230676c625ebfe1fd9354971e3c9651b392456ae77912d146ea0a4022b76901f3fa4ee69d71e2802803f0f07ce93cec2a8d93e8894e357264b5023b1884c81d122c65891e3cfe2e0ed883a8e5b86ea51fb909c795b4c74fc524113d94cfb9087c3466abba7bde560969a78c6c8d3775dbc9703ebfd2efddc58f3bd878cdd8397d1ed5720b16e90269e99df0f9fb80f7b4a110443a3af871d1905f278b0978fbdf48f3fc130696628b08d191fc65a066cffb42e1fd7ea3dd82b2e903aa4cc93ba09f3279c636b7f8d9aadad81258256328ee76c051445956304f617b2d6aa8d42f60a9626228b3b46e4eef3cd5096ba376e6d7f296da468bc77b2982a7bee1e264bcab979d5e87115c4063f65dca164340b8a59c04b0b424e88f9ebb3c54bfc1e1ae296e10c96086554320f16ce8e635692efb5966593a8755f932ddf63f896c462c834238e38d859f429cd5243494f66fece39c797f2efe4e961cdab3d24459cfbdddbd1073d68aab2d654340889418925dfa30bba1be4f43ed7011c9dbead3b6482cfc377303bca839b3cc03afaa0d794d377c5180366e800ed06398d6f750b78477f78eb2839f31655fc0d420e8d2cd5a441a95c1833c6da56f209bb9a15167bb11bcd413f0734ee111973dde3097ebe480f20e633aadfd7d2e1c35058ca95e1684d949b88b56f8d987d63d989345db1d3a62370d8819f8c423ec94403a930b03f36707b11136b6512b5e0a9e3ae3629c3a228c3d1fdf93d32de89de3c56798b7a3a5bb17a55ab2cd70d39247702ecb744f7b00d660d4669ee683edfcc96a199ad363d27e5f35352ae146c9de0c1e7fc65fc2c2f7184a0b92be9b11b73a488ccf44dcc1e568eac5a876b8ff8e99b252ad66944fd31103ee8e7abf64c9cc256418e4aeeb31eed4dae033667d8d71c14a9ddf693433a1db85c5b90106a421e9257c75e312030bd1ee066dabef662dcaeb8e1e81b5cc0d112922610392e6c3fdec4f30f4c8e7f9a54d9b4b12cfd68e87bdb6a142ce943d1892eb464057e3c397785d75816daebe2a58b23def0b501378c28d825a5f54eaff70d5c02992eaeff56fa145fddcc6ffc4dba7bfa3da665a34579f1532565fa1576822832f5d885a68376b88582873a148f8f5eb99d801202edb7ead37cf748d1fadeae097ad481f63081882cf546aaa97e43c9c94e7c3ac2ea55169adf83eec3dd0e5c10aa0bf94b2ae6560082112844acdb5e250e3949ab56e78063dece6f54e6040e93720bc35fdb3bce36d793786a72b5b67b2381e1e656805d82a5cfc315d26a865f3763687a64c06385667902098f986574d76f0aedc4134ad89448a1499926be0212f4765c526c8cdba7ba2dd697477b105a03f918edc568ed8bb829f437cb5e10b6e447482a718187f06a67bfbe473f7ea256eb7aa7f7750c2d1763ea15306b6688659e30779d7231b12d77f9b476f56b2aa0a3aea5c31b8c53994f11fde5074d3dbb67fe2a3dee6939cc12efc62e21efcb1d95be17ba4a839d029ecb51534af27769d26b7df5d6852005dc1359674aa8db2b587100acfb6fa3a3240be2bd97951787063233c01165c6b68a5e9a8d0094d303929aefc9193bf9254645967fc572e1eb8d0e5ed918daa9a05edac3792734ca7ba9cff2b71f21ac76fcaf350c2f3c67bc343082f6f0154a7a0f4a9e6698f2d8800c9b83fe5020f6df9b6d2600b2280c948bb18e57a61cb7c66d0813dea0f1dc54d6e1948941bf758932bdfcb0b88c94f53ffd8ef765f4ff6e79895001d4bee84565f067f4526b14a3611053e335bd2d60aa54e0575ceebb4f72a73ab57232f4c7997a70a6c2f08b8e93643c4f740676b974bbd5ba742579f259c9e63c6da40b9fd70c51dabae006e1ce13345fa1883aa4de61588dd4ae3e13de1dbd84523b9f9e6ca9059267d45bea8ba3cd246b1ada22e648c4c9a11b50ae2fa026028ba160ecfcbbca03f960e40900abc8f369e621fbd319c3451b786c58c29cfafe7d6622e6d009615e2d7831529a2542e49283d14d35e53d2bb0fa0e5683144c3564375444f0c17327780ac8f24e8d24bf5fdf2a3a010a6a2204b6d894a29c4ee6762016df17f09e9a0f7b157a7bb2f6981b2113a4b18638c58986e75d17de6ad92181fc4062dd743cef2ca8fd8cc6a075963dded4d36587e5f8eb1c8a40076ee8c8b334c2c629d3e95a579ffd1f9b931a4402539d5755716005278186832c7114f798d85ccd48f3be9621c51232e63aec9807d369e39e77f9668da6f37c28f711ddd908c2351fb87e76d6908dbe6de201437c60eb9394adb7ec969a325598f8fb40e244b741f9e3a97cf6c248b9e5b7f5b7bc0e796dde8d9bb145b6884128b7f5df74b8a36e5bc88b62ec3203871031bc361bd7e5db1ecac7d95398bafcaefc70b9f7134cd2b6de70dc4747188e3f18136cca21c863347ed220facd1e8485ba88cc6551e97b017b085f453d356ada41581457f86e5b0fb52817543427826d34717a5b5f679178246912456a8f7a41ed5af1af4d8b7d38023446427dd28cfc0cd76d323b2f103bbad3ab8355ee54ba2348e1b36b5f6cebcbd037acad027f6e5d883c091f1bb172f5021fe888dbfa7ab15e3d031281a9d7fd656940aeed0b3b785c33c4574fce26a3d47a0e550deb8f64e23661e1dae77a14542fd7e98a88c493f71e5bccf8b80178729277e919ddc43682abe80dd74f5f26bce66ccc756e0fd783b9513ea9fc271aead57db8de0a9409d3f934c024b6fb032cbc4ab804ff9d888d890cbaba3ffcf9e6887e058f28b5c8c41aec9aa3242b35a232f1925b8380980d8e408a9233a01090e024d40853e4c1ee6d38acdc15eeb15bd422ecc05a78b1992213464f92e68812fd0cfcf2c6d166b83537097a3d532ce00662ace4587cf494f6c6f838b3aa8956af87f91f9401c59959c1a196ffb900e0d818957bfd3a9a4c9af2b712e8e13cb9d77fcac549bd20e4babcf402d2dd3e5344e724d92a07d06a205de05d2f1f1e043d704f5c2a7f9b7b3999ed617ed79aedb91893b42b9a3832bde2508ae3151a8379b09c559cccb9126a163ebc199bec07b3c3878eb4c7f1569af34e973b70c9bf4f7bb52d8f471336fe7ca878eb69159b9866de1a461d6960f914fcb744716060fce34926281f0b6fd750d61534bfe4f469bffc5b6a5fed25160a3db3c16c5a88e1290d295a7ef5219d79ee8d5b24a7f653667f89b4293e4d83a7f1ea5cbb8a253ba63303b50ac199089b79a098f11ff14f929076f1f82cc2ff74ae219afb8a4f75c12f5a96c588d4a0d866003a0d4fc8a60092b73b69412383e481ff5c418d7a324b0ae723a94fc8f9f12adfc16321bb40c66f0d258988c894b79b574d236a9eef0830d818638388cfffbb193d139532d050711360a8264647a0e70478f11401986eb64357ec116a533bb0e616dcf4b2da388325e8a4493097b0c204488fd4bd21231399348988c002afa07a9f29eca7bfc7040dac4cfb42ccc2e88f65518424a6c4cbaa42a7a306ea0533ddd502d38793df3e0b021fa546f651f7988298813f75321504100cd117ec7e2aa7dd4568c01f412420a1d07a47deb1c8beb3097592552c82aec3b7febbe62f22ae9a13aaf7677fe17bf2ef6e48dd2dd9bc2919964421523c9e5bdfd4b065d9627dd63ca677d7da9cb41cae1a96da92700dd3d6dc6cb7e4a0666ebcf1ca971c5c243d6a25a167d1e4f09921957a61a266abe4e2e36027897973a586a530f90f66e291848bd1c683a25d8e874fc2e3a22912caaf24c8cfc98df53a2dd0a975b424418cc1729b1e1bb9c90bc27917eeec19a9d3d2a35b2bcab3b2b206e69d91b38696b1ee719a079158c06c6d3aea7165f28339dd4e65a892be0591e0f3521b22620a281292afc1773601b06b73dc378218e23bf8e627e858e02bea99d18557ab5108171fb810e18a671c95e37c43446a4a08d1b83f67cfef4fb44fc614221f8d1ab377a35d22337a008cfe7679d5efebe651d0c5b0b8e19aa4a79edddf3de219fb95a08369728e10141db612c1a18edecc735409887e8a29b88fff6c3706632d078ee896c988d6773c7ba3899e3ddd3b2daa759a888202162b54d6ef89805c97e819efaacae3112f98cb18eb5d7d37a4287f2781248dbd9475fba4f16604b4721e6f985f6c858e9a8da9146f3ba34b4d6e5f514c1429040223d832fa0ca91a1cc964c67fe43c24f4a5ecb66a888bcad49aeabe77ee7879010718109ecfa64cb4ebe3a8b8c8437acb8ad3603cbd87e1c00e688ca7ae17126562f10b62e69a2fdabe71a4d0919dd2b2026f631d86652e082999dd1f3a48703740a811a8160eba46e2582e5dbcd63cb2040ff6721154d5c918eee95e33e9e53ea97485f9c5e46aa74f8aed10f5ea9acbeb72131701e1591d87b12f2bed6565af529acd0c32b36698c9fb6cb80497541e69b01038a20cda79033b28ca04f1064006dc757fc3a0c045a598a86d15c4c5ee875e870fdccea813a10aa471cccb10ac3914fef4a959d972c6c101e25115477466e860ba500a248baf3d67f17a68e9d50c63aaabfab9acbeb3bbe24a6f81ce8abd623fb55d50499151f42122a1ffd0a71ec0f9334937cd064125458ac1cdbd2074be2cd5697ad6dd5ac0d8368610f402d50f6a01217974271c175542be1cec2c6d1e2e639f1c7520eba02f38dc86c62dcf91ca7bbcff47bbe6d29861e2dd0c47ea2ad91082e4cca6205c58bf0342e01f8d2ba4a474772a631b2605f97b680577c1223f081c4c4fbe8fa4b6b557aea8fb829f243c623446b5c2b51405fb3357d8501abc6ffcb7182a724af139e0ce213d4f9b06bbe8e59ce49b0143fb77c5dab42c1c8cea569d28022c5e05e0cedbac56fd24fc6f32e1a79469acd83708d57da6618cdc1d633a31c3b8bf8de8f37a6bd8fc4af9222d660d328d02513c2ba4289c0fafaf83d66fce667caf40de87cf40b93d609b307e4760388ed810ba5c3ad7e0f21660daaf823268c4030e08b0a88af6c1863785120103f05946855a33419cc027dfa25c023d2e0d434b38cd1fc75e2edff5e6140d997dead7267571b2f1392fe82ff2eb5962e8750c34b96f9446cdfe12c1d784d832ad8193d3b93d69b4db1225719e6b1fb627c8a0172eccb693e3278503bcea31cdb98d554c22a8b0e744c1b0c6e5be9c0b14ecf11f2db760b13bd8af03f462aec9e7e61780bd8d34f9e704120d7952a2a1e4c82d3ccf934e381350d1ca98ae5b91a6fb21c779e3c782257efde9d41a333697b7c6d583ad597b7f96998a99854135511b9470650879907a33608d3d53011600cec93adfafec9d44547fbf30e1bf67f8b0bd1d7a33a9704e4c1033fec26022d163ca3317005a0cc61adbadbfb807a292f51454d0d858acbf6d0a8b02b078d85de27b8216ed9b2e92e8f28db2f08a492ec01454491b57e3a22e48d40958378bd2455e5f895b827ca6755ed8142543442c068b76da0ad70c6e7951057e5b8a16ed8f2ed5abc8f861e8b4ae7f7ff0e75dd8c4b56e087f54d53bd21bed76aafe1ce20dda291b00d1d4388a772e87188626e5d8184691669edfe1778f7f45e129599e9db3fa10d21917562e4d24938e88a0311f9a726e6a189eeb72682c8978b9e0cf99686b2d63528824630ac0b88cdac039de0b8ed44baadc5adfaf50d48e8491b0ea5edc9d44a924e12f251c4796c849cc1a287928250c35490a3ca6ab0ea304be3e2ae20ddb0977e3bf94d6a052c5b106c19c714276b5a276ae060651d05661c08590be693387b49fda59bb87130a4df0d2231d368805ba0185b45622b90985bfa7b2573d9857baab38a9c6cb5889d30bb504b7f4f29a2f0cb86a9954969438abd664ba0b9a76f250b24dc23ad92e86a6d60d7a8b94d58ec7c956c530a271ce5c25c6f392dbb64c0d19fac3e20940bb4506eedf95c2fce299d42069950e344a5c82c3683d926a14815623b8450f4edb4d1a11421b1fb28182d9d8ac16b9741d41b31da5119d99b1b2f0b214328faef84a213b337b60450aa964027dfcc90033a6ff62b50924290cfdf096c60526d7d6bad14b50305c2233e58d0598de1846d44dde4f1ba02fad754a24f690f946e1c0f58ff7f07f877cb3435afeafe348193d4a7f2da00a5a786ab802c73dc72b3a0aac2b5e5d38f95dc2ede76aa5b9a9e00045004dc4f5bbd386df49034bb229c2a040fd536358d45c499346aab09ea5ef8f0c62ad4a04620def34d48dba4feeb93bf9483a697ddcfd684492de1bcece38acef230ca8f22567c7915767262da309da32d7fef00a09f4c9f0de12852022a423659023b625a2d1e8d00e8754767e061ca9f3907c313b998620960f84d5c90daf045f23b574daa96b3fb049c9822aedc83f1db0bde589b7ebb60ca2ac4f70f2e060a22cc86022b28e6a95e0310b401b5576cc49a339319074d2ce0d6611633b945f51d9f4deeb7e4d2bcaa36c1b3576cc3b8bc158ad25850e4a74833aa7acdfc9da54b65e62baac07f85298c9ef047b088cf235f674f5806252996d9dd9c34b00f691e644c18a8e413f43676efecc49d89cf9da89955558279a322fedbccebc3d7b21e9176b9e75c5655a29a9615e6ae2263c60115c8edc80fc340866e59abc29cd03cfb5cf559d4960f3eeafdea0ea4c1d48a61c174ee6d371fc8684707b1b1c2bae1883c4875d5ae16699e1cc7322be469493404087532309a723a938cb1e2c7dd6fe7a16781037be5ad62b1da5180acd3b072a2341513cc1ee6d85f446c8166211d3707d134a9e43f21dabd3795e3e9565a76adf274a33e113e00f8391a62548abe51f000d8c887d9464431b2afab03dd1b1279a7df0aa4fd9daba22e90be294fd0510cd95d7378c7aba1139a8ce42160328ba3c69e7f1b76a2ad1edf8d5010a3bc516228d2618c187128f19adf8df94a349960313c5996125055c6bacb62bbc86df7f3e82be78c0cbf4ce38ea4fd4b36f68c9f55ea721685e5c0c9263be42d790b5900fcbbc8d6f3c4ee85e1c67bf09ef85543933eade5336ec6e58c07ddbe616cee3dea6318530ae94b94e68598961356940e753ec3789a68b15701f029fdec81f1cbd4f5fbc1ba24fea5b180fb6b9b75b8492bf89b409c830b0f29f0856f2354280989b5522c72e95414c3b435efc6ae74869b5cdcc59beed9cc40a2fb3a1e0b62e4278fba90c6a279a41d120d1f350f9fee591aa9e30763138e8adcbc8b6c1bce456e86e390ca3a8a6f643d0a70a1849adf0cd22a49ffa0aeadc2d0305b64acc92fe39c1d9f038b920b85da8749749340490c6ea8b614fee8475721276ae749a92461380767d50d6ec3ed43ea258afd641331c558a02171a15c0413b7f803191011dcadb5a42c35e252d7163b1331dccffea15b4a9343862889ec2ba30ed11515abe21a8746ed82f11bf48d7bb189380b891bad66544f94df4c853f17432a62699e57b58c1aa9715da6cb6a12dd440d236c51a5b48da0377c3c046baf491b42466dbcea196408aed19b85deb61b5200e03e9705824e7901e856a060431aa442f919ec21fd427553aac16592cbca5d2b9235715e3c30475e4faf601487a9765b10752323cd76be8bfefc291d41e24c1553ecdd4c2210a92df48b66b4a6e5679fddeb718369d81553fe1afdb49c466f944a8506723629f62805f9bc6ec46829b520ed8ed08714b297ad413cc6b32f068e7b8d18cb0bb11634e2b83ee260f4f4d103aeb043e3429b0f519fcee02e0d5e681bbc840a7ca23773f42dc5e083ee5006103525d0b545912e6b7c2f7d4e00a85fbeb89372814eb536ad4046015e98fc263a3080a32fbac469bd4b18c0808dd7be630f2862c472ed08d8d630396401082de9b03f4422bd0c48464e22376963eb0eb3000213b3d93f053f8eba664a7ae5f4f6c6980597b549b4073cdf00c03db9451a24c90a3e250e59ad3e487bffc48f39c62e1ca279190ad39c5a64831b705fe79f1bb6bc290661b054246111d4b69bc51407b7709039578cb305122b2812b402030a7a75217e604227ac078f831388a356c79244a0b428edfaf57eb0ae31711f22f0504aa4141b94c3349421031b10bd4f3afeec6870805010c4459ea41c34b7bfe3d4a58ee19896d2731ebb90902aebb35b8935ab318c7562c6049d578f85860e433d374febd42301fd48e5918ed98e1c455a78767ce936ecf385dc71ef709ab3ca182ba3ea129e1a05dd5370b4656a7fd75ffaa2cd1bc4ac580e2bc7f116935cbb0d4dfd1668d26febe65ee680155cc787c864d08df0b5f152b49a512fe76175297d1f937073c1a13d1615255e57f26e18f82887a07b3f60c17ef50c67e4acf6eae00ee0ce06344759fd527e89dee5aaeb89b4457f05584c664d531f96a239ae26d3b4d0bec9150f4fef6365bbd9073e4f249bd5bb3274c75e76ae883783c91acf1c4f2019fa3564da2a47ef558a7ebf59d01cd33fbd15486fbc1169864a4bd3fc9a9f4f4f2c22ad25fc7e8f3c4219598c805b83af6df6a8033ef1c031880d2a15a3126b8d68f0907331d63609a56505796df2ee069b7c9675d644140f50131779d42cb4e4c67cc09a8ace03b147e1a5ad3ccaea0985e4889f2ffc7caaa04acd7fc37b139662d81fba9d35e6b34fcbf5f25041bad3f2a0b0f6fa5fc6fc237481f5020abb894090a639f6b14836b27961763eccbfa5d6679e320cffaff7b39f45fde77e8b8bfa464176880da49ea62868e7a666256733f4f70253f6d68958937aaa138449c16fc0d94fdc2a812104bd09d22f848d00d0b45dfc6699b0052f2e9f6b603b91bf0277354ca8acc7e85ea5683d4b354e5f820fe0178215b4b5fcdb73fc55aaa2eb2abff01114af40621082644dbbc916195f07ea51a68947afcd8274303aabcf0860454ec13077b47fc1e6654d7fe7954e67c63f00ab885650aaff1beb1b7b6cb9a808dcb7c73903cbcc36a248c0c24a90b33cb405de6afa97de68702d2fc2b2a64fdb70293f75f68dc551dd1608cd1b441d775feb2d984ad3347ade819dee781caea075affe4e9c937f9c1e0896b03740f113251b9830f048a1467321b39e002f9926640c5380d78302a267663d93145c2a68354524f13db2dde2912ec5bced4e107b960f82ef7997ff30419fb4d21d57f407ff9dc3b8e8246125612bc08c586ba7070bea4810c999c9b243b8150884b06773672ec70a673e4457ab763a674e96b4abfe5744bc0f5fdbb7a5b10b4d3ad990ecfd4fab62e24725777c7e9fa9a64db51ca3048577e51d8e9de2fb7357a9c02abf194806bd52755f8872c47a34e47efc31fc410c22b2763b89936bcad7e6c7700e04deaae0a2f78b4dcfa374fc0703eae4321118792c10453f032a75cfb3f078acda70913ec124b213356a678870021c8fabbe4dba5406a0a10e532586d3a8de237ed1c655886d0583e0e2b3def20d282a35a2b6fc2520af59904b94b250c3202b1c19ca8bcda6f798f785524faef1f726b1c03e9bcc39bf8881ac9b36cb9ca3f4d2bd92485eda629f1c0414f69d4b38edd5f4ee0ad5a955facc3cb3e9e143baf6200536a8aa5f8710eceac0784679bd326a9d00d1a33f2cbe46eb8355c3a943a783fb9ebc6f0968dcb5264a5feb6a168fd15a8ccefedd33c653290abc0816839982aac20d84f9f08805dfbd4e3feb48e38b58c8703a778c2e27c8201a022dd5bcbcc646656dd0e35298c01398ffa7c4fb1c597f6516c38b3cf80e68749b1e06a05ec30db1af45527bd23c9e8587552c9da09bb0ea3e041176939ded70a019b0a902c05e11fb6acdd939829c95c32f2f7ed00d4dc7bb627ddbfdc8dc43a8a62b24301d266d15a9910d7d3d487e7e98362b7231c59e318792de5bf2e26732f8d103a8bd431d286722e0499c333c2b4ff00f69aec06a685b628996d454aa01b0670ecdeee0ce7abbc9d61135c6598e69906a0adb20b23ac8138fec086818f3108a1815629c221d9f7a3bc63604465491991729af7132a6089def1fa2f1f104d61359ea03b2abc417f690e4b75ceb4247e342b988a3ed8f7527458b66b61181252c17b57f219abf33ce78941cd5a8d1ca0176d8d8ed7b3680190f190ba94c09ff0406e52190db747f06e094c5968fd9b0901ee5cf79045e58c8ad3351a5dac87bd9b05921995bb4f24d7f79a4eab650ef6d62563c2e57acda9c59a46cd56778a54f2080b7ba59bec96eddb2be98a4d9caffba89ef4a9b88991b558cd224f354c458b6f8be47919cf5326fb709cd806744a5b6d0f67d924dad0da424fd66065f9573a71ba97d1928ad19948c873b34de2234b66d3911f43565ba9a1723189d989be8566c756b6a954a35f0738a9934ec266f7407df9f1f1c31dc41f74bb9c4a14101e4569b5f90281fa308aabd5ea3b0df14f1b8ff2acbcb3ec6745dacf7d894d76c07a46a0508597406e2b077c7a4f94700475951dd869daa45ef60ac35ebc394d44094b12363bac67742713db7c14240fb3aa4599e05b7a97fdbf3b959396e18b494ebfbce6511cc3177e06902a77d26881dca4230df37badaffc28436af86c9b6384ce5824d5bd8922594893c266f58eaa9ba5553ac32e3f41a0876a6cc533aa671ea7e6b2305132ae4025168040fa9013af20aa5c31eb5e4aa95717acc3313122a1236de2fcc9e144bf1758c55ca7958c167be9f1a0bdb9550194185c96fd235e0eceb555f6f6d0eeebe1b9aa96187ada548ce6d0f768b805d6231d2858871d3544a27e93b9f4e493d0664a4860faabdb326101f2841256ebc9fdd19cc8d93b7e32a3403064aa799cb084c336c343b5a3c03962d80fbc2b2905654741a2f15fbac7fe9a08ccf939a0d5121f6cbdf4b13b1d311cbdb412f1113104429d6a24b4e473c718df0b8dac9efc86d07c9e77bf51b5ff4894b8b29723690964761ff41a77db0cf58429ddb3ce5e9ad24d954b425acfe1c0a569c86c00d767586bb24cd86d284070e48f7368bf86eea763d6bbdbb47232f03f1460a81b4d3ef44a70bae3bb03260b21594ae63297502913af89103f09b239a25608349ec454c640046313d45ee8786b19c2ecccaf436730e5434d19b9985a5af118b4de4386c3f0d79a357b9ece13fca172c01ad1626499afd027d3c1cab1fcd93acce7b4b1fd8268732eeac75f5f05af71c8de73342e9ebaa88a3d723ca16986315affbc5b12560e4b951f294e6812448ac8a0b47400930aac38315e6a8eb54d530a2f6ecee8137403d89f0a3d1b728cdf62d4b8209baa308e6e14d02a8c1b9bf426c3d716af71e31f482eb6c7dd05e77ad9f763311fa7131f4ab816498ef512c236fa7b345081c4d43d1fead485e7c71abd24f9de545cd3abbaaf7df2efc64c20249d3f24834fc53c17c597f7f42bb465c4ff9f5f1de008fb3a9b4beb9332d3e0ce7825200abcad97edb197e90d087bed9b3d5baf2971cf8f159db3b2e3826eb6871b2f08694cc4c6d1c04f736759278bcc43050b52f0bb970dc9b8b3968f9302603053419cd1006b6657a2fa5486a0b1e10ec19b84b3911647fdafa45460ca2a007366bed8191aab8e3b0dfb8c1042b97fd885d5e1a5890e59f87703ae03685cf217cf2bb7aca005ba2d35f2727a610d0e668abc6ecbaf2f63ae5ba0893c4988bd73e513eea124a9aed120c6b25db38f1eb4982bc89d843d7cc58ee48723ed7d24e06a6f2a47e28c67167afc0b104d9c1eb566d5a0d8486bee68dfe4d7e309159cf12d9af61270aa09cc67c14ce96d66ca201fce3e569db789d841ea1bbed309a056ea7469604ec783d68521e3ac12dd39f1a62b4fe1bea807b739e9abb75888b2cc67d67837d6d252afab07e6d6d328533806b25261487c05ffe822e0aa824bb6dd0228acae98fc3137b082a72ca9c88a14d3934e4e9eff84a108b914c4659d92c0058bfb76a597e8cd1ed1aefaab40c90920a5a9f0a57cf7489826595355836688ba510e3ba11becdb247ea0f4455753f85475647b15527ed167a3cb5905d538c85f73de3741538cf93fd3ec52f74ed9c11346759ade1b243778e404946c2cf05681c87fc2a1b90073c12b17010e490ee6fd85e721e726892c9a4e63b57c3efd9364540369edcd39228b0850f399c659809b42824619d5768a40b2da509b4223acaadc5a469e9778f27466dda746d98c1e232c90cd7833d7fa97b3fcaadfba37cde8c427c9df3301b5f89052e64a87e3ed624d9b691acce67b1d74f4f893f7631b3940550cdbfff990f881ae369ee8571bdc513a7666a1a5dd3bc2af04c7c459983a1659bb367b7de48d28a9da9c79157b35cdc73f113000d98403a3a5c858d9c8f2f8c51f16f9b9aad76f6ba7fe3b998199c4116ba705b2ac9d5a9fd08ae3df67938b270f0392dc1547ebd2dcc43cf5c552a70ff72839b20f473f4ba222177f10e4a26029768e48ddc08b0588831842c52429d1e42777098ab80d845f6664b1f8e9cdc9520288c100b506a65640c1169c16f69b22c7e01d6cc8461c4b309d9da16b7d7c516486e45108163d761b520cf1f9a044a84e6ed8ec7e1ad44cdcdec48e7d5da5ee2731a89d92ec22f7dcc47aa7b838300ce298f2deff1dfc93a536f3bb19f71c3c533db29bc7ef1e397a6ac37ca2069020c19051141bf7fcded35459460b9d81dfbc3282fb86a5e8b11ed0cf01eda2ea25e456e4ac7bfd894961102e91371109bc8b96b3fe6af482a7244f8b7a4a2d610db46c05b6d482c61d5a2b127b583e0228e2ec8c2bd96a5504af5390c78f7a802a5119fa3addbbcd6f057924e07d16bab66921850896fe0df65d52b7f721b27281e98d586b7fe31026e2b4b108f6c45d2471a861dd4faa27fb1b8bd128c7bf199255903852a752075c36be25b91865fdace8761485ab4531bf7ad6fcc8833a2ba5494bf4872840458a0c3d7e06d86995441c74cfa2157cf495c2b94a1993173cf376c0d067263fb1bbdde972bad6ff7963d48c7439fdc336b080f09a3d8af0dfafbb1f86faf8441c5f45d3b0f733c990aeb96d7a6f4e6873d1400447c0e52714bd2111cd6c647c92e35aa3d6dd8eeb7563328fe4092618e043a1ea3324e787b5b16ee3808f94b3a8e10c46b3cff29676e03786162b8b36d8dcfd4097f24317ef7a6ce990bbcffbae55899c68d3238511c3691f87ab5c585346324eca8461849bdb0deff666f5b2b7cac6e879bc3965b7c3bc64d3631386f4529b26f62e55c84ec19ab1e050c66e426255276711b793c7883010d5173f6d2bdfd4c01619e8bb93adfa5ba0a7b53c554f60d5850f4dfb51aa7b4d3924086452da94ca5fa7aa49134d3671b8fff6cb348f60f207bde67137c94711528e9216ff42f3589a5407160f36817613fb8a95f2a873a98368021dcd29712f30ea1e599d9776d180fe1037f056b8dca5c263119f43445051946c884b853c3b7f35d9cc3c19b111b618d92b265d069e02d47783224d943b88b699eda593836a069aa28b4a742a40139550e8f1e983196064c64c1dffa2addcedc56e7e67b5b3899ce17a2e3b68692f4fc4a5016a208aa62df4ffbaf2c530c26d303b7a40a88cc22b8f53bf32207a63ed8f4863318eb3db163c39b5e2035e327379ec802c399c506ccea2073a39121afbd0fd44db05e8066a079a716276f5b0aad29e6f1940d6e37a615ee8d00517886f5fd9081c577399c8287604f411ba7d4fe389a700d21a76be008643dac89353e0514a145211ccb0941b319f4ed8bbfe5f48cecad9aef61bd48d574d5ba9f6f92e7c3b9cddb2223fd5443f1eeac450f37e1ecda7831dc1cefdc0c07fa7c07bb55be4ddb617ff85fcf035232a185a5deeced8ad4f343c528f2ac03830211c59fd83167fcc33ef1f5aa819333d85c56bfa479ccc64a6f72aab230cd21b79c13ea76f093d0b1d41d1f8a1eab736fcb3ffec39dbc504e4ae346a1d8610132206c5970aa4c6cad07836ec38cdd05e706ca2921cd6f5aefa834a2a0c20f36ca5bfe572c57cd106c656e0efc794c72d7e876c22a115e97895d4080d7618a9844cd313f17ee8080576317d0ec509d093859811142d389cab591f8304318ad6a7dd55125f31601e10e036bc36522d814ccbf60bf17c72e34feefc522bf5cf16b297f0e5652943204e2575cf6f7d5416d1dc163ca71df5663c71db86c63973d3a6e4753c186c3e0e9e7d10887726c5aaa10532ad7a91baac9184c919247d1b2b3696fea144b9e0710b08bfc1e03552188772c5951b27070e60348659b91144e6fd666fde838d92cd5ca788011ffbe0e710e763d813af717b6d190e14e7357b0736acd4e3ce69620724cd966bf77c00fc0a548a738f22d97e458e75170ad5b5553336941cfd2bbae2dea3f620daf4ee949552ee32a5ecae59ec876a219ea276c0fe29bdf2752c9aadf5060a25941b829a9138324088c796f421f0a344f3c578ad44edc7480c6a139f6da3ccde029264f85d5f11f6e7748a02a097dc155c21787e5b7f7f4ae98589f19dd42f27707139e1c1aa912033debb934afb3c46ab6414a5138938972e748f4efa3cc6075b3e4f179afcfef495fba457186d88a5312d004323020fa235244e08dbd91eaa5b461bce15036f56a5e541ed4de6dbb5a355e7c621f5018eab344e8d36248ef312feb3dee74b5f6e4135bf95ee962634e307709e25da2e43de61c31cb501df917d36d7cc11b24f021a2b185ec547a9a5b77b5b4b88d9abef3ef3fb53a9a583ed299483eb99e0f2556894f80657d8fd97f3d2d278e2125622d01f02e86c9e1e39ed3b0f3f8732527b6fbd55bc127cd9f22b92abf67f0fc52e7df586dc33293c800267b1657df947267b704c28f617f2ce14799fd5953ed342ce6a5b6bac6404809701057040101b328ce4cb9118f49437d430a9a3c0c892c4b10657aa473a82802d9b995bb900125238c2bab3605b8cc9e0066b779c8879e334dd49583e9e292e576f100f1c9fadc1dff2dc6c0ccbdc18b519e324f8ce002b3ff8a823b8d1345095526820a6a46a6a7c0413e2eb9a4e087c8d4adaf6d080cea1695c345b451582417143a1f68efeda7761d3694276357101bc1f47b2977dd98e79930cc959b8e5d89664b1fd684b7f1cd4454b06a56303f025b3ff6dd9f65211e568f20a311c9cf7ee7958d56a8d852ab68f7b222a7fe994dc63d8e164380215e040d66d946372227400d6f91fe7f26b23dc5602a37c22fcf0651461621ba27f745f837f9a4e30f2556a5c1c89ebe7d2427d907afd86c14790d005d3c0e0d5f69f58193c5e878205099e6b5d6c96b42d0e3d494dbf389952c93510665e65d89cb2f1ea0ab7ca353a0613784461867e801ce27b8085adb4483ab7942f77ce7f36a55f5f804d61b62678c7d07145e55e28c518f3b41ffcaaec0c02af14b0ed1690e4496db2273f1385d46ef89a7e072dbe05bc53f6796345569c2cdd8ea12b6ac4b4176d2f32ab6ad6bfa696f7715ae8a1aa22c19b716b99f05114b3d7cdd375788263b2d187668d7c7492301c4606574c5807d712d65de800a26347f070e0ae7e668dab7b734fbd4ab03a385c279475028bc7466439b7a0b99651af70f64bfa83aa3d7810a7cab9b876e5912d0ee662ad6ca8a09e9b85238c10553d8611a9dd48e5f78392ae8045fccf1d5224a3a110d50ed1982e01810bad91c905f8694cbe0027da03b4c4c624c5e4807622548de20374ee16d327dde53f802e483571f751632ee9e7fc872901d537728d7ad04ecd859e59aa50d9837c73cf29b530680745235e3bd4fda79cdc781b3d035aa1cbc5be7191407c2a14c2cc8642fa3c86f16197c6bc38b6a28e0994c866501b7ae43a2a180075696249b27681a90b3f455fc220f41a2c804053ac2c8e331a9017493940e923b5a877001071cf525c211f4c0e190c43ddfcc9949086be74814aa5b319608debb0d6299042bd98fdc42e70bde4936f6f774fbbe6546879a6dbef660d4cfe3768c3af690794abeb844cd7037524c623225b4189768e602ed9f9c70507960519d74d2d7c18c1a077cc58da07eeb825683f0311ec1a06a0120d7464c9692e190cfde909c0614cc7feea8b1dba53aae01f7a758259962aa78c7d2de736b97020a1b082efb62a506371ff5124827ed72872f789bc6cea2f387addcfa2ea4dcad93e9b25bfaa8cfcad3bbe9101286b080e1dc696e403092382d1a7a376c4d7182382141797d5d4ac62089fef8d04da51ec6003226073a90edeee8acf517e3d91466c30239763f3117a8d0553108d9db11867a30f5015ddd37b1b802d611589e2611c58d132f5d9b5e06760a014a8d7c71384c16bc49e9b63d2ae702d232fa5c164f874bb50d2481e8992e6a559feeda25541ae5bdb16aab27e02966fcd692c0ff9a164c54326c4d00f96302753596658967993d96d4da6843cd3c320fab05ddc81d1161b4582f59c4c677e94d2f95d9446d6974a461a7fead6846625648b8a7e2f22f862068a9be2d0f0ee566202ebf9c81ad7d4209e2d87fe23266f5e545e0697a23cb229250ee61dcabd6d7db01ec417b867680ac78b982f771a25890ecc3b85dd24ca17652bea03cb3cd7621b11a533093fae16db44a261b40643466f1367dc94513ae8c1e0049e72eae5eab1f16c10fcc30a48ee95b83b0fa126d868bd8be026224347e791991802f38d2c5ae194056f23fd336b59aa3314d5e5b255207e32a42206e5174a8ae6ea5a3886df3a35b2ae092723f706ce993127eca533bb8b188be179422a4981e682884ddc0df546051986a45fdb12b0c4d0a520a6571b7cf3ea2eb3448f329dd6b8ecec74258971c37901d26f6cc5da5830e46d82beca2113a1e459d7b4af5a12bb2dbaef700e2ff478c39c0d19f526382673965c75dfa1997386a6fbcca5cb7685d52af2beef79b0577f792790a980f5e0af59b2d73bbcafe38c720c3878ac9f3eb718a1e1001f01a949b856ab2c910b56bb2c638d87b714d72c460aa2abc36b27c139b3240eb67db5b476bab3311e1a1847ccbb80b5c781f18044a1461f9e8effb857c28a4ec7de19b7341d28af89ba7aa905e35faaf7b267dc205888c527015a74b11089acc5baf8647118047e59dc6ae09b825be5d20b1938558b09f2e1456cfe7450012b87b35242f6319ace8d3f01e873348c9d2db068b843daf189f7aed19f4adb4acb6d92933abfef29c25f5289140023b72a56f02c8025b153338684109120aea9232c36b8c11d99e682458f0c645e6b182e2818665335302ba3a1fd5412f5d4c43a2f0f8eb13e02eca07796450bdaf7d446e45c4c1af5bc3c62e4655f0cbc2856c264b30de68d9c49b6835db16f7aa4e8a2587195ff03a4d4fd44a1d5f4b0303d2fbac287a0546adf04619ae9937eb23f49b5806254168c223111f2298e220629d1a86402618205c85e63aaeb8034dc3319cfceec9a61002efa50c5b0077f45f0859c50b4462c73d5af6f6aa06656d1803ca09d948ba3a58f14f75f2fa2e857839ac6cec04ee0873afb6df99bea81b0aa4e1df7e32b8b52b583f91e8922cb4ccc5ed623d42c032e5695a8dd0a4ab905404deb184bfb057b64d257ff36655319dbc5439a57ad3974e6b95b6b7c432f7071b57a71a214e438180ac782c0c62f879ef009c711001ab4566f2144f1639912d39d867fd726fd6e3ad32b616b1c1be8437ccfc63e464dc5c1c513e91ccfc7c1b6ec12791939ca8e221567412b1c3d6ad0d604502f108802322102a8ecdd4798d746d3063ea5638efd4c2d0ec3f06be80596bddbc66b947b41c8bdd71903d53baddd0e14c6ccc584e1fc8030c10ce92dff1960a4bd01db57927f1ec536830d7a301dc15f092eb536bdb267124796a58c4527b326f92883951c79827c8c894a21c76a475ed43b7d55658b3960e37d131221dfe2caa611afc87d24328f2841a1ff978a148f8beec78b80c7c4e4eef9c31e2410e0c4cf36222de3ba18b102ba8e70425c382eb03feecb5f5a2877c554b7d54d4a5df52f36bae2505fdf1898cbd5e26c6833d75ac171a39f9645ad21198fc1ae577cb2cc708fc77eef3cc3974a7d999d33f93e0ea597ae530f71d863c8d6ac1a75c98256f4dfcee054fb41ccf0ad8187ab49c14c34aa5cc7e509968018ef0a5817f62bd30188637d512691880268c358ca5ef58b54cea699384250da8d8190ed93f5e801523d9b83d6235bdf40a94e199528e4834ea1f96965238b30520d819924ea56dd68669be2c2f844c7b05af504432a78035f5b8726a5690ec19d643fb2e12d97c487a10336bd2c010acfad88c5cd2bed132a2c2f5263a70ba13c4de28b4afd2588611df8967eefc6baa960ccbf8672faee97f295979ea03b4aeb1e79907cfa66b959298a9c9548e1135db034e47e263a7bd66434aceb96391e73f6d17c906248d2be547e441c8d13dc1785ac61e767ae8e51adf4832ecf77929d1473fd176f94ae21a41baaae02b3b7bb3c6686213d79abe92edf5e5af2544ab1060b158a61b9bd9dab7cb387839d3af401a9fef570c185a8f36fa2a440e1f0e3f8b643b4fc167f53ed44448c1c8793e747b3bb8d7ab1b19f69ad7eb93a2ed3e26abd3d663164e8d78316c22dd6a8ffe36d4d716a8c93c56d22b0dc9d4688772f1a307caf0435bf0c896a2e2fdb73ae181c8c5a6394069b16d66f88792d00cbd4653d9597d75fb6572155735fd0e5f2a1eee959962065c628a4e294906685bd21688cf96467426a48894845b135d3dee786c68e8358b26d32847af9f65a05250749c8d03c0a1552aeb1e762dfbf15e39a4fe934534be7356d4dc293b6fcb2033ecdc659e3e18015c78b699fadf1375d887726d7405b7a91446f9834e597d431c22bec2a6a0b39875ad22c2b4cfb80c89148e581a3721c543c6600a824cd71102e80e7eeefdff60a7735986110a370c6522131b3d286e3cc20c2e75c612626872400b4b9becc557e63cd12c742207a5bc9253293ce11441c50aeb0021844127fbf7f60e70227452f787a4bad860dadd5c61c71b455ad037af0038c17ee02e6148c92a76f76dfc095e94bfce45943b9b55e351c7c3dbb798915955ceb7e90f0702b7bec42c51cbdd405effcbce0b97f7e9f73a1445258c280f60506fa2ac1c7ea3c8231393088ad816f7ec3aba6f6dd89389ca4276821daa9e4da36daab99e6e2a4bfa972c26079d6a1fc23feaa1f80cfbb1890033b45639aa4bffe15aaf14720542ed9cdb76e4787bcee188c064175e114911ce18db13d3ccccc3077c4380379160e5bbc3c74f2f1888bea9a544744a66a2086bb545a555784edb981fdab3a2cb79988b72cf566836336fceb3123b1c8c5a2ceb261064285bbd05518ac08ab42d842dc4b7e26f05b5c6e3ccb6cca3e0a0bc94500795829ab2117714083855911cf0e4e20321813352552a0da928b55cf462e23735ba131edba811737fcca418ecfb675962816ee4719b16cf43aca18cde3aba9c8a48a4cf5c3da27004c58e51e0b7dbe83dda1dcfad3ba4130d1aca47dd86e923c2ee281d92a6783de34ceabec4e7d483dcfc272e2a136562abbd5f0fd850c20c3de1e64f6c703153f214eec9cba0ea9827924a5d7b69b9a8754c1463b7db1c82a918e0fb94e76147d99fb15d92f380bbb6aa14422123f5d09ed5d088b9f963341ff02dbdef131e1be305205ee47277d21a4cd5fc78b3a33dcd9490048aa502a6d5664674a5ac2da271ae53772562aac50b9eb7e5efc5428ff978cd1e446646ec4f26ce39943a10d30c92ac14b37b1faa9d09a792a91e7e400777f6e4d2f017e2f65f8693311d98f80565a885e7079f77b0be68f3c6987ab64c1b5f387e318fe8ddc498488601edd3c66a92c14211f06a6eaea52ad4668b2ab5ebed1e870937e4d0740441d503e089ffab100156ff9dd6618c5a7643185077abbc00b9ab351953b224975e8655d418021980c04a066eddf817675cf9fc3058a411822caac062db2d2ca37f3e1f81b51438e764ee8159392f51322d993ff4ba9692b697b180fcc501e3c11ac9dcbe2dacfc1343408ee77b3f5629dc9efbc71acf874484781405ab60972f38b72da3cbf9840d8bd92100e7d5498faa8acd1075e677be572e6253f9f9aad8f7ca333b41c96e1bca91a96c228621c2ff0a35c3cf44daeab5e6364e7f2d9a2699a4ca433a890b09ebc6b13542920ef5c37c9a044cb299bf8e649301d0be065e7c58d622f693512c2ba2ea40c1d320346244207e9795a1e483c81f5087f9d4e3eb41219403d84c1f6dc3a2be50268d25a4d659b3a9273d56099f1c316c4ea695fc85b033ac7778062880ad0869b56d645430ac6c26055586cfbd88265fe8fba6c64888db490f7acadacc0c6286aa3f096024606ca673254d89a16357869d823cd3dbd35a561a6382eb46a6dbb936fe31f960560ef6228b43c70ebb37902482b864e2f7f71d478f7800d0c5adf4d8eab585d3ef14f46e2fbbea37bdaa824c58f914d342acc84e412333be572cf02ee9c3549e9661517d2693845e1ee1694736880865d8967c2e39cb2fe510ac1d40d5c50d22eb2b91b92426257e7929b0757c06e9eba5542503a3a95254003b2b8ae42cd6c9d5d55b336597ca553477db2441e6761ee0d2c4237e847e86cd54c48a675079e5a5e547f937184258898fca428e3ee18007cffe6f347e8e2ad930d50c64bbdac591839fe86b872e039c7d33ad74cb1578ac49c2c0df0e1c7c315cdacf59f9dcb7e2b7869d81123d5448cba2e59df4a0af7e89b0509587fed0c673b6599d9df760e7d70a50d5339b30e3e5013fe9191eca00b3c6eeccb726c02d24e300da25c6fc57bab8890e10d72854a18412e69caabfc9a3a8d644a725baee93246c9dbdf92c73b341cefa96f8d2f94440d05b56ac262a1cde99712a7eed816283cac6d7d36bda01d7f949e715c2b364da4a9b962c066c4faff7aa4d239b59585246d6f547172175a975491e1a9db62b5899b80d74b0b75d65a8a0c59b2cf4d5980240a468fd561681ccded06aaeedd3f5f11e74e199987d7fc4be10cebb3020c2190e7a9180c0118c8e0cf68504e54389a2aad764b10ace51a8812a81a307df0054265d3b7a4887a77b08c00abf97b906ec39b89eca79aa1356191d1aeda59c5c36ac6b827f67c8917352fd70deb0dabc9fe332f56a9595d159a9978911662be6c5ccd4b086b06b7242b5b0da7404e4029b135bcb53ad220c380c11ede594aab634e3a53534ec4315ca0ca93e30c70c5a6dc2b49cf6f2fc41c552a506a9a0e0e30a4d52aa4c20dbc6a5a24c1ec037c19918218c03ee316c187e492a6b356f59de95e74c39417b7b2696b07e8d2938e853a6f9c035b09b8166d1fe9538d66df0c58bfc99c5f4c39b6e02e3a7419c9fb185546ada7a32b51a5201f40103082a1b4adf71c20066119419fd09984c2432873121c2d662d62d84688d24fdf7af0fbf7ad48e35b7cded5fb88d5640e8398753908f1db35831575fdd26dc94d6e58e4e7571c5b97cb35393dadc53c882e54a44c218ee726ffcbb589d6fa2f409002947b4b17b67e3a05c04dc31933f0d13a7e1f6ae6a229497afc67375f39ed44f3e82350d830a7ddb2f5c71935815af1b13aed2abbf7bd39e6cc429df0e4a6f1cd1ada498ca21278ab64d1aba4274d3a545e6c3dd7c188a2e1192298192b9d9988eeb606cb64c73788af7680cdc8716bc880e7c76ecf44df74bbf20d189933b9bb397ba799c1229ed70de6b05d2e639b702d03b5b30b0026500ec964da41010f6dafa031888274838507013e23221cfc08be1acb6265f6f3ae534657d56d419331f8895be10051c020e28713ac94ea5b3bb68b469e6e9691b544f19890a3b902b5833eef189e10605e888092825d9241139f5a474233c30cbe135fffe602daf183eca9ed32bd331d9d33d8f65b65e8964f0def1274516364f9448e3e2d6915e101b9cf1bedfe543f6a9fe791cc7dea1c6659a530e216be9b06c3b587feb9ee1924161ca487392674829a992ad88a8438484a90d1b5ecda2b9447f1819b95c9345d1336b1e12c004bbce405a00ab7cc5caf6a286bd0440e96afb92e63261e73995066308a8c25d81b2c5d20f0cb4351168a0ad1b05c9077ac48929d3300e11a7bc75ac55cc00593c9e0b97c89e93644ffd2e522dcd6a83ae6b9623d08c5ab08bb63269ec9347dee9576d70153e2e5cc499eb597d7da733452e4201cb6aa3b7ff97d93ff40f5757c400630554471e9f112382d864c053954ce453424e006a51cdf6e4065ead9c2994b869db83086740af0e79993ecc46353d2bbdf9a74cd767bcd62e35c052c0fce687a2593b7ced06a14f857f80bbec0254a66756f08ef8f21931feee49aa86f414318868285fa78416dff7e4fcc95f7c9f4106e0a02d7a72a6aa50ee27c79dd5594b47c6ec2431edcc90ed57e165f8c0cc954f2f422f0bb1c52b72064e42098155e55113336501ec6becc4cf28de208070814ee16745c65e9d20772d1a4271ea4071023c3b0c43ab30e4d63c652d25a009859036bb30f0bdd3cef38a0c72881cc6c674168a1a716cd488c88afedc9c745719c686ce2dcfb6af8df264a941c94e056d0c997b373f0b9600d1c06d255743d527a31142c8b32ca09de80fd5d82581f2c89cb7ae64292166e50821cee3c5c144159ecf87ecb802e1badff738f15aa934b18a33620122bba61124a46dae1ca630c25e0253a7aec56eb3fb84d6c6401bc0973c83bb8fbc3ebdd87f634e451d9958067f55521af8bacee334681e83df3851eb7ef7e165c75a1cbcc30ca08afa9a9ce8bc04d3ee3c2b2566ed44d061d8ff34ba911fc8a3d718173cabf83a8a57d18c8377b48cb23906460ef0281cbe491699b89ad6c92bcb6c071b7ddd15c5c8a167d7849b010b15ba07c0f64473a49ecdfe4e727681f0b751b219680acf0c49f939cbae0d065a4e4705d3984d17b0826a2b7b85050cba04e75a093b69b2497038a1b5aef0bd83d9e5a91a9bb440ac3942da4df66e4807a2510c054656005206e9d62f2d2361349bd6f614d954904f4019e894a0061981a33678d3f8c99b550699c53a6b39747eda3b1be4e54347a6da1c037f1cb3fb5990e878da3509b0bfeac3ba8ff78f1924c3a151772712a36c3799bed6b7a4f4524e044addd6d538a46c6f5fbd356c6785aa4a14fc8356c4363e265756e052d0afb111d1472a0d3a0c2cd03b9cdaeed1332f6071286da90692b98c5a6b1bc993ac2ec4db6f6ee66addb60f686640d4bb03c43f146c9f603f92e1ddf565304659de21a692b72628c6bdf9a86f9a319e361b2c60a38564e5671b58c11e2078cf58e22c8180e6ddc56d5d95bd4077c247ac5ba48ab3b9efdd57bd400f26fdf3994e7d84483b71dfcdea108465001b40ca6dc43a9b9627c3ca0c57aa1930b387398652d277ca7e654aac4fe7bad5e412e627752c9619b7402591e4ef20a38000e94198ffe1998131094ce80502d40a21c546550a418186ca8dc2198dde856f9bcd19e90c32e756e9e571d0561ddccdc8a921e77bfb99937759a70660fdf167e0b238f01f775d1bc3c106871aabd17782c64bab4c19f28883118e0c7ddefde14db7f2f605d5f54c53f8f953ff59284f1798b93ee64f80ba6ec654d64a40165076c12438a5a06d8e71e951897c8957cda70f5c96a7ffe4c22982414f7ccd5e502849a47ecf7dedd594f1dfca603005ea49422b7013cedcc9b578b542dbb497f99210f30a67e93559d150b2cd2c309897ffcf4f3c43010ef901ec534e9594085e250cd814cb301e74613c4e66d837c71469877dcbe40224573917b3cb1ea294339c40bb4d9a12ff97c509e82e86105cfd400503f96c6ce530ec9070139fa4c313965442462b71b1ff5da2b9e27e3607948ab58425447d6cde661883b95801afcac2dc0beedbce160636011d51e08aa5cd0afc640fcb4e462c53e9d8dc5bd4ae56949303215998b77a99b6572783fce3406846504dab803c454107065b43a08869379384ee72c95202c289248d2811a85ff9c49149e8a2a7ce6594fdb621f4d57cc74188e84e42ac4b0426edb2114e4e90aa8fee496bccd6c3b42436ea0fafff8f64f644664f6ff64bbb7945206710c4f0cf00b6229badc96d7854d532051fc99b76397ab2fa8e8b6bc2eaef42575b7ac056d694717555c3bfeb7e39fe1a7eb755d56d70b5ac4ca96b5a4302d2c7749596cc7ef762cd3a2be5ad619171957ebd2def0b3e56c594f1757ebd2b6a42d2ea98b75715b5a5c5cab4b4cca72512defe8c2bea4a91794a5a25cefe8b2a654febad616b4a54db5b0dc05c6c51d5d2d690c9fd528536fb6f01ca6b472de6c59614c1774e42e6daad4e19588e5588037c01fe07f78048cfc4f017c0f3f8027c0fb9083f3e7cd9faf3f67fe3cf2467e870fc0f39023e44f7f2ad103e485e83c903f75feccf9b3c7fbf81f7fc307f9598df2d4f33af07ccfcef3fcb9f3e790c7e1897c91cfe167354a1df8d9c34f1e7eeef073e74fcff33dafc30be127107eeaf033879f39cfbdce0379218fc3cf1b7ebef839c3cf991ffff5378ff332fc8ce1270c3f393ff9a31ee6635ee69f9f2efc6cf193c54f96cb7f0ea9abedf8cf302320edf87f503bfe03ac1dbf015ede8ebf006ec7ff24e942922af92bf9f2922f3ea01d3f01d88e7f0068c72f8097b6e3ef41ed24faeca3e44b4b721eda8e3f0069c7bf034f3bfe236cc76fe4edf871c86fc94f499e922fec48923a90fffedbf1f790645b846c3b7e1e926489b0bf43bee0e076fc4384901f84543b7e2024e9dee076fc3a24ff41a21d3f47922bf9e2835c3bfe1e2f6bc77f04dd3217256239be1dbfdcf5d4cea03edcff9f68c72d4bedf8536ec7ff76fcbedc162b4c3b83a6a34cca9e5aa41cccdbf1bb1dfff353067db52d541857e63d32db32b5e37fb5405131a84cebb276fc52675c62521956667da9336f8c0c2ba3bed616680c2ad3caa42fb605cc2bd302a62563de9797dbd2629d41b997745fd096d6a572e9c97d81795b52570b5494695b625c32aa49663d992ff5e57109cebc2d6fcab09c0c37460b8375a1ceb832da18ec2b7591be5865b03016c6ea027d016b63c05061ef8b54c61a438591c2dc17a88c35860a2385b92f50581b03860a7b5fa43258180b637581be90d1c6605fa98bf4c52ac38dd1c2605da833aeebcd98b4bfb8644aaabfbebc5c7d6949f4d94739f9beb0df7e4aba1c25d79757bfe5fb9bffa650a7912721df06009c2f5fc39b646b4af2f23c6a38c9070027d9d3c493b47cd9617e56a3045b3c8e37df75bd8e3389eb77e8e06039f34ac4d2469bb6af1a94bf4ac432498bcf81c355b97b4353237d79eb8eaedae20fc3d98eff6dac2e35de9c6fd1b42bcccc0d54c6468c0d9d87e16b0d76869f37d0d3067bda404faec36bb09c9f9cb5b1d6a06973788dd5c6cbdb1a346e0dd5866b43e52ecd5b23b5d1da486bb435287f5fd48edfc8ba652dfc5dbc26ad6969a434280d6be467cb5af01ab5c6a559df8ebf26ad6969a434280dcb6e19c96b561a95863a83865ba3d6b834eb8c97869125b6ec8526ad7969ac335a1a6f0d4b03a5c1ce606ba0352c0d94063b83ad4193d6bc34d6192d8db766a55169a8335c1affbacc585b32d4548c74848172af8bdb9aa1a664a4630c947b476eab4dcd48471928f78e5cb14db960c71928572296ff2a114b17576c5fb02417313528b7d1bad2518d96e36f4bfaba2a776154d7c6cbdb1aafcc2abe49d372d49b3750d69b36d897376da0afc725f9660d96af240dfa92b25a542ad2b033edcbcb42b922cd3aa3b670592eaa661569d499c765ebcd9a168f4b973769ac378fcb7f93c66bce68536fd2a4335c8958921c9729b3866df1d23269a0372c1793068b7ab306da634a29f21eed0c3646e5aeab1db1dc8cdbb2f2d4d58ed88ed396154675b94047325818db12638581a1cabc4847b017d6b670256219d363266385e14ac492f74863a8325c8958ba7af8c0485f5c89588e1e9720efa1be4049bc07ba6118e676fc3d82b68ce32eceb999d318eec248f631921a9919093282c28ca83ea2546564751ae9d1f668b7cc48d08a9bd88a8a9bd875f1226e62a08e9bf80d32fd8cf7f432803ec6e32d3b7570619c33b8897f647013b3dcb481c14d9a1ee8969da819cc8fbec7942d1bf1514a8a798e8f5c769dd191ea407bf88c322f72fc3dd417a543109be6785be87875a839dcb5e3d78f680e1deccdb75c1dad8af32f4db03ada1dea8e37078bc33b9b4307bb23edeb0ddfe1763587ab63ddf1e23bd01d6c4f73bc3a5e1daa0e77c7da75a43a64481d80481d5c52072b1b86df48d0969da427fde94fff829b3ffad1bbe0e6caf4a6877133e49e7b16be84a08edfc8942d23718e935a69c76dc729a94d4defc4a11db31dc7d0d38d58dbe2a74d2a6bd3367dd97b4386b66eac3136c54f1b74c3b02c86de60dbd50dd91a7b6fa8b155e6cad4987b238dc95c991a736fa4b11bae6c8dbd37d498ecbdf1cad01b6b8c5dc2947ea34d65ad2c8dc5da1b2c2a6363a80c8db13756d97be395adb1d87ae386eb42f642a6c288b93162aa0f7b23edf88da046662f257f25626963f3deb030cffdf976fc297e23e99695adc76fc467cbf01b516dd61bb48df9105547d6b7de86bd495d991fd3b5e5f22f2e6d8beaba7967be95a3b22fe4731bf79fbc595ffe715afc0b8e8bd3727edab8243f6fd6e7270efac24f9c161ca775e1a7cd79a39e37ef9933c37158fcb4616fd21b3795e138abcd7a83deb439680cc7b1b1796f589c1786e3a42d9cd746b5796f589c1447cd416dd61bf4a6bd7171d69cd486bd496f6e5e160e9ba3dab4638be67179426d5c5c9a66372b2ec314ad795c924c9cb687dd300c84e376fc3ab85b765ad932b4631c2cca76fc6b50db718e944d3b7e14078a83cd81b239ebabb66ec7dfe26873a4392c8e5407d501c855dd1c6bc7afae3aef9af3e27875569d17c79af3e278735c1d55c7cdb1e25073a839ad0e0e5787a5c3a25011070be640b99c754451a988a30573a45c0e3ba6299d56c4e18239542ea735bda9a3eab82d1c2ab89edecc7159bc3cf17356a364bda9b396a6d3e94d3a6f0b97a1f8e10a725c92f8093ee94d1cefa8c8bb6178c425c787f8e4bc455cb28815b248bb61366236add425ad208aea50513ade114b4a73bc3ad610151f975c3b5273b83ad8c72598b2eee957538e76e44ac4b2a5a34da1f2e392a4b2b812b114d95789589e78136cc7262ee4cdc1767c16e9ce22eed7388b58f91b679176f4b2b3c8cf86611dd62de37891910d376964dcf448dce6063743ccd6e0e68a468795b076fc4380b66c7cd62b114b264e4825f7e83a4add1a6e66947b14dbf113afdaf19b9c40db1a5a742d5397869bd987033f243db88e9ee4723f4a5bcfbd6cf8287ed6c002e0554bb49cc1cd9c86e28f7f2ad1737a5135fda90ddff404eafad05d477e3271422a4f257a52cf8222457dea09767cd4a9444fcb8f7fce6a942c7ed6909e006051fc2cdf919fbd8597223f6b38f11300267e0200e567775dbc5cf959c3ca4f00b8fc0440cacfdee225bb61f8657033cf72ca012bba804413b2485b1025ad6ebba37c218a1d2c01031950f625a9291b06a028d00ea0487857173fd192d0d19aabd040066810831d98a1c4a51baaa81a3089811251a8e04289cb108522c5914417a81c21890c24a1c425387b828df17922090c68e089084a5c92d2f7a5073f78f2021db81d287139e24ea81d6f1780c1891b14610a56e830c34db41dff1076cb72b012839bd88a0b839bd8057ac14d0ce4829bf81de2b365a712b19cd5284f8f86b64c427a907b183769b8f0b95771d36664fa91f8e7ac46299ef8a9e32d93b07013ff84244892c811c9b26e18fe7de690c31253d40dc3cffd9683cf86e1a7f1f0cf63b6e3a6cdc6ab00eaf87b82482f8ecfc4c98728562a8759eb5d2d2e2fff4cc077e295a3c7dff36e8ee43046e42c4a534c0e6806b911398b12949979b5e8013af19d31ec8861c708f0f4f85f2491262d48224c881841c409910c103962870c3b65d831c3ce1976ae10d100910d1079428403443a40c4033b69d841c34e16449610c100ae3971130f7911a189a950a9f8e9f88bac1cf827311c53a81fb1a39289139b92f52d578bcb0be9b9297bf42437c1fcebf1175962cbca59267131cfc4c9aa9479264ec2b2c53371e295330f3efe22ea9619b19938a1295f9ce70aaf92c70ab8063f13275ff25401d7e0e771f50dfcf85b903c62c035f867481e2c700d7e90e40903aec12f43f28c01d7e08f2179c8806bf093489e32e01afc30240f16700d7e4ef26401d7e027491e2de01afc4ff26c01d7e01f913c57e01afc2f248f19700d7e1792e70cb8067f0bc97305d7e077913c68c035f85b244f1a700d7e16c99305aec19f2279ba806bf0a3481e2ee01afc23c9e3055c835f2479be806bf09f481e30e01afc1c89718daa86a566f5d9062166bb8e9b4802107858b8e9adb819aab8b91271f35f341b23c1cdead7f1cf13de96066113ad4daa5283907bd10bf20c42ade39f2b2da8c1d52fa00dc350b85a14648d820db26e192ebd28d8287e7ed6f687fa63ca8f75cbc0c7ff23daa4862ce89ed44f9bd6167c4f6bfb694f872878624dee9bd00fd5ae3d7d6a5d42dd1a3d2e4b2bed4285f877ed623f0eba928466cb8fcb8f4bbb65b8fc95cb125b76aa5697a7db6f555bef597ad420bb7a4fe2e7c91d5b71557fb64c8fde7fafd7b2a467f1f3f48ee9e88a2c6add2dec96f153f5a83f35c96d55a3ea4f173f45756451e28b72c5745c51a8e8a25a111dd5f1dda7d8a240b755d7d2e975539a0db51fdab5a7491a85aa1e972c6fa2dacff51ea7e0e3b23345f5547a5c8eddf7ddc8aa1e97295288bbf4c75d402ca112779dde776928c9d0973ea4bbfff477faf59748bca534fe49ebd2934afa47d5b35ea5b57eed7a1797d62ccfd2ab67d1af49ad5feb9fd528497eaa9e9faa56bf0b3f512d7ce5e2670a6df133c5e2a78a859f2b97af54fc5ca5f89942f13335f2732572d57ae2a7ea05f9b922f133a59e2a95a742fc54a5fc54b9e76ad51ff2d4ea7197f8a6d8d45ddbd09b2a55f5b2aabb7a6faeda34f596de54b1abd44da11b09335c910283153851e2f2e32d412ad4c906acc822280b2594b82c8578cbab6a6b8440822964e1040a2562e9f1162035e7a00c219889010468d9f11677c3b4d6548200052b94a0034468b1827a5bac74fd679835fa2e76cb96f836d712ae916b095cbad22d0b713e219ee4e32d20344cf1a91f4fe2f1d6eb4df178928eb782f4bbd68e2771a1495cb30dd31aa8ebc72e9bbc40a89142687f8150025d17220fc180ed71df38042a109a2df5a7eb571266fd2eaf4b1159095784b61d600c2291ce58c7b45ee1181a6f58d65dde7c638cb5d6ffa2c710e2d77ee71688704cd6d9dbb20dc3368cafe8183b0157d1318ea26f36b4acc32e990f1f5bd6f1cd81d8b2dcfdc7315048e3ad97f8105e53d0586123052bf20b304cbffe721379d6a7e018fabb27841b866ddf21d077f6ba7681be33de9b96377fbd9108a870bb8e993808573a86825f0815ad4c97f8084c3a7e91f79b78851bdcfc78f58592e0f16e13f2058ce3fdea3b42f327927a5e18f2d80995fa0dee96ad5661687ad906e12fd1b61dff4fc752a41d3fd771135438d1c58e7fae80a07f1d3741850eba89a7485bb4e3c7e1cdfc83a5603bc652fc48d19a580a2b52b8580a202cc56b6229828c4002752c2721a5d2cd3108ab5f4182ac1b867be40b844358c002bce54d3fab519ace16d387fc3471d48f2ff640c32d17697f94882550ca0d1f64859c891352a9440ff8a407f9ac46394a479e2b6cad589ff2e9f839b5e3474de9f8c7b5e31797e8f84f47609390830ef54fcffc83ac5b367afc4196d832d3878f3fc84f903688952d733d7e21e896e978fc42a66cd9e95bdea47979d3a6c59bf8a7bf89ad6017006f62201c6fe237a379e6f2664eb34f059aa0601ed52485fad437e129dea4c55b4d58495a303c098bf59cb7583cc585a0b89eac726cc72bc76eeb4f0f3f8b5f993ff1ebe416c7cde90d58afd9cd1bdda1d59cf54ba3d3cc3e40bbafd1ec836ec3fc667547cfb032f97da91c15cab43cafd845e1f7e65f2e4f338bcaed4d46755ebf5a45cda0723499c1f99937f52ac3933421e2733ee76d682223f36676b912b17c719d2631379f2426864793988f7933a77cc7ebf0244d384fc2393752368181791337e16f04f7383bb45ea7f5e279f91832e44f1e3e000368b5582f9ebfd9e1a7cee3ec3c3f777c9313029fe246a6e4e0499aa4de08d439ab5112c193e47023ec866108f024a94f71233986403bfe07a81dbf03dc8e3f08b6e3df214bab785249aea9249ed68edf24bd1dff024c25564c4f2b497a4d6ddbf12b40edf813c0e2ffc1e4965af1c4965093bb61a5f71559913db927b774424b0438a12577006ec74f8414d78e1f07f2d4f6706a4ba9e9e5017f004caf12b144bd3614ff7679f0a3500f24ed3847dbef8dabbef8b9a1da76b7361da276acb5a8ed5d5f0f849f5baaed7773f76bed584b5f7fe2d7613b7e75b874b79bf66a2a97ee765b35574bb9bda95aab6defe669d1d54dd51b3765f78baeaded555b206f6aae966e0e15f2e6b60ae14d4c6f7a736381f026e1abc39b80e09b9afab8cce14d48a43777cb9b8c7a7610d262592f0b870565697db47468a13dac95079694c56db937a41d3fdbf1fbf853edf8df8e87b45a6a2b801fb276fc68c72ef4486bedf8592e013e07169695eec04f177ab6d693e5f29385009c959ead96ca6a5956017016da6aa52c961e38cbdb6a5b286b654959dc0dc32d96f5b2541694a57dee47e787c5e146d826388fd344c81bc17d93530837b26e186e42813782e3498cc859944d800840e78978087c045e023f019d1c1f7f3ae083f807bc103f444e0e3fe44ff317f00c7824df009c1dfe3c92c31bf933873f7d78027c0f2f803f7bf893873f03f02702fe874fc02be081f8598d5200fcec819f3cf03300fc0cc0e33c0fdfc30be077e0e7117e1ae1670efccce1b937f2477e872fc24f22fcc4819f43f839e47382f0f3067efee0a70f7efa789d1efc14c24f210fa4c753e002a110b9ef54209c80daf14b60edf823f0423b7e22d08e1f02336d8c0a5b7bc8172a848441819033ed106bc72f84daf13fe0edf81d9076fc4190f88390312b4c6df1c2a43ae40cdb00b6e3479276fc0c503bfe05ccac1d7f11320696b6704918754600640c1031ee4b01e4dbf1f340b66013d082856171c8991401306cc7ffc34ccc01625a980160688bb6002dda8e3f071266e5c8191f60d68e9f0033415b7603fed81507753b4eb9f7b176cc0af13815083f3df763570fe5dc59d77638dc8a5f05b2b22fa70e41b70c4897f670ac106f05f2e78772de97e2a0762fe77d69a7766f9772acb776ee87766d8772eba7f278e88de7b63eb65b512e8bbbf1dad6b7a658ee65712f4f6d7d6aaaed508ef5d60f4d755dcac3b5371edbfad20170256299e23a1487331ab521147f8a336243a9f7aa21b55dd7d0eb8ad0d01a6a45a234849f1589d2d0f786d8cf15b12234b486da90fab5a2750dbd2336947a2f2a5247a33684ba5edaa952b0e2080c84410cee8aaa6c0b45053838820c1fc8a2c42f9baeac7b451a02240459415b756d4def0eb280013044c1053a48d92831c841099ae042597ad13318c1c41292c08552649dd4400c52c4302b4fee138a9003262060020fca13aae30653302086255a284b2acb7a55b7455796e555dd34e7cd968af326abbd799385bede645975de6cbd3adcc88ae670234bb4561c6e84756fb8911fd68b1b99c2c2cac049126c088250f585b6ac146ac0842a4b48808274555f773dc316b260052c7c5c3685a1ad7aa34a14aac0040d4eb0b62c5a20c30d9c30c315524a57083b78e2064e1041147650beb80834409990a640096ac97663d08209b03883142965eaa40a58b43b68622d591d919b8eda10eaa52215083a6243a9f7ae2fce68555f5f8e8815224277426d687d7d6e0e5722963afc1cf2b31a25cf9ba256085722964070c9f2f1a628dde14ac41267c70cddf0b3c7cf6a94393c2e51219e22add5aa4a5f23cf9dda169015ab526f5247be757a4757888f55dbb3f2a43bbc90767c7d0c09e276fc2a36a506e07d882e0a1d5264f51251b538ac3cfc903f5f545a849fab53d59ea9f5145f8e4acf957baad8942aba01e0a855ab5a53a9d8eec0c79755a5d0d37b848fee6a55a5a8f794f2b17df11cf879c32b114b1d920945852af7e7dbb18e7a13bec274c8b7f0af1def905620a1ab13a2387c8eabeee8f03d9eedf8c3167c89fccee805d31e3790da1f21eb03748b7c0f12daf1a337f093d49e217b82ee49423988eac04f127b862df88e5e0ea6a435744374e4725025a9e11ba6a3211c5c49a650f482ecf7bee8754947132a86ea89e556177554c5f79472219a5247575c4faecc9b61fbc2bc09a6fccdd13bf32689e58fcb1921a436e52283f366c8c6c4bc09ba8f4b186e8268d9f34ac432a57253224aedf1dc88b26254efb71dbf8f6785eb98c6e0cca45cf6c7c3a42a4edaf1a750ed0d8f6352c755c84ae551edfc19e48598d691ede1e74a3d55e8893a4d2b1f5920fc5ca5670ad59a543eae2b34e5a25853fa838faaea4db5a835e4a3ca4db128b0e523aa43a9f34ac472c62a434d3be65e18e80c1929daf1a3dcd745e667a432d0b7e37771d1be403bfe18afdbf1c7b8605fc878735c9cb6e3bf71b1be6075f829e33d63b8278cf674d1c35fb033d0182f0cd7050f7fd1ce4865a0305cb43bfc853b434d63b810c25fbcab9a02e13050121a03b6af7253ac8abaa41faeaa37d5a256175635a568ca7549bda8765c4daacb119f0dc32a3f926e1846618ecc360cbbfc08ba61981b0932ad9fbaacadf4847ab996bb2ea7b7c59ed414ca5398f16db5a7965bb98a8549a93128f424ba2b97b3f8eba26a3b5722a2786a7d5c8e1c95722141e2dbf12709b110d05ce2f25745da2d93f9b97925013a867a2eca98bf2b43c88d3fa2f8c17d5f61a263db6726567ebad14d08b2fa95bf8362d491502ffac87dc5f41aaa6323ff8d054bcb9badfea1fa578ab9deecc0284efd1bfbe7e619f94d51fff0f75afeaf0638c6f78d8ffa8d64c0f6dc8b465243913bc803e1b8afe857de5888e2b760e17900bff2b7484f04f9959f457a27c0affc2ca497847ee55f915e0df283519cc0ae0446d133b8fd476e5adf9e4337ce916cf89efb4d068d73a879f68dc37d14992716bcafe8d817a4a1281408c6944ab480a48288e91be7523c5321e5291cda75ac03e298e858f786ac08b1133d40bbd955b1dbef4f3b85a265b8f436fab36520ab635e7e0d85c639bf8adc53f48bebf9bd2718477300ef2c3c2867c0326fa619d1f37b66084d90057fd6920d96606209efc94e4398b937d32ff3fbaeebbadf7650f6bc30ec7be5a6f75eaa5ff939d29be9d7931d9adbf289c483e3beb469a87e991caa79cf7d2d58f243e628f4eb27dd22b0f5fc200b42a163e07393c823cdef9ebb61f93defb59b51fcf4f1a0ec85a2b883baa0707bd463d2375ed19c84dac87710f728deca6d15fad5e2307ceccdbc275ebaa1c6dda6b8e97133ecdf7fdcec5e7b8ec49b371b42eb2622b6fe69bcf5bd1982a414cd5b1ff766de130dcb7bd58c10964864764219c2dfec5e791e1d3122352b4253b3b22d7a8e848448d3bcf7663ab675dc441394f0a0d0323c8435bf0745c7701356a2e83928899e3f1f018b2c0506bae931d1b3e6e5df57326986adecf6acd996dd38df688f12ad0c94afd0affc2d1df6e62ded4b4de2b247e737076d1816c2fc76222fa01b96f56cc3f2ebb40a5d432975dea9f621b5ba61d99be51d84b959cf3b8843f51452af1b96b5fb6ed94e378a61f977bacab90c4d11e298cc1900b662ee340d62d0be2f161a1ae59d826a3375adc284f6240dfa79b1b8f26a4cb49986b6eb0e1dd35e0ccdc80b5f363a358cab6e6317b779f6830f40643485120549e8eb8eecf4f4807f7cfc00840f23cf5b3516bb5e1af69ec686cea8dbfbd59ee898b95dcd67cb9868178b1da4a59aaa51b912c5d701e998a92d51857d051641efabb134345f77c4068dcd8e0f3f20d1d9f131344174ccfc2336740c37a1842aa47489446747d0c7c0c0a3d0f36cd0d064940999490f3ef8d8514310adb5d636369a877b76d40e06daebe8d8febe9d617cddd63eec42a1ee7dc4bc2e7bbc90c2a0f9bad5e8c223b90ac3987f1f88b4d54662432e6ce9d9fb37be63765df75aa7bbaec326f7db8bb84ddbdba6693447d8918f2dcbb29df6f5a49bb80d4120b221f750b81f25c23aa67f87de9bce59e3bc695f0837f798db7bef9216062696a8c2449525986062892a55aaac54aa5059ab5459a950a13225092a494ca142654a124924a14649228a9a44126a9428517ca04481e213258a0f1428db8bc0568f6ef1d6de48bc99b07eb536274d4d9398d463872ea265036e4209509490f64ce2b17fc7de4a78d27316b610020a0185b4908550f33ace79f58210f45e107a1d6bdab6e590e3461d60ece5ceeb3a516984065108280bde0b425b0869219405ef0598848410e3a0fa7eee09c6c13be53ed0f708f06bbf966e1937dbb011e018e701fcda1ec0dd4c5ba2a17d036dd8deee86ed1d45686ae907a463f83714fafe217437b959dfcfcd728e4683fad632d61efb748c3136310c21b96bdccc9aa6699a86356d6f12bb25810502c90380f0794df9f1894205c847102090602862364742d2bdc0a7d1e9d9ccb1b9b9d1b369a3671d1a3dc7d8e29b327a8b9e5d2d2e9f3f26db30e3a3a5f5ae9369f4685e5a135e306c724e9ee527a9d4a3f84866fc1a3f26ffde76e49c9cda8071b2086ac839194a9eb17f6fd487fcc45b7c26facdb2227395ac047eed17c9ec82fcdaafc99c02fcca9c01fac5df9f45f064f4fb739af76728a9fc0495d3eca3639a6f918cd1af0d44e90464022a7dc8cddcc1e77cb20f48e25eda2ce8fb47a49961d0f78b4833d3a06f6eef8da1604751151b95ec8550e7e41ff38cfc229df3d6f4d65aa8f1914893dee6ab55187a580bbb0ebbdefb59a57ecceafa0a2d0eb70c97ae713f21dc9f4352d83aefbc575b6b54095b15cd04d1defab567143837b6e2e91cc1e5d623cc5ff4da2420608f212179fd203b0c0ddb221a9aee4d97e92483736ee0195b267efe188c43da6cd8fed39bc88ed431ef45d90b4d21cc2432e31708fefe181d332fd049bf45dc5c7dc877a9e49548fcc896e1d10e37920db95300c7d8cf45094d5950df30742c88d76b3fcdd65a7331fab5b54ddb9ad67141cb39190746701da3a108ddf446fdc548cbb2538669ffbd39ca708685de74c5707e79a72cf36194737ac833b48fe5f7b8c9451fe226ab9be17fdc3c753364754d8f46fcc4cabc9bb1aef5907332954ca56b4ef03e6e7ae14a4445a6af2d7a5ed75523f1d85b24d28ef48f6483f7a16cc5f3acd8b07b88631cc38ce999fb8f44f2ea3967a1691b9943569875fafb80480a5ab67a3e7325f9335702bf929c65b83ddc1476f4cb46276fb8c5fa8fe8d8b671cf918d71e63b6c7a72f6f20bcb765a9ad6d37020c2343ad28479751cd3314675fc2d988573bc148e698f5fc439a3d2e753a963ef0583e605949fbc6cf0141d86eed1315c22913cf1e114669226f23a10266e7bc83924273800cf36cd879e971643fe4de6df01e2db3b35e8d78efddddbe8eca8e1b9d5ce3bdef380f8956bb572bd8f170cfdabdf14c0b21786e9573ad2a12588b08df0eddb0f3070e743f73e9326c7e5170d7e18faa56934111b0df97a851bf6e5ecc30f401cc9af73cef93196f98061daf5f2bbc6b753420d9a931ddbb66176d3b46ddbb49cb3ae41fbd0f0c658679d73ce5a6bad7764306429fab55fafbc3115c2bdb7b69fe3388ee3384ddb51838f6d739afd3636fbf5de3f50a8e007a29d31c640396b8d457befbdf7de7bef8cf36b4e08f1ff0044d61a08fdd2bf493c7cd835386787aed1f5c7c02e724e0d7a26c3e01c1f5aa6eb7fc1b1ee83b874fd2b14ced9c9334a6faa62a1d75fca393d1dce3982734e0f3a94378e7d3fe8fa4f35e41c1f3308a282ae4bd0f543f10346c182aebf146544660f88209fa0ebff3a6ecb3ac86c0fc1007446e2b937f777bff5c0af2172c7a41edb078ca3bdfe02ecff3e93a99bd87d4dc732b7473f588dc0d3b151cf69b809f7939d85a5ef9d3396e5bd714bf3dcc9be4317a1737e22c231a6cb9b57cc06bd401dbb1b035db3a66c18eacdc294f59304d18b44642e5bd6942d73614d614d71f9614d697975e513a65dcf3c2f0c5b662dbb65d6f56b2397293bf60e9d575cba402d6fd7eff2e3d26ed9f9c37da781c6b1a443fcd4ea4e73aad71d2ef7279a77b4952d03710efd79d2277ed26854bb19cded033ebf99d579f541bf39a557adee9494723a05379a55dc8e6176f5bb62f7f3ab5b52664bf81d3f8d6a97d47a192571165289934a2e23a92da54a2cad4a6d2efcdc5a6e7d777be225f6b44bfa35a76a56b32057a1c0978545dbecb672a8a669e85e55addd5e8dddefe6d26d6b55dc49534bbbd5ac56716ad7da5a7259b62b5571a9c6965e96bdba36d5657bb5b6c4e2f2d93057cbe5a2724d41cf75c3b476a51ba6958825aba4d19145732cda73e942d6e4e2c3153f3dd6eb5ace05ef56aef5ba4eedd82ee5584ff5da17ef5ccfedd0ed43bd2ff55eeefdd40ddd30adbfa549e954fa78930ffc3ede926e98f67813ef8d08813c89f7bdc75b661ba69b746f44e89b24297dd7847b23424d9e27e19efb96598bcf969578c7f5b74cd9328eeb6f495ddc8c7bef4fcdb16c48b321fd2755abffc4a21abdae55bb9e9fa235e486d2111a4245a1903a4abf57d48ad0d048fd4469881dad5f2b12a9a1f663b12a91da7e6ca955ad28579486d82fa4476a2b4249213d4a4ba2551572bb4685d210daf5e8d4ceedf47e74762f43b758d9328eb7ba19dcf464702be188b75aace0189efed2977bd19497b63cb743b794a7765edba51cbbb29e66e12c1edbf2d0aeedba95eb5cb08c2bca6996958545bf4a2aa19a25ad2497f49658d2b7924a68a925a1604a624b69c91dbd20692da9a577e4822b492dad203a6a419673595a755c3b906dad29775c3b957b5bae4b1d476f574a4b2a107c96166f92dcae5d6f92deae55dc2cb1dde392f5addcc52b114b55839aa55f3f4bff4ba85fbfe8162d7faefe14b5296c017b17b0570b17fc34c1f4da829fa7190eb6e7a93d4dee6942cf508687ea19a2fc3cb1a63086876fd882ef6935addcc49ad490054f9c9f544e7b0145f88016c270822b48c1e5726d60084ebcae0beb0d7b5ecec11877ed8dc2aec79cb3721d19d1709f67e8108ff9b8796444a3b9178572ba7e8da3ebff38c9039661afcbd1633846ceb1c103c7f5bf50f1f2e28204179796295a5a5cadcbd592a2d5621d81c56231020bcb2a8ad54a5504952a4584540a3504146afc19475108a2780ac2e9640282c914421186e013205872a254eab80912a963763412e91089423942a10fc7f7793a9ed7e5745dc7e91cd7f50d8d0d8d8c26a6ddc0a4be128af2280da24de37e7b9d33479a59e338aebdc9f14dc34f40430c97bfe71761bdb79733fecd69481bfc268db7d9d02f9afe363a96696ce857c6fce3369c66db649a8ee4488f1cf797b518883003304c146a58e46d19aca66bfdd267084dbd248bbd442fe9f9370f29b3dfb812bd24ab5ef555ac80a2e32174dc8415a02ec20708b1135398e8dd6fad1e7d6a2945082a35d8f6fca129420d0ae1f6b87fabafc5df266505a11b78fba5dfd7384debbbddae06a47b112671dc2c8289ce61284838e0ff482fec9060287ad7fab6d6f71a13b8e96d208f4b9141e806deace4f23bf4ea263cbde833ea33d69ac40309c983eb8042d39b1d81635a0d90d08013dd47bff218a59f01cb3854a48110c563e8e95707b4eb7521d9912649f6ed3db2a47623c943f45bee2d20df77dffdc783203b12b2778f493d5a1fef1d13510b52f022d49fb8713c795e98323df822107cd293c09378e2400f044110044fe0e984229f84e2f8220e885e841251641064f7df917888348d2c95103d2a2ae82294f824144fa7d34d684a71ef4d9162420f5e53ea45a954ca944aa552a9548ad380b88150ecdef33caf092baac8428ad340981a51a12876216ad4b49498d24098e2c162329952a954e6f6d77d5f0ea8201e7144a769479c4e2793c9c4fd20840e5747e2eadeb76d5884a637e35e77211cc751bbc87de5e31af7bda663a8ffbe1fe998e8bf5fe9d8e6eae37f41b3300cb914fd23ff426fc67d61896e6e3084dd9be998c83b5de936de523deea078852803a1e87961ca348a9ef52c11277aa6543872224f2412894422f9a303a928be089581f1f4a2d3e94f28d49801d4e9743a9d4ea70cac40d2b51245f1347adecc4bbdd9467aa9977ab32e97dcc7719b2ea5a8c744c96ddfcf07a2d033157afecd24e3237ca0777f139a823a8e5bbd08d4fac1bdf822c7bdd938a6c26d0785df3f0e1d4293c02676511c226f241ea22662ebf1fdc7bd99e997606f960409a27cc08372c4ef2027a1e9cd1dd44285af5dad3533c4bc7efd0bc6eb743a994ca6fcf8db54e89edf53018eedd506f8955fbf8e79336d031cf336805ff97707a300a3d0ecbeb27d368063e013f805b21fd93df8844702fccadecceb3a2725dcf62f718226fa492f253feef9e018544026885e68c0b2dd628ca397d0f30ea202cb76d06e42cf1fa22214ad661c4a020ee54a545ab78db56cc8bd45d36dd0a478c8b925de6c6fac17b158da0d38801a5b146f6fc2efb7141f6a5cebc1ffde23a5e8ef48f3bf0d85e4986ce2eb8f73e8f61defc637bb6ea723d9f13cbef7a291dc3e3b85927a3ff2f0b6cfb7f16d65b729f744c74c5cf8f3c4073ef53bf41e813fad1fc3b1651cb9d97a10fc214116645b0f42a15ff9b9e9852da1141f79c84324a9c9bd6edb1a6e6b26791b10d573af7a8e336df047c75eaf0e76f01fcb3608be3a11a4defaa1faef55bc3516d13b20a00e48b3d1b1a9b276405be61de17d0088043dbf0a7afe0e2877413d7b331c23937af46f7ee6721c43a87ad3eb2e84aafca95252cf7ecdcf5c6e9e59d1897502c5174fe089059e44229148241281221608bec989a36afb714b85a8ed4d6fda46714c85a871d35a1c552293507cf041501485e273fffd0efab88d6ca11ef7d1ddb2e7e9d776c81e3c0bd2d21d92b98bb614a1c75b9efe079040e81750f8f9e47e4f44eee16bb275c4072ba29c45468451740ca3def47cf2ec49e696e8ed451a49c8f727890705bedf65f0b89013c88c6626e8e8751cb7e41bbffb7250821339238ddcebb814aaebaed0af57f746bec737bdc844764056c2d60fd39ffe64da426ee45fd8bd3ad75df1ea5bd73dcf642a4dcf917898362948117de352f46ffde3fbedf90eea220c84a974cbf6150eca3fd198fc4d987a4ce2d02561ea71d7642ba73e39d55ad39cb85a7362891bb0fc0ebd7a91af5e1453afe918e953af9178a4b84de8758df5b99b9b0c3dff9301e3989e84c44895f2dd2434bdd9f771efcdbc347d321a6d5f36b57ee21f69722cee47ee06b4bd5b50ffd0befd78dfe78de3f718cbb2ead3bf6fd63fd4f740de1b06f5cf9b7d6faebe4f14bf1d18f67deaf1f7e287483c4eaaffc8d573effdf40c647eb3fe4df97e7a06faa12283d04b3af81b08bac85d8514fd2a12f70ef4be7b6fb64d64ee22b2ff9bd96d7933b35955fdea47d26fdb7352e8b89bdc0ed29010f485a811fc912cfd8a34dfc4ac895d33a32d26879a99ed2687e6eeb70f7b9026ea4b56bcd6db55e8d8f76367760f3e6a1c73f67804b6de7111488e4422ee47a486227c14c9fd384a60f7f131f72309c4f72221be8fe3b810146082812568c7391607ef43fd877a8f34438efaceccabacabd001756ff776401d501892dd15dd4b0a4590c4bbb703ea804031e4d0ad03d2b16fd3ae06daad06d240dad555d0ae7675153410a7b96da503ea803a2cd0fcda94ccf9fc98a0b079a1aaf4bc5b261cfadeb78d6f6ee446911c13fdda4c2b6e9a38c7710ef5c290c7c7a15ce791bbd5af6d45c73abe6ddcb6711bb769dc6e39f077152349a5e78fd2f3f72121fc7ee3bbd5afdd7640dbca6e7715bbd531ee635bb7bb378ba003d22e37e39eb48080ff3df8b8ab4636b8026b4884df6faf2111ca3a6ea28a137d23bd274d086729fdf35ee749d12f42919ad53fe3631c46cd72241e28d4d6637c2174f0086c5d8749fb8a86e5ce7b91868edcd6a2503d508f6ab7cc9b8d9ce31bdf3e8f34df9b99f8cc6bbda8b50661d07a49bd687b0fcbf66f1f6259e8b71019921e867daf498c61283d1abdffbadfc8ee393377096cddf4a113b175142ac553add6cbefd0a21712972dd29bb5a2f8240328997e1847757c5b09676e4b0292a47f2bce64f7eff5672540ef89be9175ff7e07ed35646bf0022942d6f73de17382f544dd6642686e55b32cf7f886422149167ac9f77d1f6912b1752412bda49f4e5bdd534eeae9b72436750ad7eafe470752165288d19689d85c78ab433d12a186ee206fc6a15e949ca7b8a2457a0916ddef2a36a4c42548f4922e8a64f7a27a49d7ee76b314501c23ffcaa154c0312de4d817708cfbcc45d1b0cc2181b90e642e03f8955f4fc1f372e931c6317507556fea4e2afde9f1eac1c7aa2771a8f77bddab7e6da35de513b90d981c084c8e043d6bd7d45dd062e8f959e41099851c42ebaed0b120f49297e3f412bda4737c574922abaa8e8d55e8571ef9cecf625115a30e65116eefbdaa7faa32bf88631c0a34832618610c4530c215ac507eff611996020d982003179c618a2b64a1fcde84733014aee8dfe3ef3f55e7d0aedbf2876edb6f446c1d8904b6deba61fbefb7f15b3e5a3714d1b72f628bc0d6b78eebb821b4be71068cfffdb875deda46dedab4ab5d14a926a15f1986941e18fd7bd1a72181d1bbddbf9fa9a6e7e3a55dfbdcbdf675ff919b466a280edd17a47d5aefbeee3b528fae7b11472a21571ea0a51120aa4410dc7faf448920b86ffdd890ecbefdf79a04e47b8efbdc396ef6c0fd011f44ff549fbbea376e76fc2150440f22d455488460c74390b282ae21118e3a1e82141ae81f53aa5f50b82826ee0987ea576692840745bfb24fcf5d16a1e941094121347790e8e337e1f6b92377d06fdfa3b8e9f5eddb5ce0770dd531aee328f789cf89df739b94fda2129298fea1b3d5f7d764778586e53799505cd44e1aa891348d9b486074d4779f22451dd901f52044fd15e3934691f7f838f799b4a57ec74691b9731cf5233984469aff1d908e7557c4f4ce35f66ed4bba0128947b783b66c848edcd4bc99e9cd4cdbc6716ff684f07bce416179cc32fdc8cd87a263664e91b963fc7d1f115bdf9e7ba25f1c142b4629e7a0ac5ba65d8de39caa637984bf4ffdf6664cdf3492f38992fa2ff531e0e3adeecdbcf156c77f60fd32b5f7fe7b09e4cea59e2353fff148e5e77cf42bc82371908b212750213477aa712814d086e55013427307dd84df7b40497c330dc35de35a56f600d530dc51a570e5c2f3c8c714cba34c969966919b2503e9d715fa856e9fa88aa8c40a16358bdca91a110000404001931500003014128983c221911e2731983d14800b5ea2728668a18a84180b2a868821068800000000080008840102004f41fb1db47cab23682fbf2e3fff1df1ddf4f5c100f95dc7d91e07ad49ea2c3377a84a5d02ec6bb49952651dc4cac76da1b45a87044b691961a10f124fb550f9831e08bbb34c51f588fc3c818bb30cc19e1181e5dc072ff0af720baf4f9c5276f22cb4cac8e8525d0a6e099389e3af9ab10ed03389c82389b35c00c4c307c3e56b583ce823234c2ab29cf311f91eb1c0ffa7faff1f631eb9dbc4f77a4d468e825d085a05924758ed10bda3e485a47b89476a7e01938b24ce691c94f88f5841e091e15e06a8d5b9a8a432cc83421dd77eba43f9156fd8c2fa1b78285f990302ab8e0c032fa1509541c4820e4d3fc90191ed00760e11c5378c27c950d18da573c3d682434c46170e321845b8c8682bc9a586a125879a96269c64369a7493d92ac2c10c5b090e310c25f9e3bbc93ea971ceb4c5f7497d2ea663d96e7c9f7b3cdf55cfb3b77b75440c2831290b24caa8a4a9ecdba13045b6001c200e10e490e6f2cb410b40e0057748ca436939b4147f112b72fed5a1253aa9a05409112d30ff1f95282b0ec32d71c02a5d60e0c659de6de98207701003c3ee404891cd22d548423b0d6231dbf6356d54862a21b1064b0d3dd46ee3854f8da8bebced8b0676afdcf53e9f03b9abf94ee55900fb2640c92d31c7d53709898b80ab69c0089a41f13ee5016b2c8797a46d33bbe797f682af2f0c77d20f24dc3406dfbd5eb1b55ca9b9206103e765973463e4f0ff4058e08b840c21de421ca61c593c898d32c088cee19fac9f7fd68adec21896c32fc26f0599e3dba2125d9a61f4c75bb8e8500efa04f1ea8d982e9352a03aad12ea1c73e8b8801584382082a8ae89997aa584960aec0cbe372242cf840a4c81bb9b51a403eae7d0deefd88232a050c591a4a9cbe42b2acec2dd5c4a4a6ff3b8bb9649f60bc08e7ad28f1af26053cb2c13331e8a4d9ef405be444b5401112d6d130abd24abf1d244d237b057645ae9036e5d64ec8019c4104160f577a7e6d5c049501a6c7219958704976467896dba9a6b103167b669fc116888985e85115e2a593956eb3b505684d0d871383693489bc8e94cf4ef64f887a9fa490ed4986a5a4c70d25a7a30dfc9f7b6024499bf7a0bce23efc1b846c59a883bf0b10298e2bf6d335a16882a56398a8c626142d01936c59b7ff19fcb17ce2242b4c518bf48a8e63e1b06b88afedf9c95be2df54856c19e43f1261a5b72666960649abf18b3efcaca49c3b6ccd29f85c5cbe58008e595a1f7a72beb0552895c03960d3d2f0f8e40aa630a89d03e1c688e4b32e9978193b0ffa1e03089bae5f42d7925d1f8f9f05789e72cb989dfbfb93c8a29d416b1096ddf5f9e18b096a244bdf7452c2a44da79cea22399aca9c43344ff427a708e93d51c0d07c1c9a423c410bf535263682cd38a9c4cb33ac67d957d668c68d7d0da02c9c533dbe8cee75c4b4042232f1b7c33b237eadad52f1a9558f7f153eb3572568de140c6fec09fb0bd6c2255f460797888c33802049969cc45c51d9113c4c12b0af37dfcf0090d05c3e072bbd170b4b7d3a0a160a42e294c54b5d53d31b2a47715a1d4fb4d70b70de8def25c5046e8ff3b1c0262a1717864825c0c8b9bff5bde07479993e4492397d97c6f01fa2709f7278da98541e3846365ce3665d62b4df8e461f7ad71b1790e660224315852b7c57a67d229c0ec3c25b34dc08907d16b514c5efb947d230c3b14fa22af7f5094728e5639248a773e8b8c91326b3a39bf9baa0c19dfb90abbe1930272fbec8a07ba29f1a81c19ab18de6a5dbed968bcceaf68c3aa57f9a4afeb290a5297087f91ca92e2e3d440d105ef52dfe2c27355f0eeae2b79a3739fb46289e689f6f9307b3fa290eaa2575b65aa57badd68c4e748f3d7bd5a9009ab1c3777f1f0f4c6e6d269528671b0f5144972663d8c6c2ed7def9cec1371641cfaa58f9a32b5f0acc37d8d0287a78da7cd5d89d43e79258b4b6f1a903472867ac10c9b2d26627daeeff26efd5865dba58af9d017b8248a9777524c8503b7a913d962bc1593a23e690539e99cbca4feff0b676557d72366ec567a57fa817b880f5c1c2c49e3b919b756a4a68471b1a9f3c93f7b6d9d00566aa01770e36eb901ec911d5c84dd8dba3d65d6dfe693a0cfd6caff60ee6bcbf5054f30bce1fde102c7a73bbacb00a8a4ce76ae6a0d9fec8e543fbdd00810a07dd6b4e299d810980a8b39004a0d5571f3f5df14b66d9eb52c8bcb05eaca3d5b43af06aeae2f14df926ffe9f6c7d5ddf73e7621d4ed76e31bce5f3c805401320ecf4dee8ddba9c1855a5a2e0a98caed938b80575fcde8c76b0f9d5d088b27bd2b67274cd8c572f5b0be116f4f3506ebeab5e314122a73869b7dc85507792580fa55dce565fca9fe49d2d35f12eba21e527ddd9776d59f17ef2bd083c1e1205ff81e2b37b6ba02cac33a49d51a06ff68be253255e8c2dbdaef57c4957b61a624f2e5c6f8e3c08180a6297083179325c8c761cdc55fcce1db2fb46cc98a22bfb123d1561f9f733723bb03188cfc0f529d15f87ec54ba851b470662cbe04e2e1fb35aa48a3917777f49848193810ed8bce339ea0d0718b36c7c134d75155b354d17114503fd15b1839d0e7c93b7d01342d01fd21aa6516042a701bb8010885af00c18ea99852e12bedf42c593cf9ef43f46ae21795bd08e6a0fff232ba0dbdf892c7efce53ca4ed11e827f69cf363d189c86cf57330d4487811f4b22e24494674a879347a04ea6fb47a22b76dcec074c01b013828a59eb97c713af783bd3bdfbce1bddde8aa3f50ce59c65f85186e715b2008ee911634a2b75cdc62657546f2645d199db61cf7580fe43634d9d2d7023d25bd26720a1f209c9271043521f0bdbf0c5152061e58e492f813c1d2d5d06b59a4683d6b2bfece20e2e4025157a74622dc04a3c1102bcf13eea368b85d1db5d8bbeaf36c476b5517249cbc4fde33f3602d8536ac741e4fdd3ed250a92fe7a3005c8aac55090548f1a24159af3c430dd0e92b194788f8ef3ce772b843b4e82da180a70ed55a1cd089057c14118c343e504300356bb5929a7e8a7c0ba0c124693810cdb78088ab032c3a49c84ff5a81d004afbdd39809e0ecadd9d277761b3d639e9c94acc55542ecb2b060d7b25cf52c71de6f13aa49a609f94ba50c3af7377f2ba4ac6d2639f6d2179f4880a6fc5c990daef694509054a7df2d9af5740e324c25ed3241ae74f4cba058666fa74009a0e6b745d64d45c3575a94a2acd8006643596bc0dbb91c4066f351ec3790b7a0a1436d90674f8c04cea19fd92cea332098cdc7f8bace6bcf218ed3862e592b31bb103097d066faa8a25c790ac7e29560a3d65604e69aa9deabc7659b64a813bc26d84569ec45c0d8fbb2066fc30f30832d513d957959188b14045a80906ffe4430a1c29b8e161f239b61ea3af201ab8e43f136f1de29a3cd91b229cfc06fd0c318e405c617c7f99238fe624eb41d8b280f6175f1eb6e1c5caed16e53020146e999ecbf0b496e66021a4bc3a7e05ae56fc8defe8300ffc163524dd9661c932c2ed170ade62407ee016f9eb1ca12d418ae5968b911d360c156572fdda591f01105a0507ea59bd8be4bc0fb4657b600cb502d8c0cf7a748606b3f2cce96840cb667b08556bcaba2c9590a10adf959e1292e31a9efbbfde9df459375639eab87987c4c6a28aaedcb7ad2e0b662e47b36fc4d07c0bd9f2c16b5d0013c405c4108da0cd21ce1287439b6421fc972f3ea460368ee62974fb09f9a29dbd2665581c0d2c32c33600c0a30cedc5ebe48880f16bf76d4798cb1bbe6e054a9c0bb024dcdbbcdbf1db7218ee42b10659ec19b1946e2ec1ace7e51d453949ef5679d3abeb90d4bec59172e3678a607ab0b4041103f7cc0a058eb23bf2b002171192a991b5f769eb315681d4a37085ce21d6bd2f74d1f4c7b036b48d97a8b53be44f21e8bdf6077323b28441875630d606618c65a8eefed0b2480134b43d20198531283fa47b7ffda650c5ef5a388d06900de2000bf639897bc6dd4da9ed468ee315ca92d4d285f5ebf03b8867889373e252e895c6bdbda3b3d760e69f1cb9e36a248d4bed03a3acf3a7d5234309d1e5f158c64491386f0b1a54fbf8cfc3122d22db8b394fc24d5966f845ecb820edc5d5edf3a93c8815961af8de2387fe11b369b72c2387041907b9143d3330ab8e9aa54e04d13638715162d9af0816d0fd2fe1efc59df13e64b2a45588dec40699d39a4c110d98c6fa86bab16d5d3b85ab9e57304e9d57a4269bfc360d51ee922ac6e46939eeae6ee92e039a8b0649b07d2b64354f52fe8edcc5dc8d5a27280eae196c477faf152bc3449d2c2814ac6de4cf31afe1524510119a0f6cd6f504d65542ab0247df041c88953a37aefb6f85a8a561e89920f0dfdaf26a1ba7bb17bf29a5c024992d914c05ac41e09175872798796764fc44064df501a62e3ccc89fa688b6bea021ee4997180228f37054d942492329f045e4c3af691255fc4920f4c32c4db54c848548cd2ef6636216e8b8984cf483e71d5d5ac63ae0c3d604b164387ba785b1a97ef2b2cdb5a8353e7125efc2f90fa6fc8cb0cb1154a4653aaf4092d209eee4cd470b8b624235d4778991e4516e3d54f044ba95603f96e12ea600ab448e65ad2fb0fa57a15c91c351644c108c3a2c1d2cf502b4d2e55c94825086e5ac3175268904825ba17b61ffd58f410d91b7bbb6b9af24a7ac56118564e087143508d51ebb9b56d05a30d8092e87f8cbbb4958262d9070117d05187e4f5159a05f56584efe1df1de541be845c6c4e818290dc48b0b8c465ad6db7c15b58d729470f1f367028a726eb1089141dbdffe7446c78a44ea7290ef4ce1a594f2775f43c57ac4a70f4cfab31ed1803ccd0a5753f28b93ff18b90e28fd570a55b2485a11cfd9edc7a80b0c2f8b9e0ad5f618b8d4f621d980a2c442ccf0807de594be6eb3e120d73b7cbc036a49a72ce6a352ac33656c2c692c2c8040982d2dbbf1eb4415472d6efcac5aa78935100f7df39b3e10eefbab95fbdfc966adf9b64da2f53a84c44b344279856600407ae96c1bd2d0d4b19f59034e8a5898c46570efcb84e2b0c79bf5ba5d1d645cc51d72382b44f9e30c0e24f178f83bfc8d7fae20c8906ef2e954738cc195668bf2714733d20c902a4a2321671324aa8307690d9b4d3ebf7b2daba826f44957124e802c5e9a457b158b9e6cc6ca0e351aa94dc44f6ca4b7042331f2ebd315544d835b5e59af3aa0f24276212b6df498c62d6552790c968ced248bd79de4632e66f8f1d94a52ccb4f418f8009fbeb6c2e62b140a6c1b7307448d6433e9680dd5654a3f51ccd080a427627f61d15fa408902031220289431f28fb4017feabacb614a3252e97ab463d5926e3b158e60f92aaa3b7f4249c6c5bdcaa059bf38e6e686ba3b057faf36c4b7883667d2b434fec8b007133e4a320730e2f4214d41444ddf6a2ea51a15420cda43cd9dc1cfc73a458100d1c2eeee6f138a711cb51bbb7078971145ed40b017ef6f3811749448265136f58d581f7e6ab48bfa4e48396fac150f6b5b0317c54b5879db46108ed08d26c19a38baab982d42c66a2a8981ccefa0c1127d76ba762e58c441a08fc76e0592fc5c479e06064c1898778ec8a5f18e5478fcfc8d79a321ad59fc123b0c6c873338cb0580e42c245980cf9a710d65c1a289130f989c37fb42c7b9f809cd3e51b110ae8a930022d2ad587fb0465556c6c2886e0a5779157b1089e8e02ed9fb65e198165accd215c41e75aee47ccb43c7566a0a4c60162c0a56212730f3654cbcbd25645936be23372e014b3e1d16c71c19573975cbf9302fb6713fcfd939acb4fd01fa4725a1e007e5abccc321c690c4f66f29bb0ab5213f9b7f08bf59c368f5fa0f283dc70f06b0b1ef9d3f9b45ae49da8fa74eea463f6446cffff30e2e733284cf10750ec6a9da3605fe2caa18486461a08e97b8b4b64059196593096f0895e0f8dde4509b3497e984addc0d45b551e9dca2d089f09668c582ce1c20001c16a381d130b1181a417848a6bc29adf0fead516445d8b872da33070aaeb21f59dbdcede070459267afe059bcd281724ce5fbbc94d4d41815d39f36659254aad82d09ee38d76b64ad7c451cc25267f1ef31259641c9655b93640eee2c781c00b18312faff8a6d0c087ea001df0fe98af449b5e0c530e5380ea56ef73c83ce5dcca8c6ea585dd0b76efe40235df1ae2b1e6d08329fa8a9d4f1aad00e5cfee44c861b4024591745d5d089e92abf3d023af21ad2780634c2f96beb40533937cb226e920a58bd22b0ab01bc4c2d9296ecf6510903565163c13a2ca3976c874c9b082a44a534ad31334e21e7c0e2fa5dd98736c66c524258da5658b8f0d089b40894f2b7bd1711326a1f4637cac457e0c08c7235234070bbbabcb81ff72ca45f842ba5df5ccbb19d96837d5f65220422627ff5febec2fa277bb5bb47618cee250918aba873cc1e21c136906b9335c09cee1506c50128fe63bfce1d3d64f1ed7b3ace9abe51375cd19f1a34ccda2bb631a9a732174ecc999483b298f76777ec865c5999f5451927e03de46934729c9d519da1443636576193a4a44a8bd04d8863959af30c44038b5e646509ecc9111d0c07aea4637bfa6e2d04b98861a354875adab9a0ba890adf0cbc87d69043dd8535dfe04c046729c8b340765da55362e0d7d8d9da5d56140ec3041f9708e0d699b39010e31e381cf1282c7b318059baf1779f3bc73f842b4961f0b3f49415e6c8b67e1030f6dbcd1a2961a2f1bfafc9dc49b38972d1c3fe250bf5727dd21535f289122c56e9eb4bbb8af6d01cc10d1e371b2c78392b8fe7f8817edbf2f9df2ae6351b8b303639fbc4fcbaab35ef67c233e99fc6a3fa9ea9bc07f9f409763c6079d300f8ba0a8ec87a5a721a399200a53775322fe84e5cb2f61c1875d0bc35c5455599cb0429cdc8ff1bbedc31affc4531db42fc4106634da1986242957f64af7706ab344745d424196e3df46dad234bd45f369d7e2462d3d293ab9e4e0425af181767df7fa0f6622c49e8218986086b78957898ad9b201531adc100534800a646abb952d97fbdeb49850c356941e2d3936744bf077d8a0ed70a4fb19ce3d5f776ec872e8394780a350fe5a3e2c12b721492b00322213311160f983ee2cfbaee3ce9e23feda4b370e96fe15378918f42f7327895633c4cc8f042b07d10c0d4723aa25fbc6c937afced1cedd49ff1c0021eb3f574bec72a781a9ec01b35959d6fdd1dfdfbbc8896d366dd6718ddbdb41431dc8c746a349b68e58dbaed53b0ce570e367da02b6fd001da98365cf95d550da0cb13a9a90ca87a4a1df976555602b1f298d25555a09ed71e2733a7d360d463dfca969981dcd133e1a99f08614ff83b5fb819d51ab486c3e5279d737d00a1ebf5fc1750e57269d54fda28320469a6c973857ad6939f4046755fbf0bf3dd8f100cb6e1b7874b93717f67217d52b01c7a07f189f9a522185b766a94d6060c547f4ead4d341310c43d8394f67345d6340eaff8d6cae0095e98555e631d153572fb4ce65970d9b5c738c5aa88385781648d84b4dd1f69a5b70c5cd4530a0e369369e16549db56d8b5d88a8dba0dcb1d66449e67893542693f938348becfc6618fd56a4b25128d53aebd007c6ea18d05b55386f8a9bfdd5f4b249ede7d0a956441edd815ef40eb04fdaa8f17125bff0ced02e6a47cdacee7a8a402c792abe32f0b768d4e030810ca8aca5d8601186accc0b326a40e1bbfb722f5303b763392beb195697f09ee8a196fdd989d1d32c60129e200bb6d03181f933f25165b5e1b9a90bc4c9ad947400a013108e6d3b661102248b4a71f3f4fc7a86efdec0baf675b17237375332e8e5a5e86fa1db296a3945838d7cdcb1893980a0335375ba8a17ea9b72f1235000c761ea13839ed2cd80de3120434e257ff11ec3fc4628b91301647b1f68303586379ee4e7c810e41bf149b1235915e0788105e84541f1c8da92a8656d30b096e741a00681c1e706f21a3e25922617e921d1c1f184a6df6408a03c64d16e5971f6cbe41002533aa56b987d23964866c653a0c5811e76ac16bbf1420fa073baed347ba8de4cfedd3eb98cea136f3135badbdd4792430eb1eb61c057a9008650f101162ca69290018a5b2c74ab235772638aae9eafb93130266af558385808c7fe67d0b43c4e9ed9476dbc1f48996180d43d077dab506c921a0b2655593b832d9fa0f398a994fd6dc4b0bdc04b5be23481867c36aecfbce64ef8d29614f726bade2b55a50171b0370f99b4ec679b4acbd5c42e34e6526c0749545fe8e7a9dd79ad2d9cf50a69cfcd44fa74914e2878a9e4f2d47a9c005b7accdfbb252a372962c7f440873a20378a671df9e2329daca75a7708e90c6312c8362316ba1b6104f615ff0ae4720dc55a2736c724003dc403da4c2d141b24e50de22255e7f38e8819300b6e00b9af967ffef28843ae91495109dea0b6934ab9bb681df8030b774bfb89ef463dbac7b728361df295a0de8f0f152433a0ea213914b1db9368900e903a9d921c4f4d704fbdc302938208f4c081b97d8505b1e88eb13ff9eabedd2fc339401088f783a0c1d7b65108e09a61d70f487969f288fb5620629943f39bca97d31bb13fd7dd96e0ef2e785190a12a724d09ac8c4bbc8978a65cd9e2ea6d370c41148af6741475239c65d706a03a024a4789cee50e52173692cd8530a24c96cc57d9b9eacbfd1c32ba36983028a5a01419d6452bfe9770de7cd5d7b158c0a5a242d83eee7190b767e1b95de18eef09cf0a66e12eea91e2dab8a2b390de189b990714945b055d8cda7d1a8766796d1981fee45fabf09e07286d404ce91e8446ca0a35a14fb968cfe5514896963248448973cbb8542498870b4d3ce2c5af366f8a7c4de7c1e829f75245b2eabf836dd688f8ccbbbc85581d74ad81d872c21172bd56fc660aa08a5f9f65b100a93ad5e669d4bc6e6c66706a3b135942acbc51373f5c33873f0630c4984bb8a39a8c13e219a72c4c7f2383a5b3181463e562875940851bdb0b9abbc4932afa881789a57e2cbcc219e166315d6b6657f3ba7101b917edfe22016421597e1e4bba707ad3e46f517195c7f1de32fcf4cfe5ad5f2c54cc648c85d220890d651e01958f2df9e2dadf7219f416e46e010bee9053bb45619b2d7613a3cd0f73dc3acc80874f22a46513ed97330684f1a4dc52b30c688b80d7e41a1311e902dba3627e2708aba04d0c4da1ff9cb3889e4808eafa04b3df628c84c584fcac765312b44253909a257af68c736fb80d17c241dce29158b0f31d285776855e44943b86292b8fdeb5857d5c09ad4e5318479bef980a6310fbd04d42aedc549514a0df992b8f1c3855b5f74b89d15ee70bdd57a08ab3c0f5d1c9ed6c004d376931bcd9b4c82d9e036660ba08a06b1520abb90f3fde617629ecda15a0ca72787e65e93ec835cb0ccdf7717294971dcb06af30f916e34cd580551eb995f7d331dfea25c7d8d681495269f8a628e7cf3d869bb4d32a71f4c7ff9074f51298986bd1a19d9c22159cb051479f78076c52209e3d7e3ac9fb4600b2a6a403a8b8efa7a27ae9e7733e207e423abe1620e6a1a025e7928a6fef6ff9371944b14f14454e5493f0df19c9611233686e10a0057cbd8c6f303565d74a924a015137039ad68c14476667ddd542d02b51b72641ba2439101b57542fea58699a742e81db4dce01dbde71c7ad2e34f1d8dcde8bedbcb6ffa1cdd2dfce0eb5b252776fb363a05152e6b537072e2422a39a245346e38034734de230dac25710354ccf8daf27358d630b149969e1fb59356fa7ae82b3840b3fa4d00e0c64955082b0bf218089aebfc989b9e741415b6ca0b1d545e0a9fd032d8a00849cbafa0d3053dcd4ca57a0930b0a48c7b687fe06fb8a9a68f2140cd36a75785f1413fa4c0b679ec998cf5c0294e8766cc8e378470a00e95e523ac3f3148eec3cd552d2a68825508b8980a7512099d260cc47464a4cfef66b6ecf63628b6022534b13b5b6d3a3b484b564b719c6661e4410c4100e39a6f0724e0d8399a8b966e75128b66a26015bcea4dffc0e3dcb02a63e02398069acd9f1b734508337fd17ab420e464b28c4aa6bd28ef8e6745accb34551eccec073b3faf626cf9213ca09dc226f4d4cdd5b20f9b3494eb50f31f1af00de53d48d6a3f1087696ee254c1dcaa1f4f439126e4cd143e6054aa4ff41243a40da72f5256b0fbcc20f022d72a09262404816c42e1939bcc3d92b7a60627047fede7dbcf85b1ae9669e6f81949600910afa13ae0b5f86e20122dfbfe0a31ab07da0eb389991ee2bd3746b300a6b55602c7beb46048ce684e0d40f6101706a7d1324992806badc905acc3652ea31887900b0c16f90bed422cce2f6a3ffe0d85803321802c6418e90f126204dad378632f6e43fc183a07db372af0d7a7001ea23a7089ee3fbd550ebc3664a71910e0c40b695a15b23628993163c517cb56d1585867dcc7ba3d28074b1b35844eade7004abecab458e30061f3371b5efb732581c1047b75b93574292b89eaad0bfa18a773b45463e2fb4acbb75f3ba243002316d3cd0ab77706f3927f58082906da0a40f4f79fdd44f7ac96a47024b0770960c03af98923f333e86db9259a6fcb0adf8ce75a9ba0d43ec9b1d7c9fffad95693a377c0999fc3596b1dbfd7b700caadb253e4ef65fc3442d71b21772d817643e834817a3fc10c1a7c606189fc69b0fcb71b03b3468f28ebf32e1f2e68e64243ff337bd0200a61a79257ca97bcf9510f561cf85c6ddc7b471277cd1aef5024e4c006fac74ed3c5444e6d176c8c39f7280a223c5ed2b4630d2423e5be4ca8e98c21384d809e95cdf2835debe6ed3c7fe479488c04323d1b615e5cddd8e02768082d9b96f16b1819dd9309f63c02b08aac18aa6e83520470b06e79de8a5b4212c8c7e745548bad2b043f0a201c67a1ff1d66c1883cf4ed3983632801cad64409a91653bf9227557882a8185a23f830a3b470ac39010d53e669087ed809a96bb8f46fa9da5acb0713da553b513c54aeeab0458e1a94a623313384f920c257af5f5a4c2ada888f702ac14aa85e997660a4150c680d5e5c447eedcdea3bbca5fa14c26d0dab87f1521f691889396cfc0ed1e08d38eae2f6c2fd2fc22db53277130873906444c0763f570dc1d8569173563a02581481b6ceddda5f750c2acd36b6816821b5071618a3e64023001ba324c768cf4ae239c1d169ae03a0d1463d554bcf2064bb18587581edeca991406a29c96a12ada2452037520cb22a0ecb9c646599f35572b508fc33344b866ef4aa979d648cc594b63f1317cea13da51a4171afd2910ac45b0039a07611af5376f0887a3a9c75e1ca5f119e445feb9ad28aab4c1d2536a664be892aa3d5c2b3188737faf5a80aeb2f8468a78957b2a44cbd6670d698a1f6308bdcdd8a6d26981a6bd455e506605ed56836bab8519302b8e38474a003ea0067770039d0781842927a0ec758f5966508180050b02320a30a48766e8140d62e5591267847d9674f0b4296cd9e8bb7f50282e1597cca1edf234f3a81983d59508d46829952d763e04cbb3446a287653463f9b16bb3d8f771338a9ddb25219754c9224f839ebfe6c19ee2c3e8c0d95b306d58aa283fd175e460a5607f16d75dfb478e79b14b4e5ebeaf52f3501cfda32abb60686de1e542634c4fcdc8c7fe5db45f4702fe117f29c2ccecc9d0363d42ed2d37324e5adfbc8cc405286e9c49852eced89a43042acf9cedb71f1d159be9f171802baed69df874bac26d4a84a40b206456749791f538cff0b088681ece371dc08ea90b2cf8ca5c0c7087f8e5ccc6e0a119783c17fd4f1cc7a4bc72274de6e70848506e8eb69a66c454b13d2815ca12649d9983404fefb1b213d09f576108d4d121998bdd978b053fb68f3f7c4ea970a93c1b338d9344f025c1b94925f4d6b11b548d2d9e70ccaccd9e083f58ad15c4a097a0acf6dcec86a2d5ccd538668195a1d92fb130d463da63f0a63fb1870976faa3c12f81ce257ed54addd2aaef0a7a80d9c9f07cafe8660ea002f79ccc62a0fa50e5e582b48ce04c3db2f9730410c605c9b0b238ade0c674a85d630437184875059f93dcea599dafdb6eccade5f37067aa46a93ab9977194b600afaa9235addf2254341de4eac4232d0b83119af598d5dd1551c47c3011711e9b33e8c058a903bf6df5d6f05b62bf2fe57ec4c134f1a5860eedeadfbda9f8ff04b9fba6026d0bc7004109af7874744651ceaea492a4da5d56998b5bf8a9a85d823955fe66d20874945f3420b7330341292eedd14a27c7b6b2b64164589e0afd4fc2b1e58aaa5f7e456d683e90a95f3a20d964e6b3592ee7e125d9292b7d776dcb76b3f51df053800dfe340d467995d065bcbeaa90286260140e623210b4ce8cd44869e1f00c725c8fe9626f2a97fd402e7b346ab440f4fec702cf54d8db20088a51b36d2220ffc2cadbb98c638e27852400ee7e8c1c19390b38fbbc730aa0ee5290a8950b0fa308c95a481fd4e2a3c4bc51b19030494800761639463f91c24fe871dacf3ae1a02d23cfc1258dee01427adbff1268bbba3d2315837bed3ffa5689e231f8d870b5c0e880618450c3c5f4871092ac4612b990bc99b01b39aa0e934b08ffd1a8ac45674620675c3e837a67a03d705f857b5342689f725332608de6ea7c00abac7c8f46dd3dc6bfb2878570768a1ef343f442d117af66f491728bf1da8fe63ea12109e8f98cfc321a2ed13ed328ba51140dfd9863b91edd066910e32f7b0ea2d87849af8f8d0841ea0597098084a9206b1a879453359fc580a0d47d61a9dda724576b4af6afda1587f4e6d81422355a3813b2a7571222f57da694a5958428ebe13f304207801a0e9b94ac16a9c1d16d5541be3d2c50284df7ad546ffa205d74a0422cf691a6a450f17938a3ec5400daeb577dd0c9225dc2ae8f912fb28c4c892119b8ed2cb29572cfa0de693a196a0089331d2a6cc34e87a695c8877b2bfc52e73f3194dbafd1064612a929d546a085578617705dfb03237610a8f160bc027064b9d46f126186a63e586319231f3b95eebfb35d2e95fef786d24aa08ccdd0df62379a7d562d7e54b703fee724947a1270070ae55af608446d8d24b958cc69440cbd31621761e0bb805a62b595f5efe8fab0bfa375a5e8a543d50f86f4878e501ea64dafd7a7d0e2118077a1d0f2ba06d49b3fe642352d201f2de8b85ebd91b18d99468fc325a4b9183c0ebd9c024c16fa4d7fc61c81b487f9332758a3459ce3cfbc9999fbaa28f381edf55e741ef602a863aa60fb7358ad0316a73fd31cf567fa52fc73e233b0fc350acf80bfc1e8a426c921c8d716e831f6e69f39c94d00b1b92a6dfd3307ec9f19154820af62ff756a40486401c437ff191e45fd67ac17bb30c4e6893ad316005293fd191e4a743cdd9f3932de9f99387c23300affcce5a8aa9bed0f2cb35612d2fe4cf378fce26926d218c5300f3af7087bba16458957d26ea5a843c837b4acc3f7c37f4fcf3de3b9e538a46ab7964dca475c1f82c012c8aa7f1b40d1812a9a5529c8815045f00b3d576e2c3914ca7b3f080e93a34a268a59d65404b1dbd53857860dc986052fc90a30fa440880d9914429939e63ef9cae501b86b702098be42ec35fdcd9ef1c83ed1916bf240c43b471f2fd24cf3ae4974c070c158b404a93ffe38e59c40fc12e1e8582590f35437313f201537c5997d67edce54fa1e477563c7cacbd9b0dffe31f7a030fff3c8d43fc89cbc4ac2beaaa2fb7c512a1788185f9c5c23024cc675579405fba4a7c77fbe970502d9a8144330af1f7b353fc0095c51c080787ce17a5dff9700086623dce72e75e5b414d4707c65067e7195cce1f95e86939ad498a773699c1c2dca88c9ecadb24e9b8b3b30c2fe68e4af4b5bc6692c69d9bcd60716ed4474fe56d937ce8fc3903173947ada0e55656f5c793483dee2cef5fa6bbfb549b2ddc8d17064ae856fc7ece556a29b0671af254097d65cc01d112a67f77d8a8d01c3410db6e1a1d1034b78d7060904136d46ed69fc8abdd8ee0d8af84caf77974fb6507eedd7501a682d18f6f1693aa3fde4d41c75ee985f2d57936a706521ccd8476463f3b3c2cdc07284441bbcae1aa4d885903818765d7c1f226a089d524d4ea9eb663173219fc6a48b4fbd1fcd3249c045cb9880ebef8933292fd1b3eb5ab118f4df22152bce56105dd14da876be99e1457551424cdce9b671d916bfd4efb9c9f5f56b27f0e2be92412d0ad4a151af52930e14e9fd80a91cdc291bd9ad98f560e077435cbae831392fa363fd270b815fe6d9bbfc7257eb50cfb626c7b37bf80ef6fb0fc99dff3d6c26bc36d8bb21aab9e4eb9f05d52fe789a2f26f4b9769723da05d16b73be155a732a805fd68e9770a0c9a9f5dadd40ec5cb880536ba1419020f46114c01d0ab19b340f67499737bf1a724a1577433d46dea861f8bf26b56135ff5cd2a6a634d7d866e639db2ba666dac65ed3abef1bcadb1257ee2da1d2679b04b5bfcc7a826d64c965cada520b92b385ce79e100b540f49c925d998bd6e40cca39bfc44956b5e1bdfa0962a2fc33a27a9a393f92a0e6f46b778b45dd31fb5cff0b135d3a5439deddc2315f67318581e6913ac3683d9aae9d325e68fb7bd1b9b5f8d988fafcab2f86028e3a9ffc29fd25a4ade43e81bed3f9247ecfb098820133cef9bcd7c1514320574b467bb35898183f21da07310b248c9cd3bfe26da181b1fe04d39845a488a4a95bf0119decda2274753512e9d77d9d7b616c969ca628729b2541a501ae7c64ec844afdabcc003aec659af05eeaa04a76bdbb16dd8ec99365cb4180d587d9aa40a02d5a20d9858c461c09fb8c6595e12264a74c186e50979289c20a2e01e95de59651c8f331456425e1d68d07252bcb9b205725667a36301e4c0eba0b28d79165b7e77e665720790395f2cb93b3cc7b92a9e4ed5fc852ffc89a130e18ed19c9ae786286ee3a11fc583dc73633d747ee16c240730574fdde9873a46a0632904a26ee601f13d918e506e174e1598a2edeed2f277793b8ef1a3e599df3fba6f73865171338254ca93b091b4e82388b996a128a2023de17406d7d8c027e626612fd4936f206217508557938b2b96917824953317a0ca6e17d1fb9738d59af82838616641d589b52475120db1b902e5afafb87b9723f346a9816873473d02650f8823b89dc257cb25914958df558ab9a0cbc16e31b0fa09fc8833911c7635067f5788d5542ff6aa1d56d03b45e9e45a068615fe2cf811123d2a9a85a572ca60ba53eb4e967435736e5698f359628e662957b6185388ed7203a8c1c5bdecb2632d7887ac2a69234126c0d1d79f8fc4a3e62b0d69e3287b71c0d5a1ada1644b79245a09bc8e81394ed9a4f2fbd4d1b69923905c2fe33bccad4d779ad6c07777943bfdf3ab048315a0c43dc62354091037ce7dfd87b5c41a9c844910b6803a2e368d52bb9f0b2396b40f46217b0ea2fbdcb3a9e37e5053432ad38e9862a46e6820646c8af6f17837d7bde6f9cadf7701db58a46b2750f63b2748de94519fb7c29826f693d2080349b40538fd54e66c2b57c26e5a7dd0f365c8eb98961b0ef10c287cf355cd0f3ce8a506c04ac5cc0e6b993a20de32467e2453b8a228d447062e78102971d05fe89b7e3e8ea6f5a9648ae4ea3e15ba27d0a49c4d65a3dc6f328881dc7321e1b0dd336c8974b6ce4762087a61b29f203c4057b4ab5e52274762b828f1f594b8b612c84cfcca36f72062804b8b763a93326d96d1b6d20ad8de298282929cbb0be371cdc1d58e35d0fa68a42190117641b1680cd1f0afdaa995c8021865c2251058c28196f524c753e5f19aac25543dc447d15b08bf5e4df60ef4b422d16d44b2239fd930c3d26a90545992e061f50b90ab9d9a577d4925bb29f298a8fdd4fc5d1314cb73e8987238a6cd6212c33ed232164f78169ee07537797470c09a011280e13c2386fe817f5fb78a1a5fc26f6548ae0ba7aa323eabf0b652b9db91c10c5629fc5640d7df647ec9c5eb1ccf4811983157d31b77a0704cf4cb0a1aa7dae98f04c66756cf4a5ad049f232006b63bbc490e426e2d22b801b2a44598b7dface3e0648340cf068bda84dba93cb106cfa4d7dbb2c888051c48d99277e6ac7244830c5760652c4de96e44416f1b84d84044ba753748e172409dbab5211454e3d18d92bbe6d6b80a6c8619c9c55cf7d8ba37f78612bc71ebc2e955fa80e9a49402d014a91f485477b6f67d8f27658826383cfeb7b9147c4dd37c3e60f7ec52788201acebdb2f198e07a18e77a841333869a7a02754d5c53d0e15aa4af4f27d56fac11ec230a760dfd646a2b6c4416f2d1def6953077e22ebbcaca98331403f31390a78ec016bb1a0c4e8647fdd234aff185ea9593352f30585371577234ca74047afacb5e1a9bd009c969dc60e3656d65c57f6c55a3c71c7293e5995bc4106d12510914e9bd2c3d796a0db17d3b48db28b6c988cbea8927fedb44f138fc51bf0914aaf25e22129959c3290460c0fa74c051f3a69ad92ab4b2a9c3123257ff0f5e8575d972168653521a60b792df294cc1e52a825f04468d42755510650223976964079122b5570abef7239170155555cb3a82c783f3eac3ea5506502d5d97fb578b2fad72f632d51472759a6a7da5a189182829537503fea88249d699ef6911c07123177a093c6ca16ae90668a0f9f509eb87a5009a251d371133518f87fe07217403aa9c1e31c5b594649f17d0f369a7a88b101b40e024888093240bf5d038804c8085ce81ecc0248425a0001c6e4881ad94c0ce3538ceb3b963a885356903c84db69ff048a5848e20b480338e8761db29114c8cab2f5a4aa70bf22581f34b554959eaeb0c6a698e722ccd32ff8692f6a210d83dc4b44bcfde7571ad0488af93088831c5e695020a1371663161d01debbdff240465a167d0b4355ea2c9d02317c1d450a1a87cdcd21459959531e128f03b640762c77e93b522e10bf36f5566c2029999d40be2ab12b690d39199adf525d71e6fecf2e8e2cc95178610db777e8754294ede3f72e2b3b2c3f129c69c5b61aa99180534c0aa9054c5d5b2066e5cb89001b0a942f338006d52ba4d72af0a3094954105d99cf89085a0ea91a93452c92893d95bac84a7cf885a168e7767dc67ddd4057bed172a2f0855c58b4b6a306435ab558515076be4f53f5fd6aeb61d9d03b79b29bafd2e5400a664423a941f26ff70a5a829c08115ffbd34228bce0b3207b14caf05fc8f99c14d2067111ceaf4786d64d44625511a250a720654ca63582049d48482b4903d407b2be1e29cde2db40730c0f1a7443b33ee3b4dd11daf33d12da6f2c81939f1c3e573f3beafd333133eb17679286cfe2902554983b6a1439a2f1291fcbb0538c4816ecb05810222680b20a5419b284a844e270b5556169e015e65192d883e82f4f096a9afcc7698f30b61e879775e4bf084036da557b44a76540a3ae1cf63a378a1dca2a044e5756ceb64b1f1708c17a17f5e0cd3dad8765aef88a14ace3cdf963a8b13c2547a20e8a1f0fc63d2108e141d9b498de4f8520143ba70029276e5876f9433a315db1c75063231d589120a8b46ad6031326a56cfb5e809cc98768127d9a24c318e9404ee41b38e9258eb6c1e3b5107137ffcf9778870bbbffcb5088a53bd403657caf3d1faadbbb38968f7047433c09b4bde3ff4c19e93d588b0ec918a085e4a302b47c04ad80ed1eae2493468984983c2728a9dfde861ec1515237d5487c8e63a97d66e4247eab51924d945984bc10d6329dd248a939b7779bffc848a63c979162ad48a9896983f4c157c9d309f71ee65ddf51610fb917f4d87f3ac72c39902e3cf09276c1cc6be898e01920fd57ff11cf7e025f9bce68a73be94551d2e09a2ae9abfe0d20706f58e7f6092a94ff8da3cf14b8ff53494984903af7cbd39966f19a11d8c5cc8ffb0950170cfbefc63167baf7389685b631522ebfd57d3979356695dbf3bb195fcb37f7f745c8c48bd168cafa23ec2a1847a14089b89f4375c0c4dd479cf0f3acbfba3c38e58008fc79757dafa7c41210c3b1ac040c60604a4021d145919eb0caed1eede18e2703dd90f6eae3dc01963b3fd4a60201be0408d3daa1f1558af65a8ece4e7e6e2e93ff89192d07c2e843299c9b6db6bf28a6f4be9061e565138cce8c08a331884de42d651d91e241c352b82f59a36988afc174a5aaee98614faa4b924081e67ed1c77a9e540232decb94a9e965949226609f59ee3097e89f80d0e0b781c8d28fb34c317c6aa8c158b5f58805d6ce29225d83410f054eaca3a7f56a18ac21bbbae1a8bfffe47028f8db9816cc7b9e9ec506f6fd02851a8b2637508a84275b52f8c94683d1c531388ae2581228093c740d3e6f01eadff717160f91ea07a569fb5f4835633ba87d6271cb07a0dccc95d233dde1e4e7e5a5cd17d14dfcc079ab4c37da02e5478e0ba09a260fc038c3bc11e1b7c720b8f60f24fd7cda9d91bbb1b3be84ef6cb07e969e9989ffe28e9feb21e591074c0fca85cefec4685dea6ba9768023811710de0dee0c4780d89d70086e465d4b91bba6453f23a6858d5179b96792c5805a372a62919af8849af938d4059bc62013d59b1d0ce0e0d67145e9a8dfb0efe2c2c8dd99aabceeea23beebb9ec4ef729234cc829545bb01bac27f8d1bb99b2315d471420731f77a0bba7afe70eb323cf1a2d6d4707deac4768b2cc5e1da6389cc723a5fda071c6db53c02b9fe6cd8ec04bc52040c71a077353f78fc6098add236780514068724237dba287be7b687f59083ea75c3de774b0a3e7f027999b71035deac90df15a0115e9a204765b167bf212ce65c0a6af0855c142560a733bc231a2848fc10472511154d92682e13a7f98858226c9fd8abc73e90723af8ec4411f5d9191f33598da255f34a28fc6ea0b80843c3e1708736c5f4a3f66f0f3bf6723037f82476c5a5cee18a025c7b2677f07128c8be567829a432092a87bd2fcdf5dd807fdcd8ad2216f3b0d8493821962eb1f885e456ce46716d94b69ae0601a15aea8b54b3721145886e7730ed1d477c39ff205864bf99d92df4a153bfc5e10f90149fc8c4ed726bb78baf0c2e711492f15edb4d42673cbc083f4234d84cdbe3e3acc69a1d623d68cebd05f1d81116bd63588f0002b4010a4c827d1fdef0d5973c23d0f77bd8709d3128c00f58da85375f695e22e27d271810d1616b1bfbdfbafd1b117df50a73ea54ca5c4fb84f81ef8ab46976e4e850976005e6c97b0049003e8758543698cf83af7a04ff62befc03ed108ca84d7330de31fd0afb561c16ba3aaf5844db56031354a12843c8a49ac37ac3c88004245f4b45df78d747bdc151671e1c0910a5a66c403eb5f8966fd928b05dfcbeba010fbca5480e00f275c174588aef820a97e0d8fa1ca74554b85c6608ef85f78ea81573763ae0fdfb4aa63459083c8e5605dd3063092b7df9e368ee80b6d5e06524e477cdd051cd2b3b450ebd368510efbc476629920daea9e55670ba32017a2882cf895ed9a167104ccda5a095d686f19d34171fefe3c05ea7220640f315bb5d587f258bc011afc278881186233f0a90eb3658bd5625665e5b69080d19728c84ada117e42af4aba51c49968632061c062a61619c3fe51c0ee59946c042513149ce94decfab11af5d039ccd6403a10ecc80382d4299987890947716c470f6c8794b3a4182453a9f7c1e824d28d4cdc759415ad007c74c0ed3f37367359c27789c53054dfe2bbd6e7aee113727f688eb310d77378232e06a79908e4acc710a52922289163d659b2e5c81a276a3fdd712a2758a4e96c0fe2d3a43b2c1a94b0d303521b02796839e4a35014f89955931724f98de3b07f841d320164471adc40177c3d30d2eb52c5a4d18b806abd0418624a77f135f1443e6e0663e2c2c3030073041a4f14763ca97ca017ef3de44cef58f799da5ce525d3ec01dcd4ab03f50047a4fe3a7df6e9e32fb1896f1811ffffee222c17bb714d2c52f3e8b8c735787f0c7088251415873a420d7f8e9fa192bdffe58a13cf39d542ee2b568641bb7d20dae43bbe6e098f643a46d29ca9518e63c9f875a573c3ca86e2248d2d0a7902f7412dc6a01d43623b452ea806384e04693a73576bb533a3050cf0a864eee76b97d402705d07be9c79ebf8cb17bd44371d9b9f8356acfe5e69ace4c02a8ee0f28098599df3a0c88279820730a6f5ac4c74134090e1567aaf2ea44d6788450276a775f5638bf527b78ea73888992cba3fe3fe2a33dfcf20e29a9801b8651003ccba40629d170c1b75cc2a861362114876942a8f41e2c35ffd54473c0ca8b4a73abd2e35de1bf61bfc684fd72af2e83f2ee89f9bdc01294c312cddb5cda697093d6e6549a27f2b0f21053e00ef0cab8a833abdb2ac5301355e419defdd2d48fa9ac4852dea0b18cc9bbb737b354f5bd310b623e3be763e8d544508bbc7a98cc4da82e02083da128451e0340a93f43f86067851b84c2d93e35702c7c98a3f2d37feaeb53cbf4e99f1afd4e70484702375086c92cc8cd40be5c49d2fa9da02107f7e44af108c399d6e953f6d2279c080c570c0c82be99be8abd9ae0ec684bd3f8dacef041a4a3ba3228277605691737b8f210a701c0188ee94bc0fa1363737faeef1892a85759280805f18af524f4702f117be2164a881aeb243682720921d028a5e3e1d9133f4865bc75a5eb6886ad7502f02865ed04b311ff705543cecabf22e63bd86d10f0efcc4a0fdca46cffa94db6274d34ff52055a9b61886cf4a9e7584e8ae89ff49a614c175052b86bbab33473ff87842fecfffc0b27996e49f131b51278972015c941da17d80decc37f6b0c1cd689a7c272e33f8130c00d050a78ec007cff43b609587a01b7d13ad0f19fda48acc57a3689b1be8b62c16e705bea1378c16234dbbf61144e421aed9f9ede6c26a069538a4984541fd3bf6e9aa2ee8114bd18cd9b930e42f1bbe44d017d3a2a057f3d30f1005158e2101f7b8211f3840cbb7ee53c60e287eace95b64cfa0f5bff4e80201709e94914a32f98cece96685ea769e34a608a746363c8b21ad0a2d08054a96413fb42f7a8ad206c5d380b71924c98d849eb53c48af509c8a703ba76f4b06db27ccbb094b930039c8a4d64f69164d64b26b431bb0b3f0e9b1b3a14f3f0296c34aaf05c526503c8072f82508596d6cef9f0e12ccd5c6e3a8cb3f22f1a9de36213ebee96915c6912c1d8fda28c5582b77416c610371be03d44db7a18c21c3f247830ccceaaeb6770fab8938959054eb24fdadfb9e3560e94f37dbb8bb4f7ecc09dab7ec144bdf39881316e613307625731f6a805cb8209538f3e8ed91758c918b43bdc617f6f4cc35398c0f1169dc0a0f1cc334d72996aa101aba6a5273a9c61c8128f77129d4659a5b220f42b4ba911983963894d7703b5316155fe127b3808466b288f758077c2e20bf63782c4ca8b8e05930c97ae5c4e401985515dbd61ac1863d580d879f0a0e5c95ccb445dc186b113759a5d818662e63cd9cdca24baccb33bbdd8ea6074031b3531970c881550be77f57405a1dd0bcf53fe2e0d3b8adfef9be3f6b7c13fc5021b2763cb973ca3b80c5d1c918212b27b04d446259f799d15289c9e0c98c42d28104804c5987535cace482ef5aca0329def8a3863a6647204187608c8b517b53388ae82e676c54233f71befb232f8c88c34c89e2038d99304106d658564dd749d5df32b4cdb2775ef0efad1cb45fcce481683c7fcfb03b33924415e2383e1325d0398d44482bde8ff69759e81c5d3155c19ec606ba5d9ef7a3fb824dfa311af70fe7e61c12df3af4fe35f1642d88a9ac91b8d0c5a94c4a2b6eb5039dae293e2689a30d948a53f412bd082b4e9150c1428fecf9570fb06c096aafb1c726aec3dda9584b768f1b3f4245faa161fa05515f86ce97013e438feeac6c9e9ba5a46874b21d803fac87cf27d12a32a26f609d9b815d2b19b96815990e5a42d6c31afa651daa189eb9f9f0297caa498c8d1ef0786ac26b72d067888c6570b3b65898d401e38ef6805350f57701bd9a26cf0956823cd991903a48f06cf11120194d9c365f0a11875c5096197667581c01a9ee8463aca6b4dce3d144f019acb8c3a6d07091811d5d3707d137cb095c5cae89808c4854c411b6014d6bfdd748483a82846e50c5d9a53cac0bb5d5adac76c034400f95e1a3d51a658080fbd54cb82e732754e108ce0bebd70083de31880f24e63a6b637cd0ca027df6c74c4fe6905c24532407315c2322bb4080582e02a52b18d5ef0331e4f9971d53ce9b786ddac4c69548bfac0a58967f3e2412e1972565ec715632b8234fe15c52e14932a7f13940cb3a0ead27d4fd9d11a1ea74caf429ae01a34dc1635e9420ea0339555c72749303b56de5875ff62e7fadc4d75e5c63172686e0214117d22d75d64d87af20112d558a5564f1d3505f534a9a3c1b08ba81dcafb66578437bfe1791c124ce77617f6d4e14bca662da784a72062cfd59294eb0795a23e01506cc9a2e84edb5d0aa9340bb294f9c7853367256c22f30aa971a5265122337f2ce48d8d64672fe97b73e465ab6f3d9d1498d0f16c1760f585d70d42436aff4a4e8e133ec1b2a3eb678fa08f2f8afc1ad85fc058fe839774e2babb78279422f59e371787eb017a9c8d1fa72037e10f1efef65bb271c504dc43c6e4c4476d7b3806ddb0b4171b3acef7cfa1ed156c3004c828c1cc8432dc7f0e4cbb1f83ab3e4ccc9860517e016fbf045aacfd4e48eae852618d6bfdee6770dbe34a133efeb893493a4852c6f63362d8fa834dcca15354478bbd52bde1e1f4714f73588ba380107de64ef13519b075f2a06603250d775add3a33497b7108ce77602b70a46efb57e3b08a4554b341622ad8957374e58cdfd5d6dd01443f5b9adc975cdc02828c77e9ec8a0aa90c65bb7d67c574265ce5f589f20f86c558c4cfd75c62b8e9d737f36f928194addd5b6c72c97fadb3851f755ba08c27f42cdc223120bbb8037194033e4e6fda2ef7ddd6d82c4a2af2d099bd7ebd88def36a2561b2b34b4da8d0754c140983b8bb6ab33b72f18c940e38565502933e91ec54368d2d3cc564cdd5974fad49de1f307bb9d492b50e2b49387453ed556d5d49417abd8220042628e014bf20d8919689584696ab04df459a7a2fdb35a7cb89ab25f63adefe64512d55ac940fa93065f4ab4c8ead4ec61a62840f27d940f82af9b0e5657afa8bc4c0ab6beee9ce5324e06a8b9cccc425b41d224458916c30e18bcc87d6b4d48cd4e0ac3b9bc3ed103179be24bbb822af5b70f5f6736e7dd40cf5849fd2b12e385b90380a7610798ecac7ec1730b13256df10bd5174c13f98659a9b8ea100dd881a2fdf50745729d191fec00779a870e4e1f6aaee59c803c6b77293dac869af3fde238fcd10921e698276927d45a405021308b37d81fdb7743adc3266fec616ca1511bc33e03e7e71247d36d7d44445eb0c261ce1770b059eae19bd3305b9521d132bee7b9d99004f6156e723b8032e2f285c0b9a7ecb687b5126e6d2d77e38aff6caace2e4720f3c1aad9dc0a67004b31c626504219d1ba4b85ab47b0d83d3e39491aa49c35726a22e330bdd4f274a21b94cb15fb0f1f1965da3716d5362f53c4e16b83b2509441f074a5859994a83d1a90dc88163ed1add3ac70464da347320220e45d25f9426b9773babae442a79284ff350494479a8471dc7f7ff35e430d798e1cf6a4c1bc39aa7c5ddb90d4fbd3f0e3424b2bfc8572fc9f4a71b60578542e69e4856153e3c5bd3dc5cd783646743e65e52e9c8642132bc5e9600639444653fe9dc3cda4eb4ff27018c8f11ff451ca240535c54883f173c43289c2c9808a52004e3447311841b48cb22004b84832220991a31eac326b9c1a0a05658d0b1003a0772cc91f3eb61cf916927a5de436732d2fe60ea8583f2f02f854e2d72686d212085168640aa6700e15601e010e67d19535de2422fdc27fdd327aea48824dfd343ef0534c760a2647ca8c76046adbed4c56f1ae61680487876eafdffc77d61eb8080d0e502475065f0c4df07456499c05c5960bc3513132999f71e0a31c8c7cb209237a18a70e132f03e57a0c1aca8abb2b3fc0afe0907c6329c4067a1052688fae4076d31076b8cb35721b417fdf9865af30af5f4c615c2a8ba62ce5ed54c326e5fcb369437ca89733a116c6d8aa06d36c5f14703b4be111fad93392abd9ec3b147e88c5750f64360c0b8048800eb1b3f8e2292cd3bccb3d090033b9e7b096408988db4030870001c6b22a30e555cc7751c888290f0d8b5740719e3923e96ebdc9136f69670c6e5adb3484c214d0c8ab6eb6c30f150893cdc7c1e6f822953b830d310e9be2251e341e5f096c294ad52cb925bd4fc81a25336bb506f417a53eb659c919c5e88d552933da0bd7dae155ed101aa94edb30f0d38ef2d74e8b33081cddc5f63ee597a30be0316e3bc15dc95f499464d035874f425cdc34d0422f01245b578c86bdcedac408323a060c4f82937b66661d170221943c7c64cb4a4ea3e3862201b21e9f2ef3b0e74bd568c52887eddbd550376ab3b7e16311013ad8d228be348eaf6f7f0bb91bea2bff4e9ae92c3029563c08aa6e9e8d7d46ff65adb212c8a31d45e49bf32f145f3ca185397eb96c995e18aa7b65a084c5a09d21eec56dbb2fb0d63a06be47b5304b1c4ca33f2b66ef04fc62ec0a543d4eafdc09d3dac1536f72107ebddcd8cf93f42c1dd9cc97c0957d4c09f0930f86e2658e3b50547f7d3847d8969d0aeb13da02e049365878d1dbea29d725f6d10f617978502d5a65a786f5f0e72a99c781b3c7ac6e58d11c11111a58b06f89f9fcfeeb8bc9ab5854a48c114c226681490cff0c101e0ad443c35960b4b5d7e97c09560ad1fbb82435db9e7efc75a0311707bda5a23baadcd2a8512d055d8f7cccf2c04618e28d298fc7b7b26223ff6e85ab4ebefa57b2037f6b0b560f7b7b66c8ad6f4054b53a87e2c06e2227b925e556c4c21539ec72758b6cb8625ba6c30655949ad63ad118a75286a2026102e11432fdb3c964b65e1e85f34a5c2e1340867faa6fe43d0729960e52094498205d744e6f8312a126918203253c2050f9a3d603428392ed0cd8f6fca01298a9e72886094a2851c0951e5c3326e8ad8102876b88a8f7349e894774a023e3c51d7757da16807ac371295744fe452772d32223b6fc313b229642e52b4b279a69a88eca2284b85e4c05bd96e4202c35a132e7f12d7c7016449a8dd40e26cb3a11090cda551731538e617173a7b8a4ee951f3d3a9cdce11310d334f541b8619e0b14ddd08f9dd65fe1802ea7d8e006d73ab5dadf2454c03e88e7e3b281d1c9b911aed04e625157790567095e43fd006ef6a70018c404250e9be13325c58e70b194ac8fba55ac8d2926fea0525cdf980c73755403a674b7521a457767523dc343428065335ace9991ba18bb1a4cce126850762bbdf24448066cd4b76e302f3632b059e26544b00e17a456cad9e52776ac44532fa669fc479a4eae9a622c9fbb4409d28e00b4b9a18edcc561a18b4c686b1f19bd71f73ea5d6f13e15c82409513ab3011b7475a5b7d800a27f364cd372c0eb3c1850dd147c6dda2f72ed24af0d93d6f2940bbd9ad01b053434a0c5e57cc604af0d027d569644e5597088d8f3f3e9d993eedef428db41f6de40522608c4b91436c642d2533a703661b95e1c94f4b9cad7fa18e46523d4598f1fd8e4655c06033c3ffe4ae149e815d48b759581c970f9847b405c80402218d37ffe4d4f1c19037130bfc6d55a6088de89a205e5107bbe700781eab32f3c4af15627f6a1c31b4f0d7fccca554f1203c008a9a9336036fb3a36e2660b1c958967c0ebf1d18924e16d0a3946be6bd1b10c05f1644466737ddb14b4b35c5e4de974b9457bfa5457839fb6f19adcd1e8d0feee2458110d639e79a6da8f088dc0c06fb326e1b2f3382deb06b2e9301bef1506aa709762b8bcd62190b665789aefca523d7eaca953788cb13d85bd984aef37da564d494e4708b37bbfda691a22fced8c64e2780d853cbfe0ba5d34ed171702134334866068f88bdb2155ba424a7ac05cda3c44fc62109d7639a84451cd0163294665bd25f6ffa9568d4989af4e04c043c3676db34cf10a0c0a427d1b368819e267940c245f1bcc47fd5e656abf5d4a2df20c732b7a2f825db7acc6c65e8191474e2915ca14ccc6c09049d9300bd411fa4e8868daac29ee2b87690ba248084ad9a5cdd23c383d8ddf7484e85e19a143a1845166b9da7086de996b91ea79f8d429105f012a95d55068202ac8328a294e84b85ae3f492bc8a0d600eb230b660222d110077924c3dbcfdb5649989fe8736e7b4f99ac4cb1afd4b7b368bd1547c969363c7d5c88edadb6364b0ed813ce3b832accfd82b3a5bb9d8943b054b9a4bd9d25b09d86d0eeb61b9d5cc43e1f03415d3acf4fbce03662b679e228fa9a3468188f6ad774de5f6a287858f68b7839b50b8714ad8bb90d617e18af384e2eb0cef701e2d7525e191416baf630b59ed6ef067750bb0a2ad6474774ca209deb6b72ea723e478f4fe1bbb73c7def7bb856a8769baffb308e8f489204215d2424747c245747473a91c6b112b4dc20f66cae6a2c01b2ff2434a9473e33862966929c2add096e8aa89018d61c1930309f1895e460e448e3e84c953463405e8ff842dd648cc883ce6e6ed05a4c5e606af227366b8dca100eaff227fc1a480cc8991b03c0aa24e5d1e5081322092df5c62fd464ca6027d2e892fc137c4251a7059c9372b8eb893805ce17b99ec03f8c029dcaa57c98af8da4c05b79115b7e20ab0d1920d0a07b8298ce32204f76379d049d2ad1b809ddae161322547364f5aa852c5bc424a54b8e041e63b33a72f0089f2ecf39eb93276324f94a9a4c1e75f167984226f69b39b084ef8425c72952525a00b5fc2bce885a213ffc1814a269a9b5424af4832d152bdaf31c663861e77170459311da0834c44353dcb04a03b0d27105cee6f38d457ae49aeecd93c6dcea373f5b3f2db27f024f4dfb7ce621442d8d8904ef746cb0c12bc1031fccf41df2b1f5f91e6b891ac030138da3d8d4555bc2fb2228f334d34b1faf33ff4bc1fa4642968ef784f4e6f970330a0648238a3da7018f4383cd94a9eaae1b581c32a0c5633322116c415e693ea0c51b19be509bba6af0970b7e44ac1bb1fa41cb8c8bf050127c84c80cd3fa34a3a5396f2ebeefb018cf8e0d648d4e89d5cd1d5a9bab124d7481ba268be5b7abfb00bee0d12852c16af8569431ec4a0b37819de4d5e13fff16b3dcc36ff7d5f0cc510052a17c8bddda83e128d2538445680deeb32bdcebc94872aa09af88e2d20fe481c23a3af2140d76c9d2341ab8b0f76ee490ec1c6123f37bfd1d0eebc595014add5686b0e02e096bfc61128b3760d367546ba461b33bec831699f7f721c3df9309f40e6a12380f8c48908851e21be89a30835ab55f8e1af73278b40addf10dd8110728288d35123ec2b6010aefbd77ff551841eba326fc7296deda12e9722881cd355156488a10a9770cb02750816801237856aae1dc2e0a4947bec8a543aaa512cc53312c5ab6c31022d377bb51062df549838daf59a791227d8e351d32a740fa6807f35bf953de1c4123349ecfa72a788c8a5a63eb6df19498517e7d070c65e301db6ea02de24b64e2f8beb737cdf938dd30335dfc31e052d828d03c5e793f716b7ca61db69338b1dd3792ed2ff68fa2c1cd038f37b97fb361d5eb0d7818e141120e69a73c648976ae174405e2f28879ed5e8935a107a3cef75c4ddca86cbd9336bfaee502ec98a3af920c8491d359ddcd870b62168c64412af8c571800b47be3341348722ff08ee161e2a090d290321223aac3ebd2f5a40c85298915761cb8de7030ee6737415281c9ef6e9721fa15272bd90cb556f7917a0238b6ca185f0d103c3a831beca80f41c94338221dc3858e4bcb79e4c9fee530e309101578230989b161e7725083acbc66c2604b9016e9807f021046f021b25f1f90cd690ee697b30a6bef227ec99f747ea7d98e186c58ae11c6201331d6704f84e033beb15b19c7aeb747cf7b0e7b98cf14ff37b39aea78cba14b9b73053e5eb68deeceb3adcb374bb74a5e95fe5e6c419dc6c8b41e0098337dbe657c77153b4ec895fd95845104a53fecad20866a9580b94d2ef9a001d1cc2666a92c20f4706db28bf32d3944742f98981776454df3a79536a6f5143c76982f49bae28a891ce831b807f26e35c1b90cc44de9d32ea1293dcc498534db7247f43eeb7e204f2d3a7c5e7a9ba32c97437294c0aed53cca0d0238262f8cff391a51c0b068dc0c6a8b0513a1d9fa2570aec0e4160f58f376ba2abc84b5932b5850f2a1a3ebd5d904ff05c4108ac12cb46194085a2eb22fdcb904aa96a9057053946ac43baab000a755d3bd941c83e1707dab3e6abf7f35185b48ef009c64344076fcff44de02aacfe18e6f0c88329ab2740f2faee62dc68c11779048174738727af0a7443a8c55fdb98e5f8d801353c829853a771ec9c0c01e3e1a113d209a950864ae8b5e1197191f2d14ca6bdcca03034bcce50a41e27f1bd22e135d581bae968f96881277fbf0caf28c39607c7130a58b4665825886244bb7bd4026cc1bc98eb43f91f4d9cf67eae74bc6238398070b61eabcc4f43289f21404ab41af9ffd33a761c4e73cf70a711f3e31c9603d391e48e3b791408211c4582dd4e30f22f3f7f80f9bf02f5050eb2bf509f474d6aa8fec7f50eb8b91172fe667dfe6bfe4fd74b0676e859bdeff91fa8b171504d173e4b493290062302410bb1cfc463bd656066bdc9283c5c6ef61cedfdd1dd4dc968a95039ca77f8d6ab14c7265b832eab4d541e3867df2250be6bf879f37488bb6c8824d4dabfe3d2a49067295b4f5cee4fc841d3c37b4bd1515ce69007a01ecd24153e2d49178b99182f08f1c10596da8d31ddede8273fd67d102b8dd984a41f209110b237624c3911a008b6a235f92505d607c97811ddf2e2099e40a5ffbb6e7f1e7da5f8751974517eae78eed3a676c12fdcece482bbf96e6e1d02dd4a1b1974a8820b572b6799b2df02e466993e51173d369519de5a3d8695039b39789844e2d74cc34f6379d75c8e0f2d55f06f210f5514cbeec0a59cae3b6b288c2b3118ef205520515beade053f79e75a32ec64c420c874ce4a419ec58b6dcaf27c0a9759e5492717841a3533dbd10bffcfaa1c7cee7301e95dd7080e7e5b10163405e877bb9f02366a892e1e9e023b01df294a12050e94013b8d59616a011dea8cf3be3cde719d55d86278b94bf7dfdd855a758d6e976083dbe121d51c2b6204304152c36158fe1c8cd82352b7b5169e3d566ba0fd21e6a07a3da36b8148dce9827331108d79b540fb449407f4b66267c81b14389d4c3b549b955a6a7c7b5262a84c4b2c5d81217a74cec1212a549c888e026711a0724ac76f1628f1c32245bf6033bd00549457be065be32e08530cc8750eec3c2d53e0bc147015c76fe2daae2123447c58cc94093797f6efe746e126f3b015140eed2cd6446ea945ea98e9b14886fbe503483615f099e1a8da059700b804d4fb02d6b5230c383f7ea1d150776c3f18385fc2a8171b2680cfa9696634e8d163222cc21eb1cb4477614406c91ac11d02739aac5655728f54e419564da0a348074f53951e74856a9ba74cdb5d37fe02dffd4495afdacdefc7de8bd01a57b656f02ec7d94b54cd9aca7166a055e09355bf88031ff8ab26dd30c441f744ea92ae677150ed18862c532d948f71760cdd0f535a8fc576cb9388fa128d5fcbcc3aec44c8ec6b4059d482cc0cab0fe6e05807d11c28a0c22c43ce06f45b7dfe503a04515e07441d4cdfb3f79de8ddde60a32f625d72fee3d2728620b98282dd75941b24d7de572f426cb693cbcdd39a4aa188c92a3c260aa02dc2c4a43ccbe489220760285862210205772c8d6264163bab0c8e8b3807e65c94d8bd91957ab8c00490a0f034bad308461cd3aca9fe95d3397abf1a1904534889a9f039a592a78b7f2738e5b04a47a3a4295fe9de883ecd9c800ef7f40190ca08a0dc811cc62863158b25ddbc9b592cd33b43e107a30e24ab403911dba91a9efef38d5406d024d8c523b507a7d379e883bef602ca580b5e474ab93eac40a828d97caa46e00e5a19885893c2f6769930f0319d3cc0a7cd1c3348ae31ea5adff1bcb3a6a5250af102ef82a0ef5ea490dd94fd029d6fbbff60d3deb6d89c62a705f6baeaa0ad07dad9ff64765cc01943d0a3cae501eff81bed3f0a216746708f16c9e938cb0f1ccc7b434340dc6a51b5551d80add0379f0eecb170b7e621ede648878d69542db4210acd47076b61867af36859207a2a577c1c86d801ec0dfc59709756d8d30a474d0d2c381ddad0634509c72aa048d1cf42d4073d5f44e888465b2c1e9174b98b7880d897bcb69f308b2b8a7b1263157370157315d61c33a6633371303d5748ac71d38899088191158b536b457895229f9ca4d57591700e24849eef88463fe182151099fd055a534783e028b3bbb2b3ceb782088fe204424582a466f9cb54ccd1bfe3570a1685f7d950f0f5d5f007df30f190fdb8b49bb10ee49ff93273d7ce0a831df928895c14c0dbd762b9cfaa3bab295eb83cfc72f401f280e5574c5f8a8b07f01fb66d27621af949ddd66c2fea2ab74f66b90f10894cc63af1b478c93e7a75178e31744544e5dd979f8e528396b83f196803cec8e2d3b88fe865a52e85e85c25e626b776df9e3a1e554d62affb97f1900cc2aefa2674485bf9bd1b8d4603716bba413ae86144249c4fd20439aac1672d7e82fe4abffac8f1456b7f6548e798821cdc78c32c2504a9c53720b78eba4b5736258822c7f53a4023fa37cc1c49131b00261425ffc2dee815e8f47c3ebe3586879a0d0d9b7a151fac647d61008ca03d0cf913de51f3634e42299b8df5d7c8c7d5f54c9f12617faf56e1e9ff3dac8896a6a0745435802a8b0df44ecf426532a18715ece58b7f6f186193885f5efc8f4b17fc7d7191d99dde996f65851adad9d7aa18c8a8f0530dc6a3514615a9400817797dd32cd7f13d96f37e6c2b601bd572946271cbdf4fe3ccb2f48574c2ecccd203254ad019b26aea4a345cde88b0e1a32927553f36acfa2c17fce4f0bca688115ee64590e77c0518125f3ad0fc2c7a05d2b53169897d4dcbef13aa6d3022455f2bb4b5f1ca7794e85f3a6c41c588076015e06bfa5ccca67d2c0f0dfd6f3eb8f0ff4b2ffefbe2e5ff5d7af1cf172dfc7f79756d5ad7f32aace18d2c855d6d5f9098b0ca3d3a217f08aa7345c55344e95c1c6d68e646d4c7dd669b2b72978fbb0ced5d247a6129787150ce4e7826197371a52fc79774902a0ece11f3eb14241e77d6ef16e68bb8d510a0479ce66ad6d1587bb482d332404285782e4024406656c3e23cf61a5705a2ba71c7400a882e489de211e4a620d0bf3755787af02122977c8bddf08f3422820cea2422060a2a26e59a22c2387f15e1950587451c1b705dc4c17cd7c648b801355143a35562af5284eb1a66a4d8f3dcae18d7ea5b3afd73837053931587c2436a844bcfba0fe3826fad14ff2b0131b3adf1250e29eb752d3a4354c73236c83578cbcdee8bd0f2b6d631c813a5bc6d4a893ebb8d4dcdd96f1c9d25cc56cc975c09b66ebf60f268eb5e1ae5374bd8144446916698a18b02b2e50a09c3d883bd2bd291c57ccf53d73ace2f670d59212468193c55bb3cbc69b91a6b69041b581ffe3aaecf32e8380aa3a03026107ce00e1c68d11bab80a65192cafee231095a45604c12146ba732e91e2bab10f8b1c48e7cf0e97ef00100debb20aa302f65fb1538fc33e1a824ccf9cd34ba33cbf80133be4142500c832a225201e8ca681c94696fa4269f82783cb1eaba719134e1c60907469665f17c61f1b508d88b6511fc648ed1fd428b78755bf21ad6ae963d9807e640671b6e2712a269b3e09c5bb4216ab644a88a3745c89c3d62d2f3f0b7184e6414778ade629fa7bbf94717376ce80592e61863c4e8c5161c91d4366c04614013632103c2e561547a98b15a93722f580d1ec27495d92c0f546aa64424003a0462045e865dde6c60fa7c46a79d488d2096a985048e7e9cbc46bae37af50149b4d395be8e12826b2684a30a927221cf63e57840f91d3ede6502ea606662acbb3b054fb3194c84d902ca862fc6489a970502c3a40c040d99f1dc53dd4efc98acf072e6c89032103a66840f50a5620f6cc6713e60384d24eca8021dc7d6a5e1423688dc63e1b807330ed8c36e0705d6bd11f9182acb0d48d1756535accdda41d033bec323b3642ee6422880016d21de98a557530a04fd109ba2b8fbfb42ab9ccf7e24e6ddb0d8e69514d4d8801926b0260b5be93439893282e2e521d34e1ab6a52d5dd43ef8413175717283a501f6b6bf23dc1beb41e7056c79bbfc61d16f972b4eec446a8d06723568995786aebddcd2cbe4502c5439dacd0b3f5ae80c01a0477f1bc92f330a44f61e49f2ec0c01214aecb8b0b7eaf38edaa3c183b2502900cd4e87774308e1ac4700c9f11ef07a38b70b9544d8c0462b6ee92bcfe646ff81ecbf5b2a76b5a05391628e45e03e08b9aa06d48b882245c71a129611223a55e4b286e9cc8c4a2a32a4c5642288670090122a20e3ca6a62963a79855bd54aed227425a5a48e8dab23b4b2d3093d0af35801145f01dbf0dde0577d1fff4f76d36ab685243858418b137606f3c1453b20efbbfbcea187d6871278b201cd82e35827530a628e604e3893936dcad8de6d09447dbbb3d1923332e554e94388da8165bbc52fa2816a735fa935f82814ec06448b9fbb4d8a4e2fddbee334286adf44b37f1b19dc85c82423040aeed1e0a8e2220bf2dbdd224d3ec4ec90bcc3c7fe7ff8004540014012c79e09f5de707856b88c8d150ce3955b32c062215fad1410085f01105a81b15700a15cf4025cdc046e2144fb0c51205e15a903ff5170449c0428ff631027228f3a0d15476720e7001a86ca8038c775a4bb03e2c66215d5a16c02f467bc5bef9c752344dbf7202e7bd0caa3974a126f803df88dac247befbdb7dc5bee24a50ce90c170d9d0c598d3f77240d2fed220b88f67ac303e78eb8b0a03747447bd84d1635ed7fe550d37e498946a8c9bba0fde51691687f51d31e5d47b8e1156239a984e33a4eb2f6c16cff661b62d90f432c6badd8327739c9fe662d575f5e5e362baae7e26d568ce3c98fa0cc898deee79c73d61eabe97d87b7977ccb20a6e74bbb431dbca1d19ea53c29dc0dae6ecc4fdae7e3995f58c33c5a42d3c2ef91bd96c7d68d15ed57f24c4c5869f65aca83fea0100ada5093f82efa6d63e00d1d411b0c12a1a3877e8989e324ff0c7b375725c4ca7288456345ee0c3bb1bb1dd8bda4ba97944e85892fa90ca5eb872f29ed2c99b77defbb1d99dee06a7f1fbc1d26c21b2ca2fd53b0bf50f0de60db8e9eefbd0441fbcb3ab29406bd27e9c8061b2d8faca18836809647d68002575ef8e93cef5f4228c95f7a337b51b8d9fb73d255545a7e6a5939c9bfe58a6656698558e2bdf75e70e579f79360f8dd9c6138e79c1304cacc2fa5b86de33e04caccda6d5b2ed5eeb7fa1e502614827fd0b1e61aed7f41199ce26aaef82f90091a93d1d0d1535244491821a0cdf71204572196f66f59591b7ecbca5b56fbfd513a96611ac3ede0828f5374f41b73928fae1b2fe17c3c252ce85862d1d14b3812c67f824a8c4a469d2aaef7121c5d746482c6946e9c147bd1156d8c92fcc5e76aaef8a51b6f7e4cfbcf5a3fabf6e73f93875153136aea6aed2a11a8ee67672b9edfd5593b8b493ba4181d6bf713d7976012a42ef237e9f033c90fa323a6a1264c4347ff1b9bfa8377e9b55d678fae1d994b6f2c443b0ea21d03d18e7f68ff67424f958553d434318df6dfd1de44fbffabb2fc04ae3ce7396d2ab8f2d3e8bae00a1c95703f2aa1a377e36b64a2fdeb081b5d748402f597d4cb2773f40440003cd227a9090499e062b43cba9ce4af81e1cedfa34bfbcb94846919bd58114245f41f3c84cb0b0032f0733a5964c7d94dab2c610c03cc7050f80c685a174217b6d0879dd41ab4888e99964772aea04574e462a4936810cf33c29dffc53c3e9d26f1a4cb7e98aef33d29e9f6a3e607906ecbd8125ccc0b9c649b78648488b138231c9c8f18c732064557fd4225c85611a2ab0cbd45b0244474b55148aed5fd16c13496d64656efa93f3afea188bbc9d85e88602aa3edc5b66d23aee5d308105674e45aad2bd2330f570631bdb90eae667fc33ab2ff2daec4151d451b213f6e57f316573522166db028048bab27dc2d8289527ef452a768284fca949414152cb527a3a2e22a2a2a2a2a1889ae4a8c88392b3ad603dc5f42c7aa613afafa2ba2f744f8755277466ff5bd894747cc1795fc8c9e58c4828e55891657228b8e75f4594a8f30d5135c82b3f65e91e89f6b8d5c2b860c9d5f92a5f48b9aa6d613bf05654459c6d5b42c1573c5dcf2d67e866b6d98837937777346747dcf0957e5a712adb9ce119a76970ade335ae5358d07a7ed6b9f82652945c7ed1bbd28a546af692fc117a3edc55750462ba5740947bfc5259a0943fb17784f3d4b283a6e2ff07c6db4fd6884251d2b28a3927f683ac674fd11071371357747d64ac152b334e1763f74fd8e86dbd1959504464d53734c74e596e8ba3925ba4e2dae9c5447798beebddab3b62bee7c2baefc2412eb6b1e91fbe2391c3a56991799c3c256991d1b876488e37824256d3b85c83bec0e8c8e395e862b82adfe10c5cd14ba8a383bd05565a562b3c537e1dff24d64bff25ccb4f52cc982b46dae3f06f791cd9af64bff23efc5b7e733a9c8a73f9c9c7ca675f9f6b5d7163e5b3f7d1f2fe9bd319697909ff96c7807f4bc640f62bf96a77c85a57e76e712582655f83999895af2f8abd7f0d66625abebef6d3487b2cdaf8a9e5f3df68f9fcdae7dce30a2ddf58799c7b64bf92473dfc5b5a7e26e6edf674acbf824727d56fc14cb8ffe24a92eaab24a9fe8bac92d275083051ccae46da96afd8be077ecf634b6bbfe596f73c93a3b5bc37cf8a8bbfe5b708266e2225560525826958b4a3eb7b55dc2daec41535c913981234f85bdeaefc94e591f643bc8fff95af79a4e5d112fef971643f44f6d1f2d9e7ece38a1b2d59467d1f387b8ed13c9bfb797423fb95cf7e255bdbea91e5118eec5bbe25fbf09f89f16c5b4eaa7f4f404fdfb33959b63956c7b17539898636e16a5c6a6e6f754e30f7838ef5b91a507dadce07e10d45434f9243618e868e3575434dda57118c92ea875034ccddd07174c37b7036d9e618a1cd4d9b535b995f4b676e9a11d0d7a0a2d7a470ad7d91c8be0af6bc21778b9c8d9f4637b2f72c7333375656de5bc1a28d93aaf62b1858f15ff9d1e81dbcd1f2def25e0bb64e1ab5dc6879cf3db26ff9172f5e03b51cac62dc492fdef3b8cf6ff867b987124eaacf81431ee0a4fade12ee16c1a83b96311b7ef11ab62f5eb810ffe26b780b963142e0fd228f2a8884f633e7d8f2e8b52c82d1514a98d1d7a031143482e5475fc357b08c61196551081d5930a3b52c12a11e95924e31dc31d0db0a6773434d2a7e7a962aebf794b09fa5ab8dac3955ca8b2b3963fbcab58c60d15bb6789fbc0a965a84b78e93e754d494751d59951fd454adad3a0b401cf96a5454f555562a42eaab10a1a7104bb4c3d2f555507eca62e6e65cd01f2260111147c4829a641a6a788a887716c2db1601e1cca56bde56d3fa56c7bab81fd4147e7d0e454d617d9b2363b81a8e46d756d65fde1667a5abb5d1c070b7084699e81a6b65a140d46ca895b802658148826d05e20be28a9af6b336a7baa1a62d82e150d3e65aa210df82de2211b1886721ae3e355afb226ec8ea60db6a7bba84bbbdd6baf3b7b6bd65c4a7466bd9be5da2b7f71c6fb90b0f7afb4db5ad369b8d0835c998debe7b75b02ed6ed50d34607bd7d88c30a734224d4b4d5416fffd9fe53a35f70b3b5bcec06f72fd01a485b278480d9327869ed05375ac7d6d2db6b787b2f6d7fb328940d340feda796201222ad6529616c96d9aec04f38fcb3ec837bff96e31538a9be08e627eeeb3f8b539d34610227d5e7b207c026e8585f8bfb026aaaba7e8f970d3515a127eea6fea4a12699c51f509b454f146b06f506103ad07b12d13566cf94ae6f3515d44b25454d5bc2443051136a926ad0f5452ebd453b2a34baa6416f965afdebff8562ce6456d76156092361646662f544c19547a2a064d3f2c814b2d0f43ff9f48af977f2e10e381927675811179e644d91447bf42471133787fc1905133226cba92c26f31d31b467273c7a48f67b466ff9543a4a67583a69824ebc13577b967408d40feedcb4971ee843b45a9be05f654054f0343c12b2a5e16eafa5672b4365b97e1af65cbb7e118de1a7143b6c818af19fd33512cdb26cabbf5971fd5b41b9fca4a9be9fb4771add8492a6c39e70f7e8668445f737454638d4d4bd7f52ced066644f533a9b78ab5ab6bd67efbf6d38b3df673f3f69efcff977a1483d9f4fc3a32294344737748c428602ada8c97f82703abd4142403620221aa405499a0fd2c227290d79289f17e4ca0dc29942d3cf50196a74a3e98f84d0718a231b6aca7e8e6ede57749c73cfe86c6be90c537d412358f4e846c2ccff7c707736bad1f3a5572321f474512854142111eed6d23b43793edf9686bbb796de201c99518a8ed33dda04275e68f70cc29130a00d169da13e1fdc918a9a36880aa3140555419e1ce6209cd10f3d47357aead85a7b04444f3f48d27c10156a6603989f329424d1409e32fae1a06a9be5329760e899ca21b20ada813784fa84fa044f084edfb34ad080011efdbe7bd939a75de8e81b8e0025f9cae538ffa969bf4067ef997541787b6aeb35a8031e906b741d1797f3ef700e4abdba79549d437bbba77f33fb0eefd7dd775d2723bbbdbd7db79b9651d2c4d2dbc12d1244c790ad7a647a1bae6449194fe9df2c6f91744ae97c79d26583305de77f969a3c1510bc1fdcfa1e0ccb7435821ceb6feda57252fdad6df1f95a3babbd660469d29c20c7faf53555fd4fd670c46c574e08bfbe6693ed40d7af55c3011dc9ad597d8e899c0f661c0da70b377b0d47d7d7b0a0e1c8191f5d5fc342cea0bae6ad7541d7306867d0f5a54bcd39409896436c59b52b9d79ddeb6eabb32880a6c7296a5b1cfe7647a6b7d5b2173acbb2ccd6e8ec3520992644676fb31490cc776613bdb320983ecd9a109aba217b9b52e92c0392d5d0317ba1331c5cc9d25aa67d26599af69aa6699a6635ce4ee96514880d3c5efda49cc16da1072bbdad9693c65cd140cb2d939a55c4d564c4d0f5a5b5f76a354ecabed6aad9bc695aad73e5a72c8856937d164494e568e195794c676f577b28e2fa7b41b892a57d6e19ef9e5d915f797aea8528d270055d874ccbb28c8efeb6d66db3599669d96bcd928e5956069d3a96628c0e909180b144272801b944478092e803363a7d523178d265c7d0d4884707590883cd4fc7ee4736051be4b0fd1097c0c51262437aa069e6a045149f144cb8020d329a192464e1862958618a170ef2b085113ce408c20d5686c10a37d882c6608292ec3ffbb11443105cb84114b3da209abfd601ac357ff78ab5532f608cd3e0897e8ce172af9fb27c82ecb7e85e8d0b5bf3cd51e42934957147fd26a8c2dd52e7656b28f5237859f65ae22d12599ba59db7ce09880f5a8f959af766a3e76f2b3f8d6e000000795bbd88efe13da3bd2ab5048550f7be70a9f5134bf671457d1fd9b3bcf5b1f2a3b7d9b3fc8dace61b2b3fca3528f71573d8f3c2ad6ff1ad58fc0ecfe80ddf4cea62c2105fc4d1a2b8ad2edd80259b95cc6fbc173de0d95c4d091dc1bc44ab7cd25f8a286d6346cb1c62bda442ac5af1494a67295f11f74b0165748ed0b44bfba7804a7c2dbbc3a138948dd19a32fa6c15f72bae5d09e5b57c757ecd3b32cd3273881532424f77fe0ad5f3b9d74e22cb55409939ba3a1cd76644cf0d899ecf6d2c3df1769d5b0447cb23456c34115a1e89c28e1ed5204fe0ca49e01848a91c5214ac3fe0e81368e309f1d9175fa76d15376b4f08cec8dd36c6699b4b36ab0a0306f85ef619ee82bdac2db262e8f8e988cc4f10787ff0c64f48bc3fc8f25304de25f0fe21ca4f1378ff70e5a724de3f64f94989f70f75fcb4c4fb7b507e62e2fd3d2b3f51e0fd3d2c3fdd787f8f8e9f2af0fe17e5271cef7f577eb2c0fb5f969f9af8151670b56500e0b7cc698dbfa58bf45bbe88f82d61323653b36600bfa70ac6ef6913e3f7bc21c0ef895380df33c700bf67eb00bfa70b01bfe7cbf47bc24ebf674cc66f9a2ae237ad99f19baa36b549c06f7a437116f09be6d01675d157cc6f0aa3314fc9fcf61a237ebbcac66fb779c00657384d60b700761c985600d31b9852005326f0d459024f25f04c02cf09600f3869be047004f03b693e121038023bcb49f31f80a5936c6023b074920c964e72006e00964e8ac1d2491a4b27d5c0f319307f01583a4901583a290198c68c22649cb0f4f9262c9d8480f907c0d24906c0d24905c0d24904c0d24931b074120c2c9d34002c9d04336b664a3a89082c9d441ab1f40060e92400cc1f61e92b78ca979415f34b6a748df625b52d1e5d12c688fdcceadd7dadb5d65a6bf6566f5ad3557bd9d7e14c7bf5ebb06b4ffbbacf5a2e1ca27dcd79e137358b283afab51f2ddf13e2eb5e5708d088177adad0d15dc8d6f2d3e8c6ca088736aadad672d2fc999829e6d01109b8c291bde65db8db6f4011454dd5af5f2615e7d2619ab6df6016985c4133c18206a5a0fd375805edbf412be8ee61459a30c1c23e37834fd8e0c96fab2b4ebd426559261386ffc8076d61b6c984e1cffdc5990f827da17c926d8cda1d3aa2381acca53ccc4dc1e540723b9030fe1fccf180fbc1fc5812c69feb38ce1249d161e9040165282dd81a96ce1b38dba97cc1bda0f7a7b7c8e2a2e881feb2d05f163de06ed042937212a256dc5a6b45629b83ee5e822b2819356fcbcb36610223d1d0d149284a29a986f46384c98c4d98c89ad5ea74561bdaaf416d1e5f1266881933ea88298f02822dabd9b2fad773339863fd0f1785f6f7e4bd92b7a843efcf01a138901c157286cafb73357206489cf1ddf7b78098b60b39e3e4fded20a4a93e4b0f74de201dfacddd40c3e8680729e2b1091d77364caa812401a1a3bf8834a5872899f4838ecee1215afe1af489abb707e127447afb13fc844877fffd8a104ba81577088ee3b8172fe4a8e32e3bec10788f3af5b590a37fce38ef5215faf32ed98c5d8c81903458765ee4510f93460bea0f8090333edf92f7d8447b345a68260cee8af21ef9c004256fd1490e65951c152d5876268d47826aa199343ec984e10f62d951c99b7e2d342a5f9030fe2d2a6a7a1d3afabbd47ccb453561f8db928d265285b640543269066317730c8420b4ff070809f3070903e3cfe15107ec6e38ea61c218e92061eca028cde36aefab8d9f5a529484434d2daa2b4853cb10e4e82da996158bc9a4f1482c13ed6f6193c6b7260c7f7fdb64d2b0ff929a305c644d186e63b6c9cdb124f7debfd65a6b5f82f7dab74f88b4f842586b5f0850c6862fa949e35d9346fd49e3958c6ba0220bfcb760760962b3cb6ac2f0ff9bb3943040547c18d530b2617c8384f11fb918c75790510fab910edadf0edae716eeb6b12f0b697211f2b186d8d84bea075c0f240d17222d3798345c6eb81d703c90333e7f32051785a4e15264c2d8e1507246f8311bf3b4103a64092e442611edef7253c4e50a37a05cc425c97471a97c392e415693864b4e106d7fa5fda91577bbe8b874d8250e72f43fc12e739030fea03fc4b46f171d9797f6175d98b818d92e80d02e5c68ff1ded1f66232e7bc8291d419a5c9094567286fd31c83dba6c2c8f7d98a66d0f92864b122ee40ccffb8f7a90333eef3fd661d270714d184b463ac819defb8f5b481a2e4a260cd7e48cf041495a72de9edea32be4a223674ced0df1b5a85a86f048bef5491ec9b73e89f619e3a2d3833bf576d1e99cd0f08ca14f4127e62068aee0eebb20f9dedf650cdf875c92a8bcbf8b0bf4fe2e4a4e5e2509c8a5fde495687f193a122a43880d2138a84ca1fd55be2067d40d87dc30436b9030fe1e1c528384f11771e80c32440609e30fe2504bc2f88738942361fc2f0e19a163a87b91e5d9846cecbd0ebfd01e856b9f9aba2ec9dd2f29fba66e5aec2b3aba8deede869a5ecc3c44fbefffadad757a59540dae58377ca9a1a6ed75f8a5e68a6b9f6aaa2d384fefd2644de2cfff644bcee8f4fc16cf4a83425c44b47ba08ca785fb1dc75d51aca2586b1662756fffe22d7231ba80ecbde65896475716ae4a88e5a410a4e28631f6c2cfe2675046ec6aad5d68b9ae33c2c3c29d5fbfc33bb21012ed6fb18e2c158adfdff7a69c93babb6759566bad93ce0cb2382bae13eefe97dede93526e73862d2b272159515375ed2ff34b2a0cc330ac3547d7fa12ab9548e5f0d49ec812594b7031e22eb1741ab6e8389a857bbf0399903160ced7fabe24746c812092222e8864ce09220193845f11170c43171d93804a42d0c6d4608b8e9e33411b54832c0903da68ffaed6da6550081d27a8f7a8f392dabab8d57f7cd9d8f6a06759ad55d3344ddbb66ddbacdd3eaff11a97ebf58ac5581c28a391e17258ea7b6b4e45528d8036a6aeac51270d5c6b105afc8ab8dc8be24bbb0a136e89f617411b53ab38e1ee97d4a8b3c72df40807d80836a179172e1637fb57ca88177acbffa2a32bf62ed5dda36bd4a1a651c9a8537f748d3ad434b57f3d7531fe07e8b44a4bc52567a841cee8b28a8eff85a97c3eef0a37a37ac43d89a6fb7db2bffa76c77eb1588c03d0d16368e92f120ede3585f6cfdbcb49a38e2eeff7a807edbfc73e681ffda0fdf73808ed241aa8fc26d980f48384fa4d9ac1980709c3ffc3a31de4e8ffc1e31cde20496e90306b98231dc5bc595ec9a411663961bc6bd2d8834b7bae83f657322aa1a66a848e2ea9293632d9b726a94aa6b63b77475659ad12eb753e0effaa01a2fa38bccebf6a80a86a80a83c2bdc2db2422909e31f6285422196addc66bb3c447b0fb4313d476f91b50417a36591e524bfbf451618ee1e5d77c680394ef2ea65b87b74c9192838f4092e5728151975b6b149f87b8c691f05e1fd2645a1fde534797e93a4f84a389a7403eda41a68679168a07ddc71313261f87f72462ef6b887d24ac2f8bb5ca12444e35053e90872f425e84fde2320fa30b99030fc413cea6071bc8376185be65c5893c6b8076964d218eb9033698c5b4818fe7cd0fe1d8b898b11ed631ca8de2e393aefb031757d1bae41f7075972c6ca4ff3379885e67e835bd00e1ad1bec11ced2012b0a5c124da419712eddf224445b38c883976c6703fb4bfdfbca4a86957d60f6a92643032ba32ade30594b1dc77dc0b68636acec6c42ab5e85d2f0bdf411907656ee87d28be57c5cf40191d1ed3e167a04cc8e5dd8362e156f139ac1571efd75a6bad5cad95abf57afe7e0d5a411b538720556955eebd669596cb10cb2ba6fae25189e7053322d3a112403cf50603fdb91c2d27befcf05e6ac2fc924ac2a5a67a1a9550927f45c2e6957ee0a8048fae2edcadd2aa5e35ee466f120a7bf0c88415cb19c2f2211eb2128a2a49a829dcb85a396dcb342b6e7d6fa359b8f5471d1009d7f7bd6d87fbd0954a18519c1246fc09ca5c506a959678f39ed1584a1831abb4549294aa90a697941cfdfd050744b4976c582f3fadbcff28350b9e2156481be2db87fea884b1af8132dc4fcd82650c87dac025b898954cbd703d3b250deb5328f4f7f62b2873f2de06fa1a34d32aad19fdbd3f084b0963555a49a8e9cb3015fc4ce8e836ffab7ef7fb5fd54867a4c5a63ef7ce715d884547cec6bca565d522848edeb26a11d2623344375bba50ce0feea893a1e15a2d72293fbda424c9ff5f92e49f63a466da68150ff10d310428f3f92578bec3db1bc2f3f988e277dd77c1cb598eb3f6b99918ce7220ce6e271b6755329dbbffa54321961ceed49ee779d25e5bb9bad5b0d6393fdcb849a7e72bde3141b00848e4f5e1bded785e829ff81cb70019b33f8ca23d0aca8c9658f9ec71ac7c96718c7e548246fb25587ee571b0fc4ad670acfc28fbc87e850cd75d4a70f5849be117a968098ae8e855b89c977db21b75dde81a9590522420e392b1c9a84342917e7435c4b2b13a6c748875150f158758d8c6c2af4197bce8e8e0a8332ad1a14347afb5d6dad55abb5abbb75d1e958c4b42ece1dcf95470812bd00624424df72567c851677cddc8193821163571359cdb249478dff39ecf7571710165b8ce7e87822ca5a70eefe52be2da7fe1fe0594e17e0975ce5167d491ef85a3301b4175d8bd8d5153d5fe7627a6fd399b22f414b0cfe71d7fb05786eb284dc59018fa1a7e71285f506bb4a2f2f541485a5e7c7d508e9c41bfb27cf8a0239206cbbff493e8c1ed816995a758d32f549e7e8b4a4b9671555af0d4135479ea79a952513c2f7acfd74cabac8c3c2ff2885c8fb0bf5eb47828a6bac5f32c1e0fc5538ff010945f41791594ec2f8f877aaac78389b04786ebf98b4ffe8232a325521ee56fa464e924942c9d74c3759ce479e9a44f28f48eb7bb3c2f5c7fcf53bc7bd89ce03d412f417aff04cf680abaffb95fc3c5ebf91ad483b90ff10669a1eb839fc703d39593a0db4f7f20989643f88c983d81051a3a66a90c25613ce624173a523ad2bf9a521b4d9f65a5e9ab9c54df5d7ecafeb3a6691a8b8a3a2887bbad6a454d6066e327fbbd147f85c5b2f193c8e644c4e2529745951273920865e320d087d906a42bb847f62c3fca3d469f3d0beeb1f22c8f62995e119725081da915a176552c8d9230f44fb088068b527404c5ac4d8ab501f570b5e79e5626660c8b122c29313fb13cd5544ea2db83607eca9e3e28e6a7d1d3ef533e28797faafaf45379583c2f4ae9abda22d416d55c55b642720dea58a5e96736b1abca50aff38e695f333a4eed45f141de8abf96c3f3363ca0afb87afe7bf760a93fd0cf150adaf0d44cb5f73da36bd6ae96f7cc0946625249b32c038d008fa87805594a5b1616f03f0cd647a97f12aa7fe26df5ebc9d7f7e4adf2da6ba00450be7aee8bde9377ca6b99459573aca0e61ca0233c497c5ff3e8f3f53748c323edb517f1e8535fd3f0e7b787c0fd6f029f0c7aaebee6f9effb092651f348fcfada8bff79cf7f782466235efbef3f1ade32f00f6ff1bb074c7d5ffb308744b85ad65193b8ffc939ee7f3947e83d3ab2d4d6f2833210097fcf3b7844284b1599333ad6bc53320fd727af3d052570f228156f2874fd4caffb3ce27715f49ff79c689f9cd1d1f3202dba4763595113cbaa7ecd9b876b96156651d5df2caafa3d0893df7bfc3ff04f4e5ec4159401df5bf184bfa7fe84de93a08d4fbeefc1a05f0989e079f1a9c7834ffe137a3e19fced3d39cc39c0ff8e00f39ea9e1a113115309703a04b1e741a0ffe022dc2ca541ffd957a5e9dfeffe839f98df4f10093fc2f3dfe7f3f9edf1783c1fbcef7bfb7b16cce8cf7f06a13d9e0761700fd7f3fb833dfb85f8133f586a70df0d85fe0601eee16e17c0f4defee6ed9b1afc300b5e2c2a6ad2324b103b9f98dafdb78c9a5240ad9643b2ccf3af4250cc199a095142515a9262c2a0259a12aa9472c28cf47791ba20ed906244a09c8a5008977aee721d7ada945012fd252f26b0edb11dfa326f1e9ccb582aa5b2cd88f679f55202b20400010204088b530b2ba54a5234e0ca236cb8221cedcf424d99f6236c38d12ef43f8ae94f3ce9d770cfaed6fed131c6662d9a84942c0b59da33bc33ed7bfbaf6e5fe6413d5b330faa3f9bb3b754a37cb681487c8f82b75a5150befe97754fda9934ec77bfc756fdaca6655217dcdb27c5483b9966b5ec79db5bccad78bcaf7867fafb88a0f9de9e90ba9834bcb720940f2594c449de54d78f0894b62828d9c37bea8af21be5259862b5e77d464d27ef652fc7f7d5fe4ec948d4cf2a26753161d83cf27e7bcde3a94fb2f56dae9b0894d69ee35250de4bc17bea4cf378ea6f29daa66929db77b67eca739ae7439ce9d8eaa76c37dff7fdf73d45d9fe036dd8ec6b7808877f82c10761efc50c67daf65aa679720efbdf6b4f3f52179346fdcf5b3fd1ffe44c7bbfadcd2b6111bc9c237bed6db55fdeb36652025f2675a1c35da3edeb7b1d4cfb9afde691ed31477b3924c2d5f13dbed8f3e4edcb5907d3fe2188333a7e79eba84fea427b2f93ba00653a0ebb8b8e52d356931fb2b41c02744f2ef19733d1327bcf43a99dd9f3c2e5de5d3a483152177af0a4cba62c3f753f1333f1fc1bfeb3c7155bbe61b7fff4186d79c78df9d713be134cc8981ef7c59f36f7b862e39878900218503133f8110e1a618082166c86c2beff8c065db13de908b78693302b067e1c62194e8a91ac3c5d4ea2b2351363f14cccf71dee7ec34f4c245c6f28fb5ceed1c3033b9890314e3021633894854d1927a8dee66ad680aaaefb1a0e628f5a3cb7b7b8fb0f6ff989a9bf07b113547f3ff164813b6eccef728f1edd77794e26640ccd7c9a9927cebc91315826c6ea168e69be34ad79b6b24c595a0e018536e3da76c4f33cb60a5b85ada27b5d7123fb6a9d84678c0465762e7da773524aa518ee18c8983be9a4a246bb94149471c2c3026c109ac71469fa1ee5baae62cf38cb596bedbfe6bffc0548fdd733a124ff9754aad27f45e1bea4449cb5d7ab66bb6e7bee9de3b6a79aeaad56ce43466cd7d95ac5504b441262812110046d57d760c42ed94246c01b42a26343211bdbac9853df3b314764714f35d771e31ba63c8d2e36481d07ed5f5f527e028550d0d5b2f25cb2cbb6b8bbb2fca4dde166afc9b0f6f59252a23e005cd9f99272597baf48f43f8e3162c848c3dd2d2bf16e968b7172ce396d4c2549cb8dfd8ab836c5a5b4db1dbb43c7c9d1845800307500a68dd6228492bc8588f69b96151aeed87a498dae908b8e3eba4a38a2e7f3fea5221ee84b4f9034c2bf2a1f2c7ae2cf07dff3401930cbf840f12bf800a9c52ce9abc22469d60f96d22366d791e3fc0cd3f84b12606622761d104b0913ba1af41ca2bd47fb0f761d978499db83f07636e83dba5edfa494c371dc7bdd0fda75b484a2e3accfbdcd968edc2864c4253ac3dddb4e92309cd382ab2dc3dbcf39c389c3d04199907e2eefe6b6bce7842b93dcfa928e936654e299e1d66f62bf0fc3bb736312e6bf6dfad7025e91ebf207fc2d83e0572e43e9ee39ec95e176285defc683d33797a4983036141d517ea2b9c2f33cac0ef9df1d6a023d0f7b63339eb8da7bd1df3f481adebb544941c19eaf58d3f541ef7da00c0814bee64ce8187e9592157ef8db5214ec4ce418c24f58edc9fe9263f82b98c6619200e1d3000a54ccca7beec1fe3ac14f580dcabe448ee17b1908fb120913be17071dbe6f216184efd5101e92b231d9a3647f3929fc95f03dcd75244cf81e19ae685fa4a0cc7dcfbbaebbc1c2d2fd4c4ce7652fba6a85b0a3ceb884e5471947f6dae318b164d77152f859f617196eb86d2ecf0bb7fbf02bde3d6c74fd886ff18caef8c35dbc35a1e30c6f205ee03d2e7198b63bfb0b00761d00d8a9fdd8ca66cebe5332ea8c4c2cb678ace2fecacb98dae58a63e5599e45fa60f99515683096acfd4ade465a1ee1f09149b0892c6faeee937e12020cc139e7fcc00f6bf99ef899e06a7c5113d53eafd320667e0c8f0686bb432c0ad6514926c51d75362eee0eb1c07027fde46785cae763848e5dadb51373c4d7f26b2dddf869e5afc869d6daefa17dd6bdcd37b26c26c676795bed576c07be7b7496ecd16563d9cfcfc5227eed91c9b8e493c50f8b5df636889cc8892c5dbbdad98fed3ea28fb5723a0db93ce2ea7342e8e8d5bf88db715b586bad16dfb0db3aaeebba2a92b703c2e4b65a6bed6aad5dad5bd7d9efb00e8f81363649fed6ca1986ae031d594acfed31cfc1ed42bcbbd7e1315dbb07571d066dbab70185fcb81b0c3368b39252c687645fb71d4a721b1bc3dde06a03855092cd43b20747259f81dba41eb6b4bf922e8772244c46c3108b8e2a290933baecce75dd1755010112e4a5fa7c3e3535f7db74fc947ded66d76dad2674dd575b33babcced7660af41571bb07814099999bd08136e0446d70355199a69fefe67a95e57962b8396aad3535a914fe794fcaae76b35687a1d19e617069878e0e83d2ee495014c5acd6e498f6924e6989ee5e5293f7f1bc32d468152d8f90a189164b529450259a52ca96a428a14a342554498a526a04cad40aca54f0ee5013087abe84a2a6f0ef9768260da96f29454df7c35f29e19450252932140fae244509559222c402c317310dc30e0c0dcc0f182041567e7a6ba35f1b5ce1a0764aa8921429a5947e595153fd971f15091ddddadf76e8d8d1e8f91fad26a948b4ff7b1e929ba3fbaa91c8341d5fd404a3a630534d044a8721136aaa61f5e41c978cafd728876438285773776989f6e76a2eab7e873d9f6db11847ea62c2f009ca70ddd7ed2b11a8eeadb5dd963b5b9f646dadf6eb9ea9f5594099ea71f87e77f37e528cb43369482d1281a226f1c36fb9d14778da3dffc69c95b008d75d3aba2e24d3d55c8362151518beca4a7b88a5456909b54c68a94969473bb812537efad76f70a512571e2946ea62d2903afc152250fa65f5f2e3457cefab118a51fa99ec8f697ffb928e566e4d66cda1a38b74f6fff253965f52a3cbfbd707866118d25a7d467b60b8e16bd96b7f237bed7ecd37b22ccfc4dc2337fc0d0cbb300c6bad5df7dc57dcd5aeab350c472d425a705a70e8b8c71cbd79641bde3aeae6596bbfeb2c8ddef57950cded699ffb0ed7e7306967c2e83cfad5da755dcee8b83d972d1db7914a12bd555ef5379557cef5fc6ec9b9bbb26a4e6d79e2e86bae5daddb8d9e5ff38ddb73f444a2a7113d89e8f91e6863eac904367fa228a540f46ca2e77ce9590467e6504a95e83971f49c73aa6a76e88a0a0942519466276624674e17a594899e73ce1f3573ce15a5f446cf227a12d17302d133e59a4c5e94d2241ed3de24c93cc08c412965e96944cf39457ad29630a3a78c92a64baf21cd732a600a20795f7ad58b78e6456add58997629dc6cc3826e2c3afa86051d7d33a2fd6b50fa1b8ee3e16e8f6a6404d56e879b79f6ac3c2a8fca7329f6c06e3c969f3c2aefc64fa09a1cf719f4b38c3307bd636e5964ef46c2f814d713849e24f56c8fca9b384cc2f8bf9c74f302adb42148810801b43c5224103a5483943350dea32295f244e1a1fe10e30246074dbbd716fed26553a1e40cb4c1697b457f037b454f63afa89be9a0e858998fac4726832c06190cb22cc6f89ac76f110b9c58810a5280021d39f6094c500212240086ca5291b79d3a507d3f73a09a3f54df4f1ca8be9f37a0738aecb5eeb441f65a538aecb5660db2d79a349e4983fca5e60cf2979a51e42f355133f94b4191770c1fb9870cf2c78a41fe5830c81feb052ec83bc613798f2dc8fb79e42d6241de778713790519bc5141066f5290c11b1464f046478ebc63e43d9e20ef3741dea212e47d4930800c862b305c8120e8d5fcb654fcbe3af82dcac1efff8183df31bc1bfcb653fcbea9df221b48f17bd45e039adf9606bfef0c7e8ba240fd1e7537f33b86ee5e42f1dbfaf87d7bfc16c9e0f7c700062cf86d79b4e089dfaf3717fc1ef5f682df31f4b6e3b775e2f75dc16f910a7e7f0a7e8f28b03a7ec7c8f17bd4defe13fc1699a004e0ab3400edca19282fdf567139bd673409be06f5547efaac5635aa1515aa950e54ab1ca8563f542b1cb4ec0df2b6778abcaf2895b7e86d90f78f52e43dce1ae41de34bb12c4ddef6d220ef2b9a41dea28f22efbcc799bc63e8fda52c1479dbeb23ef2bea91b7e86590f7c720ef110679c788f9e90405dec47841de314617e43dfe1379bfa805798b2e8fbc2f0bbe98dd91b7bd4ee47d452bc85bf42ac8fbc714e43da220df9cc0567e0ac5d091778c3147dee3efbc5f7482bc45d70479df12802f7b4502c844e47015ae3eab305c85ab7015aec2dfe38ef171597baf4874f2270faaf1786a3c359e1a4f8da7c6f3a01c6bef1589fec7f10425a24494881251224afc1de304c7da7b431ffad09fc0fc443f468c71fc1789ee0dd9dc272264b361e81de24212e421f53f2a3f35f1f44357a8e327184f3f7cf929c6d30f637eba809f30f0f43d387ecac0d3f7b8fca481a7ef89f969034fffaafcc481a77f71fcd481a77f5d7ef2c0d30f3c7d51e527103c7d11c74f2178faa2cb4f2278fa62cc4f23782a1a65c81cd992ae51c2c400cc9aa95ac003e04e9c97d99a2e07bc67c266cc85d61cf19baa20f09bda20f19bde44e037c591c00f3181dfb495c4872ffda4c4e7977e5ae2378531f19bc628f0f8a59f6efc5781d085e3ffa59f2cf0db85f8ed3823c06e2302ec29faa239d4039876004f0ee099336d66ca044e928f01fc0027c9bf001e9d24bf09ec39385a3e0ef915c037b0c44bc857427e1213900012f22120ff8807c8b72183a53b60e563e46bf93530031620459f0039a30819f24fd8840069002cbf00583e01b084816ba7e303c8dbc2e47d4b798b0490f7839e88bc47d093f286a177a733e2ed6169fa01c000c0fba2f65d69fa2e785f1d71a5e9678cf116753e286769f92ff0f69596df82b7a33665e968f92a588453f0963aa16b4bd64aefd0b5636e19bbd13b745d96a61fe24d5d7a87aecde91dbabc467778539b2d6af916ef0dc336d5d152a5a50c3795e78c8e98bfd548189d93e3ad245a72860c439db0894c189b304aa90745470f8defd091863aa04cb8848e34544247da9230f2bd29a756352d73aa7561e83ac3dd1ebab69dfd0889ede7f673ce39e79c9af5dcdddddd4748e4d8b2f4e69c734eec544ffd7169ae8f4bd3f9b8b4d7c7a5c13e2e2df6716da88f6b4b816ab415a846b301d56837a01a0d0754a3b140355a8edcf5a561a09c182847438172b4142847ab01e5a0503828162a07d542b9503a38319c8ac2a9299c5a83535538273027b16cce6d895c0f7be91398bbb61a3923fb1838e3cddb88569b4a15bac6183f8afe86ae4de5a4184d8b2d46d3e26a319a16a01c4dbfc6d0cf62342d4e70347d8fd1b4b815d3184d8bbb25abe219a36911936197211d0140719a21910024bf2cd355d39ef66d5f86adf6388e0b874ced2b4bd5e938091404b4ca8a6438da3fbba9b506d1589a11edaf8156202136a60605a1a3835412c6d3da7e7b5a9dcb495db83bd4e95c3a7ef2588f2ad4f1a8421d8f2ad4f1a8421d8f4a7ba813eac8199b76ed5179543286b676e7ca3131de9233402df781275db6fc8d859eacddf276f9b49beb39e166fb9b39061d33a7a4ecb31835ef4fd31c83d29fdf04772dd35cab9aa6354195b8d152e2461399bb6c29414d5b461337e49c0ff093fcf9222963cad0f35571ee7c3181bd7efea787bbfdf5f2d38c91d90d1d533fe848e7d4b29b148eb5f78593ddd0ec869a32af9eb96735d94d4a859315a1a69da1e1ca53a69224a9f297a6d9928fc9c784c57230bbb9a9a0b65a793e2657fe067e4ca67ebd6231998f8936427a41566ac58da9985ae12dcf71f7698577e4facff73c543e5d62c6482c25385a42fbfa376abee1997a662f7f824a4c5089fa022de7ef1e2b2ddd9d4e1dc4fbb668c3677b6fe69d67dcbfd24dcbf0a6dafbad6edb96ddf37ef3e024a0bd274b3413b56d5bde3c6cfe40243ad04628e79cdb5b2cb76cdf71cdf4a4d94a3fb497a49834b277cfa6fddc2498c4cd9beaf9da2ea5b48bf7bd9c695bde5e6c7a1e655fdf6edbf6f34ba8124db673fe2ea5ec87d8036d7c7ee61cddc7d6b7dd736eadad9f9a65599eaf399879fe6ddbdbede7dbcfdb37a714f4f2c0f644716fdf664ee7b0bffdfc4a524c18338feac75e9ace771e9cdedebfcb91795b0cfc7046c74c0a16745f4295a4a875dbb69f4954bde93973932f43f9465d128666a90c656df6ca70eddce68c9e5c09559242a67050cc99cd3f294fba6c0f4c3b8d27e60a8a2f158348d13554f812740074a05ad181165e0d5a45077fd0271e684ffb28c647b4b76da1139bde3e44451df45706fd7183f6b26fe291f6f2484d1646da9f68dbc1b4a77d13bf27376943af8984f1f7f800ea89e5911a4068cd93e327cef3f2e868f7b8b4fba4f56f64f47bd41b590feeb33c13437160d4d4c48b7d3438284db56c3d982a8ba9e133b774c6e10cc749aef22c33424d9ad69e526a9a9a9c5655b55d6555c87032d615e48c2574ac82a4e15b48185e05699a72a43463f949ce98395f8633df613bfa9b78312dd3c07075eef660ac0fa5610f9be1712161e4c9d3c314323e0278240f46fd2bbe99c85a0fcc4141c82dee9649b47479c04ff5717dede58c0b10409e30c0454e1db2907050d11e7d440c5634216166704bd22572920fb999ccb2fa118110edfe2d0d5093cca1a2886ea1be514106ff8cceb17480048c254a3322271b848e2bab92d2f3af8eb59ee09066e57e5dad0a8477642acf501ef39dac6627ab91f17be975ea2eba9f8032feae81327ee2d8f31f7a424f3ef9e4c5bf9f7cf2b494fa9c80a1f7425ef639c1259a4f09e5984a4f63b1f6de7b3f1e2c8907b64139bab2e0fde9f9f9bc7f0d2a524add3750861ab938f494d2fba11fba3484ef3ba6d4aa6c10cfd7f7aeb8340835dd480f3ea1e39c56f5a149b8e7332986a5d4f2e4ebcf493d3b74a420ef331535d1f74ce58969aae9e783127a51e8b3f24e4eb2fb89d33ff97c4e70c84f48a1134a3d844f9e62cf764547aba263b541e878434d57e5527f6aef39e16eab2b8c9ae8fc3e2854443d3bbabec77a62ba7a3c2d5d4320dced81793e3b275f837a5eb82794d2fffc0dcd843e5fc33d2a9497281f954864bf69b674db3c5fe22fd7a494ba3b75f72ccb6aad9aa66dd9b6399d5b2c4bd5da4403b26d5b139b59eb745a58566b65c918b13135169b126b2d97715cd5346ddb366b2dc7715dd6754e6727e79c945277cfb24cfbb46ddbacb51cc7755de7659ee7747a9bb596e3b8aeeb0ee0799efcb2ef733a3f1b0659711c77d3755d100f8b95cc07da981a049d4ed0559afe6bc751b11793259ef21f4ef362b244c7480eab950409bda14528116a13a33f680d4dc5769a50150d4281c4769ac058495c2d96112c7496286119c102670699aba9b2994484ccd4fc3169264aa63597e850aa91b8339148648e68a494ba8b64e8e6f9ebd9978ef559e8589bc4e858379884a9b5e525e849e16e0fe8a59f36f1e3ef2a795b10e84f68de9fa954d7fb1a7483f909e56b7d16eb9ea94e2acddb61fb6a2f46472b3c51fc09caa8ccc4a0bce86fa0bc28f7b8c2bf87e851c6d68d9447f9949918a75e153dcae83df53d4d3cb195df99eaa23c304f0c7b76e828fac29d29ff9f927df810e591bfe88578219e661f2879e479b484102f7a1c4264d1e348799447f9944fc99bb87d5444ab1a928222c2342625bb8b0567aa6d3b0fb682f7a5d99f87d2ecc9db9305b89c7d19c46a38c5dc3b4ef9ed3a6e551eab36baa6e01983824122dcd2f5adcaa5ebbf6c403aba7e28f41784848eb5051ea169508e84a94de8586374ac9eaa1ea8b4cc72a7b9a2758a4800000080006314002030140c88c4a2c1684c22ea81940f14000c93ae507a569ac7599632c6186200080000000000004020401800164117a52a34091e456b03c55d624c24b29134747822b967e2ac78ad1ee32a0005e2086d0a233de77f1715fd8bedbabc8ddd39cc6091d5d6e68e4ce1423ed725fe4ce2e1a450c64740774a360d8774799e089a95e232f34f3d0e77755829c8bffa93a28e52bf3a928439e0ec7d9b4c715bfe04fdc923992488760ef4cad984ca8d3745a94b3d86ebcb9e36f34951ac591e5ef77ae7f2e7240922f15f54d8568a5706bf83852aa349f56966bebb53b755b98e640a33dc4f9882f345e0d2c8fb24c205d6ee94a720c3960703ed284239188a2b252547640a94c897f509c4fe72475cfc6e4927dbac5b8e135361279ebc29158195ebdd815eb41902a25971e27617c03e7df41a70678047112343cf7ffc3eecd064d02247208d3fdf7395c58f48b29ad5d779f2185d402613c79ae7a01b34924a62756baab3fc2d2bc205ab628a1f335ceeffd222035609a6209e8470941aff8a1c51eb9bf1fdd4f39c00cb0e187068ce65a070c7ebad174f180c3ab6c92f636db16b21b3cb903ccd145bc2b931e10637c4c06e8f447551ac31bfbddc9ebf31803a8d902eefddd96fa2594e8f8587964af26cd44feacb8861c641d9b9881fab73d52d77f5a1e56674ff9034a9a426dcbb0cb7e546816702236d82f51eddffedac78e49ed61dbf3291f07799e0fdf2d2f08680b253dbcacaf0c41decf167e40671635dffb8216ea4366e5a2c11617dfa3c45d2611a07818a76d4fb62cd0576e70792e64589f8c5a0b649bbccf96850610c51afce2a435b7836784ac36a4068a36afd66553594d440503658f750b7fec35af73f627afc5f6b9bb0c4368ff11a95b2f236d99967632e5e783f0a57350b6485402bc7e42c3dbd130d57e1885e43f9a1aca5aad1f8442d7afb9d6bda887cfc2e376aed21324b4400bb0da3441d2a019a101d90ae24dcdd914d1c68f7191c07797bbcc975f4c3bdfcb9776a1439d349703acc9fc3d9a73bcdf472cafde79f4fe5c2b94de3798ddd397b62502acb65f77f4f7eef788278c31be231bf9082cce8ddaee7218bda5bc58b2ffc10475639cd9a18589ecdc9cb63984bfde8d7eb329e59c24e8c6ebeec0022142de353405824de52c08b9834c211624f099f351b040dcfd0a4df87970ce4bd062d6aee2fd62db65f46fd219cfd647548ec93a8f39ac2421151736ac0f29c9ea189c05724ac735e195b0dea8a562cc49557af5f1102c9b01f40ed9dec280b4ad2532b87000ca8900d1e8b2a0187b01341e23a61a27a80eb852f829cce9d0e8acee120e638673db6db1c6c5349738d02a0cc91fc046e100ff74aa0130db37e4c96044ce3817e4e45f168c01f6eb002aa90356579053906014ce7b3a1741926758259292d2dd33bffa92868a4f3f1a8c2483b3fec2cccb73ba8d6df10605143db83b184d75da280338caf33debe2a49524a5175eac560ba8c413986c91eeafd69fc69822ce184a009748873001bcc73915cf68c79e8e7171d6e0278d1b0378c6b4b88f6d7e6ffcf75a8e8076c449fbd5caef2826255df4c1547f5859e7db2f119a7480140fc1524f48cb0da076fe48588ae4c1936f8621d62f07d123df81ec3d16358cb9f3e3167c7c42c7e79489ac9cf022d3e5d68f03363f70dae142c7a3b9a3930668589067cc3f628c20e0f3f027c141310cd20c9016ec4e3de4723188a8ddfa892a97b61af4f13c02175091a03cccf05c16582950face5ee0573857cefde161afe05fe2ff96e2a638eb636cf9b10c612682652807ecabbeadd35ee431856d598eb6ada919fde8dc1ca0b20811d9fac08b10ccdc494a02387fa74f9063d84e104fa6ca8c1248b19426352c3d02108bd1df0d28e7586eb4245db072e59d5ca0934b3a18241767310bccae302ee58b6ee6824bc3ab112c5d4d5d8de42478a470a6256d88b11e12199087e0d747d74426c80f4d245f0b70c23026358111c3d6ca26b8dae0294fd0a3685c27e1da7f2228be296b37ac197039dca7f7eb4444a46a0373c4ed9310087c7af8e5946bc68deb794de72d13e11bc2d21c480c3e00c5af85c911ee37810bdf2b1bd4ad7b579c52b0f92ea3c2e2306ecc365429aea25030fa218ab2f106b931444d80553a73033100b1e8819807858fac0d1bb0bd204c7fab4908e7bea7c6297e79e8f6650cc27239fee6f718c086a2a2ec714a15e8c39022dea11c3fbef4d87f17e24950cdd26b090bb00a4e0273b81433bccbe2e93ebf5f2b3e09bfd155e5fcfac0fbd1993b8c5cfb4c441b5d07281b02fa6eea11403f8ea0f9cb887180dca9dc13f640edd58d0fbb08046d28d9c5cf9eb7f2a23fd15916de1eda54d74ff658d9dde1e7e931defedd953f2ed4106f9f6a3642b7c7b80d38c6f3f61c27d17a08670efc2b87f16e53eda779d72bf8003319c7b7b93ee2d4e67b0a312c1ba478bee64dd2f63b9efb47b9631ed7ec41b40bb371aefde28768d2716347e61e7f92b057184711fd1c8553138053cde1ed8f3da1cca38f1ce4b4eecd4f34cd25ba35248e7ab18e9abc2991d375bf65e3740ea400f52d53ce9160780cffd5cf88724f6fdbcde3f35d557b863e252736079164a4bdf63efd0e98e4398100d91fda9d535e42ab6cbe7a0c5a09b484df6d16cbd0e83e9649d4d13865ac1d9310f144ca9d72b9065f6fc38b84a1d8ef93a7b4840f5987df63a523deda414ff817ee7b3337fa9b608edcdd06e24a1dd09c6467bd1acfa6e028a44cc18334796a52bfb57fd3d2f50f051194fd1639c774ebeab27082e63609ab490816a17978114fb3003f3354f985e5c56b161d203dd195d737ce4d31a46f6f70c92853384481ff9f779d40d6ef1ebe0a07cc841e96c477476fa2e2c2470d7d0a84afe5a7c8382b2ca6de4723cccdcff937715847d5a810365a2077034b1d5e7d045b392b63f13460ee5631212325839a504e574f1aac57d3afea1eb754e1d8c24b2b14d0b4872097db662700c088bc8614f2f1fa5224b9bb64978375b54ffe9683edc551da4dcba306e7cb4768e185f473b70af5b0d08e3e2888e988f34e5bbef8be86ef379d89c71d01e83e87b9f3def2beceaed136417ac4d575c9248164275f8a85400c069f3194069da0faabd1f7ee4c949e51b4b7e1dcc2e6945b9208a21b7a206aaa5ccd95ebdb8b55e81f88d2740d13d876eb78dcadd79f0784abc68a34288399b489558e92e6388ddc6738a19fdd8d730d3cde105e53c7fdef48cf25eab91057eb354a1ffac8216ddaf32dba9d14d8547d2f636197d89715eb512c8d180ff3efc6fc7932e145c0af4c74f1f6c34c1ad05bc3532aedad772ac79c28952428ed75ec8655af035e5a03a6548ee52bc4050317a4ddd11e7d8415a10d05981068e6a714f253089fc648ee366c48c2285b00d392404e9473f917e8bb19a5307a66babf7541b2b14314b32d8d32b798f70607443e98a6d48377f43569cc1b05dd4c6a40e4944349cc6e046042980b7360adb282922699c5fec43c2cd856668576b99055690a84a0aef923c4fe6be27bf6a9da36c54b36e46758a8d681c06ee926c03a52e60c4042ceb81983d80b70747f7871a00ce7fa31c741c5c59a3cdb5ad3096e03536a25ac3fe04fc4fe3b7ffcc1d7c7f610491ad908cd375255633f25a0e025f477cd9f13bfe2815cbf8f8f5565822ac07a4e09c244e8f5424048eb88b1030497e9b962ef0b6a23bc195823643a1701c6c04e98559bd8fc24a8ef9f54b90407722e1ada95f6baee8411d9d8f61f940982050592e30f45786473739479da20741dfa3e47f6bc293f43842b2551d7638a75832bb0ac502d9d787ffcdf20e452347afad1c82a505a06ef694fcf9b4ec135f712af1f1aefe2c43aa95501129d1913412a438bc53840350f450a4fc2e73b744163f8d264094e6a60a264ed3e76e4c56ee9cd589d6b3df93743b527bc77b176b43395d70bc9cf9cf45a48543c08ba2e4d0c28669ee967325c51daffddae69c076fb185d9f632e7587541b5493de473392168233a41b0095ead0f520d248d03bec18df91a5a14050bf33feff8d284dfe42594a03ef94793dac68e0c1739f7dcd55ce863aba8e1854484d7cfc21d554d6799ad56f33f39a53f81361d331694790e30a0b859fe81d60b53627add2941eaec819929cbb3c2703210f4393c506104df9d60953a6bc323443d5c2426685a4dee7794d56d7f055f6973a1a5c96bc54648e7fdb871260215a1b9dd99554f28245769b923a614d7f98f14389cce09693f839e521c3e84967e3ea3394013b65b68a514d7659cd4b9c1aeb712d06f4fd513e51e71474c3949f76a1308258da6d8c3be5e436d44b3428081dc365b0d246ce8223098eab28535160dc1346a35ec5a033fb137070f1967db20ca6bfd0ec679e24c41bb4362128faa61bd652f7fa13c3b51a5cd07c71db308350451fde3b9263f4523416913df68034f8a75dbfbceddadb15ddc98dd8d5e4e8ebb3054293f8722225122836b340a75e9b95cab709cbd3ba6797dffaa1705494fedb8fc60ae614685cdfa8b46cefe14260f459f1417ed3ce3247a750ac0f265b8cce1c823fa3a91eb62a842593a85214d9ba16b08b7ef8c7df804d3613da43e443ad726b91780f2dd051ff7f7d367b810cae470f013a07cc0feca3fb6bd32a3d3795d77ff224f7e396af91de0c45578e76575586d63445095c607ce757a13e6aa7e3f4287a33764f56ce58ac33a29ab9872615d673dac227c88a64abb2a10a4fde696ac60f1ecfa6c106025c927bfda1104d69ef1e9c67dca4937541ff8945226da7f301e6a631208a6e40d88e585d4d065ad262b971a5e97c14f222a553547f84f6f7d043dada74fc1485a0e090bba8e8da9df90f32f3488365d3af22e3d986322041acee9839d98904d198c2f92540c16bf74a07d72b369720959baf3179991d0328734c9495d3adc90ec2cb1f5f8203a3dbde392d7c5f95be689c5a4e714dbdbbc1512beaf7ffd91f36f507b845c6f0f932668d97bc460da1dc535a9d74e075357d7e0a666c7991c36f1e519a1494398a9414155ecd05510de30d7d986361514ea07347f104f51225737b71ad2ef06dc3187cb2e168fd9e81104dbc6b7fbd8820eb8e12bc020e62757d652f08a7f52c840040886821f15675b7db9be01ea9e8451f3a69b272b0405d67efb3c9602e50f4db5a82fbef248d0e29a1c84f31096630055999bf47841e66d0085784294639ecbde2ed2c5af6e1930d9fd012220b40cf8061290025d9388a0dedee75c313baff38867b70e00749fa184769370374730bd5a16ea8be24e5f0f5c29f95b5748fa8572f814cbe7e76316cbaffdf2d694768fb1294861f840723c3d633278dd0cfcd5313b9c53ca67254b4102807102ed2a692ca2970e95f39767b45e312262b3050950bf8102ff3b7328f1fc1f8350952d31825386dad0c7a2820c25ea022964da72dbc44bdf5007cd8d6c95decd678d05170a62864028d63d0a3c058b9f985de4463d83b601b1836a2d18e4d6d6743c4fc4da5875aa2086dbb32b9ba651a8d7051475b4ede23329b835f8caecb1c472ca257f9f130d0242a1c4a1664ef55e044d311e059532edc244defd96b2508ba3d031dac6f59d5ff9af5311f3ba03017599ae3191f5ec285020e32efe0a91235eb92f1220f551c24806a54712eacc1b69d6742ba3bc6712daaea466f94c3ab8c6f7c34e8bf334106d095deed1920e4788d57177b9f0b70c1002b4d500a10d71825fd6bf301768426fa23210a391601aa5ad59f642d5540d021ba56ddbf0b42b898a67fe7825ac21ccc3232f300bca0d8c94ce347dbf36ef8d94ec439340b12825c6aed35cd46287a9d10d6c8a958bea1302c0d5d65c3f3366686c037f0e82e3a20dd80a1c0322e79c7399258c3380485347ea18e57d2cf7e2ccca95b2b29d9c11566c8e2768fbf17f8e98d3dbb225ef1d9eb90aaf33aa7a50149ef7ff6349b7b6cb801d509be54ecc8dbeebf4264ac180df4e92216300b3937fa93ec63f5724e0dd0c9c71b18317b48461a7c34dc51ea148c3e5ee14241a78a2e042a54ec7323ad0aa30917b362d916c92ba7d9866272d2d765f9040875ed732a0bd78d9e7db0401be71377476897e86c02351c1cc6e5c30579f479ad05ffd1b829223835ce5818b5c75fa557d615ac6b19e90eadf36f7a151cd08d759bfcd63d70d25cca212b1884201ff3574dd1069b0a1d3396475e6ab06c71fce009448623673d0bde7bab1bcb04a1d44518214b53b842f82389919892b515cb37e94a0f7a10d5b404db2f3a1e2ffd7a299fe6f28c9cdb81e313485d11250608fa4e5dc377d5f65bb8d800aa552b5e801a368b34fce39a12b16f8b1b65d3d4df848fe739111513ccc7e7c23e709d30a4fa7e5cf15aff2ef4b3c6cde61bb9016ca6f500353deb3950f67b8e6ec601e70c47e715c452ebe535ed3c0751b74a8280430d557d69721ebf7168c579bba3496cebb7681fcaab9ee0c02f3347fa616ba57d00e40ad6fa0e1e186d09ba71a387f412c2cd6def3753bfd8cc03fe6cab0c147c0dacb304cb98f1da963ecbe857b5b7dd06e80079706ce0dc2691071a05e53e95497b800c202cb56ac9417642b845395fd8100cd659af36e9641a5aaa323627ed0c6a181cd9b7a2963279289cd79af91c216b775bc506ed8865a763976fefd833ecbd60d874e3f20edb901a326d2be6788f4754e50034523ce20819340ab9e6020a8589b35f803f00d1a8aa7d42ec6fc48eb5e10a25f3baee3b8b8066d2e02f30fc375b4f23b593895e54c7eafb1bea115ab35cd2b609b1778dd6d43cd484e35ed9d154f353dd5e5bd8331c1c72ab2ad78684b69f9a37c2a367cbc2dd14fc0c61f9c6d401bce38dc956a837f3140e2d316decc3a5aba4fb9220db5ee8f2001d57a5cf75099f873ef8e2053a4dc128fbf53ac6359f7ec900c89fa76a31a8655958cbb70af62c1bc929466c3510b84c58b13b681260d3338a29a51e463df8259374cd2e675f40e59a295ea550592a67b60f3355c1e25588acd5329b6580e37e0d4294ab65909f5d93d8d34a0b6f84abfd09a183771f68e01c93d39f9d678a95d6745a8663d889c119e021bed44746472beb807800edcd85b42d99bed94f68bb123207867aa87de3ca880dd298798c9ef9c165d94d0b9f4b7ac2d37746de94a21f8ba2d149530444d96d5d71693cc014b380e250d930ccd283b101408411bfd6f0e19a55aa92849b857857b41dde7064028ac1c9bcc714d90501047f867fda4d4d389447101067c81371066cef1a2ed03272fc46fccce90e0aad624adf1cd00171c4d61f5940cf0c16daace70d857cd1b1c09765e1cf115e458e25dc62a2fa0cf47038b0bdbc4e64b74c460cfe196598d964609b08fea3cbb636aa980bbd38e9fb182bdb2c87fbd225123960faae24a86ea94b08b0501a0c73b5ee9bb7c386ff20f52754eaa8afdf3ae6f096d2d58bc50ceb381f7fd63f2feaac4c16cf88129190b90178c45b77cf2b2ddde4f8d2532133ce0d35c8e87d71b47302fe0b7516e3d90615deedf04ccf0005c0589375af59df901478196febff3402aef800adb6fea3ff3e15d5161e9ef8d40619e8ed1a0400189626c6c92c2844206655df57702603e140148585bfbf734aa8546ae8a3baa81ad207c6fc12b922e1a064da111442a30d053ff1915fe3300a8b255c9aa4edb0b55ad20c45011459a55b496b56c38c95a5137f830f4a1b6cc76105a46aeed6b9bd8e829784bf66e232bccb0796e272c622a5119a56c7ad49857e9f1d6c54b5644ec40e9bf14ee988c2f048f451abe4cc01db22bf8af5ce680a03792a36351cd4aa9d97d41182e9029200eb72b990f4d49a31916240602659a4e8291c6ecd8245ad06dd445d6668ca268c11bbda32e458692e65770b83604d2da033791c062298c70e9855fe857992fbc7e4ab16d201f392c12ce4353b3cd8118568b9af88a75510b73a6f227129af42821c6bf40ea119bd498626018b68d5117458f6f1574cfd4fd5883501c28ecc11c5cd8c0268b01eef212690e3d24166bd64e26fa48e5bcb5b0339aab049550e91d5f4a7e273bd4c744113132941f6d3dbc9a83c1026b13d62189450c4e4fcf511903e17f8ab5d38f646af222101f3696ce6a62eea64d61f9dd398cdd17e75d184ca4621702ac849df7db8761c18b01c43819319948a2625a04ac1d6e03f5c3fa0119bbf14371e64ea06bf191449abc047538bab49f527cf518654a9b4d220849e100ea88ea0fb3bc0bad940d0a4e7b0ee94e208e7c9d55435c0bedf9f6e9ebdeb41a306a3ff16eee7e8239aa043b8f74452710ec416b60cd1d12c305741b6ffc036517293100c8b34cb9842a2feb8085b3b7e0b57ad06ab5f0eea976fd0dd1da714dfae220ebf457e6c2534c24e1bee878983c06376fc51556d528e337fdb998ae8d9d554e8696e388b905ad841ba2fb24688a7ee0edc6c884f718e49dd38a4053402fd874508b100a8df9585d0d9c545992071ae9b4ae73f44d865374fa430e9efb31ce1e1091b0a29b3494811b41ef2a15104515429b818bd57d2b3586956f57b92624be15c7b00fc45c0d572893ebc683bce6339b7a4de76caabcf84737155759dbee7cc2a8f677c1e7f26d0033ea19fc54530cf945f88f30647a037e33da3ce79c8e866744aba4741eace9eaad53a6d6e6dc5ea3eb01ca077fdc9f7f91bcc1d02024318269bcb4e6f0efb39cda0ad33e0ee449e20aa6ed68e932f267fd93bd1c45b81dc2a3a17d9cf64f223de6a6c7f2302106cf8978e3104ea213d32f19e608ffdc80132a64bda19daec10e9038b2478d88909aa6df10ce81cf0d9d552fcb132a2934d7147a203c99ec0cb7dd73ac1e4389b251ca25089d865ff578d6b5c7eac3b9df5d7062a74192b07b6d2e063f2897976576156aad9d53218a871e987a7c2a47ff5cf882a0c86851af1ecfc3ec0f6b63bb71db1e4a5f3a31ca5bfb5fe7e01ec203a877c5821024a0feb19c5817280dc947fecbc645a68ef837fa3a8726c5b9b2413a21687e8958c423319f378f2a25861db1fa502d225c59c6d29083165c4223928ef4e590a9d1a47f08072f25e7cf643f8f5b71f7c8c707fe149beee8172a4f5d5d13d7bd4b64611fb835e40fbde9124d76b37e3536d9ff480864caec7e18bd1aa705fa0fea416dc6e776eb7cf47defc262b2a4b0644f476667394daeb4720b11fb3045c7b17b8c1e58b0658478561485d80c976b688e8e93f748f5ca597b318a9a47c49e63456abf5e086c8937093da575fc6e3adcd2d2753c0693eb598d20d8e1c1ea7efa517e21eb4f46d1bdec57b903d3d850f12d70530a38303b5911b76f4519dad448ffeb2943c6b30d081a1ad226af4b2b1fc2c63e533fc0b8686a1b885b9b5482f260568b1870e1e48a8acfa45b14086f6f9c95cb4d48d4083903d43a6dc6010224810262f7a69c8f5ea961006bda7ea24f25d64aeefb347028b4fcdbc1fb25827ad3e182bfb388a124f96ea0b6447825fb1b09c3479ced5b18c10c1d03c788b188176e8854de309a6571e13e97a5481dc2f230c16318ede3b2c40fe04b71f5665396af6561731cec7ead24eb82e11ef6fbc26915a02c3a1f90c6d81343a02081e0808e24b3ec5f4b8df97488c88fdcc755d048820315f1988f38053fece4275ab0736509db11ff03bf4066a4cdfc92df94debff74c4d038ee5106a61a91c0af38529677d64da77a8f19156200489e97cdcf7b85eb11aa8a073197f5a1544bc5cc4ec64d05965ae543f787df1e68d603aad3e1916e52c753f9845ddc978d3f46a389df8a65d49c5d20a28d6ee0c0f5cfa2f5fd6bc45d3c7966b77f844b2e6382c951c654663cda6402e7eccf31cef623010de1ff865daab6a183fe412b7c8de7e3c4a4bafd6431d09041be9397c94b0b3571155059892d87b799918848fde1ace54088a9df567c5d3667cce8ae21af8afef413c119935b6b8a4f3cf484636f3a6b55a2896191db81eb9d0bb3b5a28aa9a9fc9a92c90cf58971515357567035652643337facb8f44c062e0bd07ec3c1e09fcec5aa40b50819b0530a366cf3802e24dcc5926086af7e31816fc9ba9988e403681bd33064c506f614d9c88d30d18ebeb93cbc41d3068ad6b7c3b5c66a93a4abb849a70603e60a022084605a515644ce9af720ae001db32785fddacdd9bd320e25e10683f6037249a063d8b67afa70bd18dbc2a59c941a2651250a3153f6050c4d6a48b475084b419ea33c21ab01e0fee5cbf1044da6c0d599848dcea0ead2e693bcb8b4f6614a2182a3622e526893f17e9323669c8ac4c6e7ce83d751764e04626113132856b5a9a7113a2ad1cd59aaef083b34120725f4f017902fb9af09045108b094b2668e48361f79d70393d0b891fd8608dc24fc5321f207c4b10c47ce4e693cbdd07fdf0b0e4ead995ad2469dd4f195162cd793f5791f61e4b9cc102f9482480062be513642619414cfebe4aa71496ce0a4d4e81c067928025744287d9e7f67328a6316b979367e5ed954f7232de0e4cd3d5b097a355b63c2a09e22566c578f19cdf25282189de83ef5da86933905c8b47eb78aa123e76107236618a8ae9fa6c491f97673d24ea685b35f0485f2d839b0da87251ac7112dff1b88a16bf214eaa51010e47d1da84d5c4e70977c8f7fa08081ef8f1ed90debf46c0ad730a9884e77810186f222a583bdc4a25ab146fb18200fa85d22e24abb3d112f5eae7bb6fe2beff1e24eaaabf7b135275911408c90aa663e68099f880c56b4f2ad75d32bcc6d2b128414304638a09d3311184a7b932e93d255423cfd3a2e6a7ec8dfd46340086870a89168c1e002fe223c141713617b78c7decaf14f2ebb8762b3df40f3a78957ad3f5946b3f798acbba3e1773fbba669bebfce8390e3bf70646316b4fd0177d6427854907845c69b50646e6fb6ec3a9d5b0b5f9aa550df371358a79b558ab611e85eb5b23a6544e03be778839650695614ab2ce7d83daed04fd68c63212d6708e05024e9a879df2a24db24d9d1b604de8ce1123652879224efc21e2dbe2331bda191ef9d88cd57468d666c0989d23872b725242b4387d3a0564c6ef77f9c1b8aceb09e299640d85a36f5e3b4685ab4b81f9a052288d452a0594d08f0ca478632c747bb2fa227c17a08604931b6fd4952ae2bf82100384f3226d2387fb4b3cbc523a36608a8c80530a887e367935fdf54aba32038cce87ebc56dd52b053ba03d05b6aa8a3b4d76b5dfe3c93e44b1c36f16a96081c3f69e2cc7f12e93ab6f2dc9e25241438cf64e6d50503f6f620031c5c8f851afd9ed545c3d85227c9ef92b334a6b8267292ac725fb2f0cb871d5df9662901a01f264e06b9212f5d2f3c5f80f0ac236a3dd1454251ab881e2aabf8c8cf04ba053b1b19dc736a5ed8bd545e40bd990a7afed90c0a453cab6a04812efe9df35de8db481e7619a48b33e2288d2235efb20c9c8f3f2342f500f792788e6695ac1633a7be9cdb590f6bbcdc5428d1eba942d9f9fba2dc2db522ed44a1fb6ab768811eb4da51ef08ee17fbd2f724b0a1d0caa06c0eafdb3376cb5dc4b2e87d59fc3bd63e8ec04b2fa8cb6007db2d21ed42023b374c1605a589ae45091c76efb7355cd20273d1647381f9e5472fad3c024ffc91f1b1b21fd443fabd64632e88c47b9dbf36db25aa23781763abf11e5e7d74e48322b72b68baa4345e526bd2182540f70846e762c49bdae1f61c642cc0a247261046e17da52fd59c5562af6438e5d45397f22e5668ea664fd7605a1c3de35382c57e33d290b6b7d250befd51fe28beeb676072d49291c92b5aa872c9f4af131af51e98df17e1ee5ef840fdfdddbb01064035661c47f1ef14da5ce878e42de83d7d47442905442e472094615f38a6e0cde81adef9d8794d2c2275751e5050bc134f6b8707bcb054471fc77eb1ac122da27a6fa3c351e373fac6d65afddc57e49b3feaa0fb2a8f54773d74209c38f4ebdfca055a1791c14f7b51d5b14c7fc30faee8733ece40b7f566b34a87fcd51e21fc99afcbfc127cf4076b7cdc338fc96a4bc8670169dd6d2c297a629db1a61e588384ff0767c9604ba214c44092a36331250b9ce9d852812081d0a45f048c381736b33f6fd0d0565cb23debd31312d4defbdaf36ca0ea061e5159a2ba261c111529f50c41819d61ac57ab22fd105f51feca7d402b008e13f768b51ee61826fa3a0c2e6ddd5b18592f88dd37334f0b7958ce9b199f08c9cfac09748ad2a37af5266450bc4dcbb3027bffd49a5417d274025137a1551f4ee72ac4fc9cc0cf5fb71348340284375cd8f60971782b619b1a21d25e233006e23960750a83ce4d9854162e6acc305d0a061317a688b2be7d9c480ced9ab439a32a91d9ce18431a2f63aa00149bb80b2c6fd87345d68bea5e947022d29d9abc89838273168a8804776c65ca4f33c79c49eb4790eed3abb8663c8b3bfb961f1bae57479dfb7880397ec296977638798895c0b253f46b72e32bbd0046c41b3d9d2406e0bf17dc7e8010f0679b3a0619a81332f0f3e9325a70a2d0b5b7415f5d8678c7e81a5e2e2a6030ec69bc2c296afa863c2504ea4f341d81f2d4e800a316a4ed3079c507d13983711aaafe1ec41c70e3c59c845664b48a364137768db5c8fd802fe4ffb8d092227c42d35e58005458163d4ab4ee54679391243f2c001bf249540a26c61abf6c564092ca7d3b2e0a6fbf5d2386d396d5f44546cd981b1d662ed51bf35c60a639d3c18d70322feff9587ea34305c1f7e32d36d605cc622b2d032148d37f6f0c15a79c4a95b43fa6a124390f4b0137f06984e686e4ad2552134dc9fd0f645948cd9c25bbad597262aa6829fe0abc467b7707a52e8ecf151a2bf98e2b7a78310136eaa6c12476ce45a523916809518b6fa0fb858841667b0b91f3e17776d147491ae489a5aa1bc747f6a583caa60d33e8b8d1810469121c16c7191c0daca62940e57d33ebaaa60e8a1f03fe7b2e89f83a316d789da99c57cf5d38a5e94e7d6a8143f5164580dad86da68585e17acd6a251368db152c4d46afb8acca14181b2a687b465712de56bd20a6230b568865e9671bc5503e0c75dce2766c153e544286e1d7a1ab3c1b6708039f9b458af2eda45ea51fa0bf4a5baecde94c7075811b31474665ac53f6068d99c7832c60bfd4131e9bda83c8631cd791d0374c65eddb039612069c6a6e224d0742a2b2e650b2af6c9c5a1c93e48e5cace5bd0184920cb08b275312311eec09085148f4ce5c874f441cf1ce00d8cec4112c48ac62244aeb6196fc94f086e570699d0947527c46958d3bbb3a11d0f784fe1738d6d8a57d58e4cad983677eb3263dab6225e86ab0de98b74b57cc5ea523b3a4ddb79c53bc3afa4c8b696778f770f8bf61002aed8cc1d00a4e4b4bd94f7d029ccb59617868f841c8b6391e7894954e478cbf875b2010e0d28934b82e009a2de19467d16ded26ce8eb3dac46c8b64eebeb5c30fc46e2be229631d71ca01b6597235b42b0ec9ec0d243f16f0399c6c1ad2fee673a5bd93b98f710eb7dacd0c448833380237e9c5c1c0e026923d176a73eb651dfcc866e9d842c3e5f3602d99a4a122e5000a05daecdbb278dce880359de8841fcf1a4476688abe5cfc675fe840be96a8aeda0ef286be123184d63911ae8630bd0ab54f19449822e95559058ca526ccfcaf5014ba1f8b3c7e2e4985c3b2d59129f41209641bd7c01a90ab6536788ebdf815a094d834be697a0200f1125cb069799e7f74253d1c651b29df754e28073b68df3164094ec446ccadfd5c3d0a164e96cdd20b0b1eaecb74d9f3a76bd8876a16cf19d2a11fb00257187d23cad312a9ef1d739d51703959b9792106dff8a2a083ad6546eef452a598fc07e6cae511808252ef65c64dc1b2af59be7ad04f901c91fbbc2d7920ef19003496b7554f9184919004d2bd4d12e30aa3e08c48e2f9b0d33e82643c10c88a0d0b15c983785bf66d25e4704a3568cf9b2da57ccb11b8638d93af04f8a2f1cd9ac3656e5424884f6604a644bd2bcf6c772be12cde7505aa062b70ad5117c947e46b453f07cd62922676cc8168ca006b22ce60dd929751843a818c5865e41982c8da79c044eadf9f0dd1571258be7f13e8dcee8fa8d6cec194a2da19c982627941b2d33c075a45af49d71b57f955e1d70b42dbba02556b99c6d4db05bd41728ef16be91a54fccce3f82300bd0b017d970e37717553d6137b8f13b0d707296575bfcec42e6513c05b357658a1581c366adf2e07d77ae14f36946ffd7566fcaece793bb4df25884f9fdfbc6ddc60340f5617e5ec706396c7a0ae219bd1ede9b7fc1996d094a20ece7e91356bdbe909d0c9db645a7ca9dc8831561e902dde3ff73276e1ecc779b32ece8bf1e822dc0637c50dd4ceb27a449920e74504f13515687cc25e801bd9d21e28daacc07067ec67d67a3671cfa37f5dc2dda9da0946b7561c1b3188e6a6915f2eb9fdf80a8d326fbd56ae0affd43ec61a2bd54cffdf01f21cd26ac9f9ace197eaead3e678bcdb5602ad10ab8d897f0e00a070d17b487e00dd5ef4da70f39cff9e4eed21541bc2bf6c25726e7060bc0bf28671ff94dad10477de3ec2236aeef5338820290a0de72a82b15ca4eb2931885110b912ff20627ffa57052c1c36090d1955599a350c8c84eaca7ff8328c923466aa3dc90c18f37b6d4be41d627ad87b955568da71892399c99adb45ff94232dea8fc7d03037b93c5cc09694f5ec89a627f2fb6cd26cc216e6f1c17006e0a0d0655db15e12d0ce197ea51b4e8036c3f3a63fc57cae0e13126ccf019ce3721c1b9b93842b0d972fbe287778d80416ede61f2968ce04b6c2b466337a21921648d7cd814dc4cd6e9984fa942b062952e57de39489490b92778bc8dcbce2ea7b4b705b484d851f02074c52197759224462cd693b82c79f13067737e1602b3bfc0a32c305b13eb7e917b04bbed8b94ab3a3ad3b23c740c1e9768bbf98ce4c054bc8e92654dc9931177496cdf59b3293a6089c1b7f0155f91b56d9091d32c42e199533339bebb850c4fb7aecd35a866d5574ae38b6502b3112c7fbc043bd72553fb5ae4c6f968bede7f0684e6eda3af5d09cedf0e81d7b655754b3786272216744e75bb4a693f9622baa6ef80d71f482c5accca5a1f8acb9988eff7ec28e793d0cc164047dc7d77745e44a5ed1adc8df7545ad6013c5ecdb913f0d62fcd088a878d4b15180c5065d6b95bd90c3a490190044c1784f3709dfcf7fa992fdb960797aed4dbd9c1115d19e57f40549f3dfeda58ba556160cfcc5d308494fcfb004ab8cf05d57590044344404c2a07c752d394c3973a88d3a21a9c8075be0ead90ffcfa0c1328a7e7d28c84159dd57f18d01074f9658e11bc6c1b98724708f0f84de49d53188e62a0100d245511d77c45e992e6e993e89db5974928a7b0c56746df88114bff149342440a7f8e91d633ddddede38e60b321b1987803b0bc53d9d1dd8dc79431df6f68f635d92dfe50333a26a1f7bbbd8a03d05af69660ea594e09390971426e52a839d1aa715cf92ede5adaf0f31ee8012023ce049127738db7e9ee7588d329547e3b0722f31ac82e05dcbfd45920563668197f8d34498964c27ebc4171cbd29f37a3de1100cb6cd84a7eff972d43662650030a649df3cc4024d96dad95c60d6d429cf55354afe3a23cd8b0f5fe709a4dab6d3a4224cbc88c5a49e750590593bb223fae19aab4bea30b59edcf58beea83b84f70e0daa277bead9ab67b63abb4c2449e48abc5a9cc2025b34ad1376ad2dcab25ebcf8860b74e9a83a9f490d41773f1936ee725333c9a33297f61a58e728764257d2c82cfaf8a210c74e8330015a0fdfa232bad581c28632c036f0c21cdfdf15ce504f342f9db88c4678591d1a5c6aaa32343178eaf9500e4f84b329561b68727e114012888084387c0e69f4e694050602e99d9a5cbe97ec12b56bd08a6e8631d0cd8b842692f396bfe799bfada3f6bc1457d707ac37cd12469ca086059710ce6cf070de187122539c3a78b009c2cd8e0ac97021a26b247fb3b97df2164349880104d182d77e6acb059259429426ea7535280ca0dd47809bba4eb6481ab12b8bee0a7898230f51263e2a7b2eb59b8c457a8d402e29d0070544b510968f419625b2a4a0ec6cd59fc6f422c8e781929bf29580428e5bc42b6a1258185dc6c4edc3e20a80d23c1915575c55599874fd14dcd235a27fbe09eeef5320b12a007b988141d1d6a73b964a0110e751cec2a2ab8ba7fe093164d99153850a9f0f4922c5b614718a9dba6a86f428b2999bba0fcdae0369ddb79d3f33ec1a85af16e4654d516d43d3b858482766032ad11013b8c34489d0554fe02415b936cf2e85ea5554af8666b8dfc58a6705ed9aa02f15f7a12a9008fa1417498d270763803247dafdf33cb021d82e1be8b2d2a8c67f43cb73f334b34ed56285ca948bc7f0a640c44a9b2b656ec505af0fe9c7ccdae7c8dd91e1676597a0a2a032013c3e4e198469f0544d080e32c4fae9cac3f94fa482fec356ba65d6f20d59c8fae9865b76ca9e321e0ad00690ef5e9b018bfab8ab396f264a1cf3e9f490d34256433041efeed477c911870568dfee20cf7246171132a3e862b3fc2b7ba635d3896edc9459b6acc0b56879da962f0320b30929b3ce4be51714d25bfa4863e51765d6a5cbdf4098a5edd2b8ab2e8d4fd9e318a39aaf0fd427655f23d86023a74cc257672275b2cacbeb6c655f8fbd178ebc4b1a9ce583eae40ff3fb6440d0c83c2fc396d3cd89e74498fb2b2e59b28c39e2075c2344c3fb7ee3b4ad94da3b80193e508a528a36a2b8eaf3991b106923fe9ad69ae66a2079e8eba7ae7923335df929438835386f418607b6470f806acc48d22d6400aa55d694734326ccc35756c63ed7603c56775e7fa0f8c9fa4700198edf27fa83551934b34f044d000dfa4ad889bc3165ad8617b530011488f265aeca32ea268bf25791bac31d027faa3c256a8617cd7491cf79ec1457daef2fa46af35d5d0598ed82efbe660ced0920a34eff90d67bc99162a95dd30b6c7153ae0047c652a7a72d6e124a450ba2c1f6eb40e3fd7636271d6e150346d48c10a9cb38be2a222c878e1a29c4a92846af31ccabc03093f57773cfb43e676d580c15ae7b65cb5fe2d69d48eb0066955f4056b7413491c2d03325ff5b8f4e97b49650945f0d5585644513d754c24fc80c582064f72c423d08a59f75ce10881ac27f3908b5023fda1f71dd98c512fdd10af272c8b98460069546f3aab629dec405f4aad80e76018a988c9f1c4303d146c28631aa8e810e5c65ab405b00a367381da010127780408bde834a00abe5e7a29d5aca731a016a3430c21cd612a1324c392708c405ccec786e6d612dd65e1bcc40fc0f5df336970194f3ea3b258234b7c09c0cb7d69a9415afd46ffb4801844b084f02309e5ec8c0f6f596364b68ef29486aa40aa10262fc7df5db026309b50d2ddebead227283c6ea14c6488852515b488bef91b07314c83dd2d0cecd4f28ab4d8a9ed1aaefa8926ec129c5460520bd5b3ee787d8b9f1a3552500d8625254a5b21d6bd362fe1e67606dcc5a04a968e07c902e371a2e069e12c8d5045e235602f319c4f61d17976cdb3d01b02c02105b474a45de430f6b34e780effe41005889c2270e0a51d1e3be4c40a7aa1f65b330a5e4e4fdf88fb672f83301fec724d08debb05da54f794c36c35b93cb2d3c0e654014a679f8a2c9f704e505cdf58becd681b6cc16272e5bf03aa5b1711b91d96f1830d1707e4e209f174b8911d9f007998ab470d9eecb6adf6c4afc0f53ee63be5f76f02c57d5eb6256e522f944e9592cac78f5d7cb440d170f811ba5e17a5c3467bee99e48371d9fbcc0a53c9b56e7a12154c5fdea50063e1b71f025851672a5d4a063da9ffc30af434c55905d92f1ecd35b34c6811ba30dff364953c254946298215dfe9637cf154d06fa6a1eb4301d5b7af56d68bacb65f5d1e6404bd21417c9d74b78676f84b5fe9415e4b583d89bf0cec20e5462ba93823e6a7fe44b6b80447b01c119de4421ca4ef61ea4f2ff1463a3552e3926de22882ea35773de4d196de37149ac4e001378028a151a93da0473244ea8054898c1cc47fdd1b3ef3dafc2684d144965368ca1ea68650bb899947089d0a9549ab33d418a50f7b046d7e9c491673c74885de85c933af447e30506caf38a3e1dfd1bd8f6d5ef33928a297e3b3a91324f83480301fb6de19270cebbc3d55dcceea6d3155ed836fe9160011593467303c3ed225c4703990ceff97ce8ff0e5615bf417f3f81d9163e0fe5736f112752bca622da7cb9386184b3de35411ab805b53ee51d2f17f4d4ef0f11148aa9fe371616c324483710b9b33bb9062e797e782c3a015e966a96b32ff465414a31494104a7b7a4f28d2a5954e418b0c17d8620578e827516278879b3ca022ec90e9a95c636915f17069ce5e9fa0ae81101502368ed48e6b5ee1120b6ba983bff45ce84d040950a043ed0ecef75e313a809109e61f027c412f64ab1537954aaf40562de7f285b177af7dc483a174f9b0c11365111f7b884cab309e86d47e5fdfbf25a363d89e8eb04f1c9f9fb26b43a2d59573dd22b1381e67c69c19e852c3d5fd5a6867c929682f143b60192a534bbf7d2c271471453869699083a307bac570935321a55fd40e97ffe75ce419b25c079a0fd6345afd7c87fcd0dfd1bbbbca0b537ed12540c730e5da04181b66f4980489f4cbbdebf35b042acb75f5714902bfe64e724cfe29959be5fbdccc0dfc596e6c4d0b98e5a3b0f4fcf93e5f6c09404cb62ed4ccbf229e0af060d7d48ebce8d8544872c54832a3d22f10f7600b43a33f471f3fc8c32c9b818612b9e4820f3ee6cfa6b4d0a9f7d94fcfef05a98f3e6d8f65c0e8f6232ff6b1cdfe1d1eadeccc2fb08391e69aa894bb5ca76b46bbfa1be82e2c1b98412ec9c9de06231a6688b202ea87823a63dad705ad4d2674282e4b736307814abae08ee22cdde0d014b358e6b486c376b6e0fa31bf53fac76ebbfa48c2a65a2507d8a44043bfad0a4bdf3c20a416c7702837726649e0a6aff41df41336f21a85682f188e6cc39952e560911f091aff24a995654619f6988e77984d9d6a07992b49970256371ae4a96029f81641b0147bff583be439876ee73ca22988ce2b421c157b1571470b4d10b9d3d08185f07b4f1cf69b1d9791a4665353b5b38332039c40da3e09eb88579c8daf604e58bcde6f588569cdbc8fe3c4db747cdc5639c9cc122d2a1dcdd346728ee266e796014282af823e191ae6db82b347a227a2cf6cbbf3f910110ebf31c19392f4c58508691c401832ec395089a3669b2bf9b3c51da5e6141636ca9ec1f1f18aecd7eeddae8f6af8f419b84726d09843c882ac891a55fed9fa616518484841b344b9b82ea54e7d6c13f88f3621b970c5c034adcdb8e40ae780a4aed1ffa3b9bb074e4ac3a1b080970bba00e7a38ae740f5bfd66425c345464a45f3661c8a8327157705ac5b2bafa118f23284d2ac66b91ccd776e7cd29385c6cbd8725ca36b1cede943ae6d4d37b956d2f004b7bd79ca3b40c9ee675935d19cee86285cbfd4f75f7a0ed0be93e8848ac191503258303d0a3e7cc4283cfa3609eec1353e116a1d8c83e3ee56dfee28694d833271ca4ce2e65538512de4637b7ce713102ec8023028bb14022b6a39e672338e0be8082def0bd8f154c19c21930e0a705a1b306c61d0055583303e48c823e072e1dc5af1fe23b54adc6b6f5cc63024844006021f33ab0bd342f8e4230542a1751cd0f232ab0912da17d059d0adaeebf58c5505edd2cc5b14701c0cfc4dd839a4f821eb4a6f36d7f7f808f9760d3457e002b0cfdcd7f1d5204e0e5870566998f03f7182353b815dabb95138e6cce5958ff4e7769aa44616ff340a138b43be9809ce04e6e7c05a13e58971267059818b0e73f62ae2db63d4aaee2910b09cc1f963d793ac674178fdc53b39a6d1b67fad3bfd70794ac1efeba212bd2cc5e0b6245403de90bf8c69ec8be9c3757014106d9d1a48bbc50f4c924c063cc502371f67c8218a85456204822925d18c102281c6a253e185d404d131eedce131844aeff4203c0c0928e357a1054883469d5279759d7da327fc2f8b1f438ff4efeec36a3237536767848dddcb9a04da7e18be81475145f9842def803749dac86b492bf7d93dd250f7eb61dc30c6c0132933379794be2f3a23bfa358db62c0ac612c6e7b256d4aa34ce98f9f41791c17850ccd5292d8195fae4a95bfc8f1c085dfc74d63bc3ebe5b81affea09281993c83a9f224f0ac7d3bed04e567ea6cdc4f0a871c5237463cc0a7b7b185d3d5fea4c9e8ae74f2629d519bd8dbea5f66e4812e9e4190c448edae608e72dc148bebd88586aac4dfa00131cb8ef2b247337329abac66207c9b1b7fcf119ebe75fef889a5ea4932033b456a3a4ef2ae171e7dd3a65ba216212bd9119bf1ad66f60811c5210925d94ddae38adc610a236108383d40d9eb5512fe54472017bcaa5bdf27c4080b3c302e2ab9e1d53868480441a324a6598b9e9e076cb93403864648e33d175b922bb343383c5283b245c5e9d4155a2367f7a1375dd8cb574f0bd024bde5d1df446637f775749d7bd02ba82f38d85937f36c18deaf1b609ee9aab006e48d8185bd47120c99fc8dfe607846eb4b8d71b405e03bfd6498f814ee3a35c5721e0759de972c74fa647b846306836347f1384aeb86fce6cc305d7b9b773d34f61926086aa826da4e831b34d05c70c79dfb637543226780c87c6a21b184239e32848280f617c3c8a6fe344326c53919ed9a8ab718e323212af00ed3480f45c16c7d9d62366d8245016b2e1ae67ecb0b3196ce459b2792e76ec4ea107a39882b258430705211123df04c53bd85b7df935d2b2cc77ac413aea731e71e7908b2384b6fe495fcd83e7ea51d434c9e10f4928e1ea68c784098559bf8d93754c09b3640b5bc8822db790655bda42166c61cba42d22357b6749df0a931b0c2c78384dea1fc04c96ff00fe5d32f561a4e025e1c04597546019fe91f3e2d91d0511d1daa2507b3250edfb1ca1b616729c7106141fb2a7b28be57d9521f5ee34f6a2b9f8bee6301d683fe2b2532c63149a0df8526fcde570588c14a5728c6471796fddbfb25a99947a1cf518618ec5ff3ad88143bc263b35cc21bc6adc4eea65c4520a6484951e3dcc3bcf8f35a127bbaf012cb6703543238268d9b08ec20977f49bc22b0280761c9dfb49d039f56390d5634541a8e57e331f2cab626f1f5a78aa396bbf0e209f619a18b5115a2cf8a547c6b9d270b9a0da2c0a7f5503ef622989f446422fe5d9ad86fcd20ab91dd39c7f4a62caa92de4d0cf9990c9354b964bc07366bd85c00c10af549e098580b177cfe451ab2382bec6d8b67afb7deb4ccc4160ad227e96c3a8ed02a978e23385a965f5b1b040abf3051f751c8e7f839f7de9d44e9fea38b1edd3c700aadc634d6027ba80b24935e9aebb7f7d4f624411a2650b3dea6c85db822cbfdee5e4b07b52148220b431656b3e28c7a16eb27697c729cd6dab0e3dd4c3e8b24a49dee2e7580edbe1fd43d0235118664344756938e5f43f3cb10ae1be0d3438e36542dce995ca662cb5e839f9812cc461a1dce80b38b0dcbd6da21bafd096fac2b511930abb6d34d9db1e07bf08c12128097a6af05e6519cbb1caed59e8d4704db2f4430bec17107a854a69463ee6ac7a3c842315ee5989c77ee183054eb73df779171f2722059867a872e3babc1ae05c4bcee29f6d057d1b647c04b375b845fd592be4ff052e3db7875fad4b2f014feaea96574507414989a7f512308bdd5b097041d2352a899b96d2a2bc791a9d2c1dc8834b55a09465b553ca452d19c29aeb1ca02f958f3281237224d21616e650fb8350ceaa774f8992e21dba886789e551343fd09c89157cbcc8c01e097586c4ab862f353817b01ab87c7a64483151320c96e031a28335d95c1171bafec6d8a26ec1abbf451c037081ede28859401c03c3247286ede8031fce86347e832db828bbb238f2619cdb5a2d7dfcc79d797bebacb5013ec7608cf33c5aea250fddbee93e1a88559cbd43d21b3b458b6c3c0a5a3497e4437b1ab5c6dad5384f4efdd42d9bba73d480c21f9d19707f79603d854f27c2b7455932949a875fcab4a2d21ead5462795d66c921612637697c2ce4fdb716b9c2895897889f82ee6f3671d0076610204870c080eabfe3dc82c089272dbe8602c93385143cf9b7e8364864efe25d249865a56192440cfeaf069183bf386cf248bc1b44d69c0a12c01902e35b9d4cdf17529058eea6d93b620ecac87a68ff0ce3566b52b1b132b07cebd5956d55fe2ac9508e842db2b5d735a847e624316e974f6f196b679043819e81fc8506db047a39ca14292e938afeb83161622b44b19488b94df630b81c8e2a044c3a430beda8c234536c80c6b36245d8f9645c586c2f47aa9dae3b1c45130f997559ff085f48cd231b89b3297564969a49d2e6a2d02080bd8649393b3bb1ee02b131495b2d934c43a2801daad0151e68e75993c4db156305ecbde772f055aafe2cb48fa75da4b537b45dddb81d4fb9075c3b199dfbb6ee6fb3d7d23d637716deecd81c72a970bd363402bd4d4e03d7214f7ec492e15259c5279b6c2923102e83080bc4ab6194dc855f13d948d5dc838480aec14d6c7b911c912b05f9bdde2b1a132a64206c481111ba024f0687f8e50fcab963feb884186fe81d7632dff4b178438be585e19bf677c3183abd58d0381b4057bbfc5f519af5278902a7c8ab890a499cda01feabc5ac642d139a87dbc358de3e7704ebac9871485cc20a2763f085fae68029a7c6af17231081607601f0e6e53a715470199bcc73607d26144e23c3478aa2e4c7a69cb3cc02f36ada4fcf5eb6d18c3e74cba1dcca35d4a880d97bfb4d10b1799df22169741fb354d620acd5cef904b78e2d4b36fdce325fed63a76d21da4fbee4f49550846c4a3edbffbace89887b9d0600cf0b06ec188835474480244a664d6140a49a806eef88a40b30002ee56719e6f3afe7799ff7fa437c9c29100820a3b83b3019f92721ce720eb2c54baa73d37b51a54d94d6efd7773b9b34f8f28de9ae3b452cd4bf6f59ab8ba6a81f2acc32407946d0d15c9ca023e2c9d37ac2ad52f532084b97e77d0398209aa81152192002c2263120a8b6ea914cb34636146bd68b46133fa6f3664dfc1361a44d30f66225ce3230eede4bfcc61365c4ddfe7896891834e059c130cfe347391fb93047972bc888fd181431b1012199c76c2f580023915f39f5060f2d17b945a00af0f320c53af10120863bfaf7c1e87564cf59d443ac13f4f27cd27b0af30f23bbec2108ece703e4e4f0ca72f5c9214e1813f7a0b60260363311f29d013b9bd533e211a046b980baebcde4916cd9cf99556c9c29d93522dccb32b0cda8a1ff294fda5d34d31d837039829ee9c728df29737a14c5ae38ffa2dafb8f1c92ad28ab18657b19b1212aad636d8fea222085ded1094dcbe9781dd44b53f2fd04fdf7f2c1139a677c6d416dc0f6d2608bf24ddc6da778a045b989817b2168f794c69c50a2313e864da410141edd23ff3265913e36b03fcb7e49cca699b70e1d07bfc66e96c0363b7a1356406af25009e42e711d6286af66e2ec05cac9c7a452401e6ede53d2e989d013a7dbbc3e3801873d339f405c6da1c7d1194543b8057227d709e233187b60e3469addc8073b90f8f84e397d3926a82ebf8cf0664630ca851383738a70fc23d576af64b57e3fed296d8e1510d6e15b06915723f8cbbc95c38eae1414fca08929e5f2aab9d5e85b1fe6deabf4ec857db54da4e4d60f648259790555ce3028ee0eea4f12c463197c0c52cf6f058a5f6ca0d697bc834cd03ea3d096bd310dc4a06b9de17613266f953ea4b554297f1efc292c0e957fe5bd4d85e9c1a7a867bc7f4ae93ef906b47d4775d5a29d866fac17a8868828cc4912c1d7d76432e5bd8e0735ddcf06cc84145f113b23e4f846abea0c9b005cb419802d203cea81a73749c71b3bf590c7b2eaba71f6d630ca4717d1e046f95ca48730759055339cf1d2ba1c264cf4f48638dba031dc393334772a5a4dc4f34402bf1469f0189ba198fa381f44132fadc8732025bf259809b5561842beba0364d885bd4cd71597f7dd97dd4667f60189a94e42137cc34cbb5c5938080e211687fcfd23065f55f6cd2e3d9ea0294b5b849bb44682b967ae76568911901f46899d69116fcb67f2a433019e473e0c7d9b70ca65a3695b51a8a147934be5f7e26d0d023cb2b9f41543daa2a105d24b56b21d8e8c8bffae97011593334a670b8582d61125a6d5f61571ea8b1a510648807c192c49dae5b2f9425c87da44f570aea5a3497035ee20598c6ee1960dc7a85132f7004d77ad2f5d34ef897b19f1dcb9ed51de85272f1d0957b39a1f2c2dc3ebd67edf0810bd13ab311200e31d599d5f5152266def0891d0be07adfb2f0f92d37e0e3c5a81a33070d62fd73d00b6ca4e969c8273c17cef06f815fa267b360c2eee1f58b5179096f30e9200e08ac69fe372f02f3ef2e7e7110814a9848e8b8e20d88649abd2fe2b337be574ad470105d0f534785aaf130777caefb312c1a118d203e4618696355fbdbed122501470b46864a18204623b3aa04a81c854fb786577281a3f21ae4cd4f1e9f586a07b577e9297149ce677d7d24c8d02efa8225307c3fbf0a09eb116ea4c16caa60b791629f81dbafc9b62d8c32ec3e0228031a38a2a3968b1fa90d25f4d37519d20c52cd65da9e25505e54e23faed4666fb1fcec1e0f777abe1bac17979c3fa5c53777eb18b9cf8ff33d12575a2c20f64273622485a619c88a93d40f0738f2e022e0e9308ed848db04e807c04ab1856e86ce699ee10220ca1837235d410f1414587033c98dcdbed3f8419cdc90ae75174ef325e10f8d09c9f23811eb765d7a7b1043a117f89ec823d6788061bbe4d6074ba68b7bb62540f98c96e1be74aa1c94d491e42dddd050482dd38a57809c4fe067a76ac8363b522e2270c4205f0f4362e7a1c78f8b8e454a65a1201c60fac27f3b3ab7083f90a3787784f626bd05b6f084adb0f1be9cafa05aa0bc1b1265a67619a280cbefd03a309dec29eaef0d0731030a8084177f40c3a39510f019a56889ee877f4d4d0f83a641c1dd08b3ee80efa4f73005b41ed9a02940c369b8a3d23d9cad02a4caf308b1e2ba9ac2547e8e0b01beb6687c2a6a4a9582f941aac75faebb77474cf8b1c4390b59d184b56b4f45eead40a2989c069819101abadba4d9f984ad3057f703fbcf509de3f2610481ad7f59ec7a4f8f13575095b8d90723b73ed6975b50cfbe4983ea041648dc840ff5ae287d665c04cc336c7f947d612e5bbbf2bbfb4793ac203815cdefac4182fbba749f874247c9e8ab875633454a2461976f2ed4c14fbf29c0d6a571023079d76211af45173c9c0b1504a51656058b74304e272a39012cc1dbe4a09db0004e3a3c4d3f59eec7e7da80d02c4b2c756d0250684395c222dce147547581bda530e0d1b5f861c9017874150b3d24b86b8d4cfd47ab224554dcb0bdb8dd388f9127ead6a41d0d1bbdcd269ce119f5340c8522c4a9e3b53e03f1980ebe0ea76eca3adb12fe3759a444e245570f8c0035d8379fb9c1d5d65ec4335180434c7691923e05f4d0a7b75d315f35d57206ff85fcc462ec0d047b2a6a77c3af310d6e9259537de989ca6094c845db11bfed1e39f498cd6d95cd3eceaccade27c5c065c2b5b484a144bff3f406b5e7fc0982054412d636484241409510456baa0ae0d5c7cedd811ef2c2739d319aeb5c643bd6d8d8f322f281dedb83bd8e45eb806c1f0f5cb87b7e0b9e372a92d2817992361205332c39ba979b54ffc88b73cc0780a2d802ce7624f09e23a527055a1c03c5636cd364a40767f60b868c6d9a772ac058c955ee384620baaae9f39848c842a41dcdfe5005a4bb11a613cc6dd0eaf12ef8168d47e685744ed2670f84fb54d694de4cf7ff1b7952c38a606c9536d71fdfca57c60f83f33a877f2f0af60df753156b46dde43f9622faba915f7abf0c5248e21c60607d41592db9814943c50e2e272de28df824f1f557a66766fbb3e70062dd2618cd2c7154dc9dd8f36de40aec147bba1998ffc5d4cc54e536a150a14eb19f59c5497720fd591340ec300e0f5304c0e81261f37a0a551481beac870cf62ba07459e5c729602fb570800fc688dc1445383396e78f7a27b4b64b5d9569a8bf8ce1631cea9643504b34d17c0afba3b9edaec32f7fc7d6c738cb37f867ff84d5b2f72279151b372b1e79d3e84766bb204d5aae013b3e09cdf5042d4b5c1fbf3cf0930ef6920af660649dce34df3076116f4b7f007f51990ea6f066ee0109eb2cb52587d814d2b23a3dc252e52a90c06eb22ba7e774a1682aef1f48e5114775159e3595064aa8c9af8d9586514dad095a1ec42f6e33863e64107eaf5ab9097c02a03edfef05dcef01c97d08636512194e76b0014748a4e1f70ebdddcde50217c0f4aeb64239f6fc98e26baa3d7b639e7f977b0f4d99759fb6c49e805333e0daaf4fe2fd1e4a2896737ba0af4ad9eff8662e0705f104b9500b2cbbbdf16813d355b4742fa763541fa53cc6b847c10bfaea1265cc7b361573a8a7e74e77abf72d04385f28bc57ea61fc9486bcee528f944c8fccd0837209e7e30c21b1f338d639cfe975e65b9c7f95064f874c7b6507aee93af96feea19dca28abcc16c2632a87eaaa7d7d44bff9dbd16fda5046eb4e21a8aaf603fd56c045e725174de2af727f0bc67d6cde6e415a52e321f25b19e5dc94e305b1b2dfd7a71cbfa03234f7432eb2f4c379289e5c8b354cd47dc3def88c5044ec36967786658d141f9fe42b9164e185341f4ce11efcc1f0fd2554f791cd6cfc94e60e6a60f132419c8bec286ae3bb1a6e62f08f7ec81f086e72071ac77a680c61f41c8fe26e2136cf61340c18ae32c49c0fe948bd548175860390fbc224469e32c8cef4609a85b66f6f296fddda73dd5b519636b4de4ba63dd5244aa3e63eea4cff8f0e9e8e9b8b5b2aacd63220b009d1b24764dc186f94bffb0a43773fcf7f59b0c5342e33ad3c3c41849f5eca520127d5f23a7cb51f6aa63201380235bf3636db4f8020689610d667ce5b2656645c95ecfad12a235e8735d711f071d89506bf008935b35f76a769d303cf96bc74342bf2e1b9db990eabe61dc6aad9c2753f9726c9e6342b0a8d22450b4a2f938981e14e9bf3bfe88e09b6b2de5e42d309048e932561334127819e98d6f15a5a0420c7b2bae26a8480adf95b5a6637f4921e215a90d9f2e1c1d1413a1af322fb526f906dc8fbf9041fcd1f086a239ec30e35a562c73303923cc68f32e8813bb9298ae2f9bc7bb79b38e719c60bb21d584ead7c477763ba6c3f6e750deb45d089978ac813938455363f9d5230700381d00488f9da1c6cb5a9ad98794ca5a13bfc9b501284959f6aec32b6ab7fb5bcd24954ac9c1b4719c8624aa6265f06589a4ae9d7f6f3dd0a34c8f3e7948ec823f4407f43e95388351bf955390c97ceb5e7a95ae31c1860a1ceb86e84c94656d6b0cc12b859090a1e8d00d31ad46ef992ff10920cf1f72bc6102868d950116f228a26abf21a8463d7af6118e00bbe86c148030510a95140cb90e5f18baf2eefe149fd79cb71a1a5870b4f12d54f2681a6aeb5121a05dbf31e45c294da4804434c2422549e01aef75176c005ae570dc967bb99c9ea27c08885994c74b11228d09e27868af257984afa864040c09cdddd541c0982b99d27724e0eedb2b8518f944434b209f614f0c660a66941f8d15756767e320c48c2062e9515b3b9d91e28015c764db8fb24e143009eea5e6d720b057a1ceb5a7b58433d368101450f324cb9f5269816ab71b75ab8d1f25edb5287392111b8e4e01588216f90ac3fe4028f1b2e12796e94329ee1a876abb3dc7baa49da3193432f76ea82b8e7591e7a8e4427f24317305ba481dd1cf00623583f8bf64c652d45bf807dc96bc89022dec314ab269ba4932cdf2a1aba5e409f8fe175881138a5edb7f8ad43faae86145bf832e3033af67def5ebd1f531d0f608b0a6400cffe2a0a1fb891e5eeaa70f84d4e29059fe43b1398df1160fe7f28f14e2347703cba20a626f0f3aa38686ab4777196ccc34b816a430d3d7cbaaa519b6b21d0e521ced02a771bdcf568b6b6c940d21e3583f7913ca4ac7852bf0706d3e11193cd896848af807fbd8c06c1642ea72561ba7ca7c40e2abe2872ada02b4254dd3ebc942270998e0a66732be4569fee566d868802573b61471a30268fe8ba9c5c99c463e3794ccfb285fa4f2899f2a4b5acda3a4d05a25b44853ccb56455e9e2f2efca8f99ded1f8855b5589a015c389fc8f70320b70512d4b0f30d34caa6e306b03b1923ca51d81bf7d6c4aabaff56c9c630a98d75ce90b71376efd99ed1e5e797cff26d3821b5f75a559a83f0e93383bb91afd0d0aaf6120759a51516512c2ca1bcab1231f9b289de897dfa67b4f9a4f352bad2a889de8782a70f51d9205d0c05a7be38e15586e704494a920d09c56617817b3e37475b90b80f4159bd7528e77444e26b30449c983a9ee90b52657addfb80497d6b3c70bb143333ee782f071a8a3ba22367c43e83f3f8020e1883bc3293904dcfecb5eb924c407261090d05e0aec513b23ca3326f953b7cc826f5c2b14d5dac40cb482df38ccee5ba82a8148d07c27f794fa6fb3c659f5d98474e6a0bbeb38c7f813b25a66ae55396fdb25662c50d07ee40f299e01d8c43a0fbf5e09f1a2b953b13e7895fa5a646dd1fd5539184bbc7783ebc70ce2f7bbfc2d33c8c8dccc1564b90d37d925ecdbea4fb79fb7360bc99024c74320efb80c8b27835faf7661f16f16b86f0315d96084081113325e6862e859fa3f9f21af62d67a938f5650c316fe95772bc276b8f75e972884842d5566522d4421c92d305433834d573b5a123133906de68c8d48a28d1ab9684138b1cead97c3493f51844a20179f2aaa88a4ce25af3acc9a38ccee981559e65b1b02b8283951a03522a4746cada44a5de2a751503f086e2c5d0361eef247a1555d5e6062fe61078a4c27147644ff212cbfafbd5b03f089faa8242b2e2988aef827df219c57774099c6e95310498171b24c9c0a203323e2fa1c024fdbfc89a889df4feb7050465ab48802bdfabd9052e2860fd24775524721de441a4f6269f6db1bbad8815ac5e6fe3313d49f9a6efb503dc239f29accebfb98cd28df93898e95accde3741e9532b8b7d8b42af23cd6c85c149bca86748651286aa1981c415a3330991bdc7da0c2e230aaf4bae23a9956eeb65da723809fd82642dfd3311712e88448bc37a2adf5e2d63f606e217f83875db04aa6fb85b734d6919398080762200645721886f304e68682a4f1c4a5b803689016dc71128d457af58f31f0e4acf0d7f22242ca5944cceffaaa9d5cc49d1c85d601cb6c78324ae63268a9db323f7f4379c7a81938dff6267c8ebfa63f11446118a611622f1e5b586e291df8892929c73be46f074d19e027e5004aae7d65f02bd3690625ce69019842c81bcda144db92fd8dbc958d3089f6ee7f947ef81226cf5a2d0a77f611e8ff61dc46835842a49a17628881fd3d1a7ebfe7003070114d73d77dd975eb168687de23e7f2f2bb6e286480aeb2371d00be2363e3690f1897a3021e94579bb84a89a9690b52f1fcdb1b48aaaf4d8ca40373c93db44a1f0911b05bbfd6ceb271cbd70ad8db45e56fe22a35b1acc37988ac673ae88468bdc76579403aebf6a082872d6c693ebcaa4072851a43b1097cd7e7663a3013d841d8926cbabd91d3d5965c0aff4c17db2303188646842dfdce2e1d8f3529a76b2a69392f730f9dd81de525bd5b403e34d5b14ae1c57c2ce5ea6c93d0b02ba1d64da4c20f5083b7868d5bf00abd923c773651492fea57f4d2274123fc7a46befff40c8d5cab11ab09cb6d0c420822e65d9eee9812172f9cc9b1bb27d6b0e8a224a3bb7ca00e9ab6fd01e5476effa0034a5306815e83288b9c0728e7e33088f87db90a18fc438991b7f5e4ea388e0985950817692ed25ce5ecb152c794e2cdaa254e02d401b246e67094623392bf458c9174fb688df87ef0e5711bc198bb950dffa464efbb597f571f46130f5a4f229c0e3255f82a35acb05eb3050b270cdeae68a4f73eaf65cb23944fd7cb898dde79c9e2c1a98bd595ec9c5f42ca8be13610a1d121c153646283b7c1d51783bd933a7ebe414e36a7a7541150b5dd5f31a3782a7923e7b227ed6fb4ac251eecdbdd16746a8576fc544bbd245b820e09dd1c5809ef8cbc01ddd8358ed38930c82465526b1d597f07f53b6095e0661627e6eb475851ef1bd758e9e32579e2e521c0d92302e8014b0ac5180d3fd2dda8208218826d4811305a55c80be1717448e5481034a2bff306f017e70618322e8e2ee2c653be782a30a5108daf91241676b3098d79aca13f2bc4b82fb9640fa8cafce55bf732c9634c2059767e4131cbed5c1fd87ac2154b1dd71af5bc41961898f8098fc960a476d37d8d37ed99160eb05d35d2ca966b2cc7c976abfd14e228d51ce14d25576b106cb21625cfb197bdf68686cfb626352c3b24c30a5510128e8d45d1dec32d96132031af9e3000ef5a7294ee39391a8f4d136a791f916f74c7da886c8c97c9633b58445dcc3d7ad0e16e9bc9d06f0a6f852eae29b2b0603fa893def76c585755872db8576e7c9127b05010383b7d8072720b3859c777a1bda1f50370dbaddc3fa6cc11047806b44e3a189d48d420e4269b5925565edca13256fc9ea55870ed80c0d14fdc091232ea77027ab0e31fd8830cea7aaaff761b220d85683c93bbd91003891c33ea17c7cd31326b8abf1ae142bb1099c6391141693c3cb5af7ee3baa0aabd1047732323ade4311414a3cf0a9d42784b8aba97da2b5435a88efe5334115500431b3909f6a8e0be6c792492ac107a47829e9c9a40bc59c463d1ac7a6896575d4812f6a203a69d3e996725ff298faf1c391711e2b485477b7409b577f391458aa580c72f2e73ceb9df18de6780d4299d9902317a52c40b87f013e0d4c1adad8d01126e58c80f50619e06fe1f9969fffca37f07d78068d36f3076c3ac8d76b6168b659389fd5d8ece08e9df8a30213380f0763a84a47509f78c9849ab0227f4e49e697728ebce526167c5469d41ff8c53c1873a1b47139daf7e0cdf01078edfe6d576dc928d51e890c10e5aa21ef2dc330b42e6a2e34226f1a9d5d5fdc7ddd62821c33ff94993611ace0a21362ea6a51f45d7f6c0bb040a1f760888425dab25fe8a338d35cd1e5663cbde2ab7f548b5b96b74e57930d042d6cc5dd6495ae70ed603e4d025566835cf5f2e36fac9c10623d375c9038f0ca3b6e6a46008c537b05e6324b27e2f05cb71769b99f9932af4a67d3db278bcd6c66f10ab93b922d9ab64ba1aedd754643d3cb77c92e992b65573d6d3854aed0f789b38b0b70ab06334b611ad068d62e581754201d668846c4315fd60cb58c13808ff75161f6379a301aa85c07b247cbdfecd309a07e8be2d59c8f8b7850391b524d3b8b3e321c38b049b5bac49ec768a6a8ed03e090e37401f9a8e9dd739ba3c242a924038d91105735fbd1ea85dfa04571272eda87a6571aeef50d2e8c0ca18d3823a1c567953a2cf44ab4353478d3fb0d385f0b7e979061d61493bce47300ad67c4193d5efb90d6c475fc0d90350d379eaf8a1ab4f48f57b1f53809ee64658ef30fda2b13fefdee959c3ec2d061c749ae93f9fc5372e1343edf17cc4f0c7d29f306a5e809c143fd125d9fa33c52ba4b6a046ad075deb03f356497b4afbd8b00cf7081e3e49e9e8a014ba597aa1f9b85d4cee0a6e56d2470c381d70078b168baaee103f8bbb7b57b2cbe332599e9d55d52dec2b9459cdbc3ef18c00e9c3c5a995596d2d3fa3764dba3512b510b714f6028479a9099bd14e94b39b1c83b5e02e9b0722e2c0781a5608fb2826ca156afd08dbff2e8af98714ec57782011e5c878be77a430f9f6226035cc69f3cd3625a6905a73360c46ad6e55dfa3853bed9b8bd28f26d2d35a530721cc3e63bee53e0404a2ea567899e47f6d0a6a369b8559a2844cb9e56fc4411271e44bd3bc92cfac343c9bd73cab29bd479ca53862d2f19bd3ad27eee5989c6fc24f55a1c6de615404f1ca5dded95cf80359352d254704cc6c3865dde4fa1241cc0e0b57b16cd99ae4b3e8a7cf98431791d0bfa9a8f1ac546f07c033a55b7a0ca88533bb29d12f4e8cacbf7ff00adc5be11c6e9783d2ffa2841dfa53799bc041fec464a40c90357536cdd0cff5f46f17c3963f2fccebc03bf3200ab35b607b7c6220b4904157a07f1ea9359467007ed0fad9e4fdaeaa7ee39e3793fa4875402acd148204d3e20baba11653833e3f5dff1c7fdca79f1bfdc0274f7850fc129353c18e8f9ac5fb94608220a15c325a1a77f008a0ba30348408d05009f773a5d31334c4c30f46408ba96c2920aa2ab7f42d95a5020a174d15f4d8325f58058993b0f7ddd0824ba0a1e0a3357d1b6c5de00a0dc7147b1bc102f17b40ef6d75f14f46c0f5ec901cdf78371c6994571039611fa5ff3427b499254952fcfbd442d1d339e01c92cd5bb1c7187c2a91c4269f77865dcf15505c2529e8136eb5105261ac6e99129ac549b971efa8fe5675fc2eca1af47541a7987ea25380df299093bfdd52e3a8e88dfe5bf0934c8e92da1d193ce356e2635629c6883556ee6c794ad1757a82cc69d879a171a3d4470ac2d8b953aa6a0cb0bf3e2178a38103da970d730b7866827f68c9d09fc514422e037e54b58481af412bad84d7ca6714441484ff5cb78e2ccb6ee3bc52dc2553abd8b97bb520eae157c0d422b8faa22fcc4bdba9b27e863ccd2f40e4956fc58a842b2d4eff25279c7da429c03bfca76605fe56759c3df46aa44e4c54f4a84d30b6510831b7a20b7830a1a5d9ac85411a3b29f3d54f00d5120572b9c0f55de91a10c9af27045992db07ad8911eb468cb823552706a530e7663d653667d91a59d4c66a723eb6e050f6dcc51f54d93e3a5ab8d7b044dcd754cdec0fe9de4ddeddcdc8d32eaeb96c33eef7dca4cd8747a32446e7ab1f34a0228842b0ee43a4d7d4f1ef044aaf082369207b114a11b6c2ca2d63fa21c2023281ffe36720ab3de55c64f0406dab219ad7bfbf446568bafad79ee692d528c7e1cdad91db1b91df8889dc3509e59ed9cfb2eda2f5905f39f7026aa4e27a6ec753c17c87ded14f3d67cb4c4b12d21bcf90cc115a042a367bfb81f6835648003d515d21ffc62b3aaaeaf3c2d6b7682c624db499866d862195a734007bb53421d828a1ea3351416c7a25f2f15803db5ce7e12a6d54ad5b050f92a299aeb02cdb2b66b0531d5cdd3031d9f6fcf892c68420b05f45d12f474715f2ec2e3d05e67f35818694729ea11514693549036f5da6f78b0660573426831d2ff5dbf283f39b9f284e023aabe2fcb8b9281f0ab8eee81a0557b7877841d7ffeec42ed73ddf94a26716acfe8d3c08c5a18652d85ae68602c0f5a74645dcfce59dd0d3964e4c8b1491f2cee6bb75d8dcbafd41a947150d1c67315be52f8da9ac4f43079da0a09f40b2a05c8372676ec42106489a091f318fea5cea0c9273177fd7543774af134955f2872d3e5422f1faa66d1667a0cba25982ae8bfc00e01142ca1cb2b6375226a2a281dbec706cda566298a0a16a26824c78f30903dd00e8ec64f3c97df53643328535ab26e7679a256fba8ae167ea949f16cfb57134d014e1ebd84b4a65350dbd4ee3d70d2be12d9de0da23ef40507430cb4cef0679eb983f92fa0022349446c16a2a0b024009afd6a8267c76c22b50195f29fb7b61c6b417d16dd47086e9907fe847f5d2fe9299a6aba20dca2766da534fca750331bf47da67a8b86fe8a66a35dff33ffd93b4b38472086f6c2d352e5208de282b5e2f76bf16d09dec1de4f63859b35c59e94041e43ce5271d7c91ce129e8a8c052e392b60de25f6754dbbcbf114df0d1e3d06e8ad584f5abdd84c1e95f59695593f88b9a2d52ca003ff3e5c201621caf552dd2e81d3b7bef8fb263beb8978c1392b3375b625303015e8b06dc5d9fbae81583f5d586760508300449c3cd56e2a1b9500457239d917f5e1309ac75fbe88ae2fb20e680423503670961c34f631370fb5154bf20fd3fa003e94e926698f577ffc84f784defcb88309352c746c87ce66320896037b36658818dfd62f0f13ba13190f5dde866fa70dc0df5c225ada80c384028ac5c18887db60654c370cdfcccd3568a171bbaf13aa0ab2246c80c02ece8387e8effda98e0b60fbc1e2e12980442b642d987b06de247e456ccfffc6a11b57409232a501fc7e3ce12d3161c8cd476347c23292555e3cf1ef86273dd7c96b9b8f6228b0319fc8c675563671cf908a2ad76a266b6d9dff790b48e86e9bc80767be80a0b6eb8087da58abb09d6f9a4ac28881a74df2bcca0c9301d0efe16a77b6b81a2aa4713af659789c572518cb0f3f5640a7be85133c70bf5da0ad382634ab3212ab0cc79648cf7f90d79666f65400b4ad7dc5e64eded47103df6c37c0cdfc9a57275a0a384d6714444b1ac26b364fdb5c06116b6e74e0a3ac8e8b23f6823251929e2ad6b347b4336237fdc2bffca0294268407da0c7a46e82a95e77bf229df307a2492ad46433d778f48f10695fd2f9818097a8b8d36b9e1b5cd87fde597aca7eeaab4ca19c48eb1f0f23319b1b6e70885654f8d492ed50041cc23989efb0a295de80dc09e5752393cb231ee1da961320645776cc30663604a7bbe5e357d8afd3c6cbfe2725362636c65d38c62602ac1bd23d88fbedcd79dd0684d87958b184181cdc34d0b0932b3c231eadf74a74f3b2931b10f443135604d118e9432a948c64cd789bc06041d18c80e50b7181362f0a0b7deae4ed8537aa7ab0a0a57894e1c98d1738f34969bda8fd331279f4da1d0b4f45d752095d53bce5881503743bb1f5a3cdaaf947e76afd48e0a9d4ecbfd561673afddd9de8c5af9eadc8407c9e04d8f55f4327f49138dc9d89519787a0d63e49f25b4615a8a4614fee5c34f8f95d99c13d4bc724290c3d443dc2d357d398592a458761214e8217f707d229c6d027bd78788d9c2df221d24802c37482cd785ade1e8f70319eff62b318d86d706eabcbf0203bec796bdd86a26d6797203327e473ee4f12656af1c6375755f0d2d6830dba44d43e1728b5d0320077b407c0a4855c895469ce2dd050671a732e3325e15373ec8e985cdf1f5f4c7f7f77aac1c7c4350b1a1ce54e294627f7760f7e9980a684c3046a405f50bc06164fd26401547ef7629a275fcec51c2e4573bf58173236948800be3409f8e7d47d0701c9dadd4189cce75bc4876c245c9525b461a384c27112ea2d7073186e53f40fc561c8267262462f07f7d9aa2e143e108d69f57f8740e82206bb2eeab5cc9551d7c1a8560edb26d0c120fae02859f58abadc3c473ad3c1b0581bbe3c112af390df0b627e73eeb7b324c0207028325f0cc1556c63d66e1851b971b3ed3e5f0d0359d5215ac729b6949289421f890c9025f6d983d09e98832bbe04d061472b77a65a8062682c22d5177f591472753149afd82a906cccf422c1a7c98fc3d092e917dfb96c9853d09bf8442c0cbdd15f62930fabf77b10cee7fbeb4c041f774238ad4515fe803f9a84b6206264d9a20832be2ebc1c6a5c523f7eae24084c5d9fa15cc24ab62593916c099f160792b86a495499f221095b709593c2ea9b7dbab0211873ff1fe02a1d17a717586c85e1afc17bc7ac2d7095458ba9c4e6c2b8524afbf70e9dc60b58882160c23c8230a0be084ba97498384c4315da81349b56c91a160b495782c993431e0e2992ee838516d73fd6be01992a194cbd672d27e9038c07afa06d719938d09a014da8022e31130b4512982c2535c70437b26599280027083db14b935facde0016d6157e5cae1a4f15b2c817b7f205a82fdf5c3a2787ae2c0a9090f6d5df603e217f5e905f6531364c660c955130a3018602b0f1679400cca67afbbf539b0535212695766456965d375af21fd76e4d64e7afb98da60cb9cf2ec065a48ed63e4981852215ae1ebc35e115bd1cb87cfebb4b5318e78d0914198f93d504a8821ae1041bcbdf69472aeaff4852b6617ad97540c09b6441543789714e257c3319a54d7628ade992476ee5c483bfe3fd9f1f9a6ee7dd463f605a4d34a5034d68c680e0560b281d7f4615c2e25de705cea831fac1b89891dd5f5839cc22eb56b95a43251acd59fbc0ead85aa14e0a5c0873a8d7515b5ec4e2c4f64427902f8626968852f2bb0858a4a51632765f4d0c2eb8da6488cb910db976208664583646df68b5361705d518e8d83a2c21ea77ecb8b451bb0d1fe2248fc7ea119b4a61c657d7bac62fe3f8deaa44d440966180edd011bb15d83e0eb5ef04db979a760d728b51f18b7013351a4c8821aa0c0d85eb050ea1439a9011056aa808f63fd629490df9584912e34fa99da3078e2bd76fecd81a4a1fef3dd4bc688c62064e8aff2289b52ce51cb3c28cb5876f75f7ac763154df7db4791ec7cf1a65f6811e0ab3269403d8abdae3a9aa03fb2b03b349211b1424472b436b99e7e65c7d90abe531cdddf72553efdf4fe15cb2cf63a78b400f9d41dd62b14da32837cbfa36b418833311c4b8fb2ad4f05fa8e469c021220287c957850bea5244daec94d6d3bad10cef0cbf8f7f7c88401c9806cb689a21fd4973a9b42bbf27fcdb1b96bdf86298b7e0be9d10fedef6d7aad929851a706ffb88f40694834511ef565aa8e487acf93d92bf21ef1e37b6da533e7f25f4a40152d2a6ddcd39db13631dc0f20cc6debdd6da197fec05cd3316eddbe306dad0cc1b35be45fd01007707837f5d92ed55042f615f95108fb2d06f37751df40d44e3c13ccf14fe106645ac1f1198330049b7fc6c41a8780b1fcde2715d41806c15ee8944691765bfeb4bb06b94f6f35a5a80b94dc714c2686ebb0aa053e04db9c4ee64f146611b21f461f55e24f30329370c04f10d2208c4572548389cc761cd64c08c3582143fce9dd0b84410d3e6e5543ec22631b6b630a77321177e436f04f4b39d35bb3cd4dd951201cb7790fb687248299cbcd9e7c65a5fb4361e050d0edf460226f07c03baab6ad87a680251666183c384e09653daa5844502ef874e1b7bf0caf065026304ad5c115ef505482d2611c8a7350a0a038370bae9ce744ae8a875cc1513c670cfb69cee08a36d120cfdf352196fa6ddfc5cd05fbe1e392b75c4f66088f48a5132562a3ea285651ebc72420885b321b5049026c6e75e183c02544b033a6b0e7c5520985d4d07e66634e0790d491c923c023ede5ae4ee707bc8f27793088d3832b7196f57d474381588b32fe0573fecb562f37fbddbfc67aef0adcfe7f30b5f1f1e68ddd8568b4f4f9b195a6c6b7bcbbda59452a624657e074407b2072f67d15296bf4466d9dee906e13b2dc5bc9aa79d958398d4c41f4f9424ceedcc599384c41ec5f4a0e47a0440d965569344ad7faa59ad275a3b8da23a2da31885b5eee46928d9bd94dddb2e7735af9a245ea4f4e9964b275058fe68e926fdee5fdead684fba9a7c915d95d3c4215101b7bfbe7915ee55c01b2a923e47624217ffeb22ee362fbb33f1d5f4d42401ebbb945ab99d7a6b5e3549546e2742a9a5abe9914019cae0e9e29dc1145ce05fcd72f24f26cc809bebcb7fa9dcaf7d2d0cb394de379bf5b6ed3b8e43652f6f1dc7f42f2f7f5f1ee57d31bf68f9c5b9202f4f3f5b4fba4ee8e69f4cf832a1e3fe4b71b87fc35db75a4436a464358b9863732dd577656163723bd5b5e4ca82db899b133a1baf8f274bc8c597afeb9407b7ff767dfa39cc97d543627a5e9048fb834cef8248692517e404a1531104fa1b411cd708dd2e831b6394deddddddddddddeed3430d6ba2985150d2d22ba87b82da27a87f80862cac234ac5dea875148f90babbbbbbbbbb6d97fafe21ea8e88ba20a22e89a81b22eae28ba823ea1c77bb490b53ded82ee64c71f77abd5e4e00f1b73f5ae2981c8398b5a29b447d53d4e10a717058e8babea192c342f7d9e466d96b59ddca3141ce69bd5a665f7eebf4b06f3e8b2ee6d3475af1d53293e738b55bce819cd7ab65f1fb54a45e0d1e95cd83dd62b52fe51f2daf1860cb76cbdd92fb933d5bee6290cd045d0c90e36c9fc927cabdc94f65275a2253fdd2a767447e7f853a3026e69b4fade991b5bd97bb89055de6c96cd624615f4317b2be1808b325f74798a3dc1f618c724b815d4fec7a64846eea5edd92d2db6bdbb69729055d7cd9bdfaa65fab5503b8f7cf617b2438474262eb5e3cb165bb75d949f931f3e4d9bda8c8dff69a595a2abf7e10f9d5caaf5fb717972034cb8f6725a4beac1e8c9177328238fa1aa193af29a79457ba6eebba57dfc82aeb942028a0981274455ed95eafed75b3972f7bea5b29dfb6ecee253fab58fea55bfd6ab3fa9a9552c3f625ae594f954c00f5cd4b099473ccabc638f14413b4e41d1966690250be27c8a20fb16be98b0f3f999934fccf3d269d6dbc9cc044ae9161962670c9fe918be9167cefab46ee6fffe4b911373299bcccb3dce6b9e75e76bd0ff2f114d1bcca24f32ce2570f01374f4dca23f844b7fa0494fb0474fa99694abd4a74fb0a5d7885ae50b7b8e42ec76df3664e0de4f4036343bf46e8bed38f10ada71f54d2e967da697bb6ef0a9d7e4e3f572809b564339b4926a48f74423a21999862a75ca1538fe3f8c927f7127985aedd283542bbf48db5f1fad136b3f77fb4d6b2231649e967f8529b69f66f46a995dbc5d9536ced6bde52f6a46ec51efa1c8dc203c4ffb3f11dc3440903032525252525252525252525252525252525252525252525252525252525252525252525a51d1350e7dde9f51a1ada090aa24cd8a14c804490a86175417777b77ce9544e6cc37938d94b5cc8fa6accad488228e83e477224b7c2c61a8bc15ddd00f33dad84c4871f24be2771887d72c7c1a59438c839e7c461524a29c581d65a6bad385420f2ef89ebd2fd1c1d75500725250d0dc5577c711ed7a5fb3acbe16081c8bf59bfb747457ade5e10f79aeb9510fffe987972b77de242d6e7b0ec3fee402e340473771d59a42e29d54bff6af5f80459a16e28057ba2560c26d9b8d4bd523defd3fa096a201ba4d6d11ba58860f168e8657b3a9fd4cf03c5a02864b3d44a7aa4d451cc06c25a396fd3e31188f740e8f3f3e3400ee4411ee4420e739813191d2165e8af0c21843008db0809c2ee19824123a3a32324a12108e34f0cca30690929090942082d1098e338473629955381e4e4e4e424719c202bd40da592289024d6765d2af5df6a25d9b8d4bd523d413e13480c0a0a0a0a0a1ab2b08e28157b2c81c4236bbb2e95fa6fb5e2d1cbf6743ea9e840fae7e7e7e727c906a975f446a906d2b11ec7b1b169b5fe53a9aeeb6caafb54ebadc973b45cc8721c998fae6f20c751c0f7f016f8d8f9f09b66e9a3be7bd3eaa1e3d4bcca450b1938c68b1b3566ecd001e473e0f0d103878602640208e0a1e34ce08548e083ece0f0d07130f0431e3ace057e010f1da7029f80878e4381dfe1a1e370e07578e8381b78083c741c0d7c0e0f1d2703cfc35b1a74d14597fa220fff16c1dfdf892b9dd29bbaa00ee8ea9b654570963f4ca503ff2dc7e9c0f7db380e91efcff1be14910ef480a1bb388037a0810c600c60e82e1ebc0b60e82e0b7815a0c0043074d70e9e043074970e1e04bc1cbcaf97320e5e033074d710ef6ba21c17e02900437725c04340fc0360e82e21ded7413988f7b5d08e5700efeb57f6beeec99100ded73efde3c3fbe2510fef8b48318906ef8b4b3bbc2fc274785f24cae17d31168d6e785f048a4135bc2f0acdf05818ba4b467c0f437761ef8b3dd05d313ce8ae17de177f56de078f728c2e3c190c834430e62e93c7e1cfbceac11895f0908b40587bd663c7ee097060b8de449661162428d15d71ca304b9630e414941109a8132dece8d04d2c1c8858706f8f8edb4207bdd8ddee2ea59c73c2186377bbbb94b2dd5d4a39e7a494c2186377bbbb94d2a594734e4a69ad55ce3929a5b5566b2d8c3176b7bb4b2927a5b4d66aadcdb20cc618bbdbdda594b4d66aadcdb24cd3b4f8d60e6559d60af74a97df1f1b36843d7d0a3b9fabd364a252a6ec7f34cfa23e600c921c0e03f3030a75e4e50549d725399d94984c4b380e886d63726f109ad624cb9c58fba45621288532e53b95486414e9479c08ef1fba0869c423be73d23aa5d442adb54eadcabcd094439513bc95fe7d41c1741c03e247548c3246af12d3a2854c6cb1bd70f4de3b3f4a3b55b3a6d5ca5c9defc2a6ea947207157beefa2e7fa5cd703b734ae9b1e8bf85b9696a8350a759ad1a1b8fd1e7c728e573b1caad47b7fd0cb764e77ef634629ecc659eb32cde2f723fbedfdffed25cbfabfb3173dc0d50c8f5364f567138a529b654cdb85799a9de2a89253bf2eb4799e2fea379d6155cb490ff5d540c921c5f8bfc41a498fc412437423d1888c3ff73010393c50f2814ca0c475e5e5eb040d2755d19929c4e27322831994c572ce1386e09886ddbc6c0e4de2b8620344d536a9265591727d6da303ca9b58241084ae917a0cc39f37f3069088944ca287ec41de2d0fe87eedcdaf4bf94d60d3e0e1177412259e822c574e6ebdbdc2805381d368dbb010a712f87b97143b86a9a2fabdd34cdf4493c10931785572ae98c3401f206cd04e19f708e0d843a5367feb6554e7b23508712d9b89df944b0e7ce9016a1dc5fee4d5ccc5b8db75af47f34ccee15913d421c92e3b8253bfedc9b3669379309a7dcd5b96b4a879d7251fe957263c9ff2d5a93895bb2a3bd65b56ab42ae4fe4f860f0cc01c2d4d1be801096cb5cb630f50e7c806a20f23300712d2490922e149a46fe626b9cf0de012f3e48d88678b6dd47ebedc984fef9c104dce8fd9ab47b52861a64d19b5ad67b454a952a54a952aee55e847a7e2c6762979d8d8d49093232775d67f4dab453ba64b05d5cdda4d4e6f9f308fdd4ba784b021eceeee53777bb79fba5bfe4877195dca54ea63cceeaced4ed22d4e842e5b1dfee71edda5bb9c1042481dbad7aa02f9d13fca00d8275547ae42500875289499630e210120a3703bd9e37022b27f9438f3e3fcece3fc3be59c73663168d26cd6acce89ef67d99cd23f4ace00f3691179c2afe5ea2bbae6b2afc9bc9a6d9a0552a954af973aed566b2ba5c19dffa3a78c2eb321dcd8377e8403e87920f62194f2a14be8236af76e38070400ae8939faa98fdc2f48baeb7d3a5d92538f9312538e690987c301b1dd6c4c2e0d37088d87d624db9139b1eeeeee10ea384e4de624cbf71900fba4eac855084aa1cc39e7e4763ce0445e6598c5882b72730c90998af55a39a04efcf90d2101e0324a960f714c1c9de7fbfc9b518e01f1e95f7a9f723bf7c6d7eee63e583a343c07c402612bdee47e1a354d841a5a34b4ee8d8ee38b1417915b779b5cfdcb6d93a35f0375e2f7b77c3ec7edd46ff9e9765b97454b05f6df6eabf4218e595f7ce0ee712584fefc2572be7d885742a857844ad7bfa473f6998700f728f59a78ee87b952c1960addd77d0b388028be55fd269ee97fccfcf85d0f200aebc54ae9d3f94d3c4fef53e53aa58b4bf75ec82db1ad04089e6c1f2a09d2595312cf50f1eabe929aebea7a426abedfc473c5412b9e8f95588f497bf19bb88438266cf5cb2c7713e7c9622301fb5105e5b144a53de4c8c6698396cd235ece302d1d52a3cd66830229e47ef9318e632369f26703ebeedb6528050a68903f1b2dd62a6ca1c342177f5a1953a3115d7c7843fd882efeb7e5093f421cf0e58c815d0c0c4dcaa957eb4674f1e197ca10f68dc736a26b75cb8b11b2ba055f4a97d23757a28befefc9ec040558c5d6048f078450840518943002135bf023908005ad677514094e8a2b48514596def75ddbd4c8820eb2fc98d40b1611044d2c618a12b03e0b94bbbbb9210dad1bf911d4b90fe5436db355c8d0af90e15f2a3a7f287b7a7c363cff629a658cfe174f085db2c791a00eff0d73f123d8d23c4fec471087bfc44a8a78b560969d637598bdc5daf4a8649e1fd51a638cb1c5826fbfa9e83e236e24ebdb2a6fadd527fd8afd69adb57ad2b32b20eaf7069f6db56ab248a10658c3923815fe3fa18bb6564a1f72d49545b5b9e242784ff2e5df1c74a7a5bee15efe098bee95cd2ccbdc9465567a57b2940f6d1090bd70938e3f9fe1fe72d88f7aba385742b2d75ef3beec797286ed13dd922bed61b657ba255fdd9216a85bf2e3c9b2275bdcb9b90658696dd7a552ffad968d8d73913d8ed43731e60c730e658ffbf3647f7f9ef90ed4ad6ddb6c8dc9f4fed7a7bb57e31eecd69440dc0b26e62e39824e5ec9525ac9524291e527a534ce2681fa2666f9c927b2944e642999c8f2e5ebe538f6753232795faabbded7bd5e5ef6537bfb729c97fcc9aeedd6368ddc25ff0a75d15ab7d3b939e5fc59b91dcf3cd3bc8cbb9a6bd7fd5e99e11a295acd6b627f2dbb3be8a46c6bedb6bdac96d36ff265f1e75a720b34ede7ff68ce7d6aceedf8bcef784ed76e743f6d691c08e4b474d270149dff067d7acc5df2339f4e736dfacc4c9f6198a377525edd92fdf4b7ffecebb4347385d0c9df5ea7a525f2e5dfa6d1fb7dbd8f893c199db69c8ee49cd3853a1c74d127769f37bb38d3bcd351b7e4c9a85bf2b4e594d437d6abff464627232dd293a7a51316b2ebc9f27d7ebf0cd1023856003705704f00f70eb891dcd52f01ec3a608f400b02360fc0391039208683510390866006e005f428c027013f08083a809090a11b8882c40c60b48364032e0006d2937d7efc10206800420218aa81c80736ead148399d84836f7a68f0e1f1b32328003a3203728df7c55c233f085de4a0d07d2d542f5eb9bfc5114d924a4835a482a962aa24c7d1808fe36460263693b4f25909ad62ab241a1fc7d9812696ba61c3d5aa4163068b011efe18305ed0ac6654367caa00ef42a6450c0ceaa586ef7cfcc9c46d387fb5cc563adf2607eedcd50f000cdde2a8c130dfc05fcb06fe6cf2a712fa725af8834430068d20124c824bb127fac49f1814858688be183352e12f227d31292ef5b4cfcfd741423dd4441d43eaa4a51e9f9fa0fca984549f4ae8458f1341562c43193c388ae8c173c35b0849f05f490fe6486df811837b89101fb2b0480923cc08576a62b46204f7fe207101227584386c95d2c75db0bbc75d50767bb7475fc28de8eeee2ee53da5cbb94977776f08b7114cf993e1b7173ad82df8eeeedeef4b74f12584dffd1e821f6ec497ba6ed95b956b756077c0fae2cb2696d4dd493a05b9bbdbe6eeeeeea69476777777777777777777777777777777777777777777a3a04e13d012cc1f37c06cb861524a29a5734ecf860432531e3949e69c73ce4967d29c93ce1e81ffb80166c30d93524a299d734e1ee80fe956a43cc0a40d41ed4ce79c93ce8973a0f4d2ebcd39855779709c2494524a97c8b433a5499e2431e9a1d4052b98c20c5c807129410da6e824473cf47b12f79e0cc941070ab8c8300b962ab2d63847490802edee2490f0c33b404e0dad1a9b6196221dd4e8554c300353223e0a29c747c150595044397ea82254cc7f28a31ca3d7282c45e6517f2b10c4d151b4781486c9f044dd487dd0c5f813c21b63dce1fef6d6bdb35991de15a12a5483ba5a6b57a7ecdc29d407dd57aba9c67cb5181c457d186ced9d7142377d3c39e66aa55d2d376e6e105e087fb4668a524ace763ee1284e1ff3f2d75a9bfd356d17c7dca3cbfe5e6ee7e53b29a5ac52ca2a6597bd0c05815bbdd2bd89db319dfe62985f6aad9f910e05e3b2bf2eb60c4b18beb905a67272d7c953653336dfd556730b1828b6175c5f007164a8a1dc347c55884acf034179d05db5eecca0e0e709a030ccfccca020f7cb6aa56fbe1914401d2885ace486c1ee76b77bdaba53c705d1b2a43ee83e14cc43c122fe4e40b19865ccd9c3c0d45a318adb99f98138fa333c13d4adfe173c03c58c100a868af5cd37f39361282c28a2a2991fa8036b0df2ec8b6ceb08694cf5b52dcf985a10bb0241fc85ee43c16650b0dc8f94676019cae02c2b065409304b1878d0842e84000a294441094830022d420d661232204a024217247ee0022fb2f2022b33d801151b117a20842c5d959249900256069b2c56889b0cb0b414a2a21823823f45d07d918828c6fa06f60bc98a6e759cfd8a483d76ce49f46a29fdea57df78c7a48e1d973a76e9b8c4448e1f9762972ed108e2f4eb656241d73e46be85d860e83af64d40bb86c43c24b3140fb9e13bc8a51f69d998e4f9105fd83f9f46c9f673e0dbc83c7940269da14d3f95df5b0fb4508905af52ba6c776cfda364e28de5cb710af98a0e7e7b1f841076777bb74d8c37f48d0d393c60518e9fc38307ec63644804fb40fe204c0797e320b7fddd2e11104010a5bca08bcfe1dc0f089e2cf30b02faddffb67b5f7f9398e59f24ee9e5e6fe50f81c83ee195bf9022220f6609d4716f8a3d7dc37991089291910ef20984db567f3af8d795bafa99526765093af8f1e2ee7a3c6a0a3a1d28d0b475e8893ddd7a451e724b97d279e8d609a4f4cd52ec89db13fff68824e91b8ffdd84892be694f7a498824e9884057442a820a32448a3e9287fa8b10ee858d43bfa37f4fb27f4f0cc09357b07e10fa15c20f221f7a3c8d3f269ea7d76568db059f27affc83502fbbb71222df3f88f4200f8dfd3aba9fdcaaf57ed8dd59e7f42dc4914fbdce6e9d3d699db55be75e676d37a45b31c6bf2d77f7ede1df0deb808738d461bbf97a0fe99b1ce0b7ff0d8e238de8a0e7f8474e0dddf29cecd7aba15bf7fd7a3fbc9c9c1f29883324d6e1987ee9f64af640ee85dc0ed95b2f8a8df8abb1ef89101538838a21905863cd29403ef58a4caf931d67a0c5688b16a32d46465bb61869d1a2a528a6a528a62516d3a2255654548485a8080b51111151511111162c58aec0b05c816181c1b060815db972653e64dd4f723207ffe14564ffad6fb6ec43900be2ad0c00a590c195ec0fa590c1506e2531432b52c8c04a8ed51cf4000c2f8099e10b3e4c584a02e703335c236a18a108c6859c0d4d71218bc341f7d9e4f8368ed3dd9de503459d232426a06f3acbab0439cb30cbcb06f9b3544c20832c96d083042c185d01a49190db045da06224a5094558816799129120a5b94869df4aefb21479c7a593576059a6d8cd899c68b353d26a83249a61162a3015465414517125cf0cb3506125a7a8a0d24f5c68e5e3129ef8c64202f12e65edbfb4b029b878ffc782b8334b72b9f155d093fb6b6a60c5a46ee5489102236725b1fa067a30462f4196659ed9ac66349b99ccb2ceb278ea620c9a9f61c932ea99cd6a96cd4c66596731cb54d98c67f4b32ba467eed2adbbbb4b77299dba4b777777e92e5dbabbbbbbbbbb4b77777777777777777777e92e5d4a7777777777777777e9eeeeeeeeeed25d7a7477772d831047c782aa2ad1c7110ed562c59af147b86e5c4bd2bac4984969eb354b9a93a0cea4f24ad192a08e9b342cb424ed0b50477ebf0686e883c9f76b5dfae69abadb7399f0febb3ed789fb739fb840f7356d06f3e225d3ec0d1aaa4cb3d48a95559b3674a64a28aa155b83b46c46c6dbd7feab412f302f2a964a548b6aac0a512dc976a592d6de64bebf0255a00a54812a961a5481a6f44ddd64ea8c0cc9a4c81122710bd466da0bcc0bd50d1af39a3a17341e0c282de7502d56ac197f84eba6e614938ae1a406566283861ffae28267860b9a17238ab45cd0bc34e14486cc6a88776e87098dce4d313662c4a4a42861c5a44c733bfd476ea7c6c799bfddedceed40f14ea88d5e6de9c505cd0c9ed82f2e68dc058d5c3297187971413383e78816f51717347589911717342aa2a2223bdcbc749dccaa9359c9ac743ca1d287ce098d4e66659ff8e084c6104c78b8c91493dab123868d76534c4ac6a4764c222811484c31a918366eb076eca8a698d48e18362c11484c31a918366eb0a428991528c6ac0265493310d49954562b1508ea78ae5054a0fa02a843e4fb2b0ca28f20be4fa83a54afd4f8afc22a964a548b6aac0a51cfb4161846bbd9919fdc8e7ca1ddac76765d4e1b0aa3ca2dee5cac1b5d1b9816190c57a6ddffdc08a605fecf93baf8924baf152876a5d2dd6b73aab71ef398c7bc8b6b714e6561b8880481a1c41c20c1b1ca131cabf001c72d2cc1fd0223b8615033edc2b4c02f8e48ba9d50335fc37b4199a698540c1b37584abc9359c9884d38a13104131e352f2e6866f01cd132a24851acc2189133188604464099c1303528950f4db854318670a28a81f2971492233552305e7a90622305e3659e6494309121b33a2d79b5645627fa91dbb9f1f1c5dfee7ef2ceed10a1d1c57095db2acc0ce6c1431a890d33837d06f390404c207e8099c1d2080f141e3c28cc0ce6218d54207e8099c1d20809fe5319e5f08041a154316e6e5c3ea0543154316e84a0f243a962b87c884d38b9b941a962dcb87c10e243a962b87c884dfca78a6919a287bfbca460e8d05103c94b0a460a868e22a84cf292825103c9111b3a74bca460e8a881a488242f291835901cf94f155369313a9d64563b76c850729259c9ac767880caea2799956d0f3439c9ac642861f29f2aa6d262443dc6acadd749a573df31ffb93b13a00e11dfef4d883ea27cbf6b897124b7e2c67f9ee45d7cc9a557d7feba733b33de5bfc955206f193db29f277d32c172beb36abdcf25cec1b6d99778476dfa8858b19ff7d52975f7a2cf0eb8fac7fcc63572a6935d17cffc73ef6b18f7d9737fa9896bec94c34997b471011c5034d8a4822c407c40fb8a360b5bbb57031e3832852b92ee605eb068d2744e84966a584496b89d17c49c1a881e448f7384a15c3e5c3103d6a6066b034c20325a783d0c9c4f87c281283864c07deb99d1e88fc9592dba1f1b2e6636892205142c38af9c1c8111a568cc3ac9a04e164e5c100b184c9ca83995a922909351365881b331825c413283318454db0eec68fdc0e4f8dd48bae88776e8708997ad15594cf476e271ef1f1ff7677f4801136fecaadc5cb1647fed463323168f4e851e48b2d138386c7a0d1437e607e20099918348a7c3e10e9d183cac4a0513f90844c0c1a457c20d2811e26f0a96056fa46a6066856a00a141343c3e2c1434992181a160d8b87124af4c4d0b09424417284078f181a160f254994e889a161294982e4c80f467078b8d492b4241898957773e3a409ccca5b79374b2c01029895e7a449104c6e6e6056de8d93264b800066e539691204132096e4dc4c37c14c30146a06a366f00cd611022a8780a243076a06ebf84f050b0113a8197c23ca10508478b2830e8af269948f4a081563d6d66b96340b419d49e58eff5458544250c7f38bff54575442aa1c409d3882ef5755893ea208be5f65a56fbad48b1affa9885effa98a78fe53c5545a8af84f657443c47faa2d34fca73a52c16a8ba318b3b65eb3a439067526953afcf75c3e06753cb7f8efb7c49e09502792e0fbbf09d147f4f9fed7d237a6974772fdf756e43ee2bf4fcafd5d3cf0df2f612181fff02bf77f7f645f25e4ae7b5bf5ceedb4de5dfc955222f193db895264fca594dbe19e66af12f2cea07039e98c2aa7d8fcc782c272ffb1a6643362137f379690ea3f9695dcffb18672b3ae20f11f0b965bca7f2c2c3900ffb188322b28fb17afccfaf9813a598eb6abd339258eff5850e4ef593f50c733ebe75929803aa7ef67a920fa80f1fd36ad14ac8103ac9f01f43c100efcc7ba925940b97f584f34eb07ea449b411cf161602de6881cc011cbfd33706e0203210116c2074319018e3910018e55428063154ce0b8852570bf0004b861a0046e2a7a704701e6881f3f809d041047fc9804f626608ef81986d9b8c0aa2d3270fc88048e527000b0883a60e8ae7804b6f1048e466009e017784784c517e6c1456022f0110a63ac63290a1e0243c1b05b42e02778871beca4491098497c20f012ec9885796025380946828fe0f83f602318a7c67d62601a3d7011ec032682e37700f780a109762b76b7bb4b29e79c30c6d8ddee2e618cb1bbdd5d4ad9ee2ea59c73524a5d4a39e7a494d65a618cb1bbdd5d4a29e79c94d25aabb516c618bbdbdda59c94d25aabb536cb325a6bb5d66659a6691a8c3176b7bb4b29abb536cb324dd3eebdd6a108d2b4bbf5e87ca85b57dc4ab7a2ff742bba13dd8a5b8eba2c251d71d922058b232e5b8c7a4a075d810d111561e9a086a2a7349015492da55b3dfd4aea6245fbb413cd4452172b90a295a1a21851b7d1162d4357a2952814a55bf1159d883fd127ca94f844946e411bba05892860d43658b1811bba556443b722ab5bf1bb6dbac5a3a65bb15b5bb722c4116310ba0c08e40076a20d6800dfe0aefe0c602218c091071c2f8003a359a8f40b5d095aa9684400000082022317000018100e88830249182471a6d77a1480106da04a6056a78b2331475114328a1903080122200200000383c1280098ff2230dea4155dfaf9503cd164c2cb6918f7e19dae1c22659231483a4a6480259bf27e8afc2c18863a1705e3ea98eb1ddeb19b3032a3069f342b470a87eaa42744b68c2629d74995624d28f18c28a082bb6a1663245701a0a41d9c6df30426466f53be164746354d4657d249a5a94c2b77d3c322101d27dd39a68847aa294d5f48ce714fe96133ba92bbe38eb6ba3fc5654da5a140d36d071d4858d63e137087d1a7ab70d3ccd8b771364cc087890639db3819c05a6a3e63278002a320c754a0ada4a980c7495b5d14b0da6016c11bcf278df3b1375fcc875272ead192d2d4293aa8807f438a2f81921d32404ff7f4624d701bb7d2f48f51d38817d7b4fd06a9497295ef34a86c7780c8036c826289dbb2e37cf435e7fbf8210f356dc1afa436a70f302224daf7a37b6b6dc2d2b174594f4d8386f4e027b7d3a771f93a19fec43d2292ce9613b3769c87862889fa680a484d3d5695c9f14fe6dd5bc293963aac7fa5381d2f746a8293f3b646c8bc66871a6f020e0a8585b3c31580392c5f314e6c5c1e5302e000790b72aa52b217682c873767be80234ac11de35a19514a3f9aab46d7baa2d5d54e7423af0d0735e5a5b3975678017f299d4ac330716b13412268cc9d80f82b403187d14a44f044112c5bd807375604ed8be961b5f02cda81bb2b2e85bfa3ad3695e5c4e660a4a756abed6bd30a0352d808076c7553fb3d1ae7eeb581ce8924a54c3916f6a48a81a95e1ccb5c9df12a41d9046306ccb548665c58d429bcb573b0bae82d05663aad643fb558ebd7ff0d3df259d6b0a70ab4cc940c05d1056a5d27bfdacff394e51bb4336bfe05a0b2d5785a1c734fadb709ef3fd2141e533c695e0028e806867e94334bdd1402b0d9a9b7a75d6f72bfa2c4281a042c3bd553c95fe1864b607585f516b8e326be4f6a1f18298f04e60be1da0a2c2847c648c2153c7727a9085ba124c7e7b3984bdc129c1a86d5745a0eb2527a887aea72bcf81203d84289309f11cfb0cb8d22b9dd63f69423b6167099a8e68366157fdf1ce5bc7264f55ee2c0ccd34cd0f5050ec32fbaaba4552b78275d19a192f612ef1243df13049898f154e500b189f77a5f59318bdb6ab42cf4c0b02f4cf7542eab457059b209b87bc4d07ca02fcc255be2a67cd8f71025d46c00cb9268efba53577538783321afaa0d9e060d1ee0accd7efa105d87b2570301d7965a3026c63d61580c2900a397784100a5ed2ef4b33b85efc49acb090f082eb03805761156e1b1c201b5df5993fd9095c0e01626bec723ea7dda22159928ac89b5ed826b4f7dde196a1f9013d27603cce167fa688a395f5ce4002256f901d3621e1449c9b3394789be4134f1d152ff4664c35632fc1b71a85931d4c3dc8841f5c2b29311e742631dd9a9f4b19c80a61251e1fbb2eef5c603766c054daad7727187752f26984d1321073631781b110ed18ba0d8451d0b84fb8d63aa50dc7ffa1317137e5694890baac3002ea60600be8a0061eba16add49325f0c2496be7342d51bf8fdaa1892683f5496d9ec8fab88e79fca71ec52af8dc3c4298bc90bde5a139bed18cb45d77e73d3b3e27fc2fa3cfba665d00fdb0aca7bcfa49e040cd86e66d4b846bc19a678f5fc9a55e884654502210d76334c91c5f13da99a6837691e6a0633da6e1a942b2b0c3c0de02f8a8a7d0015fc4ef2ff6be357f3749bfe5ebded4825eaca6e7d33bd9495d554485e75b1351989031c47f69805e94f37791bd8dd414de740264a4d7949991555759162071e9aa770d65901bcdb17c18acc3373a0a3c1de9b5565412607a7fd2b30861da574d8829e61aabc209aa0af74817a194f29938f8fd90a4e3d79232e64cbc8f6fea1bae0c09e21663fc15055cf7a1d5567e9f65b621c1ba57e58a22663cabc24aaa0cdea699f4ff7b71c6d38d199da9c77e240d80674ddf510d485e0932577bc42a97037204390cc1113e7ef1f56ca8c2d2450074bb8e34c95174411e4350bc789e4d92b351ca059394be370ec737604525a78b5255361c81224b6aa4f8a1ffd2344cb29d2d1ec487bb271f55385e635f7d30f9f63fccf62d6b84ab8f6389e4ee90c07a5fa20e4d4e5229c8e8b35cdbb373aeb27e43c82f2b23a26f50e630f6c08d015228ad245d02cceed23a39d888a6fec07904feb25a9428e9326973ff1b0d081a8b407ce48a002e2a516cdde1b4b2f68e0d61f8874514c8d1781c9900225283ab127ac1735e718dd723718244050a694da4fc783dfb9fb3e9a8ecbd8ed26b94b96abfa68c39fb88674ba3dab7a661cb463138c1acdb81a46c01002f909c8f37029b502a6cfe99bb1295f40485abbd595833d53232ab102f431c7b2d80d50c1a8c9311568333b2ee099d296177a3e3ae3beacf41b05e8a0282843be6db35686487be341f4b6ae1cc193b68209b2b3a5c8c8bb6ad11af1b8d33affaac73bfb9a4f5e716037fa18c006688b469bc9a7e9d39169dfac89e95f4623efb236917db488d061be8fe8d16346157bf2129e1ee31beee1e70687bf46f06a24bee9e88c94accbb89185c699e4ee700997e2af3183005c8f71e48bc6745ad367715ed618c8f478dc1e33c9f938983e66df8f3ffff1d0806c1cc8b27941f6714760cff8256695fccf9243efb11520fe78c9c85a3079db4c86d373f503d0649feb26f93331abd34dce8f6efc381b164a8c7f9a4cacf0b8abd7401e62bc065c6c206183c8447289d92f931d8933a9fe097dc7fb9d525e0a6ac44427e683def0e5e125b30f931fbb711942c526ab6403f8ca726fbded37a2e56df0c2139a82aa4a49555b3b8e70a96c1a1fa01f74f5faa55162602a9420b20d450f51c5868ba07d985b11a052cb9ab7e7c8de4a2edd74e2ce96869d68394d961d15b1ce72048f195859251209be0fdbf82f8ae682e57bffc9c89016297088f6ec81f75c723196657951f19f689958fecc33d8415401ece9a26300f527898af847d28bbe417713a795401da4a64ea0484fdf3d043953e3711fb67063f5fc6d82894e90e8d228fc0c687caf75657225e34f005dfdf5c3b489899cfcebc01785f31470fe268e7fbf71e116df6feeb0c3c88080c1fc7c598025356c601d693e1c9572bf2152b044f4a42de5927aec194a401d1de94c52d2d90689cbb482a8cc592418482875b0473ddb14b1441443ae0949c58e16bd3457dc413d9bf8d61dc26bd24d10ce1b09949b4497bb630c94aa02164b98a9833dead9a68825a218724d482a76b4e8a5b9e20eead9c4b7ee105e936e8270de48a0dc24badc9d0da15415b058c24c1dec902d51734cbc794e1c984ba208fa0ac55113e0fba75a631a59ff739389a0819d270f291897eaa051d299402a85f70381e625d9a570f287e19aa2a0f73e5d57da1262aeca6ef9245fc59bf6c467c0ea4d785fdf010df88f3ae70563fb984b1d6ec4df33f0aac67535ab47e79742dac110494f0ea5481ff143f5416cad117604c6d555aee473561f86d464f519473585bfa7df69dc49f1a9bf7156eaecdd32ee374ccda09232a75b4e33872cbcbd42689d20c68e0f7460acd4503a6625ae1e53d9934eefa560534e056c166fdafb4d0968c079d4b92e18f76302f0700dfebc81a31ad7ad59cfdddd9168272242e4c81694d4f188b2b9013a02aa23122dafb1318596ac057a9964a1fd6350c6c808ea8685f4762fe0c0e534fe2b763266eeb5c7e86bef5302eccb188dff671e033fbdf06b93b4d2d26fcc84ab70ea9c5547e054e6e5dc96139cc282be2cc75254fa384fe340b2950d98f62eb02ac31faca6eb3813846acee50e41cb1dcc9bb756660776aa13958219e7084f165067ea3cf7fe3f20b5823c00b9cef134444670c3a800e72a792fa676103b012c1825392605325f4402de95cd3d84fdb778cb5cfea3ab02bea0c5d3f01f211c84e5f4ee2b0ed5844222bef88215d172662516af4898cc9e63c27ddd81e7f4e702d8c7bc59c17e288998d7a74c6b957b3d1a37c8960969e3fab5d999ed0d452af4809ca169fa805cf1574ea10fc5c5dd4070009ba03d2c4b1f437ce398b89a205a914836ef646027caa727911de43d47a3d8c1f314bc2cdf289fec516da63fa87b65c637c2ae9511c4174474d663fb15c5e61b66be797107e04f679c949e2c97d4da933d46a3fb351b5f32f07b6e7112654d2f312fc17eca43844b9bcd44cdf5445e857162d7fbfb429fa6deb3ce3ce8649b5962dc33f742e848f40f8cc977021408b77573f0794dddcce69b882be67f5306d63e81ee78eb5056e9fe6303a8366577a4b0acf6e4bdf548085b47ae596c3407cedb342c44c28b3e7e60823bb8d500ea647e3374f5541ad76939d0cecc095adbbe305b2fc05961cd0a9e2187bc762300db4a2c7b2519322cfb511bcda5586a8a24f5357bcd4546195d6abc5bd907c95f51103b241741f5aa2981fce63528c7adb7a9b2a952608728e5d38c1b7f36376228cfbed6005d9f75c20cb8a1abb1b06bdd05bc2be2b712d5ad8d32f148f2c93374061d4ddbb5de4ce129de7824fc1bbf99985fe235e2c78177caad646b75106f81f40885084627a1a3e69506cba398b5c2b61857c78798198e8713e6d8970f3adff2cd845a8002f36ae2d30979bf84c9586557644e64539e9b52f50016f0c4ab34182a4b7547a3ba6723b5bac9e61752c7707a535d0e50122268736101913b455026f201ea0626a606169c029d50339af547dd60501c718cb21b729b5411daa1cd51cdf41edc96eed0531a74d5fc088a1854fad1c625aa859461b263a424fd20f0b960add22deb7a4f1e63e6183aefde916a956bce2b3353547540c6e8b944c34ca30116ed20b212ed04f47ab07223e80516498b9e1af21ff3bc38c8830b3ba974d311c6dac95ef8c3101e50d1b244cc90896b3684a9f5b40cdc6aa24fb5fc5abfaec30580ec04fd7ef9c1055bce00447da9fb984824dcdba681cf49d00a06a086123ba5e807754b07cbd2bbfc9c4e06085c88eac3ed8d0767b98214f595e239fbb94e07000a6369b9b8c7ecfbc9e98a99cdb014d4f35e9991c6e0ab2c96e89dd45e551f80c10a96650f5180b27ebe8415a07bdd2af192e91066497c81be3f68688a60e5023615aaac03ddf818b90faa90166a020bffaf59b491a42903f89d8d644bd00516ecbdd09faeb12ed043546c2e6c397b2a43a7dd0151da38e9c2172d8f3b1699e4b92772f7a1942be9e4986b6fce4163602d4a90a53ae3880011f2db96e9612ea707a9c1ea217711316147408eac0a1135937408b3ea4187340a2658bf8c41ad1955afdbeb91387d5bd24bf893a050fd2b2211e6648c98d2635ec1d699b8403169261a352659efc34197e51032b8fd0563840bfe74c3e019c08787244fcb4fa681785467e8b8fdfa545311a3e103c5914b44cf09b898dfe33ee72184259dfe93d33ec8b4ccee126cff7976a8849833811c36bc712662a16c9b9590457c1b2b4d39956d3a555da8e828f7a37d669ee61643970854fcb837a09c17fe316e756e1fca83f943053b225b56c07eb4faec47f4c8d947742171743db85af1474feb8eb1c784d407fa7d5e69e33a097bb3c9453d01311d52431b28a77fdd28617d0d510f46e32be9fff36502784e35a3a8e70d91b30b243bcbb154e15a614e91054b1d6b442c9b76bc5acfee91457a29592a9bea314570d54cb3d07dd84667adc30c3a585e158ac24acc4a95a1bd7530efeba9896f575616e752b5a9d7311ddfadf93737c61b9bed1cb77e393546be8ff52a022687769c2fb877871c759775c0e6e36ef0def57b55c615f65483c65628e11a45515cd8ec197c4dc8e1ba23860b5a295c7c8570e396c15da108ee184be06e44b7b37ff9db08e5dba592b3b4cc7efad66ed0e726ecd642a173778473d7acb99b9bb52ec45c7d0c59eebf552e10502eb1a8abe1fbe3c6426989d2c645e6560b7cd112b1d0124bb567335ce8a31aa2106e7044b5b5eb7f4802fd29a4667b35ab7d47ad332a8d1a19ffb26afc694baedb8efa346f3c95f558169f933b7341d991a2f2ffb00d2e355f16d97cded8f7aa08aeb74181d4eed965a7dda81fa5dd508b46bba72e0bed46bdf8ec06add1d93d7569b31beb5966376892580b0fbf9601a441c8804b0f0a563c86c72e69c9d5b8de81e2caaa85d8f259d2580085dd209ac26e2872b1ed9ec7fd80d515845d8741a1504ead42d8e5b113ec725c6c0b814fac81ddb6d918a70f6fee1e9a7533a9432405e5731fd382a4a35e64a570db7ab98ba8008b36d168144b03aebe42bd95824f39d4c2a03bf93ac4f5e4b2705df7062a685b2ce36b47cb535355d15e13330ddb1b8351244e4042e92955a18048edeba5924f8c60af1e27e15e7cd794dbe74e37f466920fef6e2fec2e23c2715c6858f8a9b9fd9bfc568c8df03ba11d48e43e772b6e83082271edd804ddfcdbdcfd745d34b126e74c45e13fd87e27147572c31bed3e354765939688d27c89118da68b81ac9eb6124c171222aacef273447d758e1484204aa8380da7e0292a10140b712489d7aa72e995c78f609c11d8bb75502a844d2fd3687e73adda86a19cfcbe8d1b14ca9dc0190d56dbd5b87f11359acc24ffdb8644690cae2a18d20ae3a2bf87d4fdc5142bb5491fee2ff6b1996c9355ea8fa0586acbb6349aee8d10611383b51605055c0f669c45e57c1eb434e8268c31e9a7e42c43bbda570a3f6b33a0c4adb4a06f40895778d97be594a03c3b76f94d07c6ed431c2ce43103611314915c2e9f33b2e1cbacaedb5daa232fa33f808951c3cba27a3d8e393bcdee7c492dbc44e8c857a1ae160dd35e20282d576b12be7d77037341850c9144240c943db4e0bf12a4698b5f8eb082df072bb97cbe7118c14044f68793d29c797cc36384741c2b67f9fdce456830a1569314635d089b4e8a0d2ee4c6d3c5071f6a1379311a58d40b362c9d84ea7511966fb447ec505fb8a1ff375246fddc437a5eef324d6e286f556fb9723566c9b516c7fa07096867100b28e26ab58ee0370985e959b4176bf5e01a7acc157aa6f04d75c495df8197a082a841faa6ea1e84bbd3dd5ed204bd367cf4b384f2a4992e99cbcfcfac603249e82b016bec7501da2f0a5871830513d04050b6aa09069df3b4f1bedc69bb99e8e4c1b104e7fc5266a1d9c57320bd27f471db7f4561bfa2b4ce0e56a5c0a4afc6ad75899bb4c6d2dabbd4408cc2cad3a5b7a72fb15260c01127374f84dbabc0554fc69cb7ea1c19a886c881b647264da3cfd24acd0a1f6207466de84cf54883f2edd479190585b6e5d73da87fd1be2d7af38202aced0aed75419a29c15fdddbcabe107ce6bb8bc763adbae7882f8adf0c4cd6bc3b0d2613dd442b98da6122668e238aedac71ac191922b0393a56a1b6671cff3f47065b13e4784b2f79b2ee78f6f976d665f33a4747b60a97f0b2c4565df16f121a51428d428ea19f9aad505ad4567cd95c21155ac78ec42a532ca2cfb81cc0e99654bc337d1b860083c9ae1e5c1606fa39e5d5d55d03205590fd265dd9a72abf560db9feb7e569b411e38b66d84d3533ddd03e30f77e720339880911bbd499b252c22121678546f50c97fe496a819e01f30d8122e8137294387af3265f2bc39caa774f0b3e976265bae402bfc0db21a90a1df9ea950376aae630decdd8ed83c091f81d712d0f309a5bbd2b8ab0d09fd01f1c69512eb9f029303495503b48ae089255f31499c4d7281409ba98fa5fae1dcca8e1bec025d99091062c6f145a093835ed42387de9e3eb932b5ff69e781551f848343dbb0a5c9967529c1714130eb7d7709674126930bf429bc31a2db167aa2c9eb3136afebdd704056999257787b0ff9b48efe67307fbfd5ec5541c5470e7a3b4596076075031ebcfcae1c8f3d5c55a9937c8ddb7e1b166442fb6df58d9e0584d723fad6c0f6737a02a69296ee149275e13c6dfaecc40a39f3d3a08a87a10320f08a3b3be68ee87ea2c327be54308c9ea79931c3079f628dbb78c5ea4bfc82625cfac83f3f59e04e4f4ce050783d4d4416283adbe573f91fabe92386773b02573d03f4142940092b3403b1e9f565bea9fda3764caddd2e84d1c835546b1796edd10dd3da1f1c4b9cc547808dde0d75cc48c389be65d976463f5737317270565d0c5aef0d7388c2b28ae6441a41d272b202a7fe9b053d60f50512a5f2df77f8e58aec1ef2372a702db7201aff99b6face72ac1f738f0d16c5ab2bf4d7b224373736217dedd8b3b55e353c6354be2e7eb5017a94f512ad6108d8b4d9a68d70f21d0d4a03bf6338dce8c09d51c4504d3f36171df6f12f5650529b6b158a2486ba844724b690284de95b67ebefd201b48014f49cbfd407b9fed4dd6b46453bcf28cba9d77c1fa20adc1d15324f40f664a7e6d15766be838dbd94d96aab33e8b083508ffd0c1830062a23c28b4652ce2854355c1a2e0fbe2a2bd41b274bbb77753bd61cabde8e8f1cd95f349bc274ac1b6fdbb0c2cf4657f2f3912a0849476c4d8411dfea3a442015732ee89c62f1bb276f08ef88ec6a9113b0ba6d289a4e4796d04aeba1d6e615bad5e1f45e82bede8e11fe7c6031bbfe4fba0a755f9a0344712fff8947ce36bd4b5c3668bee13e4504fac2d913654acf50eabdf8a123ff713c8b4da4744193f096e6a69550014c3d255838b05d496d8cac918332b0bd24b23bff8342213ed5007e1ef313262e9743ebad24a90a5f32d4655c54bbe49718002639218e0133f6b226eb5c2a7460998c0cb81e68cfdd6858e6accaec8f55a50bd67ae6d75d9d32a1ad11e71111ec79cd1c3438613f769dd2e302c4c82d48420e763025330f004c3a7ac26060275b499b14367ff6e7ada1df3331a0681d815e47870bab9450f16e16c052ddc2f0316d9d2fbe14daddc646ab7c53292696bb1132e58fac580fbca41e2a0f6654fadd94ad94e4bc3f162173336d0a2b7671126de91044122e6c4c014348a527fed68ac1b536138126b19c2da229312ceb6f9cc391c8c22dec7bbe658ccd183e134f55e51cf868eb3da176a807afa41641b7cc9617cd577aa78f0e754a551ffdba948eb0d2c917b96f987528c25f587dd171ee38c399654cf56e23e4875de757ab1be08eb5b89b53c96a9d65063ba5743a79824453c4f2e6cfd8f0d6d25a22c0d766dfd24100f8e28d5277ac2fa9228b349a5e45952562be7afb37119ad95f3a42fb929d5de8374f46e33856c1419ce537edc9e3e2b8c5fa64bf8f5a2b01e0a955566129c970a1964f7d9f35206b94eac41afb07a7f171a04f447a0de1fc051ae40b5a7e3a8564f7f2779e5d9735acf8701553837ceb1cd7c9b62f9581145dfad5aefcf5d8b41632085b51150bb5c4618ac1c43a9d91a893a7e2cf94de49a6d1dc660640833312ef1a1f46f673eb933f48a113924f64ef36b2042abf21a4153cf93a5655d40904774f380994e1c81308b80185e3deae04c3f0f4235d80faa79a8fef26e3f7a764c4a322e12fa2f7b036220b64c8cf6c18de78a735126084d1f31324163d3c36dd2a56b4738a5645b8829e391f1f2b52c9b2a15d5c12b060a030c8a7bafc523152cde62361993c24b02d67c92b72db8aaf56b98913309eb771b26619ef12b96a8f534165c2bb5a868ecca7c1dfe45c44ab40bff3b150a4d287e7d5ca89b45f989ea25422fd89fd707f483c20d9ee5ec633576a8e5ca3d49822fc8d2d9963cf5e82c15aea1e936c1336fdc3b3b5e68e6f9945add1aab6cff9087007364e6adc5a8d8ab1af278492c87f4363efce38abebe2b9b6222919f24725c63324239f2e659b2cbfe2fd94a8ac65f7f73c0fd2ec709d8db3ff3003af3172db28622ab8653e483d29e9b2df776ef166aa37488e709d639db896f88ffa40950585726769f49810c9d861a51dc3154e9fac516857b7a9b80a43816971bf1972ecdd94d457f6036b89b0387323185fb11ea6eddd26872aa50dd3719f73f8d116f25785dab6dcd31c9146bfbc40ee1567b0717dae4c3641b727b7e335908985364dbd41d00fbfc26626af705d926e8e4d2c9b6dfb8bb56a1a85d6b518819076897cc6c9b0aa5317254037ac6e0786955171e202d7979f3427aa45ebf145b9df1d8da182a41a8f28fcf7486736b14bc09d77ffb2e645d7e0a274255cbecc19e03454c5e51c8bf5b5212ea17a104e743e4596776434642bcf1e881cfd8be71e8aee23494499f219a7ff6ad05d896698ad89bca21f4e8104406f7e825c333ce05e29c9e8bf8be1911a98087f3df3a93b055fe103133ed16c2adb2db56ba8c8688f9ab2859c8a12abf9e4e1a4898f3f7d0a2081e912c11ac403ce03240a163eb85358f21185bb49d310923fc5c0d3dd1401a91c58884967489870def4aec9ccd42c762480ce68fdbc6fdb8d245d63a5fbc2586d9c38c1a8292b2f01a8864b16598b3112bb87b780345c2f2f1767f3b9a9f2adbef35b486d84b3cdccf6c6c1c9417c229a8f1f9ee420768aab4f4a6fd6d032da8f4cf1a8604fc43512729d24bf1c3cd53abd985a28d8a81e5c6fc833b9a9fbf62e51e3f8ffa745639cfa114cb42427c8f93f0c887d1f1bd74c8dfb4e606fbfefd716d893e8ac0a38f02ed0db3a89fc01a9d795a096a314e2f9b0d585abb085cc4a5b2046ce78d1407b8fbf19113164d2ac50321b440d269740fc40fe053e461a555a89cf2a10391cfa0111a416b678b0c1319ca04cf1a2cc25955983b8506d23b8887f0171871a74c08a1051f8e008332390e24be208b30458c6d2911bd06a5b5ef74bb5e1885a61900ce05ba5574e2a8656bad5b36772d0d055309bac1e24ac1efeeb7b76fd0ff41675511066d1fc54bb5f988b35c1e5743fb6ae73867c180565d08768da6caeda5e107fb946c71235eaf78e89bef92a09108934736926dc80d5359ec1d867cae0ef7eb3df7633cc0d9945c1ba5a27c39ad008b48b1f16e393ceab00304647ac12a9aba843374641c4f57842bc2b8a30e5632c8c02dfbd9a64911aec8938e3a59c92422771967934655d8221f3af8b12093081d65fc254d54611769fa8ead2a0580cb4ed60aa371ec528c2908601bc45d618feb200ef7761bcc6f215526f18c0546d6c86bd3e712596b3b03a85fa9f66dbc184c1eedab23993226a4815d8af1a062f987dc9474c15369324056a9809e22263a33b7592fee341bc6564d8073d84cf62c73046d950b5c7d818e888f55e90ecfbafed872ee73bb7f8819be3168a68d5dab36754b94c7d226bd63c28cf6f0e801227b58f75bb1f1ba54c6e6e4700212f7612097a9eeab7615e1ca8b2e137224efd0e9a072a5828b776828e0fce97e3bd8c38e5b547309b2a6cb93b426fa1ef0148842dc1229e8d943398a9397aad3c122b43b9a4dd63f0b1f0030f711a5f37b5446faf74e7b2aa2e2b7fe0b399f434808d05d14c59485f69d2927680d6f18f48637b0f862a1011016313b8a3915ccc50b3b62ca59061ac2130ee7035a6ce5aeb735afe829833037437f9208bbea93404e4cbdfe1e2bd1c4a420fe7bfd877ef0a4a9d25afcb0090b5396c48ea4c567b30f874f7cdd9a125e922f1450d0585ba4ea39a9202031d989a494adf5290e5f7696214aea5db656ba386b2a626b9c8697060e123a1642114b08861663a00a59c2d76c93015ab743f5a59165fc5731f281aa48338b6d0c02c879fa0adf42d986b73c240ac679408a6e28fcdf731783553868ca7ee1d72a4846b0834ed4aa89f16872a82ff026638e87737f4897f1f9386aca758ff9ecbfb0ccb495fc47ae0cb51406df64409e38097b286e6c86a2d3bed90849a8c4a0201d4d1fa1227715b2c3e79ea77a409222d4a346a4066c8b1c67b69c5d64b6e026befcf9602b5562e4074c7f53c4ffe00d40a783dfdf6f412f602ffdc3a5ecc8c649217e31620ef84885b646a81aaefd59a142823996f5a895b1257946f9f5815fae28f7cade18f95dd33d8a686c805e37ffcd6d861eb06faf6fe48636bd1bba85da2e6eb60331470286f5b8c9acd1e109a62a2a5095314c56eb9d770d4d10566cc752b38cef0231f4a8208170088b051595272d8717f91db4297a3386bedfcfc998b05de459231d580768d33bd3d48378ab312a8ea891a1fc9bebe5044f15ab462611794204be86f4aef494159279d7be0132f133e6ef9cf818abf52769ac2527a06daf1510e83428c9d376098cff01b97f1f758c5d85ec7f6a4932dc197b8e801d1103f1c31d6274630ab05ed56ba43ac2588b304c57af879fc809355160a17054940270066907944770fd7ddbef88812711b24061fab7d13df5402c283a201ce14046370706380de139eb8ada9d51679a8026e81f8063365322005f60932005cd5e5c9737912c7609c2ad08ea825c0853e6813aa68064d54a755d09127bb82c993323716aa58bfa759b0212603b506466110620388a0391ba192fa792bb01f43a691866e7ad7daadf305f2b3e2918e1dc11e1162718b5fd43fe2a22ae252602cb05361425bf82b318af2ab01b4a9a80b63bf218597a8697b52e55bcb1729603f6076228497e0f66335d6560b35726836fc743f77b6197fbca0229a235db4e2f50ed81a94f78aea4c59b1e0c98dcc75304f558a6cf5bb930d42e14bc77018784754eb44ac1ef254e8c2f6326166558105132b4289f58877ed3523d32496fef6a9e8276c6b27e3acb40b775ead6a7701272765f98c67d635691a5e3ab71602b89603973a0523468a235d04ea2af4f342345c4ff6aa435a634d3937af1e1f54ef8102e247318039ddc299d1a644db9573e19b2fbcaed9db4970ad213f62134c3fb5069e39eb22cf7d8d99891a14ea806a7b4a5ac36ad3b86f7092958f415dee16eea6453394a32f0f4ed03a0d3cbb2e9a0439930cac72e63112a6180a772f63be277f4ab5fb3fd795b306f2f1f0126ece5992c9556f0425ca375f6b33303d77f3122ed875d2773d0f5867ae8a444c4ea997ce3b2dd739faceac95b7f587598c0fa614431e67be483d5ba72fc1156b68daf72a4abed9a0caa5447a3917384fa9ccc33d9d8bf1393759e888985144d168c2f816f2b35da9a273f1d50dd2da9478524c2e3fc65c03ee4a0111e1fa02d175041946703533af3387875e6903572d5b206733e086ab47fbfe3d092d78bcb917c5003f64089195d6a901106d6e5cda1982fd75e46b9355d34eeef179cdf3f23af3a86cd1d0db2ea56b21a137cbc5c5dffb6b3f9871d23a29b4581ef30df4a065c3d2ec52db3f59281f70888ec284ae3647e32a07e7b3d878a025317f180f659f8f4a65b701f9a3f87e8dcce10751ce8749a6bba316db8bae85efb78197b5005ce70ad806460e801d5a556cc5410dcc206d7cad896074ee96fca65664dc1293ebae28a2c717448fea65e677b109df2a329f5ba958c3cf445cbe36d00187e803cf6f1c9c3b0f7e3f33c5741171c44dedf936777c97d0be807719c88bb331242c9272540b24efa337b054b59377a6eeaa365a726a4ef82329ade295df962f7e4a8a8b392702f69d12cfb0a2f6d752a526c60193f50d114a4b4340ea6daa589bcbd57c3da96ca59cd1f4531fa39fbbf9e6c41421fa36cfde78aba300105ea879860ee043fd296915e328014d0d8930d56cadc1fa1552005674f67d3a145e25bbe9299946762a204df8c172db90763c8d29c8d493959cb8e84339d376c15b052378881000bf3772c39907d9086d16470458606d251fd87ef0d8f4cd569dfaa8761f38d4e23cf8c3fa5d0c76b0012dd8e9f272e1653e2b6855cbe91516fb18ffebb632e6be3096278109b0855c0de64b236debd5d82fdee588f218eeaa40c00e6fb80efce5ed2c6014d210906a992666e53a1d3b0ce570ff5131919bc6488a57f926c98dfda34d945dcba5f16921d3510d1116a72582827d5dd3d17f44f411b98df9a46d159cacf087a68ee390c63114df75c41728597c98938497f6bd020a94d8a871e3c7b138a35824448385f84f102e18b93a4be46df0da93ff5aa03afc17afe0e56864dc5a98135fbe356d78573bb7a94218afd74671416509acf54ca882e5bdf7255d359a11592adfe7d603abee7d50346a109395b3fc2a3d621f1988575d7e258bb93ee234837cfb92f17f1e75f422dfce55ac307a70e4cd240f5a01c821edbb563c8a33a9c509a32219ef5c93ad465eb2fc22f52831b702ba20099a464e5d31de8e3b3dd6d9f38abd43bee5ebbd1cfb88a13ebe201092fd5642480bfce9db1a367d47d159cc14459ef3deb56d66b3b672dacd8d77a6428db838db46c7507f7255a19ee7d89c04da6cb0fdbb4e063171712277e0aa9bb6dd8b2a7f19d2c73f7b02c14d513b8403ff0b147e00454dff26668387d96dd9fb281fc3622180cb47153508629b1dfc09516f0a9842193d4c724da35e10fed68c379bfef54272e48ebab46a07596934a2dd622d150e9a6d609528f8fd0d2fc118ea652157afe48ff12f6526cb8af1d939449395753babf553e1deb81a5caab84520e7fa2a52379d35d2d5b8151a8813422db67f921049e689f198c8a8254d738fb1edb23438806f95c3e31785acb3075a1936ce32fff01ea6494b5e3bf4393e3b0a58fe79f8d2502d08b88e54016d0df494c9a7e5e2cc8e27d92a6207a3ea779193cde18a1752920c67e1d6e165218d0c62a244bde57f5cbc2640d2493eeb4f8190dc67db8bbf72527e1821fcf9478d1013c9282b61b435b65656dc47e8c4325e80084ed3c2a770b50bd260453a63ca804889a7a0be44158956ed3f2c162d7060e6be9addd4afc5b56e7de30b1cdc9ab1034aa1fdb820704d560e38d11fd272d766c2accc89e13a8439381e64ddf4443efaef8056440c105790e9882b698d08fc119b7b9ef2053c2e4b3be84238c9aa38350ad3a43f2f89567c2d4bd32013f529dd98e9ba1123b1f03c8ea6ca2a82b7c520876b0e350592897c6691ffb92b04060caf3937d6887bc03f0c25a14f5201abfc675823a3ca9862df927922106e4a3620d2601d1b01ab437302269acb1337cb85b00179c746bed39e917604b02c41ac7f81fa77ebd7483adb67007a94a744091d1bf74af881aad88ed0959164d0f63b8b92a17545dbaf35cc134661448b1b95adfc9562843f9221579e2ef882b5244490f2194ef0b6576576f73f10ceca381041a5ab96a9aa704a40cb3d88a40da3b9b586754832ed0cde981c77c7c98f8eb894c2d15f611f62d6983d357ceb6ddb4843ca28980e1c77e970ba6e6f5dfb18dc5087d03b11ef8e78b3e4149785f88f58677dc6b535a9ef14dde6e486f4d72838ffca0fccaef9f7fb0d7abfac2e454f062811d0dbc43a226ed257679d2daab4ad3bf12711d55d1724f2b11b4e445bda82f94d194fae95916b18d4db3d4fcae14b45eb32e62a4d99f864faafa6357a73ab3fd308e180581ebcc776bd0c8d8652b791886c42665efa65dbfa56d5e82741776fb08b838c0209fd35581165ccf2f545696ea5251cd09791a2c4bd1a104ade25c7c5fd2e16fa89774ac09c431851134c9b2b9bde522fba799d6a43cec85b29655ce659759e2af3373b87a224afc4468f6cbdaf63c2670120eb33c5e116cc21711c2a24ddd01e1aa430dd85dfab89e381768b92d720b26e59fc6bb50e20093db16b77c0d3b50bdaf4c295654060ca07a98878d9837a8292f127aa540c1f9a4ffa0513b95d4a5680d958c84328212689c27c5c39344646492890e5d1dde9f40ceca5cd0aa68f520b611b6c2fba7da37cba3d47e3ca6eb894303db98706477a96a5f247a695c49496a4e042cf1fc81a33edbf29223d33f15b8b0697387f6dc4c7146e30392876595b0fcdb8ba94c976e1949097103a5bba6bf7838b8db897162dc0e180b1a67dcad5442f959049916e2d7636840e01c730b1c09cac5053fe48bd12af73a3779bd4efca8dc8b4cafac79c648d8086b1973558b49ac3216aa8b2641b7de3135a712f59e1653bf000b53cd05b12a3adae7a2bf55b05128ba2c0598eeac36d070665050e3839c9ff8c460b345d1cea0b129007bdfde6e2b5c88b507ff5f41ecc6d0fc7e73e804e6e2e553b111feafa88d3f22ae3ee6f2f14d490bfc0abc6a2f87b21bdafda4c940f86a2d89453ac25ec1509eec5e4fa5801e053208e1a0d30a332ae36d42026d55aa559f295137a14e663c4d9f2cbcdc90867fe383cafa29b8240ac62e9801d890c7b7b365bfb1130b9f8a0781a2a9c1450e9f5072212b33291b16372c183898e5f95a184b3287c2f814e3523d90e068c8f8f5895940020a3d216257d52a3c53cefc9b30a69365891076a544d3213cb9b25f99cc75eb3b82534b3877023e2b2ea09595091e990ec0e7a92d620c4e9e5084c4d75d46bed056b49cdb5fc7676c9f8406f398dcace42755696997e40d6831ce4dcaadfde5945f49b8f623e78d2b73beb15e9de757f0f61494db013ab6e900edc34458f1aad21a4038f5ddfc35179b4ac868b1f7bb57303dc418f5a886f1a72b7120b382ffa0f014dc92baf59fcb718fb0253f608602048a07763e5d9a1a292dc7797102a97400cd0fa0a85a402bacdff84da868baef573285a4bb63120b55f3342d0e8a721ae24e870c8d52d00ff210dd28eb96b6db13fd0914cb0b0b7dea6e8ea731c5d50e94b65588daf81f88970bd80bec1a3ce11c60c12eef331f1f34da21aa368b0555c74919bafc9ee1d0c26194127d93abbbdd70b001637d80252fe4ed523db086a6fac8d90c4ae0053cd54a3d2a7081479933d8bd6d58afed2f737301b7a47613075abe25c9d6180492738c52c330e94f823924acf5e4b749cfef38bf766f7b22220c01527ae89842dfb704853ca6746afecd2464d799b64558fc3a884611f031cd1e48d06cc3ceb274c95f138a63c3cbb3ec6a1a21f7056318f988e0b8ee65d766536c49186670f50b3f9a59ad43a2604c86c1bb9a0a1cb6942096de743589b30e557c7a1246bb38786f57d3d4d5694983eda8efc718f7182ef0757be640ba7c65d470f7492f87b618c3c05cd9e414b5418bc5cebeafab2ee25afacb5e0827f5dd8cfa1602ff42b9d4cc4a734384faf9872b810dba0a4cfefa7479685f1dd798685b55bcc59924036627dcfe53eea8f469636156be77b9bd967c649b197e24e17d6855ec99c5eb6d13a1a179f98c3366e03e514a04b4393474c305f47bf6a9334435ff4db4ccc3c37f0d261cd9a5b8ee327d40a7515d5f438a08fccd4808594b2519df7a729ddd78f1e8cf70c5090906e9e5d42b74ac79cb0a560a7a61c4a6839eaea6a58ff47435d7c553e3a1593c2f3bca82eabe19dbb9b9c8bbd2878a4e2804c2837ecccbd3fbfa517c49cd75fca0215c4e2b718a647d962fbeccf81c45750ddb24decd1c29ab1d3ab1b876ba4a5774bec8149a3490e95290e8ec394ba1e60a71d04aa9444da802f4fde7f85744a00bb6668fd362d5e6798e217899128d42e360e262237827acc487929312b16a864cc047c3b1438ea2bcb57456b95433508c16cc0e50eb1c1af8ae09d1b9adf4a736a2b3f7b0c5190041d9ffae6c3770319e2d85a562a12c39ff618c42241ff8ecad2687cd3999b7d28c34e0b0f88ec9d190bf4edef45db49d4442a4f04de624d9677e2da9b770f453fcbd129cbd81a0b0f193d00e34d6a42c0d6e225da47d4495e3d52f7716f6b135387dfb3704e7511397214d1a55ebeac860d284e5b1ce82c89b032bbfcc1969d9b9ecd050d0fd830be0311e4ac5123b9ae4fe3409753461623f56af07766f1cdee2dafda9d894c90feead340869335b1195ddac64465381da8a608aa62592e00ff25540e1ed2adddd4e8f6717ee47639ddefa84a703b5ee2fb8f12be9669bb00872867c90642261e5220052612fec56d2fea328aa4ba426ea619a4a574ebfca2e04618e1ab4d6177c225c995ff705a6f52777969c2fdfae53c3773e8f1d05bba17679456154fcd4aa97cddd97abb60cacc0fabe7b8a0467b1e82421368529626329d13b01e6f2bdca9f2056a809c0580f068a4d6014fea9c9d6fea63a0d6f441aa836d244efd8097daeccd9802b3aec41de6536e025b5fcd56790c9a5913e810d055acc4ecf8248f8792b5e0b938b99e09afecca4a8f1a3cbb1bc49171eee5410a3cd856417cf37b2d2b9c6a47889296147d6959a9693de6c02f6e15df24785c2b70b8f243fbf5b2b1251041a53897ed48deb8d1f2d6a6d84c1ba309d341bd7d8ea4c3b83b6572ea75ac8d99db5d6bc8a83b1cdbb4903e4687538e4a1eb4d94fcd9a2cd97c63ff982d584128001230cc87b315ab94bc9603f1680c38891a1b149946ea525d36ebe3d9cdbcd427bf020e8121dc9cf870b1ebbbc5165cf2889a135638211a46c5009c96d6ac489e457d884f3d22cc9eaba5aa09e38add0b3764e04f2b5586726d26271c4cee6fdc5396de3f337fd4adf53db0c1617656196563d8028e99c1302477f007a9ba9b2c32b65f074d2802d7fbe975987401e5bc28245e1dcce9c20ac0f7c60221e08753501c560aec24d1b12347a166c4f1a86ba3a40653c458de35a321a360ec53192a417b9033d9edec6006ad6fc18348aeb364cf26f8dbd039619823fc116071201dc55ca96f6a30f719184019adb1368d61134a744bad6fff1a64900502668782840465cc16dbb645b3fade88da35ea6b8bda6e2c631fba89493b71a005539645192754f630b2e21b9944d691a8ee20323166d8bb3db48a62f08a4ff731d380c3424d559505c278d440931e8780748774bd7a6991641775888e15fc4f5128b8731f4bb8b94d299f554461a8d90eb8d77c19d989cd00dae94dd3d8b0b6926499e780d9eb98f39358878fa83437eeaf7c023873eaa0714795a610f7c9abf62ddd991b3777c8382447602cc84377ea777b695cabb0a5bfb9296613fc8b0d3389ddabc64742b9eb0130dc8e675486bb0a408a7f5412b7b03d8beab0a402db077d51c1f96124f000803bec59d8fb2f30bb267470b4cf614bfaeb70e25350768758a79f7a99a617d1ffff563a94895141d4e3f1399401cccdc247c514126bfe21a37a916d6381f574b73493a4c5057ef95b0a320870e7c3ba11d47fcb3afe8265c59e753e3ccef8a682ab7d74a99a6b70842817ab4c57c6e8f33652f8b4274e1708aa2af9e48b03c7fb6d9d7646e2d3262f33f3328c5c8a83ed398d944ebd7e6d091207b3301481ee6e2c1860219a230245d4fd66a8bbe15750755592857db7683e09899a5116c4112fc708b273838bd1a8812326f008896a599565050900be10113751c7b75db07c2951572811d5dfed3fa85b66b0f5680bb4e696284b68b84109cb6a121e9bf9130f6398230a80a93bc7713e781607c6079c8e1dcbfa37695389f0014c6b975c41cee88e737454edfcb16346610e294548ea4430ccccc7488a37e742ab5f379f1d9145837c9cd34597427bfd740aeee75e877558dd08980a81f888721e6c9315b84f175e69ef21cc4cf5166e1b5c25f0cd3b79559e936e3b8a7cb7a404c58d7517d0cde4b2926b379f68149956bba30c5297bfe94a9685cfbfb7b695a09fab790ce94966a0e7a8439eaa2ebb26585df19f2f725012d30fd7dd45059d942d194c8e6c8eb1c02caa8ce0613fad3149706bf7087fac048bb9d2f63ade4c70eb7479965728272f4323abadf0663bb88ec73d9ffc9720b91f50f7695108aed0be3b1b1ae0d95e7bd0e69adf36a72dd8931d31d82d3ecde16a7d752555ec57c76c4855c71995af7555ca8bc737237a6b5d8a1644f43b23f9a73cc2dd4529a1306d8c4ff3ed4f1daa308f2f382e0ac51cb074892ff7f048708a3e5342e61619c8ac1dd85bf0f5b3a4e914c4559b9278b5e56fca8c4c540dc81c89218b5839cf32c468110021cd918b53bea40cd0d2381a8ba7d23efb3bc8e58fca81a62df2537f8d3d4aa69ed7d9b3e50ec6e470be0017665391018104f30ba7f324e385f0a060961c52458088584c590a9d79a67b5cb02f97524d56bbb1e5e784882c1d516f1f46dcd09876d47d7b7defb939880d03e158c162ddfef6afaaaaa69e286fd6c57b3e02ff8c381be217b29c6460908dcd2ff6c69640c46dc5b00fa842291b19aa883dc4a99d775bb14d92fe0a8e8e41f9085cec51bd3cb0d9b104d9aa78bef169bcb3ff186c95ab22daaf88b7e37675d22d1a2a1f7384445a9f1fcb0fdcda953741e9001ac91e2a11b60efa6a8d404c75e72648449946d4bfac5b5dfbf40e0117f532736ea8ad54e70afc608189a23a70056a0969e8ec8524b3e10e8ba33b1295fd1f758e7596ed44a4172b0b7928a471bedef15df698a2eceac27da3f6363ed666684316ab04e9a48c606689b2deb2b442ae5ed79fe182d52d69fd6289c97858e08765de2ea1107a06e1a698ee397e061a1648574b70631f95fbba35a2f6a703631dde2e73ce5090fa0a4e409a4ae0226a8889dcb942a0186074955af138f337254061c9ff17c59ccd4ee2e2c6a6008a0df9c3ce8ed2c265687441a6f1d98cb61266125d6883687b614808e29cf6df0505c671e56a4535be60bd12a22406a0faecc2b662f67819499506ab26fdf55f0fed5f0c8e9acceff45930f6183d75d1a5d77129b6a7bbd2e371467ea21df42d18a8d561491d5da17103339614de4db4dfe4d1c3bb970ba137bd44986ec7f08db009acc8c6f294a93f25697ac5973757ea24feaf8c1224f2bcdef99fcd8e3dada03a1210734c43255ffc2ed1d53a3b82239a22f252bbb318a208f7b88e87e983ba00c63ec2f526c8b6d69ed79909ccfeb1ce7f48929803486e793f0e4dc3362b91f697098356be6ac67ccd76844e15a4af8cae78474886f49bb60c3b04a79d71128ff8c708b5df6e185c6efc41823710cd94e9562e9570932354125b53ae86ca61461f18fc1d7025a62875c300f58ee74d9c52ebae842d75d75dde52eaaebe73c5db88623b94628c315e68423b366c22d564d5d215feb284a489e169ca63ea70531eeaa80b88ed94b14e2df33c6a207530c9a79eaae4c118710158d004803c436ff600a7663401c8c2253b0d18fe8700c2ed97ddc434ffa68997af9f07c9a95c840cd35d63d60f548090ab74e3e77c932f1649dd402bf7945237bd18b20148fc2de6d6a2165435d8da3d2d33230f5bba0b8db835f19e678d01a250b85d61c5f51a8acd83aed578cc8a595f79e4f9b24f1c33ad8b158fb34fa810b92d7f53ec2be81b53bd573609a0f84c3d1d986b00073165a8303511a86ce0c9ac108c7ff0c8e9f62929f468c170b3e29e08cc9e4f7e3bdbe7b52230a63e5bc7d54c7fbecbce12aedf3c8fa629470eb5010bc290e8e360b5eadc2d5da1387f93acc1d7be829ab4529f79606a9ba66faa37110169876417f9256351bb7a4c316f1886ec91774ec4414827019711bc6ddbb4fe16d801321ce348f0e4436416c49aa4cb29bf4e3828f0c3cfc9712b432cca744ef30328369725de8d9d3e0414f49928d2502cb05e7fcc0381bc015543f2edef7ee1c7ea044547234492832555fc0d94fdb074c6132e1767e061408fecd8941c88c602720658acf73b061f8bb21a23407632b36cf2a4d8b46cbf1c8209fa4c2d4cf7c2cc86c3352571e8578d5e58a7b2f9aaa99cd3964f8b06d5c6420c9b763bb9c3d42920a35a39b4854a8ed89b0cee01768932c2d4d94b66540d2028f288f8229f540ea22db9f3845879fee0d8caf8cfd1cf7ea13fd2a212b019f78feec77da53468ac416aed6817a4fa3bbd00914fe6fc28a5e4f1a0c10c26db5f35c5939e9e2655f78f82904ae631cb39d09f776183dcda5c36ae1f971bdc7f8f8ca538512d5d29e8c2d8beb5b369c05d3a34e90abfd5c9efb9c77cef16b951b29923002df8337442c5de238333ad9b4d91a2b6d3268488b0ee8e837561b8cd4962472993a82ab99256b22aa33b955142101e41238a7f3c864e07b9d12654929080077621141ce02992a3ad71a45fdb0a4f0cc08f183d5e824de72a76615155827a557a27366f1743fd4fdc80b04b2f42243bcc8af5c87d13c67e968a1e460e758601722a29e2500c9214aa2d16e8c37a0074318dd810aa951209865776a1aa5a4fdf986fe21a2e0fab8481b9cf745fc29c40247e7452294c4f3b7ecd2172e6588299030502c97159ec7b354ad36b1e2fd68537b625f551d504ba4d80151bede0c47775c2c9a66cd2d5a0c6dc6f2351e4e681399d8a2850c4120584817d288c0be90175202b29409adf5616c6cbd02e4fae590ca0850102900216f0edacfcde677cda3127475315b3a4216a67486410bdfac388c8fa48506d2d9a127dbefc476799fa411a1279ae21bd4b73c8b380e701f1957fa0679f85d8321aacce9ed864610613ec2f9fd9c0976d7e53f26c491510922bdce6546173d9476a942d2f542766d016e0bb063acf1d22d0138ede8a09c578a9574909cc29026e5b9560c78c8e536e6ea0cb2df9b9d6605e4f43afcc02ca0bf42034107bb8d75e7177f165850e3935c86eb80463082a480549c09a4bf1825d0c257bcdf28a0d35f35b7180ad967d9729e1e5766509224b0af0bb014b92d4e31cc5ec3e3e833368ec8bb2ff790ddf14542c25cd660d9fa23c5016d8d55ebeb85587fbec4cf616d9a522b5d7c618ece0de94660a14b274248afebc1cb5195d1af4b37120a25063487b97aabe49da7317f14fee3a5282c9ad215e045f63cbae27a4527798a58d2b6deddaec6c1a326367c9b44a4cf5d3d49ea2e3a1265a47384db98e467d014ad10fb5128347424765d805bd9af8a90ea7da1ae20a47dcba064b9a2f9e4444b633d09fb6b6fb69b29ed962656c2249a0fa864cccefcbf3766dc7814ac21fd3641c71e05badc7119554843d3cac1c3a6cc1319fb5ebfd11091e2baf855793d9e56e7b589efe3dbdb5cc5856de43ab16b21963226baa93fffc08b6a5597567ec34728c74b1cd4fbfecd62fa9bc295cbc5d99e48e4e110fa89a16aa2f9b11125df4bf0b1998c5f1364ccaf3f95f4336a18a8e21b2f691b59475c5a61d7134a87bcec3b9578839cfbc1f8a00d239cc4ce31875a721f46bad66ce3430fd096dd9aa1f0ca8aefe62fcc4b250ee1ca29522c6af91cf8eb1ad90050701045096399ee32123a8a1776f4f05ea4fa254ebf6b4a986a21b434e812be1143aa57b47f66d0b9f693e3a32bf33961ade30fc144e65f98b8c83fb0a1a7e2d61314a6197b6d1c6a30864a8d5a2706039a5c4b5ed31d356e1dadfa408e4260d300f9fced12f2d496806ce65debee742753abb9e3ecb3e0e4ed6ef83292d5657549cc039d9244c657056b1b8ca3c62868335f3060c5ce65c8b24a68f3be9f4d8c2d909b73f823fceda71f8d59232dca13560e18683d8c4422ee90e1d5570794f8ed330799587f832ac60d2d956e43114c059e7f73ba3edc4eabe9ca3a732259d801b6d363f11a44f8281ad74058f79ae447a0e722f62f91eb8d9bc3340feb4372706d23f13fd62e873297a114108a7ca56454ea95c0a550ebf9db27b315c7d461865bd6b87a6fcb1a53f75ed69e2cd7bc95b5a78e390e64ecad7b2763ec7aef64ecaf7bef32b5e81377acb3958215baa437d7bf5d2e9982d2f9febd6c0a229d53901bcd85dde480225a003584078a48e30728fd14549c7a2da02cde245ceabfda088a087755c38fcc243121a82bd48a58c8b93606a8241b5e72302a7e2bb416f3a2ecbfc8674b43bea6daadc5af067e608bef782a977aac409f0f15870245c67c904d68057d92ccb6b106ab3e17631d23898b14cb49b4d19165882bc6c905869a6abadec566ca5d3a38e59b0b5f2b4683fc70f24b8444d0749da6da751286c0fdb93a5e0747750cdae4282c977e3294688239c6645a8c4cc19cc08f959432c618beb2e03bb24fe7b042ecd98120db54230144945b0647ba0d183ccafb76fdd7c51e9a6295744c4691ac255c827f045ac025a327a208f8c4f4684af84973c3e3223e435717be4fb89ba057b07ed80cb0682c9800aba07036cde63c67298e449dfb1d533fc5beded06ac0374873352fee1c7c0a6871780a08c7981ad281fb53b2631a5fbb8bd0f68daa3474f4da27794b067c47837e356a756adeca4207d1909e819a7ab56f64ec793a68a038c22ee93b597bd5af976e28eddb017f0653c19d5a4ee1b224a8789bf6ce28a5564c6b2a44bfbc19755f2a621309be2433e8571699d4cff56265d3727fd7100c2b72de7b4de0162c37a9c114ce329f98c3384f772aec47a117392618d2744e7ce594bc7b06818431a37e1a5d9a13e4b9f763326b4e183c0cffbbc4435f1b5e00ab6200b2dba01937ff77b04c2b5a2e69e5794dedb59b75c917907369ecd4f402520522ad99db20843ab4d8490d05c914adc2d45393c9d1284c7e73e2ce846dee1d93ff06928cbca6a3ef0b802bec251fde33e2faadcf89652cacd029a3b8e3a61e09586f6d0600c3d65e5ee5c5b9831bdeb2a57b5f824a04a6621d25c23ba114171073ec85a0f52790517fc6f8d81ee4a3e0a5513b0f09698bf01b8c6caaf90c573de0540ef85d5f39c7f30cfe18406d1850a0824540197438e05818cf2505eb16428b7dbc27dfa966491a1edbb56904cb4755282a8bea8efb5398d83935d78f5c29aab932c7d5eda73537ae22635c9816ad13dd0c86e233571fd78d0e4c36b91c8511adb3191393a32e2fc2ce7f8b937a08acc92deb93274d7737ec5bafbd7e0756863b6465fda5915e444f7eeaeb827e260f65ff17668a7bede50faeb5374ac76db51aeffedd991485ef5f108cf86ed2ce00efba1d86cc8cbc2e03d03cd7eb80cc25968fb090f5d261fb5aea5c16e72f0d2d79d90d7ce3df45e565c92ec571e902ee068a0ab408d89702fa600ebc77ddd17f8fa8698daedfe1af44a2fb274363d488046b996f0a78d2ffb6fb5ffad9339dae185ef3e14ec4da2ce8ce0e4224d60dc6ebb094de30db00befa2961142d797b57fe9f4b80a409de7c47c0332c6e714aa46329a2129e4b86a3ed8fcf92d8662efc9a4cba2cadbc22997e45fca307f158027a16883f5303e0ac116546047d6282beaa303ee178a1bf1a16eb05af3fcda75a4734b42b7f7397d2e57dd951a1bd0ec977024bcd2edf61d2e493569c75a930d2c51e10b34f443ba53716fa7f3b89b9b72ccc861bf43087403fa88514f99f5476793b49de90d9f809488d49e844ebc3476685214a20b80e461ea1be1a3ad947525710ddcb47e80871b5e4eabae7336ffa5ec66f3a51b9d4300dd89579861ff1d781932083d6e0e9e0b7d7e7e88ca4a85e15e9312421f5f2e756dd295e8bf2754b692c7681511eaca81cc729f407c6fcf07c48b0195e868c737db7955de1f1634197c30392daca59e0a60a025317da2746a51c9cb48085c406e77b6fc2cd155b3987000b90a6e58d4229f88931ea4faa1e7b52dca0badc05eaea0811eac46d23ce553406d18e9c697853752e8422504a0ab6f7f55585cad7516acfebb65e31dc8d80db2d9a4d075ef2cde836091c9bead49808b9f0073e9d8e261d829dc071883bb4c43fa42d7ee582f4bcf3e6ff637b18cf99c83dd3d18c353e2faa9ecfcc80fbcf22cd9f6e9c100515831b26db992b6156f051a56b10c22dab4ae50f6b54f87f5b836ccb4b72e725f300a22c9da99e8490ee846cf3b5aa153935cc28ac0bc50c9b9dcfd6352f65b6f17e7c7dc0e7d63706152d232a5f59f98614a384b4568234c0236d2c23759b22390422c16d6d4a41361c722438064e7bac899b05af8d882127738b9383e0645c6f321d3ad9c49cec6593d3524d880eaa535f73be8e89851ed0dd5d49eaff3d874d95a13027722643671229215a72e9a07410310b43ee8d760b678e0e9be9554ddc244055cae006aa904cb950d5c3420f54952e4f199f2c97a8723e61139c15f2f7cf9207802ab8d41d4ad974c892cab4af6662bbe945d94bdd67945db16de9def908caa6f99576d5fe968f76a2f6a86daa71e45ff96b13dea359d3a3851cf2a82956c407e1b9b77f87e11c6af32411f31f8b980f6e779d189f62aa778247b901c7d16a8e49eddf8d5a806fe45b4f7a041dc36e553882ae7e4c39c75176dae45973961c2d3397a3d5cdd1ae42e80bd9021d991d4947b843ea28f1d83a8a931ded8d9eac666d3b0ad91d6da16513b5f47794cf88474145c3d15a4a7e01dd77c4e4025d25e3683ad7d14f1e39ede6f895958bddfb6f148af04336da9e6c3c66b4c8a36db542c01f8fb0301390c946809a83cc759fab2f56a424bb2254a335947e64441148bb9ac0d91d8453b5a2439cc3631a33b2bad02cd5ca32e1c603a1d7773e565aae0cdfb62bf657cf79bbf129ae447e40cb21fb2f152230d61dff83340d7a7f9bac7cfdd7289e118b410d1c5ac248becdf003c1d809a4a0a1989296bc1ac05ebd0d4277d42495c8a3c54c200009bfe258483310d45f15c4a27165592a8d6f12849f6c2a9e33efadfe26d7a830fb066f4a435e7d7711cd10f7a54aa7f78de638ca1d64f4d11eac2f53e315d09cf7b2fbc61f30265e40516605c52860f15d9e58f944d34095272809db5416cab037efcd70c506a9811feea840121e9299e715a59971c3d79b7bcdea8509ae001e2e58800a4fb29613e302623c8a4f1f3c87edc51fdfbc590015f0c48df559e1a202a7bc0d2238a5f70cb96af76770f82f702afa3a3d58c87e2ee19941664ca00775c69e36de2cb03ac0783155abe1b0d52dded6d6ad1b3f03ed69dc94c7a8034c176c1015e0e9c26ac581614b002410d576194601305f60012b80a6fbfe758259957136a2a63f6e20c32b8086cb2c0015e070f52afb2122c439ff098b79d5c83a8a9327745b24f2bf8c52b561c4ecde8026b80f3c0357a6ce6f8d6744cfbc7e09cd84d42fcd673342326716ca46d85931dfc9858c3831f2429d6a56bc7c018cb603eae43e965b2016566d0eca613747d91828c920596b27fdbafdbbb9b2906a14e4beb6327f6e3d4f0e18768784a8d619c529109a474d11800970667c83405c5b86795351467c5c907c5b700425b3b1a434c2cc3cbd5fd7d67677f7cade52ca24659e09dc08200994d225557817444a29a594524a297deb82e86fcb5c7ebeaa5ebdba38e34f4d18ea525f4aba38455b024bcf7f4a5fb4a1191e3335678df46bafb5a2bb3f55f9755d4183a097153bb5082e21c210ed3debd660e80bf7999adb73fa66a7e2b5231a3bda4078906bdd0a181c30aba0181d9c75ae56380240593c28cd62db15656df9e98d4dbf06d591d24275903587d5fe5ba13a503587c556ac3a1e85b2724ad511035975e810b3d2546605fa623f4cd9a0b631a86ddf73187fea82c376aea481ae9e87b3fed430e5226685d516dbbe85d9ec879323e426070727270747c8cdd090101b2137426e84d80c0dcd8684848666b3a1a19990904c282848482613129205050105fdfc040101050501fdfcc47e9e3cf989c57e7e624f9ef83c71e2e4898fcf93273e4e9c2811a2094c89104e9408e144891030254234f1fa670bd5da9287ec887d377dc98a80620899160d76789a80c08b235c2861821fc207446001c5902182ec164b9464fdd6897b4f7037a554c6003635a02f749f76fb57aac3003633a039e8f67df5769af3ee1d238af68c5b4a75a0fce9e34887b8a94807f8a7f8a78a8eeecf953f59f29f2df8cff73efa621fa504690efb6329a22b9b03ff484cd9f6452adb7e68daf6c1d3b6ffd94e6ffb9cafb63d7389a3dcbf9fbe00e053a915522d2d2e2d2c2c2b1614ea06ea74b27132996a984a2555892469902b2b7a4545a55421919e9492924a414169411947967134428d44f1248a4426511896421024c1ef5bf93c4fc5eb3a52c77129bb8edb7edd76b4edf6cf18df7cb77f68f783be6ddd4aaf7babf4dad0ed57ffab957a48e94bd54b5cd75fa724c8054eb4cc9c7022892484209e221e279c48c2081b316befdb52e4b50ca56e52362db31f11af1411f9586b454d7ce5a00cb0544bf47ad9548bbef88b52adddb39bd47283ed19c72223dbffc8f6ef11f1fc88569f5beca7562dd217177d3ba2c867fb29da221e1195a13662980c1d6cbe17d860e58f4d0b91ee5c86e8efd1fc35eb0d465ff27f29c8397f0565c89bd297ac4316885b09bb57453685274a78957aca8ad6fad91cedadd5d85fd74a9d5ab7d6459e3702b1bebd38d6ad5bebb8e224785485479bfe5b9347f6befa7641bc5fcba72fd67ec91bedf3ed7343e26adf7741cc9a16c9a72ef6579b52d3bf56186af2a02eb60a13ecdf36e7cb55e17d39e752874fe52be7b41d76fe5a02b97b5b22dcdc62d7e886da54057a97ae3ebbc10fd467cdf6fedbded3eec1afa212fcbeaf7b7abbefeba7e97b5d77bd8b69f5d0db35c84bd6b754813b34fdbef26d65867fe69defca0c71f39c1facdfe507bbfc5e0ec11e59a75c51ece8aadbf93727da5eb50277683aa6e3b8e7aed6409254f96af5446cc78324490ced1c9b2649a207dbab4a8868ed1c9b2ac1f1627bda77f261bf3e106ddbb75f350ff58c33ce986d6ddbfcd400057d549c35f5d5a63760af057bd8bfda473de38c33ce107d8c964e8e4eaba5a3d3cac9c1c901bac9c1c1c9c9c101ba4902c65012209b24403740374036bb823bfc3d091843bb0e39acc2c0b410f342cda1302924b82dd041103a3001f7827148cc1c59c20862400109214b68ae1325547c58c0000741b4dc54118342084c164112a628e307364028420224b05e477885f14931e47131302dc03cccb6c2eb092dc4bc00d38212a270855578141c12dd3b326309fb92367d9991b3c94d5f5510ba41a91c143c41065f34a162084582afcff088c18df8c2881ce8e8e4c88800060d154704a142e88a1f9040042e100304281c23668ed000192fe0910109aa90042368342fbc4d992041c53e731556d8febf8239410d6044e841119a0086193bb041588010375beca009ae2ea0b040a04b563b18822d020a63988145122ce081911fe8bc8478087e24315381ab08243e404273614caab019a24f6fb729132c4c30040c4cd3aed0b9d8ddfd8e80884d145b3811d433841f2d5e2cb06228df5083af6298b136dc1001715326af1aec3363313c9d1a84143090c2894a924ab8d9a54d9380d102b7f1a8eaf45adbabb8addd535024148958df8232e4cdc367dffa586a8164b36b53d25a69496f9ab0b8f462a49dd5cf89e7152876cbba35ecb9ac9bfaadf686a70f5eeb06b176c3c1095230e425b6c136580b1215997bdb0f605a2e433c555470d6fe6c41c2d968a5405491898a386bd36cb4b088095111d110910b766a839d1b6ce3fba97d3515f1f8aabefc8021da5e4532757badb5e1e6ca4e665d8adc34517f88a7e17edb8aec0cc1392d13dd901320572d6b95b417df7bfdc3f82bb2ef0eded12ab561cbcbc1ad7bbd9ceae98cb6696bb9b91529e2453c9cb21b7217ef66be72d6a9434ba4e32ced5e706f389aa669439edcab6935849e9581a143a5d14a94cfc3c143b6d6ca716b3337a96fb7b5efbd45b67f137b4b11ca3ad6ea76690e45432cca133caa3a6db4e8d92252e2bcde8702f1dc60302a93b5076760d9f795d85ea2b65691d1971388678b4bb6f3de60f4c57f83390bdf4d45a6ebc37c855b7cc631cbae2df5b7988d96aac4e3a41895e176cdbe592d7649429b14a332769362a4235019fbfe2424541df8fd49319857b921019162a41f67e1787f52cc621c3058eb424edbf048fcb40d977a38187cdb60407c471e23e39091c8b8b3c1701d28dafe1c77b82efc46e20d309814f32d5f1836cfdefb8fadb135b6c6d66864dc195b367b76d3e0c0dac675e137126fb09c87a2227a1f872a91bc8f238d2d8e48cdbeedb14565b48df11d898cad5187e58d2b185b231254e6f4fe2309461d677145462654fe1c79462363cf78641c878c3a634bdbc21470cb9a891c6d59b3ce657b3386d1c6ed36099de4f09561c0901b57b42dff19bec0308c853f4041a12c84d9b1557dd3aeb679277affd015ba4257e80a7fc257e85ae22cdc89f0b8722a3be001ab6d190c53462672003838ef13515448a892008adc4f6c49ad88e367439fc4f1eb40129502865d8dd204869dddc69d4f1c07308095964f1cc571002b7c3f71a525751ac0004a46c4d2916de5f289e34a4bea64433b60005fe8aa95f36cb77db5eda23258bba193d04565ec0e9bb842245446f5fe6192aae3c6fb874b9cd58161e8133e41fd19c6c29f10280c0a6521cc6e5b1e954499db683c29731b760e067b390ca3a96c77c8bbc9dd8c83118d3815962d737f7633d1c86b793ade8eb7026f8867834357f54dbbdae61ecafb77b24ed6c93a99a7d3cd3a9990b3340f45536151dd5895f506150778cb9c685422d178db81610a8932d5280380e313c79596d4c9867e12c3291cb8914a217958a14c2145e0a8aa711a496015f216dce1f22309b45e88d22ba1e87960d5128a1ee6c2972885ac2e4a216d0a7973c0f7c88d5213a5905b0e2410a590290edc2879588100011081e0483aa9c09134927efcc00038924eaa1a0f8ea493eac7fb07da4b8ad928eb33cf58accd10ebd3bdbad6e4195da3cda6d6d4fe1ccd97695f05a332e0ae9ad676b83edbfea98ac1b40013133362cae2214511744537a5260f298450177aad936f5b4fe5c4c75956c3ecf396a5eaf3e752e5e4eaf3b7f795d3a7a7553e2a58475d33ae8239cb9a224d7df766aca9fa0175a93f845dff0861ecfa33d6a4343ef4451b3279544e7c55357deaa19dd7676b3ac8a654a44f13b6eb154a6090cd25ddf8d2a3ebf37b19e239baa86b5ce2e66843537369bacc97aff2875fdf53c1288d297481389a810c709a705ce2abd16c9f2a9fb0fe3704717c8d2e5f813822f7cf71bf959e0b62a772c27da72bc8fdf72708827faa60e07733be0275365dd6e57befbdaf54f9a8602a272a980ae62cafab5ee71d0f950ae6ac7374f9384be5c459aa27666bb79c95ff15c550ce9a0ae62bad54c166e2d73761d63465a6cb9a260f75a96f9a3ebb9a3ca66b575366f2f080c3fe11635335a5112405881ac402a1057120aac6e9b002ce08e782b4244d13271fdbd6af4510d2b3499b2a113264db16dde68d5bd1c906eefd5dd79c6cf09aeefd83086929a14503848e1ee0c045736a00f7aecf89486d4969eeb632d82f85bb7ebe960affe49ff217e29850cfc540bc7f669cbca4ccaf32ef58978a9ac1e69d8f1011efe84d65cdce9a765a88779bbeeecf6f5344519f595f6d8fb8609f1ad015c2b66ff50fea4141e6a2b13331085c38619f35f68194d21df2554dfdbf67b26178a9e573d9d282fa54ea5129d2ff7b56c80289f6adf6b2e9477f7d98747ed48f3ef5b94cbdf515599e7793fa7fc67e597a52cb97deab5faa7c0ab6dcd9e97b1bffbd97a7ef294d8df75aca2fcf9afdefd9961ff7eb36fde86d69b2e45b9006d4979e2ccf207b944299eeeb77b087b7e8eca3ee96d75fc11ebe5b58c8722b532d9ff39f5265eaed9f79ab24a07c9b49bff2599faabf3ae32420f556dfcf7f7f94ad3e99ce7b32fd2dbde94b9aa2cab3f4fa0f407ad4cfb8024c7af42cffb724c91a1aac3e99de7ee9647ad46793ee61fa7f94369da5174da49ff15c9ef7491db24034bd7d96a7200da437e91fa447e91fa7cfa512886b20be49fa6addf2f9a452fefdbca24afd4d95a9d4e847d9e69235fde873cafeb5a3fca6923e73cb59b6e5abb7a9b739e3d88836ebdc9281fc4d46c9cf2d4fa64c25a93c6b36c9cba91f95dea3e069fa5c96f2397ad33b48c33feaee5c927ed4c3969e8234bca6be2a69fda394feb13df9337ec11e9b264de50ff2f37b02b89dca257d06d9a6a7ce4295d457a393a43750774affc84f7e057db43cf90ef6c84fbed723c8ce279942fda82cbda93c6bb6e951250d253dca5faa249f8233e4ff9f715379925ef45f9e406cf229d863e4c33ef5933410dfe4535fe99ff15459f746962d7f4b1b6f816cad6d989486e506dd40dd2dbb45ebf2ce7c35e4ab6a13838017449aa408139b6e1b057144b1cd9df913f10e39c8000b85d302b8f76f00f7ae7f68c286eefd7fe07403fc35fd43a749cdc940fc93cc22e9f457affccaf46cc8576f42fd693299fecc38a6b79a499fbf515fdf6432a1bef41eaacc2d5fe1e49c8c734b1655ca56b3576f5a7569facbaf5f5d234ae3750d3cb60ef73d9f2b32c5c3573ac420a03af5d0fe8cf3b0a68f64d6744d7dc6eaf3e69c3313cf2abb6fdf0a61d7f71c2a434fd1f423d368e8ce9c65437f65c619227ec62943e4951e833b50996bd3ef8a101fe5c11e276ebd7c533e4419415d65b58c5d9f404d6de6dbd4befb3323b16b4ec1ae59098dfb913ec599eec8cc657d8ada4ec6d170cbbad89ccb1e940811da5489909fd2a64a84bc76c6a132980c7cb3abb5d6da6c2bb62183ca98bed66b53d658c63267556d88c6041ecad978a6b5b41d8d886613bb36312a5377cef132934aab859877c661820c2a637fc86755465feadb5c6d0c4962464c03ba56037256dd516554c67dfb909bdb90bbd4218fa4cf1c36e951e5496e144a84fa19dffe2412bfa6aca93437beaa20a834198706a00ae1f8d06c547aefda7dff7749355a19a98c46fa2c95ca3a2bfd5965a5f25556ca57957fffab3367c9aaecb2aeadae43f5be7ff4503755fd57215f5520eea3007af4555667a391ae33a1d23b19e2e9a3959551997746bfe2b3bce596752989bb947769f42bda67a3d2daa84a1f1a8d5ea57d483f8b3ef3befaea57d127a9ff3e08eeb8d6c659a33fef8fdebb65e9b3fba59f7155995dbeaa6f6d542a6d6db4cf7cc857d567f987bed4f799b571162dbd6cb603d1ffbc36f7bb22c4d5e87f64ba36cf8d9e7bf24d336b569975a9efe299711efc8c43654a39ceba9908aa43f5f573115466e5eb6724a80e95af7f7a2cfafcbc579594e61895f7d297d38ba7af1464c06905635deafb17e26b529f79d3784a697c2c97f6db4b94b0eb9719e7cc61eb406efba85c86ef95a70ee4b6a1c636a33fb5b36a33da2511cf3bbbb39cbbaf3539e7cffad481dcd955f70704916eab81eae87fd82fc0eebaae669cd2b6a38b659fcbfc326bde9975a95fd2d0a768b3a8f529965708f1fcadfafbe7b5c142be52693cc3325fd58e0af174fff4df9f59c8b14c9f24a935b527fba417f9cc59f74f5fdfda5099d4b77c7d8b436558fe4f2f08aae3517fa2ecd389a03a50f7ff51a82fdf03bf5cf630fafc9e6d3901eadf519977e84bde3d00117312bbbe27fa72d903dda92f3fd5c282bada3d9527906d098eab09423304f74ee396fcfa75c8592b5fdf6da88c4ae94f6f9f550a5447e9abe94f140f82ea307db8f19df5004434953d0011f7fd91a5217fc6853698029aa37ea9cc48d01cf5c932b7e88b4a8932669ccf096bf512299f3f45ffa0bdeb9aee87e074133c14608f1e081a14cf75e6b0ca7052f6e9b302d4541aedbaff2d97e074079c73eead5ee2033f68ff030d056bf00eb8ae711aed3599b3e819fbd4661bc8b6add6641a100fc40ae4acfbf5b520cd654d4dff80f507fc87a8346eebd53dbc7052352a88277dc5cc5897985d81ae4db51a10ad1ad0ae31916b531a1c10ee9e04aaf0d65a6b6dcc0b76858344a5b84942398b85ae2ad6cabdaae78f0f6cfc14d39761d7a26683b8afaf30765bddea785475d29b22a248d5e3d8b8858dff8479c1fcdc05e7af0911ff996baedf6bc3d6b55e1db6031c17c7f51288e3a069e2e4637b250238024a699ba6d6e56a4d531a4e36dca740eca601a4c17ba8fb6a20d6f5196403d532a1e512383ff3157d1b849d2b74bcd6bc49f149153bdbeeeab3abb8d9944915ce127dc0e48a2657b8eca6f570b85a6bed06a3401474624aa8a2073824e8c20a9b106818e7ad062522b8c1f6bff9befbe0072e88c2063b2310e315048d5b226cf72b6038db371c4376777777af305f5cad74830502b820804d5bf800b0a9d3d4a69d8ecf2a1bb91a61fb8f9a857daea8cf8d1f6c7f31e545ba14a2ea0bdb1f443d07a88b7f576680e618c2f6cf40d8feb8d42e077e08b0b7afab5adf6e9e8852998a6b49b7fe51374dc97ded6a2fd6ade5cff65b8268df8fb0a94e65b11d80e040819c459124ff572b9893fa442085d66ab3f339abeb96c4c0c357b6fe59b3ab0577f050b1b3bce3feb9b79cae25b7b2afd234bffed922e067bcfb7796fded6b76ad3f360f04d4e0eedafbbbbe562584d8b694c673411c77c6158c43c69d8771d6391679d5b8b3edc8c4b833ae80679fded2d038471ea7a1f1a7d2d2f4d028471eeb622948836aab786c36a94feadae47b69fa5a965ec5a3da7505b3eb19d353d6f89346cb9f2c474cbba2582c7faaec8ab22bada25d9f5a11eefa559fa47d55cf91aa43d5a4e6b00f53594165545cd017fb357aca235b9fca4aa32a4bbaf2a751d6a02efefae524808f5d7d9a541daa27b0aa632c52737041654615d0172755c7b85373d82f5fa626dbaa20b0eb39015b7e39f382afecb79404a02bfb2c250b75651f55de5081eac9f6f6c722f9ed8f3bdcdb7f93ce5f1a8b3c8d4fa55452650b0b0b892505753aa19c4c261653a9842a8de4ca8aa9fefb6beff5ffbdfefb8b2928282a28e3481a45235144a9fff5df3f0c411004bf4ff4795ee875ddd771db7e5ccedba62ffede7bfdf7efdeebbfff0d1bd67e8d52e9f4c555efac6a7a07779468f5909e4a3f63ef9375ab94274db2ed93cad43ebf652ccfd33eff5cd9e783fbfcdd6d8ef3f6f9e33e5fc5e32c9a923f9503e1241e6dadedbfb9757bb5cc791167dd8fc78d788f1fd994e6d35d7e04aac3796a0e7f4f82ff6c0a447d8b4ddf8b40591d11a80e37e25c500f02d5e13d3587bf6b31850f74f8919ac3fff42699ae46a3af40c4f2e2910ffb8aa39a1dde205f79a8af833bc01be455a08f0920d76d8158df7970101b0be1d9f64661fb7755d8fe5c898d4ca1a7de27f81454e63281be78d571836a0effa1ed7f4261fb7b4ff7b9ec3adf3a7de6c75cf9819d2fd0f6c798eadbda94469051cd477854e579116b75ecdb16698790281cdbbe656288b3ecdbb7446ccbeab83e1f11c7e638ebddf2e0e0e3420b430be3dba205f10a2700ed016c7a851370b0ff5b4acff2f8bfade66443587342d135e307a109754d4df835280f440e2124b1a1a96982e59bf83e08cde63f969d1922ddbfc3d63e4d1ed6135fd5188be5c45775aca9425a5bb868422345106f4df89e0b22026ce0e1dd12f1547df65122fae0cfdae49109f5380be76cf26499af72ce399b3d268f69c4e4e11e34794c2366cf27e38901e0852716036fbc771fdf2144278825ee48ece7c47fb32974dee734fe8bb539f395ca8929cb27c68fff07fe1bc3dd0a77cfbdd771f772f79aa60b22f7329e159e7bee4f93279b31198fe822e3e17156e94dd90d5005f3b40a16011c9c45dfa332be2fce2cd97943047c55f333a0d9b226cb9a2d15cc25234f92cb2c998cd258154c25d403dea70ae6c2c3f3123b715f5fbb46cb5795d27443e2c982b1602c27ac27ce0272961dc2aecf0aca375f934705abf163c366d7374d6dde7104c11b3efef3fefdb0f759217e8f1ffff7de57e6efcb1787f713229e23088e476ad0f174dd772c2c5ff2f4e9c3f632c761adf251c12acce5ab7b4d97f93a338731d6346bae9830845f7ffcba5f3929b80388dd2c3e4acff21e0b0b0b65e94a1d4a5953030435820d6e6c68c20722d44db4a46af833fedd881f963761ea533f5afecbbfa1cfbc6fd8d3fe55c1b87b553e2a980a9655306ddbc112baf57b22b2662c99af703cbdda94f9aa6655cc59e2efd03ed233852d10cdfac3e6b72f25b4767e2dbf56d21d2ffaf461bfd8d1895405912a98ca896b8732d5ac7e0d9b1a37f56be4b849633cf465458cd44697b358d6a78717405f16e2a9c2423c55b08f897806d99aa6bf9758a3c6976a3c596386bed46baa606726f529bef6da5f6dba5aa68ef97216c9c29f2449fe69ba48164ab3e52b920592fc93dc240b2c94e6cb74994b569e8515d3e5acfad2408dfc19375b2c98ea3516cc9a3788fa64692ea130847f5e6dbe4cd73ecd25a6f6dfddbf2abdb72409dd8b0662b51ef6f35730019acef66afac4bdca877b55ecc9f2c4bdf674e33065ceeaf489d32a1b5fff2382a83d4be62bd6cc59da65c9b4195f5d5dbd15f4d5ac194bc61262c9ece7e7328b25c49a398b6a9a35697c7dd51367e9af6f7ed40504b5154cdcf8197ba34cbd8d1ad4a57d0a88dd2da08fff96f75acaeb43f5a1b59474dfbb5327ed298dca494ab7d0ff8488289e9742897d9a3c34c8e0bb468d170a58ee5105a32ef5512793875edae4f3341e3aec60cdf1c7711c5d33f4a5fe0d8118fef864882e44143ffcf1cff1370dbb86f1bdd75a6b6ba574db54210f05d8f6f7e8b2a6ca38aa688da4dd749731b42d6ced7bae3c29935d3f97fe2b993abeaae68eb34a7fe2272b4a39be569e315bfbb3054d85324d570a0ca1a67db6a6e935eae6138761fcda69abf2a4af3ffa84427640599962b81fc1bc544418c9baac4bc5f9654d4a33fa5893d2a8f0833f63ef48fef7a5f2f4bee495e64e11a2f7a7d9daa68eb3348d8198ad993ba496b7a69708df8240c4d034e1fd102229362937b11fd7922144506c506e62e38ff6f63deb793f24a588af6ade18a8455f52b8b6d9b2a6b9c45dea57fc5ae9919fad3986ade7baaccd9608c4fca6eecd96a9e3ac0ceee8744cae3ba3fcf837a08c3afc9a50d770977c107c0aee98f1b10ccbeffb52a9c4813ce8ce153c2d60fcf06f1875a76f5840e6b48984bed4375df4a53e488488df1cbdb287bbc127cb336f50d35eb4e6f8da53aaf570b7a6cfb124ad8b0d43188894a60917226a4fad4bd5beee97143c9bbea41872c4365d48368bdb75db9efd2ed6be2de710636d8cd90c71a1c46c5286384bd3e3f873436409cacfcdae444898987d8eaed60e4f0fcc4786326bedf0a4f45873f466135f5598e9f25525bdca485f85548e2e6ba6e87f14923ce96cc6ba54413c4dd3652e319b983ecea24fa84ce528d54c4d0b95d2a14da87aad3f9949164eac7b164b2ee9ab2ca2c05d544a9934c9c95b0c9aac8048185d6cd26bcd3659ccc2ad3b0e921e7bad5d82cd455286f1c426358c2f13daa669af305810462b733907c9827e5a4e6060d080eb386e7b659bfcb5a0f3ba0e8c11789fe75d26332d0a7165d3d717657ce0f76d4982a6d8fe8518600882f7c9b521bf1042280a435990911b44247f9185481489825ab1fb24dbe43040208e4431c82603cd465f2dc911651cb9a02f4361ec02250505c5f51a2308e595424a49f962df18b03c866b8c9e920d482a24d053f92a1ea3c8182fd8e51839db0ec9b6d7baf3122a2b2a2ab1fbe4534ab042aeac34f15c5a14176808f22b9124b803d317fa381d0fcc909d97183879d39718365b0a5ec9542aa924c1743299489bbec0f0c109753a85210303093dbd30e1765c029ac4605bc1ac70741cb666ccb9d222014d56c0397ee1737345c2c4c4bc301303932652c06e169e0c07263114cfdddd1d6377777777cd31acbbee82dd1a98f000856b21261bb163882250810a48c8a840051b0bc1154f2ebe4060d2849835ed46d3341ef06ced09166c0d638c71d0ae8e43814ade70c82146818ec3776372a319b1e4894bd35e4cc02187180538fc841079668b695a0daf2e50b61b834687ca48011386d0d12209306c6c4dc3b7861e843636f34ae2e130f3a2c2e290438c0238c46892999714d7061c7288a56cca040b176c2a6b61027802d0053d3d3d6027cbb0fde4f7dc129ab7698b2bed0ffeafe43669cd9c2db97d2bbb6d6316665dfcbd326bfbda5af6b5ed54907b0a7ade5aec565917db9446d52e13bc930df7eb575d736a407dfc58ff4043ff7e109a5b523ca2be3a59fd5ebcbc7879f1f2c27a91b36b0f3c04f73a194f94f1f49e71c5e6367d9dc1c512cfa3d57d8b7c6fd69e779ff54f32d0b75f804df5a9070cdb3e0c9bbed5a71ef68c336a358226398e91ed8f72056167ab7693edff1181f5cd102fd0dcc7b93418634a818836c7f3347c2da5943aa54ea95b2978797f75572a126dd1d64e3eecfbfb76f77d6ffbb4afa08f18d17e0665b05f03f461ef6b5a79e25dadff062a7006a19b823d30be8f4bd556ed20b85a57cce213638c2dbe18637b71c516e3157efc55c7fcccddf87dc6635e787f92acdadfdd61d8080cc4e419febebb5b5b63fc697df1e4c39df09070e1d765ed3aca44aaa48ce2ca864a7f8b006058c0b1824c0cab05170c2f2c49625375502b6c367d1ae00c9b07b6bf5743c3d786e707b6bf67c3ebb87cc3f3c6481485200ecf1fb6bfb72257544829285a7802b1fd3d974fb5b0a04ea6cd5bc16575c3460d150d9d437f0f0039ac7ffef01aa8b81be1c33ec54d70fcb59ab5d6ea136bb46e5ad74a613ed0d969b57674747676745a50b4a0c08122e70545eb0545eb0545ce0b0a9c17c51412d543ac2f922897715326326042064aec537cec42bc05781e1155c7d5451462883b1618830c9d16155a9c600a9a6b041c24d1028b25786299be24e1b851e99640ec01bc81db988dd9d8c76643424243b3d9d0d04c48482614142424930909c9828280827e7e8280808282807e7e5e453c89bd8af87915f1f32a22f62ae249101c23330822b2041462c0bc802179894a179223df23e9b9292135c080d48224051d0b921687a202e9a40415930f586af291518c2b3510a910d94830171228292e9790100506c384918a2ff20806e6e266a870328a2de08b87d0b4278ed81aa682a489b68631c61805a4908a1170201536e1f785c9db62d41d297153c0a094a72882dca240d2c01061013841b917098a7523a0d77003cc863b73b3d718b41af02900982a9e70368836658224091b6fca0489172f60384c0c4c0bf78899121bce9af62925d034ed899f944d9964218320188611da6e0cda08f0133bd82e8c13510b43a6a8e2043d53d80228668bd02305e670c618636d638cf10c0fea8ae15e8c31c6f87a0d17638c6130c6186b1bb813b04c1002214928c1104a70c4932658bcb8c271efbd77c69b30b1ed12bc3c84251203105ce17d5310e9d36d86fa60b7d65ace0877ffc14e4bc39cbb5b6bad75dbc4765f228326b667acdd881c254e5840bfb8e27e9bbeba50629f302fef9379d459d4d2abed88f57ddf5b3f30bb38232875b8383bdc2dadaecf9ad31a21567726889ef2e9ec2b17397d7b7d4565dcd29777fa5271f51c63acab3fa536149245091c084bf0f516eecdd1340db6356e73df72340de70933b2304157b3102c668e440f0db08882236189e8412286191e2ebb55366582c514444e03d1e2f7294424e2e96d308f47d3a51422e7c53e3798571d753b17db61d6e43c1eafc77389e7e6da9b6b5b72ef8b5fad16e273efbda76b2a0da74f5d109aeca2c7e3b9acb9c13c1e7fd7a7f7da2ec576cfc81d42f47abced09e24992569fa2161738aaf386d581785e9b1e5bc53ef0ecfb23dadff0ca132922ee72afc8c9153dd9fe57e42382651bfae2f8665bd26bfd8a3ddb5021f4ee5aafb5f6aef4582758cbf7ed63d8cd26e42ebec952479cc563e453dc905c73ab9ad9a6baf8d7cf4254b352991b77e9f69983b81bc6dabda9f6dee0d4fa228753ebc8719932e22e9ee2f1150e5686e420a8b9d273ae105929b2c2043557a8a02efe2b54d0fd2dc1c659753f11dbc1144fcfdde79722e2ab51aa88b32c4f6a88e67f06d9b6ee6b533c2a10cf6cc3b3fd81f69014116b37582ac757f7533aa996af3c85e32b9abad2936d54209e2b3d3bce3a579e48e1ac4041cd4d66577a5239db53674a677b19d4c5579ea03274675fffad8c10ec4d66cd6c43b3106ade1b77f1f79c22b6cbf679ed7f376c70ca1166b8ef2b18182b8a0e6a92b4e00cb6d297cb004a3303dde110d1b5eff3197a98618619a80c54542fcd5c485feacbad1a93ed5a989bab6ddb7e559eee766ddbad888ed8c92c2677bdbf63d34aeaf4450bf1ec649dcc59b59b39ab747b51b089bcf73cee3df13b20767e8f823dc0ec89f4e9432eed16cb33080da05ee27bd1575df75df714a421fbaaab4252f43d5102bcf761731cf8f6a9aff4f9c3de5e240213e0e925c217d1ed33430d6afadc7f2575178ecb9cae6005b5f7b6fa3dea6fba07f515f73376fb9b37ecc3ce6153eff05d82bbbb3b7577cdba505f5d8d7b505ff9eabadd82bb1181ef517086eebdae3c77d89dedc4b2823bbe1d36feaffcc1fd7d518bd6e57bef67fcfb449dadcbe7e91fdce81f106aaf1ce9d3871db6f755f45a0efbdbd13d201c75fa0442f44f8b347def43db79ba8215cc0f9632d4e76a57f6a8cf8136e4edfd8ce5de39ae870076fd73874d1f972709c4872f1211a5b5deda43ddfef6b507026ecde6fb59ff38f5a88f5ff3b0e90d5420c8d67406f003c11beb0ce0dfc068639d81fa40c0cdc376c6196798b135f725dcfbb8fe7d4fe479d5a9d370dfbabb6fec4ef8e0fb80a279a8248c58ac82182aa21100002000d315002020100e884422b150948581acca0714000e7baa466856a04793208871144529848821861043080102222433a455002becd5f581ebddff802f5bd3ba34888a31b9f201ca0645edc5b9503f2b9d5f926098fe833ed60c779c96110b09f18d817c996ce79d1518e6b2323223dcb5bcf01707c3ffeb4cb1e9ffe1e775de5ce0c8cf3eb095987d2b67192b825f9fcca412fd44af8948db352283024eb64890a9fc3d98e0dd0fcb1a553d1c997d48fb0fc7354f3b13fa00cb12852a2da248a3149b066432e7688de91a774991403e2471271b64f0cc8d1f06f037cd8221284b97a17d41a98042cb9d4ac6128da061f344f48565a01ec14a5f26214af0b46c132c8854688c2766763616ab8c3d581b2b356a07fe62a2cc578811d06065fcb8d6cc60086758086a44f50c3877a646068ff3fec76bba0257a335f6f75ffe4aa9087a33289976640d27cce6aff0925fad4377f9000a4026c6f233eedd39ca153a1365f3f3261ca4f8dad546189c4ab5cd289b1ff5ee87630dde138e17f2669402c0ff8e13d38352aa91c07776406b68fed0ff2e9362d6a400be2e9f644838874c0f2ae30f6b1defd2e18c8163404d991f21dfdd5ee2eecbf03760377cf238be417954cfb500089492f8eed82003665291b379b741c68fc5fa962c1a2449c4dedb9d91571a7a3d1ffdde0f612f62d45b2e45b20d53713c7dfcdd3bca353e19a9884146d045f9f319a70677082ede8fc67b7c0d1dc908f9e4e043e231f3fdfa62a31109dfb23efb61d96c8d0905c0ac2d5b3ebfdb8afeed9eb60054e93a542665deb13591c51bf51fa5f53c24b35b6342c61ef175772b6f5b8bab708388bea27afe137aac0c6bad3e5ed82736310cef594b7c5b21667410a896b5b6951363a649563286b53413a8b54608929230ad78577ce0129499ffcddd3eb02440a9e5d0b647307cc172a8987290cd3cb89c190a6f6301d11fb28028baa36b19f0f5ade552da1d10f79ba61a25ad7516f64626140a41625731d2d69ce2c79f3594d597f72c6a20dfa9bf2874d690c0c319d71fc1c17b679ff2c6e8453ce7e7148708179ad1b91ae7b2061b59ac526b3034c7e4de0c3848c4ff091d18319ca6176f5ba0d5ed848942aa324bc16395ef494b97b660c8ecd59a4d5e596dc1453481663241554b26e5e2217f682a41f2043470a95c68729d956fe689597050cf63c6454d9ef9e99849850709f9c951daefc1b8cedf961936cbe8707c2d62fdd050995e8887185bb5592e9d2682593240204f0ead3dcfd83eec481cdda51f07b3fa1346ac5511d82b621c231528cc975a8567ea331d81a40442804e21a3240f7340391af56083921cf9d0c03364fd81d5598a24075473d39f2188d809a450d02cb40d6b3aed86cd008f9f8ceb340d6e83a9ad515d005d93f859bc07355f8c9703e4dcb9ea78d69ff939f672a0562e421a8a2e9964ba0db95d7f070688db298b4bc5dcf8e580412550885b147553ab44f8d51e5338d067ad3fe9240c42942fa6b4dbed8d39e66d18ed73e2f08192e955975b5a0c3d8e357b3bac27af9e4dd4d5c3a1b7d46c1d0491f0a83895d3b81efc455224ecc331e0afaa9b488c2a6c1e63cb6ac7acfd57917dd0a91ff774c2c08e2cd3aaf0bcf48abc571b7addd09e3ce7ac8057686cd5c70df610dca1b5f49d782b19f920a6e4e540c53cfe5d18f38808d0b23ebea4ca52a3037f30308cc60c0f2c58527a621d4398d6254b2321b897854bce2aa6ddfd7c40ce778504f11114c5561e751806dcb0908ca09efe5e02f391429a3880d9e8b26ae7d3ec9c2acc99fd372ceb008a1bf45026974718f634ebe794c04962b188171f65f2fec7d8fa4bc9d8f29303f37a5819137e9b37eedfe6c48dcbbd1d089e9391c2216de68938993df3d810e74d1da301a2b0d49613eca31941b0576e2add6ee8cb9ff269e8e6a90042ec86d16096424271a45c4eff5e482a30491541c9a76dd0ddc740c3816c06b602bac02003254a170dbddb1ef7d27054bcc004d5bdbf7fdffe52277280ae0b76c7be6c7be8b63ae19ecbbcd564bf1b8d025a0e6e05033bda3ec2c5f968dc757a9a42b1cd3b90be5189ec2e6b4646c418032b26c0c37b8b4b3ff76d145fdf6ea53c295e6375a0c8e8e5c57dbbfa6c15c6ff6e258df55b15bf01d8a046f4625e69851d5a18b398ef100808da0c9131e30702d6f8b1d8c4111ef3bc529ecbe418eaab15c5865ffd3beffdf83e8cc3222c90caf7a3f10d08ad441c11e2f2c558527709b130c18a933dabdf72c5114d2ac608f7703f628cc2cdee959e208c05072d2c2f04b498f3a4804910b765d6406e2f10ed2268e7e765be99be328d41d6a5c511aa9e384ed1b6fa4bbc466c4f58407d8cbe0d84fadea69ce3874e72c9ecd4097bf11701b204d744e6d8ca2aba80f1ce228b4a98ead4b347438a32616164a6881a80c9884fa13c8a186e329074a7ad2691ff5371de8bf2d6cf3fe1b27385193ba5bf86f3df4bda4ee3e82425bbbcfb3f94482c2c50479f14ac3a1a05d8eb84f5da7f221839669d808526684f9bce50d7a4e8da2df408cf5b2eb80bb0790a2852e1df59d328f69da8fd909cddafb4758538a5c16ab5b2e6c1fe67be008d1b97ed78adbb78b9fed7b7fdf6e8bf0669adc4cdd1ec05c20e282c22bc761d98af7ca005454dc1e5d33ab870083f127f75b39f5b5d96f1516c1acf1a3dec8cd3ed055e7b7e3e7636c4526d341a5c9c799b0e443f344c18661dae2cbef91283b7869665d135b8fcbf245224fb45a1394ce9e5594cc79bab2b2abf5e42ec8db9da51f50085865224707c4558753849ede0f585fff05c47a478c66ec366ef363b16103e58b92630947095aab1575fd9eb4639fa6498c04e64c373f9687ff88cdd10a5d1f8781b1c79592bc10eb886c18589b4b54c291806c0c4d11269f92d035ba17aacd0ecbed3fa907da798d41e88cf6c517dc9aaeb3daf2a4823a48a663c79660467ffabd5c70ce6506df4419f43a5f7211dd7889d71245a271517fde7e54a41a6bb856c76c6679da98c84c8aec38b8ffd46a5b5338246eb351dd73971f166db968f5588ae4e0da8da672d5b366258b016ce3fad8f076eb9d516daf72cd6127402b62ffaa09e8dc5495bec2b71589f85be739abd5e414f6d1f37f43e6ee4fde4f32beec0b3b5a994e0a4a34ab49221474fc4bc4498d1e01d3087cc4516ba59e0221de30692882a802b1df382243cb4746d77291f75fa85614443639b450a8dd788c088fc1ec21369a8da3a8542f17c5a05633a8fa3c01c172cb502177fc8aa2833ac3178e678a5124ee26619f90dcf258484a42a3e12edc95c1ec9f858f59e217d4d321778e1d6a59f3e62901fe22684165f27d8f6558a4207666b8010a11094d1cc86643d2b65d88d6d95456f36af20e7f232cbed6f4e86ab310933a4d898eef64bd867319a733342b3542e699e14191bc56f14908e8fdc94208abae5337dbee1c179c6ed161b8a3b0ddb522a3503414f7b586424eae8a888930313d924f5e4b290edc466913c19c5bdf6c2f5aa263be3ccff009dcafff881c6ff4039371e3ecfbc7884c2d3463e8974275fa9c11b668af81ccd95083782170ebb2a33b916090caa08628cf3581c03ee6a1c4e6c38ee938a50292f25eb44309638336d1372903fd405ff902908b9dda60bc1a483ae12829e9e7291eb2688934ea1cc5223812035b8c5ad02ebe723859db2816d4f63def40c25963ac33264115a4fe85531079c054fb068df80a4f92cbd66695f5068e6ac4eb06a27986f3aab2758b413c8349dadd72ccbbe09993c9f6b806a642d46c656e43119acc66869f16105f94fb923ab4ed8382fcee8c0ed088ec22456305b0ebcc1ca794c2d8cdd80e51d590910beb543bfaad61c0b553a28882cd018c17bec7760c7c0176f01ecfa80a6e685c5ffbec67b81a8fb1d01377ea6bde5c0491b9cee94468be0d51eae7e4bd3b280a71d38f13bfdad829b36b8dd2d9db55842a293ef00dcfa4a164deeec9915cc32ac8c066abd3c55cb624d4b1d78c734ae77786dee654382062c4869281374ea10e9152832464ac30dbaa0025f744fe1df7a85732c2fd0b5839519b793d15c03d226e505ee680b2f9d394070ccead1a405bce47313675dc847c7c1fdeb87d319fd03026f0f26c5c308962ba1cc63493c23755061fa88c145c83043388c19282cc256761070018d47578e765e994a7f74447f1134188c71a8713a82579bbc619c53af624d8620d223fbc6d4e69b85b11f2aaca2f55549de243a42c429d58c2950c9404c9e888636e5c84e22a612725e11a9a02284805f4cfef70ba44f15cba2ec8f2b7a85a04cee25437c6e1fff7388a653467d77603558202e59dd5d0f621fba49d0e1de410518249478c93e013d52f5e726e77c6fec73aa2ab1a0691a938db44a69bf77d4341fa924d797228adde6768a22d92249453b0f784763aef58f7336c1fd25d97efbbfc50eb7cf321869acf2566484a31c82a2249557aac50f23e6d8bf8d29287ca0bd39a59161805da40f349fd75862c3935d00c61a8677c65a649ad3c21f99e55fab3fdeaa99db06d4990a462f433a78c3743be1e777ed81a5f5967546157be5f650e0fce49d969b61e0daad332e86542c3720086a915235d14816e6de7496d3dee2acf502230762d4b10b38cc0ff188653d30435284195ac1555946505a06588d70f56200d4480dd41b73037460707e6956c3b49b102df8ca2cfec15efbb48edf4688b87cf9e764040f68ae17beae6d7a6417f42dd1e1a899605969088931941f118d5e194b2bc6b5c481b614d566ae9bb99f93af9df6d573f34f6628aa89bb6dffc528c3a8605ca1307f6fb135274294f25bf48816a1c507d48c5b4478e066816aaea978144006e341801f2a99564bfbe5c89daac2b339a99f4db62a219d271016b98d80a272d8235932f573015704bd1793c34f02e4654e4269335fc8e8ef48e49a463c45778ba4e491297f451305396aac44bc7d89aef95fe6b58c5c30f0f6aef64c15850f693da7c8498676d5a5179a8c443b8c2f861ecc5435c06fa451cd6b9dab3f4d698b0da87b6123fa2015b81c3032d046b074743e205daa9841da159c58f584459d6fb0e224cfaef4ca5a84a2e32aa6be7bb335e77db8a263219e0ff5fd2757d1902d577b1cd4c5204e3d8606e4fda0a6c44192f4d2b23e8d8a33e7621af4489d103c0ff5e6115962a5bde9fa03a0736f72738ec501f18c00729d0f561df1b37406565380166364e0e706607c94c05e885b5a0da1e7abc15b5d34e0ae57b69fa16ecfe86cb6470e2abfcbc1fb4813d6444aeb73194d7f731d7bc80a2c86e89ca3f46edfd68648f60164c25757fa5458005415ba5f7064f16af98cc0b5c857b6ac1de74887233b0e6e0028ddb78b1aca8828c9b897a0c286c2a4544c8e74fc51506a7b1d204997dd9c90be1804895a1e7e39efff59bf2a970c824751ced2e507624ee6bdef668d761c152693cfc10df7603a0ac533e4b7f24fdf395e24c250fcc6e520932a9a9902e742fb1493a3e71cf802ff67f39f1db4885524f3d73818c9150da205c5a97f1d7498cc768c0bc2f59221231a1e3b325b26b0b0d325f59f3a6256cd747e3c50ff8d41b66e45a1363174c2a956dd616d6298807c2500664f8f99aa9e6c76b0d028e9445e450884c30114ef54d5e67914ca69f57ee8426f2fc6383346c4d9549546dc7e43b8ad73654628560091cd33bda87286328e876b91442d3b43cafcc86fb6868c516a95fa78a26ba25713483f55d84ffaa15b1fef208c140acd44607eceb966f59591e938e1eed5694fb219260c37190ac80b2d456491f0328ee667ac07ea0aa158c40ca640484a05bb46c27491f0b53d7be25493478da16698f3afa50dcb304f3d160bada0d6b66978baaebdcdd2c848978d1b4609e0da261f59500b028a242ec42dfd60a32572382fa3738e0e0692416abce41c62bf0ee043db84b7f73041a79e6e3fa976f48cace386b7fc5b61aab09fb98673b79e84fa800f2e815f930a40a34a9a83702bdbd2c57fc549bb62809d47c61ae0f6c26dd3a0079c3db76c46136e5516d4459c73f46104a2c6344570bd0e17c76a4bcd65b1120bd65f94130f032c1489663eb6ce6f36d9a61bf09051b933d691092338b1c1ca8603d89831455875947ec8e9e91fa05ab3cb5dbd11e0aff7c9e28cd3515fbd6a9c779d8888da8bccb55b5cbf7d6cc5b0319542e8a83ca1310ea32b8077ece252235b76b2604363e179b851ceb4e5bca51eaec8231ce9f8b38949f71890e8a3fbd700d1f2800215dd578bb8b1447d36b19f18279ac19baeedd9b4e769e52c59543b9f6f1c5d0f486e7541b2ad4b354021e2c933593caf409ba6fbd9fff0c2749fc3d6fdf3d3c7d3017c1304ca607c9c3d9f37e6b229e79b4d04e57e8787022dfe2f9b49da446c6e7253709c241d83fc9746032b644eda607303ac5f49dfbab3050e193ea34c3369fb7fb2388dae68d6a42d0be297158be3622e8a81a5771e6d2a0414bb27a96d17324e8c6147b46ad12e6bd456848c6e5c1718446daf572ff49f8e2e0e04bf6bdbbd822551c311434b0af06b2cdb429166b3615bc8207864195f0b89f43acd72eec85308437f44c351706b1a519ae0f9c98ddaebd07e83374cb21e9509c612cbc9b619b0b9797576763fcb4b10e6494b4a3af2f2c3093f37af404458eaa0d914dd42d31a350db90b04f75f7dd9a48556af7ffddd1da6915a5b6467d3b76dab0163f0dbcd46346aa78a61915ef00db1882e1f465df2f0e606fc8c50b8443fc4aa25c9818ef6ab40fe17a621cb6a3c0a8e0e6387a91f82b547839ebcf2550a90b87f6f73452cc42fb9c65d64aa4ad6bc596ac956623d62e7c48a83830ccf9f9fdeef30c2e2d4b218c51fc073ce2c98a3f06dba36ba12325a610ba519e8841ae05ae0d5674e51cf4658dccb066a07c3f0071c68ba58084dc6b254d3b135f836ba5f05d028f86853265f16a4d25beb10810085eec2376b4c0ba9a3ffb7030af1627cff891ca798ea6a5b8bad1574db82417746bde192df49e6c905051fdec4e4f29752708490a7dc4520980bb20c566ee8f35d76ddd3ce82c56364e4f8b8cedf2307938728c01e3a80d4b4dfbe7f0a0228a387ce8d08e781b8cef6b2f5ed29c54a11985f2df320ecef8af3f773528fc63c76ec6b62f74eb7728c3eeb1b857c9974066666f64e3ed600c614bc40d17af44644c00b7c07b9df40542a87895ad4d7240951e0abbc7b32618f3e0eb4c2fcc12f0b0b4247dc062729b69e60f1d650591bb039d387d16a0ce0c6ca2e29f7ce9a3e065683e2e12fa02cb4d6cf876c17c5dabeadf2947e6af5cf99f64a4aa028a696acfa9ceb580b4065f8803bb9f667cc8d96e5f19ac4bc64b9ebee7048c6d70c570ce5c47e7eac56f3800f7d1b2480ea5f7c6d5e0529cc1ac89eea8b373c4c23d8ade1a1f19ca65fd7c993633169f228096fa5dff417d5094b47f61b637ca934de4aa6310ef2cee526f40554191805d3f818fae2fbde02cfe63a908348a2ea2b1f5f1b99272e57e2403f45d082b5031a0b7d81ad48f3841d46599d6fb13483c6b32a9bccdd31fd67a796b4c698d5fc17593c119dba388c497a116571771698a01edb2acd9a9349e3a611487b86552479119bf1267444ba2696f043d298887250cc529923002645593b8ecf63121e0a3792945ede39ff7e4602723d8afdca6918dab0210fd531ea00d0290e0788c6f3830e40ce56a9a247e9e88d30389408b78c5f22bcb95dce6a6bd230ac47da061e6ebfc5a7a0fcf6a172348f62ea2db90610acb18c6a3c1e05c07448d9d92b33b199314d8fd763bccb4473c7149d051c549306420b27adfd63c3508919f95ff5f7a54de11d3dc3a0b0268b619720d79373e662969651163e159b65d54c89f09ce9c80033bd3cf4cc3034fefe61db0a5591936ee7019cc79744a3f1eb173965e844b8f8a20f9d9828061b314e935c8df54f703caaba9837f03465d0507c94bb9cadcf2cee2675b1f5041507cda7bd727656127f38e0147db389f385327fd061731407f40fe73c436181fdfdcd7ad739ed8adabbf534813739d72d9e06d80378ef93eef18b913e1a6b1b1ce028cdd4df27dc5a6591c8772a03afc80179d1dcdb3fe5a11196cb826f3b88dc0c0d74b72761addbac5bf780014e0c8fa01a660d94b945c2a72cb8ecececde77a1e124146f881ed7b635dc6e50c51c24fc270d62a06cd8fcacbab85953001ee4ca89ed83ba251c8289769bedb95e29c04be28395e2bd2b9854c309473ce02e77c873cfc3838e1f620902071592e445342ffccb65cd5012b1390ded530dc461da1918c0531acd47bdd8506e6bdb6e06fea8eba5d8431e552d419b130afa0f7cff2ac52343a7218b7870284405189a4e5b900d90571dfe7244d2646b2c0c6d9500e11efe8f570fc1d4bb40a6a8bcef1e4e03bacf12fc7969c3a863c7efaa143d599a39eb58b7fbb15862781187d30d90405979497b7ffa0e3359cb09fe9046c72a40681b0d0a5c4ebee1a13309592660ca525a018f0537dd155c2a20cb64ad56a4da9f494e58328704399c4f602bdcc5a262bdae6156914cf72c4ae43d37753587efa547ba23ae626e9d211ccb0b1619bb3f5ddb61ec11175f7cacd1153173054d81ff8b8ea5c27e07d17a0e013b11f0f2ce92e8c8962851e7a252e22944a37e2e8b98790a8e31026dfbb9e77cd1aa903d29cb9ec96a39d233ab84256c1b87f92c1b269bf5ce76d09acb83518e1cbde7c78e9d136def6b4688aeb663345e72c0e55e24228ce3d178b15c8ee2de3909f48b1c57ae348b8bd06c4a3f9c67888877119a58a47e7e5a0fdf7ebc14506f78f213560713826a2b33e3412f7981ce9d485ba10ff4c5693bf1b7f5487b4e1ba6c06c35002565950c65f688e20384b66fdca3959257b4dd6aab75ad44fb3620484609e637919640da2b14889fda3ee85afbad1f08f81dbe3a45cc6944d111bf16e4e29be6b7074f5ae7199f342526471a7ce7c48ef829f0a35201cb2823bb01248b3831e6989ff35cfb90d78ee22436beada8a223a2b4c9e342057224a37307afc7b968913537030e0d861a6212df85c560cdb38d2a2e8748151b6cedf77fd9aac30f7cffbac3569e4136070259e85cdfe53445cee5120faba33b19a384bd8da5202f060de1d5c6c7b968b45ad3c83aa4c29460c95ef8a253f643ba05696e644ec17963783f187e00715d4a0102c848ac8424b83148ff928f29259e3675bb9b1773d3b2da92416d0223b4e31f8b4936fad0e2b56dc85644a5cf193ec1203ee4168c00e1b17a46e3b6a4f050913db078224879058c07e890cd18e91464174d89bf661ab2743d85770bcd3e4a7182f68e854476e0331019de75d41d78653df012e744c1e7cbe14a0fc28594f90d263a0d6f4b4ee65460b81c48cbef46588eb51f0eaedfb0b84803a4252639a4ed9245c6010d7d677f7a9af1ea98587977224adf4ba7e2426bf0831e6a03d336baa26f8a7921c7b6acc8106c88558c76d03c0d4a46dc78cf720af30ca7750844069a272c9b0b7392148c3987a6d93d29c028e9af0945dac5fbc2f81db25e728f5f0e58f36d038fc13a0894dea1cd4268f43306df35498423658d7de20bb0f08ec7f912893e00c6f9e8dd8bd23771087d72824a4af01f92203a02cd0ef6f8980698a8a5549644465a4603c0d1447e6f92c8be3bea6e0f7ed798ea11463ac025421da42e181b97b4906e75b77046e63351ec2dd0d56009eec00f4b16701970263eb850961d81d43f95a811a700044ab3bc83b4c1415089c610edd89396b7283e10c6933a9795973f84651885a03f23efd41042f163358d2b10fb0121860905b273212e089fc42648a41f1bf3c5d6755cb10fca8fd10f1df3c156fcf823c28a92fe93512f20424359c1704f719dff90c8f7a7a71b4f3bba782b4d9a318046f6d27afdfdab58fe3d5199980572a78545906177853586ce2928f238c20adc3a5c30d930b6a121b8171785ca2f257951fa06d98ba194accf513e5a0a55c4650cca7915ab380b5fcdbe1440293e18c52a754485026ae35da627f251db092a95e55550c57e301f51a2c21654b593c6490006dac891a14852c1af417eec08244fa58282a7223e9136df82923d1048427939ea9237c374044ddcebf80ce408e6228565c3f4f7aab2a01cb5fd658911056bb8ddfd77c06650a6ae711b14b89dc0afb5eb6cda82797188d9d72df21615372b17c24586f8b5e90cca8a59d8ac65c4719a47f401491ed3ca5e7f8d7460b18fac87c6f2c2775c4268c9ea30391174c2c26c3fd4068576d46beb3f42172a2d6ac9c159f3914edddc85a39b5003fa1e7135da6a736f0882a7c3ebaea7399b52b755a3ede8695bacb8fb272082aba0b469fa90dbb9201e7dbb0154b148365149741e23ad5e838a0911aef2fd61d85a6fb7282049344a0cdd9df17e7b2d3539c64db91388c81db3e8725aa2eb7afff90645fccb351aa61c3809c26b8d344276f61f4a82e2d9ff1b6c716fc4c63ce1beb2178e34591c0eda471dd20eca070b882e194327ca06658cd738d013c4508de339b200c09897778bbccea0e07dfdd549bb2321ab395f40001d93846f77c2663745c9acfe5c0c831c234f7fa006338171367da64f80eb84535ec45953b9b8a5a36fb8a724c1a9c70a58ad5d52156eec8c98090689971f4ee8abf25d8dc26c3b4245fd2eec2809281e157cced7c8fb4049ae232a62b9ea068424683afb2f5b5f9d8ebeb8c1dfb0a81e460f6b6051c205a204c0a5a574437ecaca105d0904823beaf867af7802b6821c5dacd4653143499c0827bad222338c235dc0dc711b7edb714349f2e239a30bb3efab4a132f64982c1e4a8d9e65af6c2ae57d5ea6055bdf8af1c23707a30a598fff27a4e176d0e5888cc2c0529e4f08682c93fec9412e34a235826631c791793c00c758181d25b72850198b62429eb910e41ea880b794ac90017777d163f17dc72efbc5cbb870cd53334fe07cfd7383603eee1e0fca083834ad65bb337f648f7e622a419991d60bd7dd170d6edaa4cc57fd2122cb78912c5d0d8d5fdc4ab79aafb9619629bc648e52ae65d9168a67299d7096d5e02d218173562a02cea01d37f6e960b20147f00dcaea40de7f46105cbfb86ade30f008c825b149c7023cb865000795b49459b57a80ebe204ef49dd29d28bc468f3892a54399ec5ac0164b791f8728ea4a2ad14816208ab56e4c3922d5bdd1b305a40444e3d87e4d8c76b3a39cd366fadd421a390606da5143ab6c289879572954e0aae9afdda5c852216bc1eaad0b74047a4139f4aea97d051eab65f05b0d6d238b039df62b14b5160e9ceb4a80b5cef6b20317173827f159f28405c30aee1a78c218b25c707a60ac527568be31a15fe1f5f7f979254958b037a2e51314f2eb3a55ee47df63db507611d4edf01dc84a83d411525958519ae0cd7cea33d9b9779c0c5e3517cafd4377cf0e264ff5147ed71c2c15e147d41d8a9b8ed14523f22474747d8b43417cb2e17a7146234cffa06ae44d1d2621298b25c7f9a0310399601a6b56169de882bedaed5c6d1c4eaa2e6ddc80e1807a438cf7e6139a32ab0b1c383309ee9e90418fa7eab903cfde466021611be072e96eb45bc8ecab1a1dc5a5c0314094f444b6b2d32a5bc06bd2b6feaec939e42e177ae5d93bd405e84737818e00b72c684f3799d1814f55c86368c08b56bf2f58b66f4ad9cce6afd26b1db3d67d1682bc16fa074c4ad049a748e1df6064537112669a4c5492bf85b5fdcd1ffe0b0d04e8d9a8116f853a83f2b8a23b06406a226ae0e4362a9221096925ed223ab0a8ceb98710fa6d4a6284ccd15142dd173a1840c9fba1f15171c2f2faaa3a48200f262afd4c8805c8ac9465017e07bb2eab9f2cc40a34a2d0b817a503153100b188a61d7adf69a181400b08d816c16b417e189d0f8685265b071d49aad10d448a1e11bb94fb716d86e45746f9b1414ce7ee31b2abf28fd1233b3726028687372e2bb1f6e1aa4ad1d41f2aa7448af97d6316d13e699982b62ea81928c9dcdc313872fe3fb903d3d32b1cfdc39b354103f6c04d0a83357310db649558e9892363f7739621af44cb34f33f6c02b97c1855c246364348957c52b33e767efc11c2279963f8078114f93d8fd613ecc0ba6fbc117a73b11fb12bd6f8925c4859836da400e568c70d64ff461100f50c3f5de717b6b03b833555cd494477464b84f47eccac462fb848e822eb50e8d052831760bc6f46a37d0be4b813b82c4804dc12529b98c8fdfde5375916cc99d4cf3ca86ba3fee01c0ab31068aa89559d4df044a2527bdcee21f11f31d5ff84f814e09af117a185e6fff35a20e5caa09036afe7b51017b22825c89f9759c3a37e68cfd92a8deb7e4d721385e4d565d0948c89f1ad8579290876da031c2e37fc9c37b670b89e26414ee596fa814270cf762fc9690484b7cfe08d9884c84d6466714c3ce0e0be3e3b9761e6ad1bda16e7878b291a45f276284a72d12a550b9633b549c8e23ead81e526401bb10107511c7c9bd7a3a7a0c2636749ad2c71af4254f9b19532a0e3351549e2252a3f4fe469837640ab4a6c8e0e51ee3db9251e5a7fe64cb2a2776c7e15b74be70bba0b48a136649beb4e6729bf2773475bf2cc7052db7dd233b4e86f805946d2bd993b10014807b54f8f527b2571fa11931cd5eb02a6e4d49421b434969c0b723fba08758b39b9b0c60f2550372a71048be51b8e6d9d61f4ac89980c0acdcd497f3ec75c9683c4f4fca9ac3366b296a73fbf7d046ac9b4c12ef31ce5d3fc935135ffabbbd28bc06a00692f77aeee62bcce0a0f7dadf2c58f3164b0d49c6258818141725a1f8a68989c9417ea7a2263c0bb89fd53a204bbd1df244af2416e93bace73545f8866a7eb0161a5f13e6b33203515c45206ca0c37a8afd1dad27efe3c9464ed048a1a0bbab7868a2596e16b330b5471186d4bc0fbaca29426bc5c75c3ee7a2f5d5971e73c7ef3cd53bd8a80d2460196dc114f9325ff9e54284488209d33a4e73f6011fc851a4cf52328f42f4c7f1323448bb604fcab620d2ede630f2e3f2d28aa3edd8161cf745a138ec89ad8ec957b00580ada3996ae30e7671d5152c47318e35e8ea48e354ed61cd144d98d65d27b2b817b6cf0e5ba01720b0e48dc748cdd4fe20e8f27c912c29cb0c7c3987d728dc309a7d428af29feae49b5958670f4c05e40c75264b714ba80fd7908cac65955726a06a72ab3b7e482267ab3a484058bec3c28efb21c8218cb91034cbf8a33951290298729bdc9a9c5eb7ff2021735eecf7e945dc8e7e56353ec70076c1c518385e652c98676034ed233c4c3cd2056273235fb1e85de10e1e5343ccc50bf9a954735342803f028f961c6c2c02fc6100496e814b8ec37a0f88a407211d94da4593a2ca5a073b4999ea32b5a5538aa90284e469cd589c37c2958a9a079f71813e98c5529418b5054208b03c411b2a46fd30ba1968e8c1c17c3d4bc1c707a3a9f8335e3bc367b031c0bca3888439f78d3d6078b7a30aaae15fa1ce7c6673276dcd16fc8c213ff3d7fb3fd41ba3616a5a75fd7dd71ae356d1c6af2d3d0e55d178d6d61439485e97736dd36549def9f29a8711273790e3b9f7383e1b184347113edbba374840d64975e68cad50b488d3e04d0cf688803a9f3e23a638889914c373899451d2859b8ab8c5c58189b51ec8be160f74c777ed0f77d5ec90208fbbdafec8e7a788eddc591ebbb6b053920ba92153155b0304f80246229325630397b2ef29dfa2ab5201b5107ea261823a96fa1dd33abb26e72e8944c502ccee445ca8e9130bbd5a90137782d5cead5d65440b7e56a4814e65f63c399f881fac7ef59e7905abebe0e24ee1cf5908d1c504d16baa390be1c65c5c60b3bdc5f68dae205a42fd1827fc84d9a5738a21ba912142e194b1884f3c7699239fa010fb0a654d496dd409ebddb1bf3990523d419559d7e8936a35e8fe0f1c9ecb813bd63b24aa3bf055161d4f76ffbf6af199277d3503954ea071434dfebabc3d569ac463a835926cb836e79301e886d363cb3803bc12069cf439ca27c9a9907a3cd167028c14d1929d22196762fba2c3eac2a7992947789cad498d610fd456131a40ea83d31640d34f6f1a2b8021cbabb61e113217a2ff59b3eb1792af9d79c14de86c72be1e06649b42f2f1583a5a28b250567f539341cf29fb547db4e0b0b3b3629634f61e4389c9ba8ad7e418c98d702c7f4514fab3501366a4403d9d2e210d4e54f4ed07c2ba6fb6e53a0e47a7c891d7442edd82db6a55ac4389c27206a514bb6727a346705e5c2fc5b227f139cd6865c26f1305d2de6077366f7b87311c96f1c4e2d6fa602877124cc5fb6de63dee5445343ec33b53cf14aa7361d49aabcd416f4563b7b34ac1c04f0420b444dff7f3cf27031eb8066a524e76805c6e2eeb59353d2598d9080f37da653b462c290d8d53b952be3796654e3cc621a3f54a85dd7579039ef68ad8af575808a4da8438739132e72f5a1944337f61c1106c56d4054df470539cb381b1741805c738850531c354b9c00690a1552058ee8aa3ecc32f7b72fb5c40f719de2fbc0bdc5a849aacb02707f2cf8d1bc5281a1348ae345b0f5a1d03fb7633665802e367b62a17665cd40b83a60ebc9a24a1d87cd6f0fec8f68e8b2296570bd6b300f75a2f0e866c5f677fe63de7ce289795f4277a2af993fc35952f9c889e9fb9d9ab13b86f98d235eae397ceaa7fcc10a0ff1428c06753e55af1b84191cc3e4595fa10586ff1ab757729757a94df9d19ec32f12a800fa58b2d72def15d1f0a2843dd69ac21623cced6f473f68152ec2ec7c9ee8de28d394f2999eaea948065129622acd474ccaf863862b98a7638f47b320c8b6ee0c1339d2a49a511b368bbac0568726964ee07f0aa5e2fd99bba49c627aefd96a80ce831fedc0015265a4d15a1b01a512c6e4015df019d498bd49cf1e24e1e56f31635edbbac541fc656652ee82f3f8b309c571d74b2910c3c6a5245702dbad4b7668c883cdf6e065ba6c150d80ec6c8309aad295073a6e3c810135bd0104a801af5286e0e0c132acaab2839688a77f5d2ce810cd2d17846e91171950b470c1f0482e4c4c00fbe17938cbc947f7ec409c8a6a64cb889dd4c43c964b49e2ce2ffaffb55fe847cc61a99d8ca8004b3fe8b8fe11e2c01cc25973f2918eec341f87511a222bd56d02a40c7719da995d913ec2ab44ee2389861f6f4d784c1bfa4c2c104feac9de906637dbd7e2c714a5d1092d1531ffec5a8b8f57d4d38e73c1b1ef7c0f5362254bc0c2b292567928bce1d72e604547eba9a6c42f59a12feb3721449391487647a1cd6a3a4f6eaa8708b773a9d0b00b136bdc009f86be17e8c2a29c78475a3091bccc468542d2e9eb6b31022e414a119eca13262bf2c14998552351448fc4e4bb7498a3fb10410d27b5b5c1a5c75463236b0a7a5605701932289a1ddf5ed5d94226e37e9b84b438bef464027803e2440a3967cd0a9fe12620dc06fb5cb2530dee7c555fc89a3475250f59f182e4a3915eca9abda68f2808c769cf74e86ba9294aa5c1383990db3c0086feb279da25bc7b9a23569f41d57e15cf9fb1df41e71fd8c5b0477089b53cdb280f9df43468f3e8b5ce30ced89ed2a4f8e807bb523be57b81a85eb89e43d9142f5f0a7035872289137410791d97142cee5d23b086def8da48e79d295909e4806a9c2b7116ed43216cfc5c6e735f1ea5109819dc0484350827f4f732000a2c21c9f0e422872227ea1679b5ebeec8d5a274bdb0e210261840cd06bd0a587565962e6fe4c6321b7971e1a156c8ddd637777072892d1a5bc2f489825cbaef2791a415b363b80c48653a1f27c80eaa14980caa524395f99f77d2a116deb9129edd5c2d25e812ac49d1ff8294b2bf8eb9066d94d46c234331e980247499b328e47d059ebc23baf9de569e3366f8bda59d55b2ed53e92f140d6300c6c3a24e3411025a5f31d0da1f3feec875f550c3f348dfab778e7b149c0e369023abf37fc07681f631fd705930ca289795def87506aafb9de10ed03c1b0189c4940e6f19dc245fe25d83ce964ebc2c9377e71561785e4d44d52abcfd0c111ea3accb8b484eb0d987f5b9b51120cf1ad7097bb3f88cb5f4c64f2131d16885235f619f6e472aa311511bda870b64b44c53f2e18ecc0caed043cc3ae0a360456facd1ff3bb4ae0a67d361875e3af0737067ce6cba47219d097f1291924675281e0edca5736d862b763d12aa23c9fd4be5bda09850bc601bfcfa11301ca774206e5c9240505843176bb67d57275e7a806bcce268b970da57d04ab4d4614d8aeceb53492a2d067eb50f988d9db2ba94e5c77b294f14915264a320fd7cd929c5aef8c8a4238df4ba2ba0f6cf0122244ae0911ed0190578db1682abbfa9d267979b536eb34fd0d224ef443c97090798073e0403d304482f9b24f5931cb2af1a29c20ba5cc192c6aabb62d58330e5dc8ac502e8350406399a13b1c79430b8427f0776011a0df97d15eee7a6acfd9d64a3a8ab85485f7755b167d5e502448f07a5efffd575995c6b58b8484cfa0c967f22bb3a6970b749f342bb2bf7a185f8099bd0c95140c628aae47e0892d8d5e2b0f47bd4a0112eaaf385035d5bc38617df8683e38c521c9ceb3701ec73384f170bc1471083804191b3ccda4c44f084079ae00d0dbf98ac3987e2b48a10a77445ed89b097e15b938b575cbe9ccc43a40062e9055c027659395ae9b31b51b24aecbf210e908db3347b45bfaf733dec0ca7a7d3dd29a60125d6383285e1d3a694fb484d8225c1e23a213b632d89fb25ba1eea2aabec7b6b54757e6c64e7b8c6b48ec4b3d3ab78b3a4c63ff9b56b418803e8c46e811b5c230b184403187b6807c49f490c1887e1b183be890cd7c3c489c36a3c2fd66f06f5d914a2d8870afc3f1e76357d92188771596e9d37b90d4df95ac42e352a07269d687768483a488f51be1dd8e59a5cf099a65d6e5afb1a8465c6032583d3cad239b535879bac55a687ab933ba94a84f5f5a72c6ca17037056a69025934c1d78983fa6b237c81d9e17305be34c0408892fa063805598d09c0940a74871887213ea676b98b94c03053f97760085fe49d7330c413132ba8f2a21e5f58e28f272302560b4c6281b1dabe53002d9e384caa85eefbc3f81db8cd4cf93baa5c3498748d230e3aaf9484914922f266750f7f22488c458ccc8b381a06c98923352413caa173a3598cc3d87bef71ec70bf65f68e56ac30610e67855bafaf952054238349f86cf5335f87c9db992d92970c5fe917ba5ff34395a176f4cb32815cde841b0acafc897dd79a2cd793cfd3d3c6d8cde90dddb7cef858ad758188495737e2f12a06d6137d9de32c78efc5be0778bd60b57a8b853d6abb0d668eb27bb7370195cf197b54df2fea9e427991991926f42c0a1fbc805022a6fe7c0df94628136544b368c81719f6c6fafbc245e1c41f9844f7c48ad095066aa9b9cdc4e9a41b72984894168625958d8dcf4b2501a822e6a493ab61fd347801010229dc488d0afe27074bd2691eac0bbe12a4f053478d6bb262185a7312ef3506a27be281d9ec4698cb030732bbdc10d4af6ba8b9a563049b9405ac3627b696f3ee9d0700dc2bb1008db29159ce423ca9060b1f831f9163b1e44eb3564721ff8c9fddd6db0a189f334400d115aaa49ef586fe4f4531e543723b007eb06273758408eaa3a6e9125ae7ecdac380944ddddaab2b5d1b474833e78a3d5cccb14a66934d5edc217d311980244fd7118e4270ddf166ea07f263dcc7f99b88c5d53bffcce86376eb51707ed8035cbaba48a6e71ce7a05baafc5982e65e2c1d35cd22bdeb0d4eb875fb0a02015ee4283822633db130a0f07284c0d90899e0d87142715864edc1d1855052c99667a1d470b0645b58933c3b9c8ed41ee4e7481dd64f60835d749d51b017b581f2a11b9309e80d81ba21300500ef60437f3176598952c99c45129ad39464d931989b4e6cee72561dbe924e94f78d48a295c7959783873689c76d92d74923485c71f5b35849b3f64006a2739ccae2e6bdd928d4a742fb34b79aa850396bddf5ae603fa1ebadcac59036aea717247518819d86be926607c360541c5ca9a4f1a930989dcadcb594fc50245a9c619b5b28f0235517f71cc5459dff617874503c01c9951048bfdb834386146397f0fc9b7383a8465473d7a97433d6695be63f92329d1a02ee06e46742e416522e0d21dc3edb0c805bf8692e2984e9b64bb029235821ae6293f844769eb76cbefe83f802fde8c269356fd17aad63a59a8fb3d6ed1f6c276e8836a41f6fc60eec2d17714cef5aa6fdb5b7c22a184f590cc23f9060e510ef0531bd0111a3c800b39943663653f73dcfc0b9cadf6496705b00bced240aea64db6464bddde1f077027e892068697f2205d34a5063120f932ed60c515e466605ebd90bc42a9242114de81b677b609d25373e7891b9e11ff67cf32ba5e1d21262fbcf5f21ece8a4a481a2ef759d4bcd150845aeee6cd53582ef9c029b3d4c7c952138108ab5acf03cf4aa91c0a150bf06dde6fbc29f1e9c0481c529c47eaf92ec07f027466ee33850d007d28bce1dd2bc357201ce280134865eb9530b7b8dd0e90abae50e721fa2ffe606aa12c690eaf1152095bbe00c9a290e39a75bf22d48bbbae24c34f8585b7ad8193fe853dd9203bc3900134343ef2f47b8318b290c13363ea17a9709fc20fcd9330167b9898745c46228812a1805d0c4bbd32dc07fc7dcdea3f07c77560a4ed38f7b9dfd7480a4e42f9bbb70cd0c3fb7bcda48bc6fed9491a006225d98698427d303a5fa4af14ee1d3d27d67d9501ddaa94a339f70e3c579676a88f45b928082f5193cbcb4b61a86d9305a6f6d68b270983a974ce85716ec80e4bf6b7058661db97fa48e19f138c0075bf49da1df122c1873800f1f385430882e96b86466f6fcf654b8ec94e0c4693ad85012c7ce5d6bd4ec327af14a1a2ac2d81e9dd602f4d452891986044d4fbdfd88582f8f434a19b20726b666594ab64cf2857b75fc4e5584123ef770af6efeeafdf9f0e48992e73014ca8a401f8b88fe2e4bb50ae47d6ff4a7d5313f980225103a2d09bd3e454fb9c405e9c6a080b852d02b56f88281f3a05e3c0681ed3629369f921567f69aa969619720324ea2e98c85179569a242a45f3ec2e4bd8e1100cafc28fa98052ed907811b842b566dc649147e39d0980c836bf0615e82aff5ec87b92a3011a0471446e95b4e793e34bcfc46b0533c983b30268a38480df59b8b041137f26a310330343bb9fc059c341c7df732ad02d075f5dd6e9c03c8f8e4e04f6c93e3407b75f51867c1474eb9c285ace03af9212c4591e4547f5d45cdf88dccc2927fda33589144b27122896fd01f92eb8f17c921fa0c9c9fed4b2424082503e0918b35cef6f7111e76e9617859654d5332a166de32784936fdb3abde04f7c20e97921aac78b5502801468b0030145b6479e186607090b9b7d8fc059fe800195ce1a06e351c4666be85fb098941ed2e1ade64d31e383f1198efdb93df51ef4a8004e3e855be17b4e3982d7b969244c72201b1f4a425afe0135b16e504e7585a810eb4176dcb1996b563a93c1fedcbdd233ac361c14e9169f6bb739b0e6758a83568085377fec1b02f5b1828335f416b955702571318f9309d41bfcde9cd25e91b5bd28c1313bbaed6134dac5db858016eb21038e48383578bf28a02f477965138ef78138b9a5dd20f8d131c7d51b8a342e49ac80d6aa564117ce56a693bbb60d16a5590ad8f0e44fe3b92a4951994ac0971792c910feaf5e0b8c042e2ea034e66d377b269fd858d8e531b3d49fbf32fe724a5b20d51c0c815e00658b74de86716a323f72e8a392f1d80443f3096c0631420ebfb18c9241e76d491b31f1a7f5eaed170b2c85c947102f641e2f76727a5feca4329ed14a6b98b2c1ca3a37cf4f49f4e53a01174d5dc712a22dc0e25385cfe235ba1c848705ccfe403fcebbacee0374b169c31025b9042052651b77980500e0597c4b0cb742f34fd758b7252f214873eb0f453045603ae6cfebf9c39db2704ea52011587684f1d6577105c81e1e4c2b1f4c4d5093261625014423dbc87de6193f2e5ec2f733b4e85604ea39bf4ad0610c940b0646860c2fda2b0841ca1bd69e2decc454709e0c994ce18fb130cb70ca2c556461e931906878a32729d0b17acb9b9fde216be65ff03d71d5b1e5862c623de6dcec2dff8757a0c072324923d9fcc942f92f3a735b228faab1ad6fe76d3e86986237717fabf7ff18a3c9f1d2070f5ccc71fda7ab3fd43bf8d8f9a6c6fb3c0efbf704696efb4be642d02cba541f56e0be30345c9e8cfe3ea1470c81b6b2065abd5351f2480d82d339d7018a4c1bc10b7ed5d8f96cf52572b7fe05ae553353dd5d3e6fa05789acb9f4db104eec39a139c65fe9b39b7885ba00317576b353bdd97c66cadc06e1c38bf10e94c788f3f9583ff0b267161f0bb2360d072569f00df99253fbd71cb124668a127303ddf4418ebfa8e921a8b65e8527ada93cc5730645e30d465e934882a989344bf8a3f63220db6dcb39e4521ec8123f4e6409182913dccbeb174a767760439016081cb19e20ba1d4ab902a0824b34497af8a1705dbc2d87621123bfec1ac230e2ebc999f0fbe3b471b3006f2097bb23207594d795b2d2823dfe62619c20eaa9db53a4a32f1f8a56dff83f78bad787c3031bc802901762d76af199fd1be4a89fe5a241c650a5b6281fc33f9bc058621a39cf0598f76d0092b2e56b7f43c73aa9c2d93efb224bc6a9045359c3debee013ff16fd1e6665619e5decbb57f15eade31e12654f4c8e0947346311e893fbbb7b2a538ce2d5719b9cd15ceb7dc1e2373d746657935b8ed20c1d34cdf34ece3c13e9db324bac0d68ea1cb7da2cc535d5843dca267f3a97d1e6925cafd6ff5e80247f915d133baba6c6c424ac50919de22a22602bd469cebc2cf65a966175b98f168734c361095123183d75511e57ef7278c65db1e5377edcbcf3cfa00e6b272bf3ba2687104590bf106e346438fa1c8592cb6adf20619bff7e0561cb2b6ed71efa1c764fa6b40889d84ad851e13a563124be7e51db7634c60587f3f712813258d70d4883e2b094b38ca431d2f4a3d06f2b902ab97e4cb6a94963dfb797f97683b6d33523f80288a6f70fe0bcd736376e355cd7923bb842522792c4b9fc0d23d2cbb7509bbb4ec5c8e55edacab5c969a1de5dc7b16c1c50e304b3b291ea849a8364862f575dccc58d67431cdd32d7756a21f60ed7794202f5367e21a13b43a3dc99c5a5972e440683c44cbdb13ba042645d4030f483cacc31ad174bcba663d3def25ca456829a6b6bcf5b60e0fe0cd14fced55048b1660f000d73484ebc9e31227fe7407770d6c1dd7def5a23b1da764e46784f8709b9e48e77404b84f3f4a3e4f2424eac5bac86981779b94bcfd7dd499c6e720abd05e371d06ef425716e56ec41539997674dd83642d658a2cd5f89868debe0f51df218f9e9db7d0c83e6d0f9ddbdb739ff1ca3e0f60c5fb4057e719acaf0ea485d7b2c3c43a7b0b4807eb6b6fc51101d6e75ba71d9932603a6905324e35b7799e77cb99bbdf5cc3ffe0c8aced1fb0eb8ba38828d1560f05e5690986fe1a2bdc0a9085db47c815e499b5caaf7137f240a76cacc654ff7a7aa75017da8a14401cb61c5e61e6aba4743f099f322b1be76249a925e2f2ac9832aedce61f6a226158f282cbbe3258c6eecb45d1caee4f91394299aaa3d8dc3dc02f0c5e0c7b3f78b58b7f553e9e405c83375054367c1f1b1308a2a0ca5940f912168d51c47e9cfbae09fb73974a9bb7738fa5048684e00008bdc507310551779c171e20db1f3ef824160385944dd8b7023b1a01bbbfed8f8b1c68862bc2f2f627d613c984ed4a1d8efbcc50ae740b4fedd1e3a77c9576cb97eae5303b82767de1cd4b236f0f5e22b966e1c6f119d28380abfee26e9de44e7d412187a4a08850fb65b1cbaf35eedd32657844e6a7c38ce28da35dc982ae45616695a4186378e0609732936b91c0a09a40ec28af39ec2219e49a206054298f318e0747762103ba1685195509628de0651c02ec86192ed631ee2389a8821f85d54c30222c73725312cb9ba40709d19b8a1e78af22ac1228e8925524d7975ff571fe19a2be0a5ab9e26b0adbf6f0404bf0be5b029285cdd7db4c8d4000010aceeeb3b4e346f697622b49454c0d13888bf9a389211279af6b209289b30d7d05471261ba0c774c6c507028952c75e4f8a4cce2159623e92b928f2af984bea44f14dddfac6ecd4ecd6936dad7238cfda519a538dc0e584cd800217298ed5955ddd27e854546d415ce7b1eb2323efeeaa64268d304cac1b9c77ea46026492c506979e09a6ce7d62380331224e519dbc6f831fc521fdd3875c8c15bf6fd87ca9b4c71bdad2ab932f4ccaaa231a0eda8526ae89f163bd6dd6e7ac613519784e33a187df618e3e2e822f92093e40678c33822b70eb8c21edd0819f58d38e931e8a67dc5371a3e6aad9aaf341ad188ec11f1be1dcd67070e780ff64ccca134f94d6743b7a08c3133ac60fce4b712623a64839f0ba91a32f25eba612973e76b1dd7023d7a3fa9940cd3fde80daa028c6d95983bc89c37cd055c54b5759a8d5ed4cd8f36da31640a95f5ac5c598f5f5d0f67a929bcbb112a7d851e9d22c836308f53bd8f4ecfe2cda35d7cda14a2664e06ffb70c401024d3c6c16aec1dea27edec007403248ae24d8dab1ec0756435bb65baf23e3d0fc9b58e1d7cb7259007f0c3208a3b41b9421950458b60f10b8570425e08eadda44e1a3f5a6029861b00301794704430daad155c2f1d59e7038aabf2da6424585d27742bc95786954ab7fb08e8145b99103ba49f8a74b6e1b803f62756df9a39ecddfbd3b6af065883b5a39a8c21a47ff18a229ea10f4988fdf884900551d996f2afe1537cd4cfcac6022817d51f5f937fb93df5cd52ca68d16c016ce2f13e3267bb4e9c3d3613dd9becf12c71a094a42df0ea75cf09aa1eb4eb258a2334ba484d338eaf7addab308961d69e870d68f1e17c4b58a7ad98eebd54de6296e1e8ba71536f3e73331cc7a01c29116d70b7ccdfaf94a5dcf47a621cee0bb8b8c9bd3f1b380a842d344334005ba0218c796d80e31426aabc2273f9d602b34df5c212d75ce9ad364e0d423a8a98dddb927da892c7094c48c8020cc9567d05881e553e5867787553c5f4181b976700f5c85d985d6eee896518dfbef757f3087831873a870de618e820e1dd5777fd52c89cbb316499d61c72c463bd1bd93598f1f4586e345f789b2b64c62b268090df7c0b215be81abb0ddc9fcc1744ebe33eae01b1ee3dc9701e1b6f61e2718df95b1da048c37ff523dfef2772f4c6c74961b16d0c50a87445a39914565fd3881bbfe2f2ac5e4c8960a6fa6af8a0f8fa7dfc326ba6bfa54ecb5361dc5f87f715328c71931f28660bfd2d81ee25030782e2d934a1893347562a95e8df03c0f2e1ce1b2ccac4b8485b455e168c80f7939308212283ac7a4d3e64b5a154d24c9d06d8f1e027c600cb5467bab2c49a9d3099bc3598857eb94cd585f4dcffbd8f60809a89f8bf5501e41a59c71496ce0a9bcf1086554f05060af4fbfd43f7a5b22fa2c822d4eca26881423b54806db55b63a37ae19b852b8114b8e2b43bdd0433cbd4f0721c2ca828ede02235a790aac55610b0bf9b058b5e934a7ad6f1a5abbd5e88597488cdfc8c80acdb884625fe74bc61ec0e068f3240d0693ed2697f59b11bfcc6832535aa4f90f25c45fa2faafd9aa084feb726dec4775c37fde8c455d4c9c5d8855ce27c183bcc6f267e2d52b46b9c2d0095d0718d25033a758da7db76fd0276ae7137796e01f262ee0e499618da05ae97220646e501d4baa54fccd41a78fe18b52745696063dfeab27e54831d31fb962d173f0267346f8621b0804b3f176dbe64dea523a27164359adeb6183f4ccf6b643fbf47f1a765aa28dfe0d3ad20460d98d65b1dc036ebf83490d2c330db557be7d51bad23bd562ba9f690d0f2ecdd758067d66876a727bf985d13c74429706148f9aead43ba39449fc23e60091dc0049ee7a3846d0ff6c695e4e1e2069418f78f636f8f4fd31258c78f5e3aa7307d8921a800df2bd370a08a0edc176144e8aae71a381b42a7331bcef43f0a2fc9055310ba9a9995dc14e2042cabf829793f8b62c8008a55af189627e5f81e7b226758cc36e42ea8b4e48e320b260064aa209969e730f2f808ae4fd9b440f2b2ac3a10e4f1b74db1597f82a6112523b85036c22ce8ba49688e9b06958e1cd84c23f2e9342aed70fd973c9a2f1cfccd5d4d04053777367ab07d668f282fc4ce524d5bc9e041cefc0182822e648b5b2f574016ab2f61a8b84a4d1d44ef4ba73d25bf3fe0ab975aaf17fc99ae872e6c67d1e7b9bcfbb90aa6fd8bc938dfb45cc88b67cd5a8ac7d4a9a466a93311df174c5cccbedbf01c89b5dbfb4eb2e349d7caa901c8801903a67e30082d1887c1d620cac71a0d70b5474ccce3ec18016b9aa66a907cb3f86a2a637623e027ae91ddd5f3f2b20dd7e596ce710c36539bc67caa60738e810068ebcb058102cf810900f0a6873d2dd08d8f5ff80ab8bbf32703f78e8cdb591c8d9de3ff58a26593525d44fe84a5e380f68dab8ae889909f8639ca3b8eba2a0b6314890d903050298a35c2c350df200a783d3ddc1b271c833fa49abe6cd09dc19ef8b0130187e722d9b54c4a776c284add8174c8d4088daf84dd46fabf111bebbe24e0855baca47d72eec4eed5d09d4e435f3a20ef81a272768fabbf273613d27dc61cf75d8635281168c8d570140f02ea30ae9e76a47eb5e399eed38ff190d43db6ae4d8641c3072acd0c7a663b2a9a3176d4b99e564090b19e44cc3ea2d18733b12b89924e0f3fa33f7db13495300d53d742fbf6dc9c1c3449d6429a02036e5e8a7d17963f4078d152931bc6141c583ea4ba9175c988456c2c39e4048793058637057cdd084534262a12b3d2fddec6da1a9b85f71c33a5ae4107419a384b8a435744e4dc3938a39d5add145078e3d085ec419cd4e0e620824243212c68dc87c64b1f1f35e39e1abd447a3e0e806e690cbfbf9f67957d81643478738e59a7488dc57cd2a57c59df6f6fdcc8eca53bd61297d8a1f52a26747ed1fb2879788d8ecc3a71882f5a782808639fa9fc6c6fcf81e75a7850baadc9cc3a495b95651a911debe5d87ab00241eb243b96211bd3e9ef6d95debf8a64a0adcd4552964dde6cfdad5f7c5acfd676914465bb6ea0fa5df604c2a324cbc4b7a1b3724d989799cea47cb2733d21f12d6fb9e15ed63f8e4dde2d2ffc68735bfb16fa7458a7686aeadba49545d2eff663eb03a03401dd46c85b7b7873184866f8b18507fc38b1c2f086b78a473825f1a6589cc516c170b9077ba83066c775494ce4cce0c03261c26bc2005af6f2dbc21fecad1368ca9f740f6178da183e93af69f1a235aec8eeedc146f3efe4185d46497e979211d6d26b91b8742449d0fa3e237321b83b404402872499c061738bb9c42bd938088a18970598e9d599204831dda32b7ee9cdee9c0d70d882fc3202ddb70733941d1fa745f1183d885929c8084785ddd5482353ad6e98b7a18beacd62a13aae29e07e26f9c3ce8ba68d97a8b4224aa605229a64fe445bc2e692debeb62271efa39759b2b4b981ad843123bd7441a15eedcfb6f86c8bf7a9c825c71f57aee32f1b545d50e054afdae03df35b009919206d6044c8268c682eb20c666f313143c201bbeebd15017e92fbe3cc1ef2c1c05e7c40e6fccd2940b9d246ab1ec88c0853f2a51f026127429f9af95152afeb4ded9504f491de26dcefbeb53b4c3e2f80c15e96fa73ccf37156c70b30ef2e1c688fcf4ed9814d7257b6b545b9e006ee3716863fd53dc8122282e359570480882303b3d03cbfa286713e6c2a1a4592ed1180b2143f57b247b24ef9ea042d934e31bdb27d485c6cb69f724eb7bc965f8bb64d4defdfc71f1d642dbf35615ba209d6e7d1cffed1d9c8bc39c39fe4bd329c05ab02e993c14185161f6625144057fcb6a224dcf439ca301ea927e3f830947b2d854885f55acfa330854e9f6c91c00d2770ffbee99dba310d0fedcadc0961f54a208082cb7d90d4ee09992af26c6fe16b4fc96164ae788e38513cd34fff9967f4c0a958d27560ee03d5f50a2faefa297b06362db76b3b176550162ca8e9129eb4f4b0664ff5d37247824aa1a89fd89e860a8c34ca2f9866a8a0a90ebc1a3cf894c866721135bd49cab7868b53d3ab6362db090c054b17f03e8e17543cd7ac02fdfd26215c6b3679f957a8b2826d90d56cc6b47ecd28e46412f88124adc8f777c21dca207b2fe72436d4fb9e210e0cc14ec1227ccc11b036bce651ffba43de82e4f44d4f934bbc098f9bdf12091ea2ba85775039a50ba9c9a599a551e39488f6f1e3c269a6c17273a685ceafbdc2f035466224d7c5898e9eb52e8b4431b676ac3d5890f2ed45a9583bc7c7c95aa2afc817c133f11626dd50a7ccd46b9ae58830317c9236ae1c1670fd400b6566d6126038d3d80e44000193f87f801b1a6e768b2c6ac63b75c8148a522ed85957432fc8fdc22fa2cd0153c5736c46f7a7120a36edb84e40da540aa6563dec9bfc84e1bd0325e04662a30705f14a236305e22ab42c98221807af804329c3662a37d3d08e0d36e897014c44f40b7e7f256f62ccd56559cec37f163569e91882d2763e6ceefdab1d2b929acb6a388fc07fc50d33905969060342923141eb480ce4ec412a390596f38e2d6dccebc2f7f9741a8cd1d9250e21ef7392e58baf91b2f952ba9eca0780f5b39ac2276b7e4aff659f5558c1f2e605e3182aaa965403963374f02c77ee5ceedf56e235e504333b22b919c574af16d160d2f40c51a28c1f9f7be5f1a3087b1eb41b71b42928c63fb72f1e61c1003588a5fd61a52824693e95197f563e6f02cb96ecf57368f08f1802f4d91063fb521a36ca717f93176214e6567d3ddccb2be562a4879b36ee094f7b13e909df62cf2924af8aa063eb6d78314233cccfd0378128ad5828a0627ec091ac85764ec0b17b703488aa9c9d71cbf0ab1403ad64fba65f97d78a25fa486b89faf279e2dc924b55d43ce8e9bf777cda380fec5d4ff83321089d9ff819c337fd47266749cdc642f635efbcfea6f8d063e42742b1166572c2dd2b119af6016ee9feebe85b3550650add94f8f17235d4edbedf13b8dc7f20cf03008e4df88074f0b87b8c7644db4c48a6861b1cda221f287d5a966f03c9843afe4d197fd7c80d1432a4a4ce88f6285f78667034a82a9fcb4fa9fb8060493152972ac72297274cb30753dd90f50e89a6e2ac4b0468a01c89752e8a0ffc7932528eb103a8fe9140b8bef6d7d10ea8b4251d46ed4064fe2d309d051b1f6f462f3209d808c1299e6233a3fde36b28f8c9033913483e954b465af25a39f8460d40e30080f440199d74cd7e1c14f2934a1d703085aa38288c6cb85914b334d3fdc71831209bff928d963e61b1ccca230e34bca1d5df3cd68c4fb7746d878dd795162f9089bd47c9999a27da59d416a5856e49c9d346c3664a750e82f10672303b4d8c1b94c2ebcbd3afe5d480762add80f850ed9a1f995d7dcd6b953ffdcea3ce3f02919c2ddba3731343c44f4d5d2a95983dc36ed80b52d3c88ddacc51857c83887dc55404aeb473af6eb33b987e4389012e8f9000fcdd8218b50d447d62c807d3a04d4bc337d1181894498f9b46c951b11278e821bb77340342649409f8be8fa6c75595759d0de13743cb3bafe12598d92f012e2a2c6f1a51432a3c29de2172b7e59c2d70743d6083b0e399be7d090f20a58232c5ba59bed163ab5927192776343049871b6bf1ca4e0f4424ffab06d1e9a6b67c3518d001d17a676cbce133abce2e49d663a8545266ea925ee1a5760ea32263f8e0bc4d7fd185f22248bf55a7ec46490090d14afae5db26285a054ee3afaae1664e3e6a13c9dddcc5a4ad31ece05a2e47853b182037af1d10b5cf0935531408641a918f034e580819b3480e3d814ba69b8960a98f2c396c53c49c4d7249308d3553787ae4208b7b9a30222af86625f4ebf0fbcaf95cd85715abc5e4c6ef4580116d3c389f491a00aaebef44181868c32e1bbc3bcd0c335149a1518f386e4e1f631a5559e8a37b0a8cddc171e00bc8b29d760260d6e7efa987e50ec78cea2d1e9be703be73a2cb096a18b563d4290d4bea8551a34e19ec7349ca1fa8a90ef57a624f53896478ea88a9325b9e6b2bad8e64ddcda8089f5001a146b5df133d781a7cefc3b5ba2abe8cba8e5317c14c5012067a35db4b04233118feddd68a10d92f0c34a2b90582642f97eea7905ac54a70e31cb610aa5d25d8051929b4505ac8452e9b66737d2f75caf022eaf27b21d00af40a0ce8fdf16e40ae0ca79ab9739b450183cf0a9b8c83601f91d7ac0da520ea6118b3e5fec4353e2e247566d9621a2df68344c6ef6d5b81cac1cdd98c46ff130ec20adcd1d04b41a66db82b0987c83a97cb761b0c3bcff4e58b6d64e897a37caeee433d94c56e9626274a0c42c395529f93776e5a04ff1f8423d26979f0b964f71a7d7ff950d29d4575fa92e439713de397104654d429c7e2e724f6a39e0f82eb688b192df624dd52dc2203318ebae720be25648f04027b6d6eb37ddf9078179a236acfef21d032f8b62efeb7d59ff4fbe0c328acb0cda073c5e0276424bd61fb87e11769f6c2e78e5db64ce265204c043948523edd580e42404626eb777f6a58c6eef83b0ddb65c06f52bee0b845a51c8ded6c6082515f58f3204f9a60e886e6c674104271422c7d1a797ed3dc8470171b269b32efaefd182804a44aaf5b3130ebf33bb3cdab1da695bd7a5ec6206bfa1412f9793e3f0a37215c380ba32e4913e29bc18e39c2741b9a7a4035fc2350d3791c0107061b5f57a37943ad447592babb845072c991df4aad0c4f4983b222effe58eef26036921025ed2dc6b00000806c41c910267df7b5123190878d5925b354c3709f85a61861d4e33a6c352b604dfc42fb195d30e8204e6c62514fedc4b5a485069acf28a5d369adb6a0c3596bb0e1eb60138e6ac210f4f11e394f21a196cfd95a8413c2a382068d040c7f58654771122c4cd628d7217d9cfe685409c7c9d0e1b63478d17523ccca8cd594f75f1a41c1de44eb88e3f4ad4d4a1a939390088938faac2a4b7d08b04421c0af84704668683f8cfd944337286c8f7681b24eeba0eb80bb01c0cf5b1997144cb48415e128125c1703ea3697ad571040286b7362bdfd92b0a287315ecc52ce99bbbd65ba394220d517435d965d8cf1826afabf410a13d10160bb0da3cdd8147ab1697fa9ff000900aa4abd31fbf8bee3faf7713c9cb7b52bf143078ab6de5eda444a29650ad80a170a530b4a1ac06fadfd9ca7b015c18a7b6f7893c018638c31be49e09b04c618638c93c0b4fbd786dd8cd95e2b32a8b5d639873ad4fad35a6baf29aad35aebac755e69adb55e69ad73ce5a6bad75ce586b7d44053645ad999181d35171438b758771007bad9de1e27bcd6cb99fbf2f70c6b88c1765b628c3266b2f9d9b3664b6c897055f16360cc19d824c95ce790ccf193261c8084106086f8620b9c9cc016064adb5bef7deaba9cccca083e394f9e2bb7a4bc61b98d112a7a9cc169edda08c177196d60429c346434123eab0268baf0b41a8830c4da175ce396badb52653456a9d73ce9a2a88d69a486badbfacb526030414282748e948dac722c00e19375d9bcf1385d0a08ffe7cac34f8611f418698a18099223c1bac757f6377d85c518545424d2e8306678caba8b2ce7a8c043add8541e20b0f6b08afeb90e881a74c17eff33e24301ee3858e3237586b41773bc60ab2cc169798b025021db4196d483006c623f8abd7558ae106c7f027d2441e1b237bb94aee49a15f23d6eb2a7d8f5f9e1b1cf3dce09eef3f117fefb9e9ecd7e1d10df9fdf77d6e35b94ae018a30af77ccffa41a4e5b421bf8fe186fcde3ffcb98010ef686931d290f7751e59df8c36ba8836697453992bc08c26a18215d0a085040948c00a907063064dbe57867b7d03316c01840d2238b3c517a5ab02f25e27c87bbb9b97d63495a902f472ceb9a94b431504cdaa6b8a5a33f3808ca7a9b4a7a942b08c045c5f53d49a59985f6055e5ec1ce874576688214770d76136487cb10001b2be9deeca74e9ba8ee8481f9175ee7457e686aeeb8ee4ae8379392fe96f5aea6648a1062758000e6c30d044124a5d0ac66861a688acbfa6325bc0a6353038418526013f6c1183381f50ea667807ca0952ce90b1c10c15b6460a3e2a7723c6b2f172d5d03017279f54000470c5052c7e330d3789ef13c5fc618c7972cefabeee3cd0e5480c085d07363a02e201428fd0fd1e1fd9e33de923934432e9c7f88e631dbc0e0f606f938cf08e8fbc3779f2378763afb71ce0b0f1d72a3d2984488db73c3276deaec131236f3f72c9fb12918cf29151dea3cc527814de63bcd5f99cd63f8eb1565ff741704c85b72bbc1416ca4f147978fe61b420232b460270d84dda9fa322f2dcb73918795b186941696e23f6f27da2b55191b5f1729932d23e12e7cca8fb34c69086fefe8fcf5f2f6e0bd6e09e3440eefdc1006b601f74f000d82f3041be09c7700e87c13d177fc14258373886b9c0a67e8c28268d75e366bfc020c169f0198ce6f59706c36a7872e036b8c70d1772bfc038f9233806c5488dbf4fe367e016602fbc78d92f30297c1466233e8c1fb2011c16e3ef7311af98fd02a3c237e158cee123d9610eab9afacc05f75cc73db78adc2f304e7f04c7ac9d41006e646df013708cf5970603abf60b24fa5bf437f6172984f7f122fc7ddc05c780fc7dec05c782fc7d1c06c7947ec8dfc76370acc8dfc7543866e491fc25e1af92bf4c7ee9efe33638e6e42f94bf9fefe7291c33e1ef672e3876c2a7f07785672a7fca72c131d94cf6727a7db8c7d5781a2923cdab527839ee41613cc18428239497e39e27639371c97ab16e46188f8c46c404f931d2ae9a3421bc1cf7248db4fbc25d48fbb117e682a7700e53612f380c1683c7dc35978de31e1d23edb6c13de3f8cadda9cba586adc23d32469a1d69369733d22c17db05f7642f31b0e08bef6d324e8561ce67792efe88f813fe2634e2a475c75c0c60afb56a7cb8f8deeb85003863cc8687ac73b66274d09dd66e72e8bcaebbc19770f325fc5ab665df3d9f009aef927e0603354ca06ac786b0c50156e87608d1feeb80f958fdfab167a53bd26a9fd7e980f92851c50b1d18f3a50667d2a0c0ea978e6780b873ef3d43040ea4c539238175d041078d772185982b68300515308093054913738081eb3bb38316600ee96778b05c441a8c0c32137615e8b44b41042be7205818b6038b86afe30106cf4790213c3c01ae0943335d058860057186871d78a08107186c16e10e30b840113b6871616e9e995a13040fb7860b087ff7fbfe8e9d50b19410c5af118248839d9932c363755c23daf7f76f7c6d424b7ac6383f2de66414210c68abb5eeb27edc22a29de8d3640b6b7bb1b8f93b9c33d6d73611dbb93df7ed1222ed23affeef1ad12c0b8c454078c5fbfa6d7843ccd259ac2d21083558bc2d2ce07c41c402b84041105f78a1e49f0eebc2728b08551055feb2e409c8efc2ec48154419328f3c388710bf259dca8b1892e7c27c6c65e7e1753ae3ab1e8197d03275edcdb9f1d145fa991c1bc70e5e9c3da7e64c8e890c44c873a307084c31850544e0051a2038b000e8809cb315e2166477c3940808206304122228019b2694b209aae22811e70a1d32648e069cea85332e800114556d94681f2e0149137100ed00e00801a70419a05aa20bcfc5185f1f6ae0838d7b14e4c8c7118ec16680e35a5810cca7ab7ac305ebcd08de4c91d9e03249631975afbbd187f44fc43df7fed7a4032d14b0a50b216610e20aa57cef7bab255e28623c1eeb3c5ce3b923cbebc923c6568abb73c50828faf37825bf1eaf78effa22b6e04a7e8b68f63bda47def5e2f0aa1890807457ca2f57b22d9b23574dda910851b422be43e4744cd41798d617b923cdb65a3f5ae315235c7fc588ee5b1fb272de5b2480abee95334eb9ef728dad972bdd9793ac977fbf5e12f283a377effee1f7759ee791901fffc521c0e2fe1754905ef5051324edfbe20812fcf2450fa457b9f182e421bdca8d156498e338766555d472257a9c72af6451fadcc7b4842d7e8b6832bcd2877bf07b0939abf1c32d26fa7da481a3378a5368defb85ed90b7c544ff146f648d9fcd499ca45d8b9d0843247148ec5e7fafd5e75691fc61c8a47b4dc3a1bfc088ddbb2bbfebc5d7d42b89efb42ba4385ef15ba4ff8af858fc16e5bcdfa2fbfa714b892b71f9ebbb2ff0755e4aa166b956e20abff5b9f5cacf7ad1ae805fd6df8535acee6c9040de16ce532e13bd2a066f481be24ce566f2e23853f0db27ef67bfb00ce707123f8c16d840eaffdabc115f0c6fece8f776bc9c4ecc227ef8e96fbdd72a9285f6bd4be745f39ef5e28be64db14182fed5ea5b2fd68bb6fad5e747f23bdf7f236efd8d5611771e31becfaf7323a4c1f8fb4cf0c31869de7f1fb698e8ffc6afc5e47b97f8416eceebbc682f1b24e8cf79fd39a30d125cbf7ad77883a6dffb1b4b3058a529188028b90bd1bebf535e53c00ba3e9f7c64fa3206c85ac100cc3ef6f90e148ebc2cf79fba2fd97f3fdeb63ed5c985db111cf761f695f78fc5cf66221826d40cf1b6922a9b988f7fdc23eabb51062d751b9a4a73d0ffcbc1177bb6ec465528fd789d0a6839c927ff51ebe7e5d981647da12297e1886e18ba683145fb520321cb50e5964188e341d3ac8d50a5cadc4f77c7484592d0688b4a323d7884674e423c8109d17efebbcfcc2c457e87a85b0307c96fe20f8c117eddb21ef15ada601cc17f461b6affc981644faab1b694164fe96eb57630c22cdd32ce9eed571797c7fa53feb9d107cb514708dba918a26bbd5d8792f518fb620724a6679c662b37439bfb1ee5d98e98202b9aa8b2f5d10404be85244af6af383f739475f58f753baf71e8927d921412ecb9354fcac6c0349cee530e92d2462eee62c09167126723952eb4f5bf036b91cb9c220c30f358bc522c3efda905d0b4048771eab67fd6a95ae1d197e7705a9470ec8168090d6797464e7ee3e45bcc71f7ead24599420dd7d6898e57944308bf446db6a80e8a47eefbb7bf4f2f191960892d0760dd05a0389e2de3b86ad04b4bcb412d02a40cb8b276e3122ff88bf18d290f76ff8e0171599c91b4315792d962dc26cd145fc3e3fdb678a5b77fa276aaee57a6edbaedd6ce6af6699ae0f759aeb5ada52f4e94b77eb0277db0277dbc6b3bbedc2dd63b8dbd4dd4970d1a9d4f447b6a9305529532059aa02c9d05aad04924acbd4c9acb9bb76bf41ee7ec34517411258113a552e473a06afa821e4f117431b62305f96dd12daf0572f570ac3ff58af9b3f7cfb72e17b7b3fa5f095e57bc90044093ff8da326595f0cb004429ff65b15e5689e50296fbdd98bbbf7ab15e535689f5e06b8b0c4094563f6595c0d7ad26af2de1b3debe5c00df7ea30b464001dfbe0babbfae04bec415cb86f740c829f8c148dd77aad06375ac2dabef5e5b589635e6f01617b0e007c71c7ef0c171cbd42bb11eb752c0cf7ab98005ff6accdd5693293b6595be5fbd561fde17eb5b446c34c9cffa14f087dfbdb67c4f5c8965df05f0af0b2b575a81afefe5bd558a437ae3143052f7c14865fd5d6be97ed7b2d124ff7d28f843db5acaefad25fcb68b008f686590216f9992e1c3b1d55fd932f54a1a4af7faaf5cc1721f3f16fbf9b180ffbd8f576478253d5ec1028e53af3462e9fe1ba75e09bf3762e9eceb1106fcfe583a7b861f8eddf7f04edda9bc652a8f46d897c18816809053f0bb5391d88450bffff7720d21e6f71112b1a41e73166c47f0b1fe412e1aba9108ba88800692a7052884eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee034e18e6b8bb8b9fb523166b6d9930bfebd0e1ebf73c363d74c9970c7d723e53179693e595b9e4f5922b567edae765f5ac57fe15ebc330e79c5facfc62b17ae842decf4668230c7d64f03ebff7ab1c445a8e97cfcbf7e50b9313b2c6900322ebf32afcf2833e5bc8bc82e4d78d98e545056998205fa49f49e385244128a6c70d1e77e42ecc3e1eadf3b863706cf5376b0f966695479b33cd53a35f3d6f3a6b73f65e5e953706f7dcf76c5cb7f67376f120d23c356b3c2baed19a6e741c8ad114b8b8d5f5b8697dcf9b16ab95f32098137a39ef728db41cdc727dceebe4b842dcea81d303a7074e0f9cebba590abc86cca2d8f366c71671476e47ae074e0f9c1e37e2f7bc11776c1161d076e432d93df83062ecbcce4883318a4f5bb3cec3f89d178cd71969b02ad205be27f6c0e981d303a7070eceb97acad5e3a6e7cd8e5ccf9b1d5b1e7cef053e6d15bff3745aa3ab86c33074bd8e2b747d288e35ac2627c71586ab71cda407f6c0e111b17640e83a685e1bac45b8fa11b4211a968b655dac0288def7f5204e015f93342f8dcb4be351c1b262cd35c2e21a75aeeff1b3c69e372d10ec71038e3d707adc784c78545e9547e531e155d996f6aad0603739a0d68edcf71100b3a1caf5205a9286d9602d701bec057e93eb81b363cbe7a5f1d278546036580bfca607ce37f6bce971c3e66381e33762363d70bc5004ae55d87da87db6d86ff49922bb373245fff7de2afc90f5e0cb277731183ec8baad07c156f8353aecbae0b35aef6a8de1df57beb0efc2be91e6751adf96c56ba6b0214d07da903b483fd301267a20ad0ea49fa12247eafc778d686e69d9c57a9705dfbe683e367cbffa3cea969129e0af9458b2f5416e16f25d2c96ebb37d962be7edb3469ae8fa1ade0ab23e87f52e91f5aecfabf73ec735921092ab91d63d68e3fe975d361ba00a2f1e50430e917ec6035fc83027fc30ecbebbdf875968d6277795e44cd2bafbb8ab820b0923fd8c07d874dd8be50a42a4ad60b7ba46a684ab71054970a465f13c5acee9c73cf8cbe52fe72b252cd28651802c31478c015facef7d07117f5e3e2e349e97932e2e9f17d6e7e5038b10f31df18db946ac0fb4ff5abd5ac0b645e41bbf1e2e8ccbd7e5e3a2bb5c23cf86faeb1246116a1f192c5038763a642e5c440b76c93f5ca32fd7283ff642cb61486c495af742443fd38123c8ec85c48ffd4c078a20f17f5fae11971ef2171f192c50b71a7db658209f1cd9028e132773f191c18660470d7adffd686df751855c34580572411380a846bcae1b5c37b86eb8168437e0e7753ae34bcb390e7edeaa0520e020078e1b366ad0e0992163831d2f02e112d13e4f0c183a5f842a885e58772ca088020a2aa040636424bf2a725c2d56b8023f335a641d82a2c0980b28d05caf1b922f695ff88ee042c6052e704055164a970bf23e4c03e47d9f202898f0248031c6d7cd1a2aafe2807e228cfe6c0e200d5c3000192810030c78a1d46d417655387c63102fff128e796390aeeb82dc3443d22c2981872c9d4035e4481217e967aa8058d3e10e88a3f0abc2016b00014d5085f7de9b9b08f305a1eabaae0a063669bace092f3e7defbd5fd7754e58f1dd30c423fdcc136f5420e6354118f0ba20f7f325d2da832eafc40439423564a535cca3720e38d1c5cb53592ae0c30012608498095000055a8c5100a973d0ca899cd67a08a8c7d040eaec51a5595a41a7b5668106a13c618508040feeb1ff8d3cb86767e7c2d684d8febd414130980e1d4e783016c5efbb7727b7f0983b1d3778fcef1bf1d16621c1ff1e0af81f387ea3378ef65e3b7e607efd59c2d079726c1c19bfd6fd550bdfcf9fad91fc77fcbe3864887398e3a4d72a62ef0a676d3d0741d7fd8b2567c917d422d4fa6f9b8f0d1b4f6b160beceee3fc79d6929da7dfb3d1e43e7e28df1d63f8b290f7f50826df1756d36ac1c67919e9de7b0fb774f7de7bddfdabaf127eacb1c64a38ebacb3ce4a586badb5d65a2be14e77bad39dee74a7843ded694f7bdad39ef694f44b6badb5d620fe7005068f7a1cb374afc79613b771c8fb7225c76a708f52168b736b4b786f11eb30fbd6619ed3c47a0f16f36b127f9843c4e545c4df3262a43382c76b2d1c37f2849827c25429c1002f9cc0e2b3c2ba3b812657d96bef1831175fecc5eb8233ce4e4c39916ba24db702dd69fd79ab2fac3b9a26a8aeb54d88c14d84711f47205a6befbd5ab4692d812f88343c84d6baebba2f7b23f8824813bfef63e51c0f7987105f1069df1d4264b55a2d22de5a8198c77789a4752471272787c78d585214451d1d1d160c169208a345a406a345c43f77777777f76cddfe78df4b43ea8c59a2ca2e61e6e27bbf3c062fb180334b18a0d37a092e5434384395c547a5860a0d159990ca01545f5a543ab8a860e0425402053a3074742e60c307830a183160c0508289226228e1c38e123828919351030533743cc06386068d05d43893440d363688c18d9c14e0a02207cbbece5c60090e7858f6f56ac28a570e0d614b05672ef0c319336f08a0a3e367a64030658119c4a08a06016894fa28ba46a965d4276d35dd5476fa6afa13a596514040419bc8c98928084868a80c8af59011cd7af4203a0ada311e7b2dd35575c2a940ea8a43a7c876940c6835a18050a8b49401d54a195a034a551c50945a462525ad297abbe154a66d2bd3271d0fdc67e54ef77e6252a5cadb5ecdb48a53500ef7ef83ef47cc59143892d0fff834c5c976acb0f259c1602ebc0bee9606ee7606eef68b958fbb75e36e65e06e63e0eed96d172b01fcfbbc005e4d7fd228996ddb803c05346afaa3a67b5633714e40abedc9bdc7cbdd87727e70f7fffff7f9e083a49bb3f0439ad382ff5afe6c4f919967795b714aaaa0698a2a7d5253d327ad7c9a9a3e697ddab5ff5553cf1a0565a6ffebd3aec19a3e69b66b66f9a496ee8e5dcce180e5624e8c1cebee345c74b171174104d5fca6873acd734755f99e17c1c7c344f0f1a709b59dd4f4a75ccb1993bb09de26d7e49ecdf3ec9e6b1deb798ed532accb7e4339e6b8879cc3bbdfa733b6d6afdb261988752f04edd7adb5f81eb1d6b3d75adc05e0da6bbd2bc389b59df5fcdad60fbe5d075bbdcdf7662e365b7b571606d782ae6dbe785b4bbbd6de2fcab571ededf2b52cb8d676d736b133acc5f7cb80c69ecbcab076830f5b2fb6bbd65ecc646f5e814497657f7c56ebc044eecd42f828c7c88a090d703dfb6580cd1896f5b5d83501ac09ac5f1745d1addb6cafe5c27e7787b557df8baded6181ec6759f7dedb09b11fdc9baf0dc23f218dcf03db8251e3fa60f5a561b3c5d6efd2fd95cd7ecdcebfc9de80fd9501ebda263971b1ed6cf66ccbe22ef77e49d81e617b6ffecb0261565beb0565203a41f6aebaef5a6bad676d92bd5704b8b3e0cd988a1d6f15ccc382e1b59f676f909be3e2c038b063b739b6bbd7b6b288f3a571efb59dcd4f16d461437dadb6ae988d3b421782d73a7d2cefda26f6b3165f9bed118be322dd1b37bcded516db6b6f78bd6cb1c648165b98052dcb5a1b82cd7157d8b35fb6d7da246b3b1977c7e66b7568f1cd6131be37df6c91eeb535eeca82f6cbd75a9b6471dc95876dfeb2b536f636a70a06415b6c419b792c0826852ad8c8610190edbdddf5b61537080a8f587bedb5d6f270cf6feeee3fdcdd89bbc3dc612eba864451c2b689f2e30fa5046cd24011c2045a3c294b10d4a4046b7ce91502675282293693971920960881325952d2da8c20448e1714296f0421bd78808e4ae07240ac6ce9301262658d4a5b83a235718228f202c779aca1410e9f3561ae4fd31028085e827680f03e5de458f3ac1c5e66c0702f3156f026ad837f86c11dbbcfcebd96af8aab2a5654aea63fbbe654aea799de80f60c959927aedbb2ea4003b91eaf8541cfa3017a1ae30d5850b42c193f58b7fa8e326b87e5a1c05a710bb73e35301c20d7b9ae07669f168ea307e45625b066d9c7a5e512d9d051b2ed7c6020274292213a30dcbcca497a3e90f318ac4eba69b9b906e6e1811c084b316c90a3140336a26500391aa009ac9d03e48acc383f7515835c130fa207e2969e9267b041cb9775b010075a64a0007047155b3e373eb86ea883e878489984ad8298176268d8aac8ca83a69b7778482f2021849117a6c801688b191a98c885b82704c0d01acab116c8d130d2b2f290bad5e7c2312446308e55114f0b128e27df111b448aacc023ac27331f543931fb18ad3ca418ad6e151219591822b7fa8ee470aa21a7b1a86dd7a45be910ba1d249010077ef01de9561e0d97909c1c79093863e746093b3ed812271e68597d3f5e8f568f1892258f95bd1a3a091b81acfcc107f1406f95813409f92888d536f04bcb08023f1946ea92fb5632c098162e391b127db0ac23ebe888c8ed70e5211a049d03d4916fe408611c2fe47e802c7ec23c32d6021859e0013dd14841e00169a8c44080882f346471c18a3ae569cb9a589092c209254479b29464842349473d601e740080cf4e3401e44707630d1a9e970da001334413224092706cc00a3b26cc9031220c982f0b10c20b1051601f20e0004e2974c10513ba430ee6d38f10565e181db8c44010a86940982424a3193be1eaf36ed8b04005a4ec1993252320294224081c6618008c35451780c00388c862420931239e9d3c459a1794f0430423d0eb12104410393059f223840f5896067706f78beb26b7792e2e9b5b02bdc686e07ee056017a8045c59de29ab95330cdeaf870e81b2d1a77c6ddc0eee8c4d030ae8e15b3eb867a75c1efbbd9626b3b77772377afd1cac1367012b97c432e27e976c0ac88362d3a0cc869cdf23c0881962c84509ec1fae2808e865c4e02ca58dde0812107a29053c039c2b5637d45bea36e858f766820f78dc9ed48d102c6f00d5b708b0bd615391d27a75935aac8b1561e13c8813caeeb85a081740f531b84347c7821db90cb79898f79e8007d3c3a715ed0207c479e0f9c837d7c2be69193007975abae881c0ebb1ad92714c236b3b2cfaa8806c143a1abd1ad3a1a6b87b503ce0837f050c03578a1ab81c5bca0ab721dd0b2ed993ac0919358399d4eb698071692975a1b78d733c11375e7e9e024bd81cb7621d6998531bed8c31f06573732f6a278307296563a5ee759ec65a20c94ed4703afc985b02207e45c4568d1e9b28d6fc80bf98a1746a6f738705200023553a4395385837a12078e0e5c8828011121869e5d7001f48198f3792aa4c064499c2896a0e22087a02e3e0439c0151f90e209252c000130403f1e30011500b7e6a0a63068411b2b3c40451314c882850529299cc0648991221ce49821630666ca40e001585c60c271033d39c8715d4182166cad5c1c38328881141566c8d0f9c0134e2ca184052a10811c7098818905144c60b20489145138b1810b74392282104811c5134d2891c4105f6a88018616b4f980079448c28c04b6e4f60c09119d569b2cb0b8e24c1365c81cd1001d6ed833139010e9d1694911c5192010a0c3963d6361042445888490e46a65cf020b29a280c28932648e88400376c061cb0a2320112184a41891500f0c9dec71b2c08204509c71a289326422d0801d74c0e1862d26a000d30a528000fdbca1411212725c23c071838b0d359c604290026ea841ca8a11be72f70e5c5cd1e0601c0c27d740d3e0cee0734026e236e082b143570807d99f90c7f5c120e097c181c5716f7835308dcba3675819600c1830b098735a2eb1b5c3a211de58e980dfd779b8ebb4c6d6863bd37255b317eedbdd6db8a83bf79f1f77bf2ee634def44fe8f7bcba572927d8ff9e99ea69be6afe6a7e085269999651b22f7f45cf57cd5fa59c3a17f312eefeb9989170770f5ccc3cb8b088ae00b8bbcb45574de74d8f0b07770f5dcc53bec2cfcf8f0a1fb5429dbbf64fe86f9959533f459f66e7fe0d7596a9bb8f2e667777d145dcc61d09e9082986648454844484d40369084908290809e9e8e82876647454744474d4e368e848e828e8082976148bc58c624531a2588fd8504c28161443323a328a19191915191119f5301a3212320a32422a3a2a8a15191515151115f5281a2a122a0a2a42223a228a11191115111111f5201a2212220a2242ea71d423d6c3a847510fa21e3d7a0cf510ea11d40369e8682836643454344434d4636868486828680849e8482826642454244424d4436848484828480829e8282816641454144414d423682848282828e85573c539fdabe68e5a3f499d9d38d4e99fd05f71a8bb8501ceeefe2e5e2cdcd54da5dc496666ada4722249d122e736f284a2e9d26caf375c9aa242dcad1744768aae4fd673afaaa99ea8ec4422b5de6c444e262b8a3a59b71174bd49a5b2a42475533157d366a63726a9a7bd9d56b37653bf692d9bbc271bb87889dc6ba509c345ebc64548b77a9a48335cb463dc7dc745fbe5dcb5f7f1dbe967351c1aa57ecfab26ecadecd969fea682da76ca742baba8b24da5e5ae752c917845c793bbcb70d12eb99afecc501bd06a7bda292a032a4b21a2a71e4347bb08e9492846349b15211519c964b323a46d2434333ada48444e453d884a20d9aae2522035fd596d4f7e8db83b8f8b1ec6ddbec0ddadbb7b8aa6e9feb30c5352b4cabacf9ff3b7d34b95b655c5d166e5cbc8ff81329d5e35ff9fd0df4950a779a6a5096bb99dd6b4dc47d4adaa3b9dcdc8743623cdb58653b29a363309d469ce50d949648624dd7b69afe5fa644a8a5659f7923d3b71a8d2cf0a4deb56999a547874fd1d252b65af96aaf952e97a6e75abbf5ad967cd2cd73de43f45df54674b6a25ae856ddb2b924dc59492994f66baa9fc1732585134fd0d55a6e8faa4053f33dbaf2acef6abbaa1cc212a1832e376062b1be2c2aa3094e4a75c6262fa516bb552f6b3fd4fe889aab55a2944ea2c95a028944f9a9de694f7f9a44f92a9e90f100f9bcc0a904d66e5444d3545996c322b28d39a6e2a272a4b4ab2c9ac049509f2e22e534d9b8d2929493d51533df76a65a77bcf6e6515758a0cad316d598a3e954e3855ea569ba136f79be36ab16ee87e5752ab592bd714559232a9656ab3a1321ea9cdc603e889284846148404142b4ba421598f21a74d6414140b8af15837d4ac84e2b1a16666eac4034a4d7f8080808054534d7f9ccc5a52126e5331d7928a99ee19935ad66a2553946c2d9d6a5b769642dcdd86514003966294a98ab9bb05b2830a4cb8cc00841977b72748c101313c5778400777b762583440b10181152071775b030b38e849b50f07b8bbc500ced28111a8084094bbdf010060270127e8000a0db83b86c1162c48a088260cb085bb5b116c3f14e0c3f58180bbdf2444806451c30735c8c0ddf10639a4e1c2872e6638e0eefa00047063a9488213c4dd2d1630d0e1ca1b1f4e1073778c8026cf00511aa05d71f4234485070fa9d54ccb9b4f107700e4e0f3e303b382a64b52ab5933d728dbc9b6956c2ae62adbb51a2a24dd50e5592a792a7792d4a644ea696fa5d4a6049de19ea4fb762b5313d019ee89baa2b5276789d66655d054888a23d3d2891ae5661b92eeb44ccba5f5dce98e3a91a8b89aec449296514fd4322d977050e6d3890a394d283365b254de6667991aa99532334557d53ca2decc28753db74daa5c52cf3285a2aa5b66ce4e24375bb9aa4ea5d293259bec04f70b5eef82eef773bfdeedaebed9fd62f77bddaf8ffbb5a80c95a1a92ab54978dadbc99ce1ca134a2dcbb4bc9da8cddc4ea5d359a65043e44cd0b3e67375dfa456a69e2bee56825254c86992908ee0ee21b8080416ee8ea63b00ff847e8aaa261573f665ba67bbace164b55276b3ed752d3ddd506959fbb732c3d9f66a5a296d6a79fbb30a9a42dd6cb8df516b11173f4003830193c1966031b8fbecc94984891355c5955156889840244a919b2d3d72b3a551eac6b5b09dd4f6b96f4c6eb6f408eca15eca69356de9befd5946ad296a53cd1307537ff0b0b2ff44cf2f1f5d7f3db7faaaf9301bce665a296d28d43e61ff0ffb975a4d59792b655fdbe75946c9ccd58442f759e5cb5f52e2e4c8efa8551572b183a70e7ce8604807587820820735c40ea010c1450f8038d1e4c11577df2b6adb4e6aa50c4da2ce9e9e989c55d02150a709759ab3b4449d4e26bb269392ed27334999964be93693925421e97e7ac22905bd6a4aad37db6ea264c84bd54ef45593a905dbcce745606202400a002822006a7072b65774c9acdc47aaec254f66e53e1265cf5021e318f4acb2cf27c7dc13fa545e3d713c5c1c87f8cccca6a69feddf51ebae39954d4c5b665249b7aae25eaa562b716769fbd94ef75ad67e3bfd59cafea756e266261573769a7fcef696ad1b6a8673dae1e208be4ef0c241c9c55712b57ca8d39c9dfbf6e4afa9e1663b4aa6e27ecf5059ccc5f7d2343399cab4bc35fd4f99964b5f96b31b6e56ee28f19b7cdb50d98a43755c7c21ee0ee4e2eff80a527e07c054dfe77dcab4bca95b86a6b7df4e5fab99557e46c5dcb29d6e2a65d4b6a14f38d0c2dd83b8c84111ee3f4a849cf0b7283a032880c8c1151f15a4d44adc2a2b579c6c5bd9e9a682dad0f4e98770a044e4e0480e2fdc7d05293fdba9896b61a7ef03759aa759da76fa3e33f35590f233db51b272a7af96555eb5fd2c2dab9c55d0d959467d141477c7e1628e23dcdd878b39acb8fb0cc9862a55752bd95025d38f263e64bb04a9743d89ccb62d359f4e5436dbb88d6b6107c05499d6ad3e3da14cab957d9a3753b6532b3393e9864353a8d9694e614af7ecdcea8f28b53c322b771493ac05db7ae2501913946abbddcaa424212b44565366d66e3624ea5e57526a35d7fd644709a99554d0f47623f7ec4465fb09d4694e91954ab3d324614d51277256ee281235b29e5bdde9d2899aabcc4c57753b419f4e24b36dde703219939da2426c665913322b771ab59669b974bb954c546eb7922945d7b256436549494154a2d4328a69afe5cc9c9da54cdd292a633a7ff4ec14b7962794f9e47d56dc4d3587c0d672557fcc900c914a371554a69a33759be9bad31f3fcc5a59826c97f0638684f421db25a8527b0ad37a6edb0965aa6a9994749a6594ac4ccb1bd38aceca2935f426db3354c88f1f47381fb25d82fb75bbc4acc6647692eabaa1d2128a949a6ef3c95cd125fbc9de50e5fa04ca5472a2a69aee126c7b453213b2d7134919f5e59fa66dafe6ef1ad469aa4fbabb11176bf0f80f7ace441a6a5690e2a38294ffa9d57615b57c1fa8d35cd5d47cfa2714c9ff48d56ab8a7dfebaedd6ca86c66ce5eddb37f423f4ab6964aee0e00176918e1ee515ca47182bbafe7366527295482bad572d7b6930d75964e663fabbaa1a070eaaf5150a6edf74d6a2d3fdd4e36dcf93b6af559418a0a527e47ad361c545a46adbf5774c9ff7c95bd84c61579c4b8fb932a7bc9cfbe49adafaee7a6428409cf007e5690b2a235d567769a535490f2a3ee28b5aca9bfd75266d66eb8d96cafa68adef66c3d3795fdaa1905e57f56b4a67e8fcc7c3265fba6f2989de614d8ec2cbf89e9444d55dd6ad3beddcaa86f9a9de694a63f371513ea09fdd95e53f4b6d3dfb2733f3da17f96af9abfd31d0545e4d9eeaec4451e9e194cb8af68edc9b6995036ae85f2c664769a2430dd6e655212925051d150aa2625edd3ac9d2893cd74a26e93acb297ac2065dd2a930a52fe67b6cddaed5656d94bdcbdc8c51930ff996d1b4edde9072eca70e3fe33db2aaebcfdb9b7d3ab65d4af5b7da9d54cd1a81557fe7aee34c5099151e5fe92da24c8cc9a136ee95128428488d2db6c4c4cebaed5ca9bbb73e0a28c0378105310d35009414c414c4225c85453c9de45dcaf3cbabe3adb50671925bba1bf71a7b99ea8ecd1f567db4cd7c7a128fcfac1a96e74a69a51eb47c9cca82aef0355d69e1eca6cabb8c7a12830b100babb0ee2066ba6b0bb677797119391434d7fb6139aae6ad04fd0cf108fd3aca5db06d463e848b6919c664848434632d916e26143653f4eb8a8d584924a57d584daa947b93b141777bc701ffa09fa11a24244898913284f9aacdb30d6ddc6b170dc6d0ddced9bdc6773392db955ce3d97f39b739cf319725e430dee2b07dd7dca9d869c83b99c965c0d39f71c0d9e7bc1dddd1d7d3a91ec599942dda2ac6a99c45ccd134900cc5a799a458848d56e3712ea34d3f5495212d34dad952bbaaeb2f26643852425c9f60c9559296d3f867ae0ac94b61f276aae3726564a9bcc544f335dadec1f3ed2bda4aa654dc694eedb14195a7362da6ae994ee253529c912e1ee525cd459b3ca769aa2b25fd1f3775abe5ae5d37f327fb657d9be59d9af9aff3b0aca87d0c494a24c4d1fb59a557eb6a354f3349f5e494d7fd4d5b49935db5e5529777b01bb464199db04a721db66ae27ce89548aaee5ec2c95d4ca74df98d44a5b8a2e51d5b226244ab69637d51ca24a954bea46015d72adef9d1691a9a62d29493df714744d4a52939254dc5aae4fb6ec2c6ba5d29a069809a8c4ab18cc7ad4298466060046020080006316002028140c08c52259122379a657f914800973944456442e9d0727498ec2288ea2204619638831000044804186c6660c00b93a10308f49df3eb4940c9e051c0269c1d3ac5028b05439e1b7f74644be947c3be7704356c48fc0437cc16c56bfe2d9402818b33e7e7380244ff04f6a9d2ea66265595f893f9265e08ba412a67414f4ff1d565ca30cb59e77cb012fce3034ca81d3fbbe42d89f19994ce2c050c91749b679af70b63dade4a3282d65ba9c57cc7294cf8223e6aa172848db75b6eeedaf40f0938c4ad48ece8ccf614cc66930a5948ae006c86ddd4ede203dc590b3dbd54df695f30335b6b523f2e84371440db3cfc7f71b6ba426db43522baad9fb0edc67d2023e50495aae374fc8bd051e460c6f7c32ee185859802ad66fe707553b3cce090fdb6e0a4cffcd42eaa0dfae5dd8eb8f029c3e000c0749467e750b4e069f84403a39efe9a8a6c2eb0524427424e77d6c089a75ec5e7bec64cc39897dec1264647db8f99d96fe296622ad0b50ba37829c8f234a92e4cdcedb39396c760e671a617c405c0d5a7c7ad02c28cfd9f57e98cf74c2ee01e60869926c9375b1fe087facd9e884aab5c91c63d9a8837262b641b9675af2c9e516085db6661bd7ebb037441aeecfdb3e9b8d2e05f2d4b2d74fdd9dad79b9edeaa1c62b4d8cf93bfceffa1fa93f8248cf6c203da686a9d0762cc5df6243719fc7d20803a5b88b9281e7ed031c00dd600bda5c1bb0bd19ad8564f437715a65689cfb14e5c3d9e5b5f4bdb7f4f3c0f917dbe98987aba3f570ffa19cb902fd0f132828aa81107b8ed67aa3a5e119f58aa1713644cc0f72b9720a2ffb51b2d02e2e5f8d080473badd9f6e848805d2055e216b8de30693a5755330447fe904482951a5097e53a745ddfd768afe270ec76bfc1da9ea207b894da0009bd6389fafe5ff01021114d9219d0bd238f4ddaafb48008360062573f885dde2b17be77866075252e4d23695accadaf6514303096e667f42e6e7a97f721285524ad6108c8bcade2c1bddd979c62046c84d6e5f10715450d50ae62cc3501fd9d7d42368ea1e4f0f159f27da6a96bc2374431b6fba55abbdcd0e57d855980958cb32aebeb2313dd727a46e1de4803a0288678d01dce15c6d5e84b840eb3e62fde2dd36c07659a0665687c5960b80cbc3e9c03b0fc9ec8c6aad0caf3e973dcff148e4877b479ff142e44dd26925886f160eaff17b7c595152419d9d4c7adbdbb500e4abd0b759e92873fab22e1ba56e4d422d1fe66f42b5e28bec4d500e602bb20ce7ba957d602db7ef84ad35190f07028abacb04e29909502683259f0e0a9fa3696e37c4ced95247f043284888d5dda9073fa4b6106d9fc16bcf1fa5657b295b632259202076a9aadb7ee439c611a5084e1299f1939e88334cfd43a0ea7b5e5e1190bf679031abac23244dfb359a2dfe7227d19c9fc11cb24b46a6800fdb95b4a868ebcb0eb3e7654e5d261c9658c0877abae38b36d232daa432883d4b66356b29f1653070e78160324b8ef0036336ec26e767a9a58e68716bfd63a7235ab2c715dc111f5268dfb71abc73be1dac15effd6db3273071a186f9052431f85fc08c25a8a14d71ae56571b74a433cb7cbf860f9b6cb9259c6c21af9d7513acacf6de50fefeb4f6d8cabc5802a6bf54604d89a75b849990ece8aad6e6e687a2d70d95ab49584564c1fa62706352fdce23a0ec7eafde53499ebb743343098cd6939589fdd24715774e2dcfa520154cdc005ec4721198f9636e703d3d0dfabf3fcfc0ac589084028f4e5308229c7f83a18ab3a5cc30278d246c6eb57d732cf0c1298e602e8120480ea519533230c3dd8b3f9af58219fa03f091fe4b247338b8f6e610085b17367adfe9c3478a0a847cd432654760efe8b84104090e181da9a0f9403a8906668d7810b069caa0b528523deb0992fd48de1a76381820ca299533587a3b5e278d334c39fc8ead3df026d5d76a6325dcb8857db47cee7e561ba417bd1fa31a6a53e97afe219bbe8ead5f39ffc323dd182aeec6c297bacb98889a659d8773fb21c4be4f44e33fb4cef8c6d572bda5d2b44fdd3b04cfac77ffa1fee219a2f73f167f00c3ebfc7acda67e092d0dac9a95be7656af4e5f7c42e5aa68cfbeacf3a18f89d83ffd507f7026d6f4138123992cc6584323c8b6b2cf951a5bc1596cbd71710c64610ece2cba337aa570cbb91921ac9389db13db84aefc8ce1a86efe07b55f09488e2f2e895c24b8d4bf98ec904ce1e246f53a0ce56f482dde149e24c86d50f8cc90da3b96270efe7eaae0f24be33a7f3cf844547e7b72dfb81fd113fddf7294b6cfc9771665cb1a992eee071c358d3a30e21ab671f538c9f3b6f218fe7b9e2bc84a44f5bf0e2ab8be9e3dcbc0538467d1aecf3d455623afa4c9ee7f78ec6f09365084db9f87245fa414d68da35d79319cdd30be6255ff5dda6f4361ba8b300356e3fabfe47c20e9053f9df586409b8aaec22ced5f22159377aef6599c83d48b1a3d4e132fa508fe26e02b3301b497ebd3f5fed10789e76f5fd4bfd7bacd00eb6ce976dc5b842319b74b4d704f7a2b55270acd7aa42f8eefb18dfca430a57337446cfe516f5b07b1cf9004269e4321781cab8bd84aa995959d8a1582fa66f64a6fce0c4accaf7485b46344fea3626abf5003fd008bde0b36fc6151a3faac22b5ff5ab4b8ee3b15f47cc5f1a746d983b720ececae824caade5a75f693b32856bb3f4207e541f385bf88c332d3df27add927b0a696be1348ec73df7c56abcaa09112c3cb0310dbb070c0b135f7694dfda06b125e7eee331ee73cabdb1ee8d0479c843cb9b7c5a8315eb5199e3b162a1b36c2a07300fdc92e23fe39e8bff7a7301bc02c9ac3a3f7828bb2994e90fff4697a6781e97159ab355fc1a81da489d29d21fe3fabcd886862dac91d9b143ba1bd75312a75b6a8db1ba1aca30cff7fe6733ffabb92d8b322b96e2980964304f87aebd6175c6cda0a4d4f2849a3c3efdcf0769bcf4fed3c9ecc926f5fa77724bf68327fe868dfd3294d495c82c11ed6c5b6d96e8a73ca86f3c6c77c2c1e92bee1f831870efe8de2b974476471708722ad63e8ffcb72a9c8d8382ebf2f248b4613d48f819f7e34fb9b317208574b482de22d687e752b3282eb6cea20825953099aba00a2b1608834b1eb7e39fabe7a80447b097e15dab25c017911c25b97dc8a11a55b8469da4e59c93f1a0482aae80bc4d31fa23dedb0ba60390230898c4125fa970d0c7d3eadd61ce1c0736c1e4d181a1fa520cd2d00fd6f28361f0583d19d0874e9a4720c9f5f5a5399442d38895864ae80b4a94d40a92e498242f2ad0fa2145e0330849c980d0d9bff16f4fd57bb5191bd7fa04b08d37b9b7b14b396c5e1416afc1234fb715d60d0811ec17445e02ea287daf534ad96e5481410c34d97b3c7e753ca706a3e6434ce35b39df199c19b54aa60e69ad540b9ced90d938adeef10f5d3bb66a46621d3a5d106895c35085157a22132356650365bcdd6755738e022dfe120172edd2f80e00143dc62f01396d641ee030e319d35076094bd4ac4c908b35f5fe72c8bac171e0d126d81d84be76a6ae3b400959766beabfb42d492cf71463c9dd1cd81ea71ebb40a3ade43b7226d3458e1d94cd8c4fb1b6d029e6904105876161211113b80c860b74478b61120ca63bacf83e3d23c1e8f8c1229151804904af09e1251ecc3f068be27c6e85e1f0647f3793c524a445168005022c3fb9504910fc7a3f81e19e3c12831f9d83c212e606200791968c1d53c124da42a115c288f844a2212620714586cb600cf1801457b4cf3f9703c8aefe5915022950283801219ce57200a3e383ecdf3c438dde7c171691e8f474689940a0c22607a008a40e4e5611272304999d0c0953c124aa452909c100f895a0224620714b36c3611cf3200457a4ce3f970389ad7e321d102aa028380d232cea7248a3c382ecde3c1181f4689d1c7c60375001781c8cb8c16a6e29169025591e4807864541211113b80c860b74478b61120ca63bacf83e3d23c1e8f8c1229151844c0f4001481c8cbc324e4609232a1812b79249448a52039211e12b50448c40e2866d96c229e65008af48807a3c4e463f384b8808901e465a00557f3483491aa4470a13c122a8970242b4d8e1e869f8517e2022e369a0c7022331a0152178dc5c5e504802ea04486f31588820f8e4ff33c3106531178af9240f0e17034af07e368be078ea3f1fd3c124da42a64002829e3784a22c187c5d1789e8ca17b3e383ecdf3f1c83481aaa04100898ce72909051f0c4fe17b308eeef7617834dfc72153450a050609317c00452072720849198ca4cc409b696353da8984bbcfcf1ee86509a1f5364c19890e9b6b085f986aa149d65f5b5d29682fa1f2b1a9ec2b789a3d2f8587426e339eaf8848a94ab4ec05804c39dceaeeca3e82c239ff6ae5e8eb2d3b59d7490e41a2f4274ac1feb9913949955e1539b8701f840a5e3620f3f11d6a318ae3fdbaab1859e6fdc60d5554e9c9c2f4a7fd27de9fb922cc722a1e1d85a857c8d7e23c299959e04cd28683fe2d73fe7c125810457c3995bbacea4b131b2bb901ce76d568fccb8a462ffba3d085f10164c77c6b1f6ae9960bcb784f9bc68ae464d280cdce158572947576bbecab36e53d14916edc87682efd728bbb15b454489be87bcb87f8bc72af8b5bd176837fab920913fc840595d257cae713e1620a492b3ab625152b9469b4431ae249a0f7a474d8a61c3189ad5134ee7075b9a4a3f71e18776d21f32000915f6c4cd243e942d034bd55cdcc8572a7328989662bd2b54a01ffc547631345475f8c3a40e2839697d8809b487dd19fec34864040cdbb9ce54ceefea4e09160a913092525877b00e02157d0078399db0825e80fe3f71c475755b02eea71209b7c264291957834aae6d3675769fe92bb1e2fe2a12b0517f97c28ca426043279751544353e07392d0e1bb6d2e66ca4567a6dbd84bed92e6b8bb922e2ab2c9f2e75e70ebdec017274719bc85cce8d57876eddc7494c0de9d387dc80aab78621b69898e28ab8421d3e2c1d576b43d849dd6e458a810453438e60dff1a1df6d20c3ecf7275eb681e04bc9265c8c691f582419584e461537a37b9be8944b712a42a044c0a4c9f315a67580d97ec350422e8886550b5d9856ba6f5e1e0ae633cb41ce61a172e6a8f4235ff2c66c6682903386d9f05707ad6f1074b3469d6931250dc87cbc04b0f31a0ba5a053985a4fe321e9f24140a0a5a491a6d386ae31f8ff0e82a09c9a974852dc3262ef5417d86540f5c7393b0d28d87a9a9a3f98a00054f5a9e74999e75c02b37cac34375cfff1f4f7a75961a4c8ff5f7fd7cee7d122cdc46ec741bfdfb6c22835620121f086c8d76e18bab5f64e92773129cc0dc6b1bf97c8662a98c203851c64d520222dbde844a1a419069e42942a4040dc078d7c9019cfa6469c58800b7ae93fd2a7b69e3678814e2daa0bc470fe8afdc0c67cdf754462e0890b25602c160286071a212cb92e3150a8f6e76b42243fa2bd4407e4aa23d14e99edafe363bd443ef3d6088943aca1de6bc992eb9e1342a19bb31ad2b6ef257bc61744a1762b42e60b38492847d8534ec41ecec9cb955422932b216ff064c094584436176df17b9cf23241ed57ace97500a841f2157a1a0b5c67197b52b94810dae4ea9befb2231b3302ce6000409096fe8b112ad07cb3873269be7ebd94961cee29fc7cbd3c2287232943cf853d7ab9aa8bb5fc203d49584e2910d5e8bbcfb35b453e4f5c808a3f8b7d08e83d0f5dc7114aedef1f70744dabade1f4b5b0e6f7aca9bd8f476fdfd88661a89373b8b1b0e46d7d878beb2dc55ad75d1ac1012d7237e77c373afdcb73e520878864a31dba5c8070d244880694003e47af15acee632f0b88ac7d773b3884318df918568a14b012e62a4d8cc758701a2af17f03fd5835424e8076544ef892201335ce191f06440f99facfef5d0c079cadee46943f71c98683e87549dbe214044652a84ea501c153de9a9ff25a13b278cf015018d33f4ee6574915522e3a0bd8e4e4e1dcc77cbd7f231ec4fe517a0c0f9f781a503e57dfa1e9e5b5bb040702222a320168dc2c9027893020971156a92fe590998633ea7e74c3815d7df8926f869ee0654d4fb483a4b3f26908f531e496df27c2608d70ae9a6a3375c2526d839c6c3042e29c4aae30b6844d97cae3f43700131e98c623c94cca732b0fec3b58e8ec9ed21587a66b4af545784eae84aac49c2150607cfed1eaa243a1e2ff74dff7ba5ec9e64918844f7a1788fdd840c08578f929b243f818dd34b91a61dfc5c97f9711944136fbba3e8bcc615dc8712b0abe9ee1c7a341e7bdc4efb48b6f5bd6705ec73ba8e5724810de01899f1f80af8049b902a10d09730f6d8284bec0930a9641e03d649876fad16bbcf94450455a98d97be0f21154f18978c0bd4724290d7394ba40e9356390b47452ea53ea15e534a3d2c65d20f3dad14cd159eae094187c1da3f9b4ec52810f3ac1fcbfc4dc1fc1513fbd6a28025b1a9c316eb614f397116718ff996542691a7e2c42f8a215bc228473653a0089af04da8431d42eea11e1b789b0d74c572d34bba8948653b54194da5b749e545d97f00c462537b96aafb7a4f257c3338a08a4228e420fc26decd089d15348cb3292a91f683675f33510916fb2be3d8874a6c14a6e167808788b54df3d0974a2e95a69870b68970b65a7615b4eb89f02a331025852d18788db5ca2561f3d58f2a12fac815e76b9468176c598796407bcf61a5514a930165b6543fc4ff58ac22d8bc9ead17d1df21c8539a394cfc36cbb9a1d4bbd5006ee9e30533658c0255fc4eb4471d1ca50e3abd7559359f17626676665c04575e7129b5e051160143a0d8c8479705c8730aeb4725a06909e03d868440e39b752150f09ba67c8423a5888c50d26c5c229af2fc38fe030a38815f2602601188e542c6b3d19e7442895c4507951d384da6da6e874792768a51ea8ad01b671f61c71637c154d3a3e21482762b8468160e1af57a7e57391c48e8966fe17d8a1ec84947f2a7424bc6ec867f2c6984044548dfd4b79f01a26d87c74d4ce1bf877e635024e29c69b0b80a4121bc7eb1344f1a57f34436c0bb9d43a102a1b8c13467f16f5b7ff05791650bee568dffffd1bc60ba60ace3c8e23e72dbd019fadef46aff63a904aab496978664bac4d7e9d3545abbce86d84f2932a04da6c85c0fe70ab232925c8362860f4292729475fbc7fe9e516e88a37f1d29d7843fc3272b190f2e75bc71be60da068a9d6dc06080a5a930cdd29f48f63be1ae89316f92891ac246ff919299209ae8887e312fb50f0e7a20faffe6f5e317ca8e45daa9904b5a4d050e64746db4bed2028b4ca68ce53ca5ad0183ccae3b43cc2631f4cf3ebf2be8003a728004c7e53dc742af4db6e99efd7e0ec811e1ed6f0bb650b0693db9a17ff6fb3900ece89a1c0e05c2e813597d0e2ff881f826a8a0b006ed245bc7cff23de0e37440b5237a9b741fa6d3121bb127018b8fb1cd2cc22cd791bf6898ca9d1852510334e4e921602c501c7452bad1fe26a5919a5e8657ed4edbac2d5f6fc6925775dafa50669d79c222f0ce433050d88d5f4b113a49438cb31783ec3944ab6eb356057d022e6dafc3ba047c744f83db989170402dd73a989f9b7b5a60aedc73cb3567eeb9e4cce973ae50da5de2d21638d5b219d26c474c356c439d07f5a4f94c86599e05c15c5db1f5ba07aa9fc07567fe7e6e5d37388161f99afb404e7c58b89eac4463fc1185f21ce8b00e5ed80b36d2fa0403458cec5d7aea7f9a043972cc995b8e39736c372f25606112128e165cbbb0c2ccc9f6ff4f6c87d9a28cb2bdbf0cfea5d42cc74176684ba35c068e4bc1251770677be1d002e8bc3f7aae2566408d32e7e28d3fee2ab1439d8621b02524f44485b529f3507b3d3c9ad50c14f06a2fcf85482caf60a736831ec2db16aea7a2bbe3e064520aa3dba5069d62ac7e616a3efac8b54f6d14888598eaaad092dfa632b7d485023f5c74eb6195dac286677282f7a278cbb035f949483f9d91ca1e139dc5640c8c3ec2bb0aa0b165577b137dd1dc16f0d3c814f856c7e1fe3676acec32d749452000c42d455f6ac36971ad63ee3543feb2a257d7bb4b6a94a0081c7a5ac03533fc374dbffa63c2ca262842ceccd138074e18221b1afa593d4ed9e9fa23f7a6901e90aff8387abd2d640641ac69a0f32e4d4ca9e7d4cf8aaa918cdbc1661e9f395c0527bc7e521c7c50619b182d5eb3bbf23294b60ae0918c03aa26de364631ddab12a99e6ad3e5ee0d0a025c2aa1e155a698f7801f585e4239acccd1ab8bd18826e6d896e716fdd70c4ffbaf41a158fe6c796423b0affedbff5043618bb8c6d7e66d5bfc51e1e4138fc18c734d30f2f970b85df61db5be6b9b432a64f0d9b4403d711e7cc6d1d8fc494b71c3d718a1b62d0ddb92ade8d17dd4781cc1e573f81d569c88943ad2d3e249d0ed6709de16c7f7bbf2cdd68cbd9a681878d04e07f7604e1b27500d4b36ccce60c9a3f3e1e2d632d10600306a9598d4c9d6472a8f5b626f06852e5afe0950f041228b7f10f4d172938ae14706b7d7205562761a4dbcb1dc04974a8226d4e93298ba55a16d06d8bffacb64829b9722a870e00b98a59527e2c4d983dc1bb02170f61aeab9b3387bc61f53245b9f68c0113e07d620b6a28a44969e882cddf12a72e0ea8403100c7a706a6573d7e297937bcdb44ed69dda44cbb598e045e251dbffed929b0116d0ebb56f2271dc4b83fd9522b8656d2faf01679c9d9832b0d10d98719dc8ca742bbb56ba34a7d58fe03fa0f5a74e7e9b034e866fc81bdec3bb3372461c18fbb2810e7f733e1cf8afdeee89eaaaeb87b0643fea46ec86ea1bd44a1127dfedf8647d4acf9080520cbf6618363475afd2b17e5eb8e02e44feb9413c8df575ac9d0b8be54b8f6e2ab0b120f9145900a2ceb0970d23a8d546a35c8e0d4f8c44775d2d7fa238e07a4eb1a1c7b5344ceeb9fd5d7aa09b378042bbc5cbda2d17ab6552410b1075e1a279d1b4a1a36970cbf98226c9a0399747574f7e3d69c4b9d30976d73eb797b2c7b426afe9fcaad5b2ca2d2c0f5f3dab558bac1613244b8dd00956228adfaf492cdcdde0e3acf81c2e70330f7a76da10b8dd145b0e6fa2d924f984134061dae9ddaf3ab0e7fe39935018c296cac78aeeca07d3d9f09f6d5ba6d5810860148531b97929ea69188521e5866354c62be878e571e7aa81d5b447e49527bbb06d292f5b9b8dfca77303ccec0786bce5639e0ff1c6687f60bc01a5d3433686df04b0ec8e969bfb78ceedb6d60be3802b7fda8ce6595a95c4f62d0bf35a500d0b01f1e34d0e09d839231f5ad9a02e9e365a56f2c42c6c491e9b182b01ceac363abee4a1645ff555f3761337179993a7017416fd3c8737395d1c98f4509e1ace89e4fa05fce564e25c184c62531e33d5b6e2388bbfcb6bfa5d5da6162e7f95a7d5bfefd8528476da5b5ebc78420db6fa788c78c45941fdd802b36e38b014d437a232b31f6840c52c00eda760b6da75cc90a841fb3e1e47c268e0688b86417a4e0144f8d6bd557421b4d094a2dcadb418dfb76f16d7828f996ef081fde19e3429cdfa88d704b8d34173efcd294a5379e8ba4ab8f3f1f23f74f07c019eab5b98ffad45ccc1cb82de5a15501d6ff9992daf72a89aadf587f036dec88b0d4df57cf6f94546196ebd0e48398003b439e17f83d06fe844c68197f7ba24050087d792e945d47a06995dab4fc8546956915aa1c6629ac83550db2b6215c063a14675ff219df0e95502dc26a7e8e43e12b3b2cdeafdba7c7d20173cf146aad41a3f18b26a026592bccee1a863862249b91e301b1d980191e40165d77b324aeebd271ad2ef992c988128f7f340fb00325399a412af87da620a080d7488206610150728cd292ffd9013df0caed1a9978a42606d9d24860910ede716044b845972aeb50fb6417a4c95f51107b10612276cd1d36331447fc28af51df1d19cc57fdff016531c4c133f7d738de7c3f01ba5788c7e3617f8f6b25f5d919bea75d8a926e65a2eb01719b5bd92edb792504d2b78638691f44cc301a300294490cafbf82cdc0f35d54b426d1eedc5a2c92fd4a44b90d9df014441bfc9fb2b491ae521f862d8214dbeea44a953b871e55bd82d3e13972c62b4d544e2fb59b5ba8576d1df659736c8b0456929065acd4eb8d64537b18a6b738cf325fbe4a1a303fb20147306178a313cc58bf8e68c6fb4d0fd854cfae8e54adbd37d74dcf119baddcac9f0224a095f3661c5d22b45138279ba0d272e28af81fefd9e0c3f5bbb1f493470805d4d7d14d257824605836dc3a80a3d14c152e9eefee0ea3a64e64a6b8daa8059c18fd9254ab907fba1791d439355dfac9efe1129a680b81f6f681805ccff7c83b206a3ecbaca30982b380f2afb295f4b91d4d51572904bf2351f8253e68c0444cfc3e443f8d8bb0580c9eee792a973462750c6d6dde000a6438bf257818e8d5b5afa60019feeaee2601d39295df6aedd2f4c9096508f50f215e848dd4c4bf2b0cf16eac0c15f0d04009f9c15e9b03abeffcd505e7c1107856e221fd83e933820017e984f7ffe9eb52aeda30cb3c5f129dd2cd04e743762ebf33bf0633fd051f2729ea35c2ac412cd19a7e918a47e7ea8246e62ded3b9a8aae762bfeae1c7ea1167d44e49eef547b1c85cf538e0ccece7c6706f979b27c64e1e0758e892818833d344585a03c3e8b8594897a6a3e9aaed6f196593ba2364d8be5bd0741e6ddd3c094cc2e0637b412524374419f8b51ab49b4b7fc9156d0e6409f159cca4e4cff3b980c79ffb63a852cbaf1819347ac5afc8414b5fd5cc43582fd642ac16961630306ec4440b19b440fc08928e123e4841295e1132d806ecb1c45f74d4b2ab75389b990b8f6306d53c378c596da5f389f8884fd4c09accc814163d3fe6d5f018b836e4dec683b58fbe1035731e080b09f995248f95cbe6dc0ddced1253f9cdf08878ac5681c3e1d2357a27c7cb7def3ee2e5a231d7ccd31e0c8aebcd1ba3b4b368800ed8d7a6d2aee19af9dd193860c241b7edc13f60e14f1bd9d1b5fdc1f72e76c9db5df10a6c6e6277a169c8a5b339eafa5dc7035e898e02f1a9f9dea212700d2e34cb005b292dcead4522576a5a7f394f85b3dc2cc0756000465db1839b520897831bcfacb6657942ab49824806707c5ab26f5a6e325a6a9b7a8722bc7b33c542eda04df16265851f7661b26b2540fc0467ac19f43aeba806a0cc535c62d82909591a3b14d0d74546c51fd2bbee169352fb3eb2444c79cb23f000ab8b14d698b7a32a19defd97199ed732c72cfe1eb4e62257d2fcbbe5cd0391f7bb884642ba55684fe398fef4394d67eddf7ca0b06177b9810cb6bafdf429c4bf10887eee8296bbb9b5e1cdd32c3dfc5a5d7460f70ebc070d1a9f0178edc7e7b27d9b834ef876d14aef25520a8fb07ec7a83f0c2bceb09e43782a4375ece6cf8539177ab0903003f5ebf61c0e4c882a971bd65619ba9a6ef58e9280ee01249fb29bc04ff29b2ac56abe72542c5fe231db2fb55d130fc418584b64492d0095e367f4c0f72acc56340ea85494e6bd13cd3b7358165d0575432a3a4c53e1585954d7a8591c3a4de1e0e91a24771e20d04cd24af03484b6a6c10c89882d10e8fcf5c80f5b493176ba00cc915ae067fb57e90534c52bee67b9bf1565f3cd55e85cacad0c7ec43dab4dda2007a66fa5571687f0a2c521d168b0ec6841f95d528e901edca89089c4878700f4b5cf03d71cb6407828e89d667a82587b797c028466a97b35310c4962193c6895a77e37923c5f9b0f9e596d9cc21fd05307cfe4c6074683064763974aec683322bde27d9941e55eec8fd459edd71d5f4d6fb7915c28859a0031f697d8aaaf56e0e3e906c98ef64b16cda0c09237ab4a8b9a774b7998993d9be037330b740c035e35def4b41c4b7d98a75891262b2e9674daeddea685fafa7d79afcd70b89292b1c7aa8b76dd2b528768d7c971d7761e6eb95a97e6961b0e8d41394b382dbb7240df0bba6c5f857c5e75b2415c18886d2fa0b5a4688af262e1e3cb5b17a75958e5ef4143554ebc9137a7362b4b76e2c426aa7c8e0114835a90d983b98b52d97b6535dfcbd4db2738d724028d5c8cefb8bdd9782526a79898f2e2268c0447457591de00af2d64afbf236a6020fafbbd387fa08b039def54f836f5f58f3199944e007d281a867803650d195a98ada56498cf2a101acecffb59cc25b3cda6bbe8537763c4c54a39c5c05a1dafd19aa95e6fb29209d94c59fdf59ea448d0c761688a84fb39e105d03b0456826ddcb029f7a64f7709970f52909772fb79005d31526ce9d92ae714218cf0eb71eb7ecbd99e421da043d3c386c8db0d6670c92f404e0fbba11fdbb30cd0a08c098846823b85f2ec8ce0a67e29f5c21c6d4f4c6b714a656e41bae9030df810a2a0c5f8519201fce26abc873b7eb5e526f7985bad8aa3d1d3a267a445c7a883189622107311081588ed699bf89f02f94831cd9dfa18cbb38daa65d84129919a4f3163094d1853d21c84c0428b804346c94760e48336812bce10063213368069cce9c94e8ae59a1fb2bb5b65b26b60f0cd6405e97c2469acb8f05cd13e1ea6c9a5c1ac686021cf00734f40409dfab21b068d244aff42e89ca0b4b960ef8502fa7dc0c278612b8778c8b540b10415c88abf43f74a465ce0959c04e4dcb19bf3b7e564d9ef9ae339fc63923454804b9e125a4c9b0880a52551eb7d1317322839203abcb7a268d96833e95851fab4215fdfab931acaef0a323e40e05c13c3dfc21c1b1b336462aa12022a566a856b35a6d12993f78cf98a0afa8bce0e513b6729919cf20753b17e47fc63d6727bca98aa024daf9a2731277d7bc761e4dd3babc0430d78fa6c72e4dcee833e6a3202858769f5daabcea0d90697ed80da0ee7f1272357b5d96383624395f942ed1210dd3963b8e291680c1b451149b14adba5a8be2ced6afdaca026a37e06b4517a40df991fb27dc32f3462b4bbe74477be3fd2fdb9b35619e9e244a6443a5a83a721dd3daa354817ad240648476b48eca3bbba12f4e8027ced059c8e3e2eb79ddb8a25f454523fe3f90dd9d16663e757c7f80d9c1f62e99083dd4a876ae00e7b298f0767ae1bdeb2fb41cd4eb14ddc7af6238c34167bcb00e791358aebbf44f3c244d357c1c8bf9a942ad24020c343a16f520a604b98b8c61f780353c85881a3a80a6ff053ef6d7e6ff81b5bc4a53d8adf204e3026e26452e528a4c847b1703e0ae8c44da1efe6e2645f8b58bdd516aa4709352ac8fbd19e55e86d58735296ef28e43ac2895ff1fa224e59e0f7091da529f006a4168827fc33c8270dc42741ae1509ee16752c7f1a88b52125bb222664c19bb0882002fd31db4d367b0bcfd54dbeb86e92dc7e24118145a0918b4b223e8f1e11031cb5993852e12948909b94e649bc4126c8700bbb811db3dc0dcd9f65d6f1be2b6238e8bf76bb726e1594f8f1c8e8bb7b93eee5492db2a0289a624f3d0404a07ab2dd52465f8a044c4b99d7cc2d8c9d2807a669e1bb96027d35a6545ad952c6838ec595658998ac412f343a06f7b8af4719dd790091989396a2686f2e24858ab494152e20f3f3f2e5670fedaf34a69a42793adcdb68caedf1d18e8f5d33b10421ffe10b647b68517ab95bab5c2e850015c52db9c0d6cf7cac580a4a5f9ec34e46b776384aa54486f60096a27804243b4b907f134f7e814b562d1b6c3e8bd274e4200df1a2e452bd0528cde09c0d69be642e3d08bea47b13948e21668cf3718639535b4956c8ed23db5ab6064e7890c898ecd4715a775a40c009d810c0ea6eaa135256dca7123632e95c89327769d662ef098e5d468d3d25626ab631f554da4bdfc2cca9ab7b5cf5ef6f5030e7f29e9d2f7883f74532f3a0b723d23845ed450ebd8a0c6e33b8938fe471dccbf99f07fb661d7e8d3072cb6bfad7dec45f2f183408950325113ef36486a0b02db1d0030e616dd8237401b3782019854de12274f3696e4415f702df196fbab9017b3d4057b80575d2277dadc62e81f77ca163f04de807e2d661bbf424139f20791526faba19a12b0db8dc8c7e4605d9f683a06ec5312db33b54634815d0ddf24ccaebddcfe95fde785a2803a4286ede4c6c2554df01556af0428d245bdb8b5d4720d3fd009e31b1a8d45fe0d55829974cfe730eb59947977718542c3e4e88602344553254e8826253278f4076eb94c754748f36150af24d03cff01da8debae2946839a79363610f3e48bd1fea70c47ad31679a55286178272469980d6987065aa481cd7a91ae175e6680bcd18dbdaf17d654346041045c9515b0da9a118430ef7be22a1370d3b20a532f2e869677636860a2c8370c5326cae3fb7db4345710de9157a5df64a0923cd1e2dc3b17046b2a602b5cd46932dc22bc3c95949dc762cd1afbef106b467c089f0caa0d95bc39ba58c7df01e0b9b48d6dcdeca400b6787ea32385bfa84e180b6d570f0f22a465a97659d381810b332d05a9cb561f1a29b140308ae853e2dcc4c5ced6c2aed47f44206ddbfab0c4aa38bb03ce1729f11bbfe192e9d314f7b69b955e7a4bc91a289b8f7515b74d3930b5688ca5cb3fb0b15e98839b23025876cbc4e4520f6a9ca50d4cf9be3a538df8d330f0736faa9a78ab5d0ca90fb366c84199b6c64270e9be15c4e2c6919ad2f2d92c5906d210a0a0b4b4039bc02c8b8702e73e447d2f22d403f2a4fd878b47c19c5971716d79707a78ad3ae3badbd4416dd410254af6022f400a33690c7a9a0ccfd0017fcfa744991586b04e9a1b5dccef18d7074bb9405f8be9bc1c3226479b892057eda7932a38822af2eb0025f7683fc0a882c471958e0c79d9d8518f12a39980e58bffcba50006b974626cfbfbec3a01596e26fba754b3a39daec18f4cf965fb8ff87e1385829f2f002d0cd6caafa1df1111e68ab15e00a123e49cedd498e020afa857dd7126060b400d1052bbaf02a0f80e85f046bf467d356b80ff9c4741376ebbd62e58716362e75034604cb3bff0a5f7882aec3453fff49a412172755897af29140a13b147ac902a475b88ed3621e676bb7994bc397700e2e7dffa998b8f05d4da3961e8edb140d39dc805cf1d0965e68c573f0f5b909a40bf8a964f2f27f50081d16d2c677bc5f95bd1b43aa896d8973dd24be3d14f31e808b79777c276650deee6c5777ea680cf2fe4909d6bce7111ba845dda920d9ceef48703ea34737a213132493cb7185d96677c5b3993e6ecc5a2fa0de5d4638f7cbeaaaf036b3561c250583ef3c5d90da02f4be1bdcd8fd50ee252b2a31a17ae6e052602f3e8b5647e18ffead46a98d6b4c3a7e0c6919a99662b7995a562887ef06175ae487c9592daf65f05bbb1c328127cd55f7a29069892761f2c426497cb75e5e3897fd4950421690d3efe9d607f582b989537c23bd500c2218888ed6e46f112b0cefffdd44784b96cc9da9f499db355e8d170df50e51df7bd32074c5450cfe4fb320802139703d1d0d2ce1e831f2bc2c429245c2d7a375b0c1bd4ad60c47be99590dab9d9aca001c7de80e5f913c60ddae758b25012bb6900ea1d685549cf38d7f696b5cf17fce9175e0067ce4690dbc9c110235729ad81eaf93c6fcd91797535f70121cfa5c8ea8ce71c2e964d95ac85765d1f909532a1496525be48ca38aad79632972c196d5fa2b7fcfaa93d048e5b0bd3bbef08e9ca839ae4bedc7465b011799ed34bdcc592a593e844f7396b7addd1d415d06459a5165fe33ab3eb78a0607f3b0fb28234ab26b1b09518fe59ae56a04579beea109049992c4aac0d8c1e697a74f7c1ec1a2cee5f396077fc6e385860c90563cf81f0f34fc9a998bb37de8549740de471b2b7ba4eeda80aea112c23a8a535ade0935fbd01d6428471a1be8ffe2c7af43c08d8e7c34daeddbb8172aa40d30e7370ec3471079956f075b8be959454cdfd50802f3388a5b54b9f4b887a7fe45f8f76dfce8954b665e1b2120b5e04205ce4ce4a43d8af38f69e243faf48af16c5601a61c9a4af6795a4cb0efc93fc36f4b61bb260b498172f31503661dca927eaf3fc815333ae70fff30a3858538a8cd2ab7dfbd28fe7818e56d39e13a4bf835dbf0c39009d454b10a1002697fbdffa107209694a7c74278fa534094065eb6768297b4d7a50424d2cad003150cee0c5b7d8ea4fea0a6192599a5ada0d531ea734edeafab9c2a23b67082f6933118316c0c4e81d1bfbc350a7cd196693d6ef1ce6d10c751ac1a7986ab94a25a3b5a3e411470b6e221313ea5b450659860e3b682e49c2bc798bb8e5a90bc15864882d7acc52d96f3e9fb33cec028c2cfb6650a9aae72e4fca641eb86be7fdf514db6bd2322a108a700ef3740f5e0e0e08c8ab3ae725367cf81522cb78597baf69dd316c2752b2e6655bfaa4c01addec637f2a88a8686920b68d022a04bda90d2c33ec66661a2b18a300e0927464e139289121b162a83134ac19120928ecce3095917203b101df27e135a0fe8da2b350832d11b4debb33cbb89c822b669d73367008bc4f623db449984e5627d85f2835f75c5a820c4d25257f9ba3be869fd6d654fa90916b2825829e9253e211a7d0531275e40a35328e40eed86b3dc1cb9c282852f57bfd0510477d28435d50ed77f0708d769af4aa8dcd4beb46ac9608f480b70bd08ae884ae060500ac99d3852afb9655310f1d794a350580f3cba2b527267fdee0a844670fe5ec589076059be2655a238a28354f943c41c215a81bdbe4df71aaa18eefd801711e35f34ea2454a36d9fdf7855d05306c17cff401559830f1576cf848435a97d1f32f9b34802c8348d8dfdd3d27724c23bf26d4000d4b0aa3bdde6915afadde66a2c1a9677926aa76268e3d90f9b8128f730ca08159116bb3f0849dcdb85b7d6d2201490a72c7b80052b7227f2d2f7ed656459be3d53b3dac3835a5ef7aadc17ba5e70b54efab5cb255cb341183d66d5c4ee45d610e4027a1caece91b14f0301d56b7da585487f4fc43688817b2e30c52a727bbc316216a198aa5492045d8676c0deec3733a2ac0023053f1eeeae4013342435b891eaf2d55aa7628685cc8271fa07907ecde16c7b4cb154010ff9ffd95d95abf5553c8cbf70ce938674cbf67c661953a73db61a05322437a63db0bdd2dcb712a835860c440de23c1b5b75f56af93d9c9c14512eda0f9c4da25c928b894cf32beb155add718806cabf8f1d68c0e1e7ce49201e2968ae0efedac82e77a4c7bf5a4e7a23037daa76d10fa9a2ef6c5409e2c8b16cbb3e2c1ce1c7ef65388cda555b1b778c5829dd50f19477646fca7779d978c3e5dcd30a97d90257efc60ac121a3d83b2f87e177899f220217497020a140e56741d37d402625c329dbeb997c906f82a47409b4b2fa534d8edff662b2cbb4180b8cee6c797265724090b01e7f381de529c638a5dbc2566783006f0ec80ef592e15e9ed9efa33bfd5bb0b4080faa753a6bafcde679c5611a2bca7fb20e43068560e72a6b0235f2981211892d4cf3ab8b6b45046b0e890d4a417b1bd8db6c505e599de58e604d8102a60708d3dcc913e0ade0c18f9079b2141af0d6d1593f7cb16c780217233c9cfc235c6b122bebadc96d27d7c7563d69200c23929f58c7cf521d2c7162f278fd150c28cd1a3a053c3020838f55c577b5dca56963d1d55b1b4f74d8fbb775d0a881ab92fe67ef021697d52b902e506a2f79ba2f42c260262e2abea193622bdcbd2f328f2751ee44633b24c8bcf83e6ad91b2dd3c710fe16745d56c55a0fddc8d4eac5dced01e11038324b38d02f323dd42a8980087422c29c2d0487cb92e0be9a43fd52d3d90fc7cd6a848ceaf5e1240d53b79303a9bbd557d039992580d4c100a8f4d103ebb8c48eb8c874b394dcfcbf03a1d0fdd080292cc761e5b987ff65fd382ed5e2b0e324ae35de63d2426d47304d5402c05d4e535f5b652061102057c565faebf194ba9d6e032e508fa80df0f3b76dc3df3510cac319f182b3e6eaaf8f227f091cb1e0f0fb9217d6ebf161853c336ea97995e16a62dbf2aeda9321ba81d356c81b04d4bc42384b52eccffc67aab65acf2161cec0e8b3bfd67a60b4bd58408191d5bf01f2cb786ff6eabcab6f0627e09ffa1b4ce566a37c2fa720b5eaff9659df489d155f5632a382daaa1e4f32d228ac243cdf2e9f78de5335cf2d76b7896be639c92a999945f856b309543bf4d65e28b79f61aa3abf5545b1ede367ef1bfe2f071612af01ffb862f2d1cb2236a39e429c671f26c3f356d25f85c690af76045f2b798aa2335e609b611dcb82524d6c67d68e5f4029e26abf7c07a6757287bbf18a2fe489f7dbc07185e15243f18f274542e6d9b06b2c1c00391d06065812915a8d3b30a309dda1b830befab6c2e9dda9aeae4de82256cfab8bb03eb64a10d087e3acaf79fcdad1b3fcb74a18159a1566282054c28f00e67f3e38320cf3645108cd94dccd3e8f02599bbdd00a2db163ec112fa1e5d83b6f98dea2088267af0498ea179984d3053bd9c0026533b4db4c7b574059dd3eb70ebc3c130b53aad6bb42917f6f1e6a1824d67e5543e35f8277589d1e8290c9d64a19d22b388535282eb972f9b343e04d5668fd963a927249f9ae1883d06d82a26908607f719da5a5e550ca0a523b17303da955ec2b1a35513f9cb4e886d0bcddc7f6e79ed37cef0d1a95204cd40341dbbf54c818409a8e6c06859134ac4f30ca4988283a015199c7c7c78a25d751a260b557030e544804bca37a5017122a2c0c69d060b6487356b8651d047bb9df9db64f228404d2d9644bd0aed5a336d5739e9075385d3edd9468de9f1ef61607169372af48c17984351cc81c4ef1b50101280a7aa1110e0613b51af260386bd4952f3e25567e96813b7c1b90f2ae3b702404c770b76f8fbd661a75aa00c1128b0836185980b680f03b1c84517124cbb3304023394dc7c4f35b9a1ee012ae477b33a40ac4afeb2f0b39e35906333ad87ddb03c7e03bcdf8e527d350ed33123a06814477bc9c9adac1343140492b18570a09e1ab72f1da9540a1182117739d666109436dba31d00382b76ecf1b31834d6c743f14e4fad4291789734dd406e0d3f1e00379c28944c5a225b61ed4324b6cceb520116be1724178bd4f0c87b76ffea265d8f00bbad76a591a3ea76b120aaa31e2e744293f90e90e16931af6687b446bc228f90e76d2483c40ce29ab08d5a6d9086f557dccdaeaada95ae91f43b1a224f04496ae6f1079e8176c84de3118533c147a7a9c027506a7a626320be5256eaebd7e7fbbe71c1cd989c1021627d92ae368eea791c336c596f52e8a4b67638ec3c22a496e9cfdb69e40d1f2579745dd8e9e908e14c0d4a33eeb65e29ac48918afad00aec6ea8a68a6a1a429bf557f4a665b3553bb7cf4a2299b920d943396f5046348ed7452a09ccada7a1829077eac6cb7915ac2f086b5a0279fc4e23ae5129515c681aa68342b1cd706a4690d9816212e96585530dbf6f634f68a5005b05eb405e7bfd4068fb1886effa70834f4aabac88918d88e75837e5adfb0bbae824bb646ddde9617fb78a05d48ba0d8f352e58f0b3ea61249a3b557dc9d8fdddb2aa82bc80a9c4ecdac5311749fc2a6aaa6c4b058f2df15d3d4826fbc276a8809d0e768a221542f7ab13622eb3fb81ce4b9095d096fad245352ab06bcc836f9b4b485d4c575aae01e1da4de73d70cb617d165a216a3fce01e530e672709e02fb67e34a4564c67935c7a7df3503026d14db9ee7662fa587d39e3c8126541a99ad94f2ae237968304a26d7b0dc83e57181923566d7f3c95a08e971b8c3eca87f5404189c414097f3266385cdef52d55121a572801b4ddf3f883c1c733dae1da289fabcd439a01852577d2c81c565a32ae0c28562c50e3a480b308443bec37c98f056134d1afae24ab3ab9e0bec26709e3a7db55a4bd16b598cef2efebf5e3f46a0e49b056e1444ac0c4c1080479c0e5c9c3a7752bfacdf5ef7f7bffadfff7e59bfbdee4f35b7d6da9692674bb96b2ca4ed24bb254b53a35b58f007dedab037e05b569ccdb73eb3236c68b3c6acc64617f1a703073b52b60bf20b270d402c976d95b3568fea95f1eb654d6969d70e16242c76b06092011f19184006846460869905c09e41c8008b230ff4017dba575f03fa5855833eafaf580006d07005c6cc8f51ae1072450498f94fd3b3ed4dfe9acc817979a0ee36bc5ad42af0d3f0825dffbee6d5376bddb4e24e126b7a3b73a992f59a68dddaca7e134c0ba9c5e43175c96a225947c569e976ad67218cbe85a9cb4d59e61847bb4f87ec9b62f6b2bb1cedea7354f49bb437aee34fffec6a6b7df34da3bda232fdecc6f54f9975ae85e26f9b4c597b6966a7c43e96fa816cb5fefec94fc7df9158b7d17a6746e9e649608d8aa80686e2c7e99c0c41d853f605c5e02069efdb63d2f8996fa7f46cebaebadde8d66f6a2baffa9b95a04f7739fd3a4fd1d3df121429b14992d36fa6cccadd9fb47fd5212bbdff9a36fda04c0e911a1823564e0d0c0d11989255633393e3720427a75463e362e1c0bcd41c81a7175deb18463f7abded9fa45fbd76d28bc3a9e967e59bfa598c9ee2672b3a53a229e925f2465d9cedaadbfaaae83de75b8aba2e0f7db6691ed36f038926edb7d9f7694ad4fd94cc3e5fadf769d2aca9ed507dd5af28aa4336a317bdb46e7d49d4e6f534650548347d67fa69f56f5f3273adfd9acf65d89457b6f5cca4f9a92bc5726c6a3aa7748486bbbed44af4f371e75bfb53a3717a9577729dd2567e97fdf597bd49943d21f1498e6c98653205bbd2869ff20b7fd552a02ebac1f089cca4f59ab2f3d5ce0b21045e9a95e0134d29bb4f53c2bcc95b66167c729df8ebee636e51d6eb75e2e86ce209ae31d952bc26efd559e62b5ff5945f9b78826b2b2fcd4e73002743c8c95dff68ea269eb84090b67fd9ee8b44ad094270a3bedea050f7a94f5fff54779f02314a0a0d2819007888196636314aaa09f349e8870fd0a707f349119665594208c18cb22e138383e42f55bda5d995b9a51bad9bf52a2be3b3346626b732b6958dc4e4a61322a0c835aad0a982085f8e8ab0aa9a528455550c0e92fa736523eaaceed2acf859e6d75a7fe9ec62f4eee50ead9be5a8d64d3afdced7eef5557c8d6e45eb1fc3b860a6d89416e60166fe6bd26965ccd67e6661463a4c0833d6cc7cdf6239d46066db7d0ae5b5f06230effc7c2f98b9046ca12ebafd6ffc4aacb9a256f729eb9b60e6c95d5425392bdeb2222098a3b4ee5b2bbe81edcb58067726eb23bde217cc36fbb9691565c92c2c2bb498512c2ab17108b365451e1e1bc081ad4a31eb5ac3bacc60e64965ac7f81c16cad6b0bebdab98304b87eaad29585615489f5d7af15b6d6b504db2b07b3690deeb26d73663600a398cef0ebd1ef6ba6324c6130b3890b667a69ddfa72db941dbd65082b76b4a061ca4c2160e6304c28cc2712d05169ad8ebdf4e8e222ad9bb54cb44691bbb81729d38cadbb1f77c0cc30ece9c31b9eecda71faaa4356cef4b33337a41e3034249c98e762dfe9b2baea4ad48519a526d8de5df62ac902fac07e548e6c5492b6f55b62c651179a43af8c3037e3ece344d9f231cb48f171ba2c7379abdfac3e49fce8d27d119ad77d0aa330730903fb5affacaf6753faad7f655eeae73ea5064149c4c96117906e4bc2e4e3735dd68dd66d731867607ff6a9cb6b4ebfea5853db5bd3ebd25469af7e3e959d798cded1517172d8a45d65ccb56ee45abf993371c27ce52e173367aac7509a13274c96b956a234076673172aebdfbcf537526da284e162eca4d285d6bcd09c2e3ad59ee6ad749cd5d7cc19fbf544ebcd9ce93cfb17ac22894eb3ce6f327f9cd14845351a59663ec29da6712ff7ede3d855c9e2c48f91f42c263b743d928e1f3f64ff52240fa3b46e2deaeab57f4deffeeb2febc5984f22c07cb204f38912cc2749309f4080f9a4994f9060b6270e80cc2747e4787ee0428d9a4c045ee8109204c8062a661cc088113c2136fbb2c404aad0e20339c80106666e34ba64fdf9a7f8f3485f8f9944f508c706070786f9a401cc270c603e31028b550564b8fe9d3f29f62fdd0eaddb35393a27e9af7fbdfe722659efa4d7ca6b445db98a93c3bebe2aa3d6ca78657cfa29ba3d264b3419271792961222206114253a6c811cdbd5577dc78f6f8afe28e6131e0b5040025282046162e5386eedc7e85fbb4f599aac9b55fdb36b041df8cc3bfec524cadafaae202f8848f4995f567401245748c2ccce284850294c5c20484ffb59a755bfd12ed46874f200665e8299883ca094de204416a08f65e5eb3e659da684c0896d7d97d34c4fbc20415e8ac814452feb651c17a51462b6d752198b33a94b4b7c5b5fda0e9397bef838f1b34c16597d8db57f5d5c09878aaeb456182ad06066be11e244a984b22e63c4ce8fd2fba65c6b7abba7e4a8c97b4567eafacd76fcead9f5b1bb5b7fa375eb248438616d129767db572bdb0921a552c7bf3d9e48bf4f51d5947e3dd28e3fb9baf5b51f33fae9ed3f2569fad9e7ac9b7a6425d0fd505b4f2a51f02beab6c5e60c6936261b143ffd36f3987e3008131c84d476e46aceb59e3d7ccda775fd6661bf6b69d66fe2ea9d4d77dede391f751bc25563b2df727ebda9212894ba68d6321ae57c20eadaaf7faf95d6af9e52b3723aea7aad4f53beeab3a6576697e8a24e326bbba259e61fdbd2ec92d7ca95c7e8abda4128eb32a351cef6f5d397dce86deff9bfba6fead394dbe634fdae955943969c15f8a81bfd6bacaffad97f4d6927d75da6fd9523981c9b9a7ef5ab6f4d6de61db21c95aaaf1bcaba4c3f78bfd40f7465d36b7b6cae7dda366a739a507dd4fd13bd7db9ad2dc84ef99936f34b73fabdcc54cfb84bde29b38cc334afb97e2b59ff7acd199a63e3fff55be9f27a7760688e465d6ec639f62f93d6dcc95117ec71687d0b4c5a030019300056c0cc15e01d7d31f31194e6b62d1769cd477a8d3ed77b870e29c884c1cca3d1e68f1a6599c4ec9f7cb3367f9475df5aeb72f423bdacfbd67a59af65efdb1d897dddac2c93290b75e5ca4a55d7bed22a551326f32f59ceceb793ba7cbdb994e2bcac39f60401cc2fceefb2eadf94e6bc4a31e949faf5f57654cf93b4a98b667d79cf465df7b1db576a26ce36bd1d136384183362ec2004910810690033f36014225410818288643e39c00ecf09caa4d2246a6f5b9fca4b09f25244d7abae3401c0063062c474cc0176e468829903c02831033851098311661c6cb8f35aaadde9d5b9d3af3a533f909f52ab7f3fbe69e686d4fdbce9ecf8a3375dce2472e9e7b67f85d1d08a6619c54cf45e8f616fe956b93b6567995b0e95d30f742fdff9fed09ffcdac63ef37d7ec7e9f1339f279971916a97a5b5bbe95aaf28aa5397d7dbf448bff8b5aefa51397d9a324e9fde96f64f7a9db3f39b92fac1afd4b2765c7bd047778fec7399ab9aae6ebf7dd47dd495df18159da6f4b6a1aff4ba93666feadb43f6a3722e9d1a2dc1ee3259bdd24dfbebd2afbbec920d7fd21a38613c25c5899ea2539c681f2d61f447798ad2cc3a4d69e5a377db5ceb2abd34e9d9d5a729357a6d5c6394d42f95a23239ba71fd98db1ed94aefe558dfe9536a34252545459492a2d2a12e33f9a4d61fa79fadbff3d9266fc6696d35cecaee67ef5b1367b92a3afa5f3be547a7d5d4a28696049bde292ff9955e3f6dfad92c23f50f465999023384ddde186dee72dbe568f3c9045e454dde3f69ecae3e6705caca172b5cace8e058834f8ef0047ed2d7a80d5db3b35f5d47112ed349236b344201a3480113df8a96a2b9a6976ed65e69ea29fddb320e17511198359913bd2524358d5e9da94d9e49575959e5a36e77a65a1ffbda21535ffbd7b36f224bf1ebc74ae7916af3328ffcd718af7ef39562df729ab426a91fab0d6673399b7877fe4eea32672ead7189d94becca963973650b9d47763ece998da39588c430cece999f275972b9b4c6afbf643eeb5f993963254daaba56ff7a1299cbd95897f9485d90584913fd6598398551a05083994f93d6d57d6b2b7d558ad21c5b5f262f97c9cb414184f87fbb96fa37d75f5ebed26bbbfef6915e71ba95f6e79f2cbd3e7a4fae4aa71746d8ff15033d7afbafe9b3be8a9e9adedeb8b63daeecd0bd18e9d32ffefdae6f8f89c9a6b669ec5cf3ebd13393b4936ef66b5bd92f337df9ab34f3e9a8cb7fd28ed9a3fa4e8e6aa47e96f6e62b7bd3f1eb77d1bf66a43f55374269ce47eaf272e99cee123f755123aafaf6712eadb12856ffb797c47e7e4b1b6b308bacb4d6b726b56ee6a86bfac802faac689792d78616d39bd4460a33fb2aa78d2efbeb32bea6c9b66fa9951daa336c448199498cc2c606d850c2cfb92d0f69f0b3a2054d9cb5e2c7cfb2202a3efae624ed4315cbb20e2748347ddbfc4e5f756c8e76a9cbaf957583b039da511147bbc6665e96f9f598c7b7d6b7fa379331dda4917bbb75fc8aba5f42c9031879a079b85903106b78c1cc5430ca1aa53596c04317f0c0050b4b5bef9c95951ddaf2840af7ee77555e796d5b8972073398f905e91fefbe8d9174872677d06196389313677ecad38461a293f90541381d8a33a10f74941430cbdc057e5451ededd0861db860871d3b2cc1af52aca48618bcfa496f7b37c1286aecc499f895ce93548307336394cebe35f499c927d7d657f1ab1a42d4010ce68784ded4218bafd27efc55d3b82831c97a7559757a1bc216bd4b290e4d8f206cd1a37151d2ddb45c7711a70e1460661b46a1c31fe8d0063a7c810e5930338b91f82b3bb445bb948c4629aa5743071466d3e55beaf2acdd6e8eaa7fd3ef34e5e568a5b1ce010dccac8451e6e00166d994de390861863d659c73c8c1ccfc4ed68da4a1845958409f95fab1be349a79852554694c96b9cb6726cf3277198d8a188dacf9314a942537b7363b1a61d95bc8244a2bd49996c0d7ddeadb24c54110287130429cb171c8226705b3198d725858b2cc5d566628ad5ea9cb577ab1c49995ccefa44d64a5a8fa717efd95ca59afcfe2d75fa2bfccb553fac92d5bff565a7fe6f433faa3acad96cd32bf763eb2b0e0bcc8acac5c8f04651d353f5b71eb65bdb6be75d4f64da4cd28355d9a9d7cb2e45c72a3777e93c7562a4b111d62e990106e25f3af533691d9cab4d16656563cdbfc2a754808b792f24f72b35d5eb12b5bae5bd74a23dd95f2b2d4fad2da8ab22e2bb5d1e87ad56814715e64eab3d4b008e13a9462b24646a395eb915cd9522966d9faf1fea9fa65a9e990ccca9c9f59b652b7ee64b954657557daff8ac5693b9f2c2c279a8d462c37db46a239a3d15fafd7126dbddfe42d2b6f7253a571a6bb32be955e596c46a393d5aca3665217353241a50e21f95c8ed439cb47ea32a95cfd6461a959b9f3351c4ddeff7afa6861d8d3cbaf475b51d66550d6512abab1046182bb6e4516991596ef9c4566e5255ab63e21d43883add394b50018a390418b3298a9702bb57c32063ef902112753ac74945a0f661c6d60e61a4621438e284e84ec28358159eab523cdfa6a255a31fe67268ebeb0109ff891cb90601c9799ced426bfec95a1cb4dab9f21db6f7e13d9366614657fca3bbd496782abbf54eba7f966455db6bd2ab31d3f76a56dbbe97ebf74e76b56f3ad9439bd79d0ba3f66c28c430d2770004a616a2bef9fa448fd6fd06a77d28a59af7176d20b3ed0b5bfa21984f5ab85703ec8ab6f1f6c6672b46626bf7fba7ff2eadb379125dbd74ae8df6522cf328a5a39cd1aa3515295dbeb94667f475d7599c91dce7bbaddee956ddc8de907eda32e77e9674bfd6c6266627acaaefedee9c1f4bbe48966edabfa2a9b9d8f7345676a1e79f6e7ab30efca5d97f5ab2d47e98dd54f5f1bba4c3f52bfaf34c75ac959fb29d7386cd26bf6ff9575d5daa36e63f74f10752904bdcd1cfbdcb7d092fa7d13a9c9bbd17ecd6b8cacd7dee9da97fe63fe63fe762dcf511a9d5d46b74a37517d29b4ae147bac59ba47b63eb93990eb553f4e96c0810412d1952d2a2aa85185162406318841089103661e31ca18355634e5d71b6bb3579a64a6d00533df6c8a15aeadbfd3945d28b6ad6f0aa429ac3073eaa27efd657e13fa35e6cd8d4b519ac5bfb4a6fe5cd95c5af3f6c89ca13577fe74adfe4d544923f17a95157f34ba1ec9f5280c1959568dcd4c0907068905438484639353b2acd1f3127034a171686892c0cc2846694215ccfc6c261d4359ce9e4cb122c5280a21503cc1f5e968749a32e5d75a9bfd537594cb6b79699bed834343834343d3ff914ed0a77168685094e2340e0d8d91ae9ad6231c1a9a66b2a46a55d39e24e308321ac04fe512a3b472a2cdaad61ad9991133979c882810cd4706b6684a510b6c51bf9f95366a04618b421004a2f9c874a8a543aaafdb07f6484b4d99b95041d3b6e7d3977e70e7e314efc1fed38ac6295719adfd2836e5f610f6357134f6943d7e525167126118ed3169bdf2afabe4cc0da9ad6c1c24c0310221cc38a2e0acf8685daf026227cd210ad23e7af3cb8a19ed29a668d067f3eb61d95b662cd894ffd616554f6eba02871a5092c0025b5fd534265e8a4834a58b3e4bd5d744a6d4c5eccc100961306f74db711a9bbaa8911da799b1bbac2f5dfd54695ed32f9e426f6949a336eb6e92fa59f78cb356b6bd7272cd7cd2041341984f8ab877b3fe2fa7295532236dff456c7765949c15d2c869ca6b1f49bcbe3dced7c7aea546aee55ee2af689c3095de4dd6cbfecbcc4669cd68a4a252518d462a99b9b5fda71e9b5c8c149bd2b21aad3138d9e7bcb5a4f8ba335dd6adac7f39ca527f4ed9eea8243d9a54feca4e6f7aa7b7954ed32f56d3e8e4a27ea7e991369d17a64337300f826e3a34f3816dbdbba1853310de40518f6c834c9f7e76ca06f9a7dfbf997e1fa5eddf6cad1f679c0f64cef8262f79fd7abcf958391a59cccaebd6e10d6c51bfca599a61b2528c143ff41c8410a4a443d607aea01208415687947c20b4b047339bbdd6ed25551d678bfa5d392fff6be76f14a339382eb4be05be892cd96b9fb382d4f9aa7e9c479ac879c4e54efbf4c565fe6603eaa637263f2a8964f535abaf79f65534935eb3d36799bc9e4d299a54d2792fc7fae7c74937d1c53eeb374d2bad8ffb9d8ff6f8b3fe35a9958eb5f506c5aff4d3f65a39fb5f669b261b349dcaf99c155f3da65f73f4bade6199a3de346967f14158771f7b698d57bf79704527842afda32dccfce3affababf66db7676cdfb25d449ca509a13339b204c1c41d2dd57df368dd452ed4e194310b6951a46bf3ac9fd7a7d8d9b30d753dda7dac64aaf98515477d5a9bc536618464722ad9b1e676e7d3b57346694ba585b5fc501c3384893ab371f6ffe9ace593b5369fe638e58eb32daa5e4312fed7c942f2f6bceddf91afbf3af1b59d11aac22897f554a294e9cb95fcab2c7dcce23b6fb2276e3682582ba32499c1cc5b93b5f7377bee656bf258acd1994759938f335e6ee7c4dfd4bb31291bbf3356f1d7533a97c4dd61bcce6ee7c8dfdfad9266b0ecd896fbb2f7277bec6beccaac3d897b6fb227c3282fb53f6987ef18908548062be561ab16f6936ff7e55d12dfaa3ae89599675df5a7f4dbf966e9a6fd6da71cdba1cb55e93d7ea4c16bd2cebbeb55614652d3aadfb1675a35c598fba2cd4a5f59bb8652d6a61556559f7ed8e6bd6a67196b5e3dabd96f54da4b5d4d2b869556bc7356bd3e49477fbebf2f91b7d4bb36acddfa895026666c22828d0020e01ec40220c2bcbdca296b55f8af2a5479db7d8fa56b0029e6f24cb48cc272a29409ec87e764dceba6f6d7d9b56519b56514f45d5f47a5629567f9b9cad0f88361a454649c10b5bcb6da5f143b15a2b2d0a8860e63873e7ab60568e63aded36ea129d66008039810880d4bb710f504e3080fa774aba759671f32df65149574551e7d97b5be9d333d0a757260899808709745c18c50423e82958ba473a4825c84a10861290c13c67283667e2e46260beded4577d8d1b896f69e68224feb3d6e452e5a837f55faa6abb658f3245dbef34253d4ddaa17e57a2aca348fd6cfba535a729ad95349722e9b2ea3094e6d8cc653689b2dadf99cfae79440437ccef332e52ad7d7258fbe65a6bdc7cd4e530cf7e66f253e5b6b75ae4410b35d89718ff47c338f34560ffa79e85d6a4b0be1e6f6d1289fa4adbbebc76e6a2d692684df745a2edbe08ada1353192becafb3834a7fecdcb68bd96ebcfbefecade4a311f3efa5157becc90fa35463b89fb3609907d7965262fa9d149afcfe274ad3eea52d387ab17f6fbd35c3d50e8faa74796f31b5aa2342792acb7ec38cdcd8ed3bcf516214f40947519d821087bfa132a97dcbafbe9f8b03da3289f5fbdf3eca3e8357931da9ff9d9037d3ed26bbef5a38330013be5b761cc7c0e9523fabab5c3dfba1cd818bd764a2edb3a08133146efaefe16bb4f41d007a3df445a8a5a558a753bafaab4bbba1dd73cf4d5ede9b38f6d1df5364e8ec65c5a7369cd67269f47a456ff86d6c47904cbbe446b6c7d415440ae6ab56bc7da71adbeacd54d6dad6fb63e206f550b488fe207297652b82331787353b9ebe27cf8f0e1e3d9acc8aa03abd3ca6665840a0baa2b54426cf7291367bb2fc244274a08b92df87137cc90c9e64936d7565c8fab057ef46ac157889d47ec19ac0a2ceaa7d3ac9ad12ea9eb511509d52b8b156f30d1f9afd85b81b202e56d653033d1e93cf4a14a97e8f4dbb2e84cb43b93fd6cdb72f0eb3cb3deeda516bd4b69dd4210b675188a86096807688a7d1076489b39338b1ed666de70098608e9c6ba21c1c834bdade2444a134fe56dfea8b63d4cda5b4b327d92d364621e3187d0d8d0e8a081c1cc96091108aadcc0cf696612b51275cba72d132d821d82209a1ec14fdb202d7a7f724d7edd1a560e36311a61d482d1bf42972a17d83fde8fcb46faea4399dbef8bb3937e353936f3ba9bd15b33a225402b223342664526932920d5871418a99c549136aa9841152ff20f3d904de40705065416cc2cd2d4b6c72907339606833e3da625ddbcd49070887446c286806dccfc26f5602993ebaf6e1d45cdf82b98e5bd10e6b7a219565f459f472c83eda992bcfa0da4585cc517bed6e02bdb6a955e5f8589b3fdaca8a1e8442f335c20b85a4c6b986260428169859997e87810dc03ccfc1abd5eb7a730bf5a23577a54ea7ad405db80568057f09b1e98832badf5af4cd9c0b6da606de1d3af0b9471012df80237cc544ed1bb3ff3206cdb234e0eabb4a580713e94c2ea47ddc6a8480ad9a2d19f3cc3a68f297d845ea57e01663205264d606262b2009d3474cea0a3858eeb28b1448c255a4026fdde9465a4b60019dd8120fcd82a1d143f6d010e5800a60280a8801715d8615622067fa42eab9f59e6713a26afdf4a3d82f6d3cd07a19550c92b21401237242143120f30334b0c0e125a83440c667e32e32c928d5e24f6abdc76be8f90c1ef0817ccfc3c47b6e977e7618cb23789b2379baf4a3046873dfd72a52348e4f021a70ce618fd4d7a7386bc58535a237313cd4ef3b71217cc108e464e337f14656566f26bffaf4a4bb284009c307c0a870b1c14ce1066be10b6e8a1608b6efad1db6515b6e8417a3b34a50f1f17c9878f1e11a999a9c12125795d472afac0032a8e5041c44d15ec4ddbb861d385cd0a6c483608b83b5f7fae7cb3f551daffe530af3935406a104053051a8e26c4cc44c7481846fe724c964023dbca0e6d198de2ef50d36854a9fccc6d177983ce226230335bf6cdb7f27a2ca284999928c20f144d92026850600bf69726518063e60ab0870247bc9b16bd11a945a37f134627cdfc2b6cd1bb9d69e60d334e98d9c18ccf3c606687cc18325da0accb6499bb3c4a2f91323c44b278296d89dcf0b3b23b7e0e91993e4d99bda5d7e3677f99ae49a400314a88b13147c4c09801f34508da1084b652080381c014813d82a0221f1b68edfc8301cdcf2cfb3e0d6df745ba48c3f48f2e0283010fccc32ce0458d172cbcb0e065a534b3e2b2f3e874b961cc26d43e46d687dd71ede6e663f3a28f87d1d0ed904bbb14c06588962db480a02512c19e960bb4e460864cbc8994c24c22a1f0b33bae0d318379c8160c75e09bd433a48a21291088966648f7a9d6e4ab64d6b7fb229e0984c1cf7a2690853ffbaaecadb6d19c090ca1a855ab74c81e210aada2f29c60a247b2883d4214fa09271e1441de7a4b3ffbd4a545cfce505a615b09827fcd4f7f0dad68f69542f86919ff6bcc9b800158f8c0a2060f8b192c4c6021014bc632c4c382638a31a6c0c0144d4c81c25f316bf5f3afcad1d268c47249eb4646a39c159902521f93420c96620b8ddee9a81b295052a4308fd2e01747613cdbe33393bc53924690f971a34fb7e31da38f1832e9d012d82fbeaf4851b0a0ac33d1092dd1799bd7dba52840108512667ec2892032af823ee57734828dd14f57d09bee97a60dfc348434b033bdc951a16bd24f51d594510ca1078f901908b911d2008f100140c1040f14208042058a2398996634ca59d159393a9f9061e667e50ab57adb52dc37484e74c10c99584be08bffd9c6d5e89c15f4b69d4e50277c3471c6cec707b168268dc57b1878e91016ef61a0e35a7a498f6c0803b07f52ce0a981e419a7edd9b442f08136d822d7a1f152510047aef13fa045102fb4d2f3d82d77e842d7a342e4afa341ba39b5fd04269fb3f26b34da49a58a289219839c51e2660c044161e261e10a40c66bed813e48334c0a33286ca8ef6575ad63fc662ef5bcb44a7e9b43ee537a6902125092990996990b460362aa020377665528963d399fa278d383032393330a3961795ee53969dd22f6603ad842018a4a76009a27263e563a24fb70401a9dcf48fa6e91fdd729af252d5c6550a82417aa53f6d217c5d76afaf3276a5a618815801081740de0324e4796ebc321e089ece6b511b222378442b518c47648010194260845e10221292000b7b7ea461b1b0b0ccacd04bf2b1436787ec771d5aa2f3b64a5bfaa0021097a3afc9cb0212c2754808f7e9ea47263a1d658738dab1abb7d20ebdf5d394ee201e8048007ae28306bf6f22eda78b5fa2834d4afac830330b4bceca671b97b3723d9214a5b769e46c933ea7f873b6cbc9750f29f4a0410f99282d263a216b6976391aea15cdde44eb37114d3a4912a8834702339845d823812112f830d159a2d3d3260262e43c190125292929a11495fed150f4402d2f36fa57232d7a20958fcda51407d278e7a32e47f244a00111186209353c4bc061092e5abafec6d9262dd14389382891032522bfee56a27909ecf7314a935dc5789228833b142787c17e9526b1c3cccfeeb896840c8fe2c89a5e5a04431076086236716664a33f8ee9a545ef63a3b4ba4f8d46165e4baf7eb6fb1404a97c6ce0ab9fee5336090640800d08240102260f049e80c0497fe123c09ee6c1ccef318abaa68bbeba2041064326f1434be06f36486c48e430738ca4fb1652d40a36120cf03c001034723b1fe7a61df13cc0016df038400c7e48b0c7013bf3afaf0e18c2cc6cbdfa4d7c53779e7d955986ba97779799e45529264ff33b7bceda19cf113838a2e608667aad8d7b3f6937357a356782d06699d3dba197f84e5da39723791a408406c006f060001accef72dbf5b6cd0014b38701322ffefdba6526d89f63c41b4cf21871c683af49e8cf63040f3c46ec303345ad4eaa20ec31e2c3fc6c98f901ec318241360990e88fd32a3d6a7969d1a44754440f825460db2b3598f797675b4f7945934e3f496aff6b0c8f3078784081c7113c3c60c0c3f2a882878c8787033c3c4e1600c602bc60e61bf62c20e74dfa60fd2cf34b34b2d6a380a880564002123005764f02a240c01b9ee6080883995fd883808c991fbd211a1725b0450fc4b5956ea27151f298dbf6f62040000750c301b460661653e79a8aea4dde2251176741f0c8c3f64f5fd965939aaa63d8771475df4a0dc80e26a876a8dcc1e36983c763038fe702ccdcc21ecf11cca3510ecbca0e6d79d66f50366699d54f94147ef13d0678c3006530d159a2d3651dc90059f0eb1b660e2dd17977be25190034c39e02a0c1cfc76bd4fa906252d9653e2e9d3eba69c6619c6dd247d72695f37ad48d2f21a4356febb20c9eac065793148a1fca7c7abfa70023280090023080005360e625ec218024804580010ce00c6616db95b44bc98b6fea1e9e017c983988ea6134beca6dfd9c010080998fb047006130131d8a5a7d5aa3250128618e0fa10052e6cf93f44df322cc604f115fb0a7089937a947071acc3f63463ffba862e10d04dd74cb5affcafab1811d82201a4e6b796911bc59fd6c58038a2f128962461bd2c016758f6afa47dfd0b4124a3cd95fdb5e68779c06769556934fb69cfd2dfd266cd1db24aac7ab3c3a34a0e331b314ecc9d1468e3472b0c09303059e1c32874a00fa00074f00d0e009000b3c0118e209c00f04b027000bf010010522444084100f113c98efe4284b6459fda4d333c419ccfcf576f55577be7c10f46995163dd0aba49da31195d666e1a721a8f4b1813d526911b4a65f0d4b30d20b3646a10b84a052ff68978f0d6cd1eaa767081a0c4101cf10439819853d43a4788630806788138f1043f008f146b0470823fc915eef357969bfc9abdf30730ff69c90c1833d275dd0eb3919c2ec3969eb2b0f0e3498f9590f0e2df85d1c4278f5f3fdd5d2c368b487b9b832c27858e79da6047557565a856ba249e7a73ddcdc2a7d9a92a647362f36390f74f3a96f3d49e75bd32ba50d596933e9318fd66f926532493fd8a207537cf5b50747bb23fd4010f63bbdffbce6d6b9933469a41e41d8a2d7ed7c86bd4a5a7b2d7d5585b01de7d5877087a2ee67263965bf95abd557acbde7cab7d220d818441106d1641039836041fc41105f08820b4190ec10882ea004e28a407c02418009300a20b800882c987934ca61a2039adce72b1605a3fc218b4c4ad21f52fcf0861fca60666e911fb4783937cccc9bc80f49f86188e7f2aea437bbf3a79cbf6dd4572178396ac1feebe7a496a3401faa208451fa70823e34c1ccd5ab6f4fd6eb8d32985821ab433514a5b504bed7b68757df36eaddb31cf5d51b55bcc1c2073bf0a18b8751cb8706b2d24a3c97feeaf2b1e95177e54e8b58565a890782d65b4623d8be75a64fbfb6129b7920bf9f86b04777fab597cef826d8a2d74d9a19a7d3aa3dea6af4ba890f0470630b286e48c18d14b831da831a7b68c11e56287b00a2073d30f3f54898e850d48a84a20721ccbcf3718e4639017fd97fa9fe998bcbfccd66f5359b5665e2c797f91d98cc5d525432b63e663fec08d20533d758af5efdc64df6d2544dbb5fea9eba943abe7cf1fb377ad9b6f55929ff95956283140c30339fd0309f18613e2962994f28606f565f73e3d75f4e66984f8a3869892210cc9cda44da146155d5956274f60766d0860efb17ed786720831941e02370cac43c821d3947309fc810d1a1434711f12f68493f2a47870e1d45d85cbf6c8c5f05ef1041c1ccac43878e229e0e1d3a8a00bd751390f940ec452310d5c7076464b77b511f2676496bf45ace45870e1d453033e51d21c85cffc6fe693acea559c962b49598a2219086b01fbd4febfd0a555ad452a4b4954d64a9d426514a3feada1e9ba7a8804426ce7e9288f33b096b39ca9d6468e6d21a5a133f4e98cbd9c413e69f1fdca392ad6f8edef42637ede851b3a38715cc6fdb2101c8cccff6a459c82b47ea4a63fa79aad255e56805fa596ef3f6e183faea5bfad909dc3fc5ee53a3df5c03b2b9e63f78c71219d8b1440f5889bb43891abf4f93d9e82f63fdfa0b8c455997d97c558ab4c65a1ba72cd2d9cd6b0e159a6f25ec7126952ef5e33c626df48f5c8c93eb4b9ea8911e6347b3c1cc9b56652c6663ab11cc38321ecc38528cc3073b90688d964eb28aaf2d454ab3b414f15196db6c0ecca65519974dab3216c7afbf506c466982f1ad50e91f5d056c29a0ec95ae02f28905703c819987601c7828dddc18e99596f08b2ad8cc25cbca144e626050d665ea477f94cc5f93d6a4010d6d301bccacc33b1aa093b2f9b59abc2baf419e8aca4b11cd15ad269475145f0cb8b751d665984f5e06e112da61c4190c9730814b3ac404def950574e49653f6fb755bef7d76cd3a46d0bfaccbf53ba2649fd2ee92baff5bb5daada76a61ed5d63bdf4617d1537bc3eb16ec2958fc65c6ab6fb1dafa5bc7558c74db92c8b6b4cad7ba9bcb5d518650d69940947599aee52375814b542feb7511c59799ce5e3f4b6aaf7ee372e7a53536afd152a494489691ba2bed95dba492d48f256725ce409615087b3446dbbd73eddf7421c5918eb9b57ffdec90afda3fca2c46a9a14e1cc59e435d4e4ad1b63d6e5ce911a83fdda366d2a3253b7488b14307173b746cc1cc40441b6769d78e452367b5adaf7efdbb79746b34aa6f69d7ce8e1c28bc733fd2cbba6f597fe994a9d20e22c2b0830827bc58128d5ca9fb225146ae6404ef2042095bef3e452367df490b69c8045852d7efe4488fc9999ff29cb7915effb28b7ee4da1be7db2efae3d81e577aa8df8aced4af1e465b7b54fd555bfba49df4b2f1a51f48c5729f8eb74adf90f4abd2b706c1f84f3811a4837cca3353917eb63e67c591af5c263d26ce2fc5cf4c3e8fd4573d8eb7446f29d19a58ea518faefda85d3b569c6f07d102a691b32b8b46ce5a10aa1a429b7e201f3e1a75c9b68d0231f0d0450cdaa05d3b2220dab5030801fc010b7f9002465554a39155518d46727391ad4f450524db3469c9cd53cc28beecf183650e81a39aec38c20896dc64a213faafd8a5b4f681df5bee6e2f33405a5af427bf4247fac1d5cf3768f0c6113ef0c1c38717f041881b7070830ce6e7460ab31b39dea7e8cd1eaeb00730de1e20f31e863ce1c44bf9b4855fdac3117a10841ecca0073298a5fb222bd723b1a234e941016d4ce175a636b2a02779db101282f0925e1b0260c30d6c7cc1060bd8a061030179b861ce430e665e2362b23b5367d91ad81a1e3cbc010f1b1e78f00bd23f3ede410a77f08299436efadce1a68b8e9ad3b3ed644d9adddc41c50e67b04308ec90f2d4488399f96d8c356ac8586a2c518736d4e18b2eb38ea2c31de8c005cbf6d142a060e289262d929a293243870bd0c1850e3fe660873998c1d27d919cb64254823c28402a1f9b08dbbe3dd22378a299a5f2645dfd1c96ccc1650e0548c30d698cc1cc7fa90a14e580861c66c0cca5b75c4f59611cd810071fc4c103ccef528a5339da59adaa1c050735c0a1067040020714e6f78632f865e60dfe06147e356e78a3af6b95624de3a2a4726ef0821bbc70c3cd9f3e932a59b7bf9ef965df5ddcd08632dab0c3dc0619e687516bbd057613c6b75264d9b0073608810d1a1b4068a0818608d090a1818f7997fa69f2522b33b7b4f3d9f91aea1a88ac01006bc0a10620a861891a84a40110fc3ad7bae9694809f94c43116830031a4ac0cc4f6224349c018d174aa7cd7bdb6d4136252545858abef6a3ee3c75d9636e3bcfaca3ba1f75fd0c3967108019a260860c98018a32dca10c5f30b3655dfb26ceb23936367f998e9c618433b460cec68c36139dfa347276894e9f418632dec691a10b664906549341c818de184319dc18b660a2d32f33a1253a8f7674941c0305c4a00766ed5222862d763e8a61470c43deb5be89c164ba52fb30a4210c46e07785e1bd4a4f9352db5d8f24ef72376140020c6d008317dad70d0c9bbce4ea7a090c44c000812f4c81df17b2f8c210d9b49b3765495e5083c70b5bf0eb4cede2051e4cafd41e2aa1c4ab74726eff638058259468d8a207a4450fc84b24b5124a3c33c660c616cc78811941cc48a20b65e8020cba50d3850774610717c2c0cc4fc5aeb850c305147e9768467949aeb4053218fee8d3943790a6b750822d24d942112db8a1052d68610b7e103636d31f5d0b3584727a87acc65d555e5a58220b5ec8c2155948c1c2193c581883d9515778e3629f75285ea108574031bf2bacbc4921cdb848696270905031b23250cccc95a310c27e538f59061156688215a4157298894e874237e36c97dd9871b40a57f054618b2a0ca1421acc5c69e68d51a7820d1506d0700a271e29cc80f9d14d0a4a4e9ce9e3a649210747210daabd16852ff8b9ac4f8a829250b793b9f515090a6f30f38395ba40bf60a0f003286ccc110a4dc61acc6c21937e6464f160fcaf9b95342e4ac8b079821b4f308359b44bc968445776680b129b9bde71ed0990398638dad9274ce18438789c508207613b2185793acd3acb484d58e3cacd7eec2664d18421dca14a6bfd253afd9a80d2d33d6b6f3b0619cc446735c6c62fceb495638c81c26fdaf4083ecbc116c91ec1d7b996f390096f48031354c084254cc861020196008625e460093bac8433f829e10bfe8d2a41869995f0e1c43863f5b3fb9418221083460c1efcb46f79693abb3aa54d8b40f1439fa6b2fafccbf6b595ae3af4c463020a5fd954a5abb6609c5ce6d7722f38d6eaa735e968346dbaede54cd19a7e5910e7f59c69d1fb523fdbf5371ab2f3a545af5218ea01ff635e127e90042e091148c21048d8820a09481c418d23e0e008364798a200ec39021023b8c1084e300266040814610f45184211aa28028808d6a2b7431aadd8129df75b778730872114610890f9bd2c14061bc2e8228c1b4f183c5f085ff0b3d07abf490890ebcb4c10c260e62064f182003b080d0434f899801046f7291a39d0a7e30c09082f18823d405801105698f9f9f5d86088c160700146ec7ed756697b340be8b97a3ffd2a9979d3dbed5787aca33acbdcf2cf283535a947a257a2ef5df73b6443b676d37dfbba71b40b794ed7378540b0a74d4db799c9bbca3bc188f9c11b3fa8c20fb61f38c00756f0810d7c407d60f9a0003d48420fac1ee8f8a20cfe42003c488346ae64a169729a462f7a776078a0841d76a0861d948059567668cbcad2d50e72b00ec2c06fd5519a1e75fd4d14b6286b91872e97516bf247dd3bdffea417b60884c5e99f4da357e8654664e2ac898b5f6d942dfd40afda794eebafbeb947f9d36fc669d23e9a7d687420021d40e1851cbcd08117252fa2c8411c7280851c703990000eccc041157070f90652b8c156fd65a64d9c0d7dcaefeb421722e86249174bd8800c661b6861830f33bfee7c832df2587d552976925f5f456da0801a48a10647f0d420a706240f0dd0100a45f9563418d12007333f27cd408c195cc1cc325002d479565f457bca4f134fc589f85926539b3fcaa5454f894cbba877f37af438da45208a28dea3ae338170493f4a065890810764a0c9a009190c118331c4c00a31b8fc60f0063b0703186c3d6160c083fdfa8bedb27b7121467bb8d869eb74daef3edd6599dff6d3942a2e5a5e1088178c41e70b78b8200d8e5cc95472011921c7a40b442e90c20542b4800e2db8410b6c0b8e60669b9f2b6a8de68a6e5cb3c0593064058158c1172ba0c2b38210ab400b152801124d9b0a98e864fe4010823ad3a7419fd69a948223a4600729c84941a78099b780cc5b0c61bb05f34381198fba5dff52150a8680028b82274ea0076616263a1d32811c3c2630038b2413506ccedcb78f23faba69b0addd24ea34a5742901194ad084126092045af0ebb2ccb9e934fde277f54fd3e3e5e816fdebf48f9597043b2448a20b23d0c008422238233a13f688202534e9c699e895395ab8a1c519b400811629cc6259f94250467b421043c083f9952695547bad33a79104022980400b66aabdf632bf660e088430f30301cab31f7883993f00992f9df5034298dad307b83853fd33170f74e181217c92280ff0608e1d40a3035d749e59ef800c07c2782de3aa8c1c801e0e7c98df5b6e5229a76b565e803d1b208337263a93b4012eb8ca64c1854c1690598a088d46a1959799a6351a40839b64e00bb9b22150edd13dea569944129df9a45afd2b3a4d9a7553ad4acc439b6b6d4d37b4f92adb7c6525a5388f6ebec2e20f58ec008b2458f0153eb802e78a1d1840033363b48401d02724ea7ea4f8f54da111dca888cef6110489be7eac4b298e652b67d2e4cc1ed5e40c4d6ad044054d6e939b26dcf5a0cba2b3e912b04306c62257466056e91f37eda39b6042c80bb164a834f3c6d6a99a740ad10800000000431000005070a050281a910b48d5fa3a0014000067c05aa466230a629a630a194304040000000000008040029474754383e5ec4733e3d8504a15fadacd483f697314ca0e6ffd60b21f79d80d781f385297c5eec24a6926365bb5639ea8b526ed21ff0323b159efa357fef02a13800501497ca27518ee7b7da4a360e33d413ef752333bbe8a64591da716f7da716982627ee702a2a6f9a33e05eeaf7104025d621c715ecaf16b465f39a80769c92adc7a53e1a47bffb7d9a12d795698b06c050932ac4fdd6a6d570de1a2fbac65ab73a7a213dd3fd417cd355489739c3d008832a78e046e40572b9ea0b8f89d08d5daabe55b3e4d7d127968c5f9138c6457ba82e01064b722190bfb3787654025509089d2e7dcbf43f1204f4de68c89d39b5ce2122787399dbb1223d42126b258b45e4517f0bede42cf88d17b4a2a89bb72850499476c8363b00d1a044b76eca4f1cfa0593653991f219ddd1b769ebd202905ad153ae1a554a5a5bad0c85dc2590a4f87fec513c2a0b1eaf6a4c7e95aba75851b651e4db686b5d8a1d1cff20d403f74cf01e887a8435bfc18c0840139bc08c41700f8571760996c046424bdbed0af9c34417bb9b2edc79763779cd5a347b0972d605d1bcadb9c7899bb16f504dcc7aba9d535a2d26212578e2dc166b27c84615cb8d2d81369f4965dd126ede43d7c03fb5197acf075ee086e0ed68d012e3a2031af1946372a273459f00360b8bf5d1a82ee45fd7b6e283ec12701be00a2dc4aa1bfab85c6835928e26aeba916c4a447dc5d25da182af1d4c0844f974a8ac878a814196d1c3183bf2c5f6285dc7539b939e50210ebc5b08f158ba33826e792ab986dfdbc605583b5b918e5be3880eaf86722a5bf5b01670d294ea37294ec831a2865947b5da670d87b9af933de642c05ceb2b4a0941ac3e433423ecf86957d900b203dd2a1a05545dda91de42d1f1d34199ba24114a4d8a03920aeb262eeed43ca86bddf8bcd082737174760552cbd1f819f76cca5b4798db7588ffebba82b907eccbf74a5d295e926ee815a329a50c925bcdeab0ff76e31659c507635d8d57940c6af3a2754b745181d75c021d21352821d435e65bae1197a9ffb856420135b186a26e7cfa36bcc8b233c01b87beacd34b439bc27d6c584302f8400a446897a66c72221da4eb3e5e0d24663b27fe720d38d3e1d650e6f6530a614c2355ae38246e33227084ba3bd2025c4e7b33a5a57b63c9812d07b935fdf900d40882b978cd22d6679cf32741c64e102475c0cdcb231489808bbeb02d7d970359f9a4017c718ca6942d6e797dc46ccb228fe8e6662529820823a8aabaeb9365908a4d547de1305d6ab99db695d6c4b20d906cc68128c428e9c840a56b6bc2b5c62cd2603823e0de078295c353259fca10040e95a43118b54a8d0d74dca2e3d29d6e12b4421a8f600d4a4e55b01926d03085977f44f1b9ba7c274daecb4ae7646a46640e80a6851961cc465f314209198724883d9477a4926e704db9ad0d532974ddc8cde4cf6d28ae72f991b5f6311d7dacf0377e93e80ea4ec6318472a07951090db14b6b85ce1d39c9cadea4249466dd0a5f28b335258fefeefb9522c5d4b8452cb63e03ddd55b6b1a144d6f88301365e27b4caae373f42ceca7ffde858e214b9679f0a79e56939501ac4f00ffa9f91a04fd3dd7506f698a350adc7070b0d55e9f655c5fa19c2c1985671eac0c5b7c2935a0cc5df08ee46644c20978d10867a50055b010a28d8be92c0f18eeba4e36073495dc53e4d704eb9e9db89dfdf20761383447dde51a200db5184dcc00730dcdcf1c0393502837bfcca73082d17914ace337ca00a891375746a2112f55fe199f59a5bb8dcb056af7a186efaadb750342bd9524750e9233822de333d6b8d8421c5b46877105c1b2e7e2ce3172cf16414b68000e1498fc4d4032c998e132a9b92cea78102c15345ab905464c764ae0728c644a345d204daa8f244c2d8f74d1bb11f2b849598dd53f786411e539500e39a8bb14503b0f412ac4ed1dd4c8fae09e9d0ffa2b60254a6d9543540bf42ea1969326f57b4356d9dbbc9183edfab231b3d2d043d6b25e22080f1199f3d2a4fbe85d04c0da50371b50f2a137c909f4f829d6241896413ec89752b9f793cb538d9668e201b75237718821ac120bc25c3767d8882e6b50f16ebffae15ef40336439dfe69285fdaabce93e8c785fbbcf59bac7d1a2d4c8b3691d7532a43be7df7459daf7cabd487f1385ed5756560181ff8bbc2c249e8e33bc4dbada8bf7624406e675e6c28d44748baf966568bed22b72a856827ad38ed0b4173bb3a5cf6ba096e9484deb535972c08cc17a95cfdf2ee6629baa5539b80d7590d8c11fad98b6abe7acdf6e935d72afc4a7097224181c3e66b1e2c9d07cd4d2d0bfba2bd2d3c1abab3089f0f2704267e36c9ab4a182c7c54ad772cf660b26bad9275175172f321288d6b1147bf7e6498272eba65cf90d9ea390816191567a52cf5f7c886183a75342333161931fe6f22ee15ecb818b520498fb13c537dbf0fc3c7efecb29478522c9483f087e7d2b4a900b40d163a23bda181095aa9dbd0dc498fb91595bb78c85c7f995d5e873e126ae42fa65620d9a41838a894816335290e15f6c02dcea5254910d547080a9d606c215e88af4fd4aa2909369c1666351e2685e26a96b8e4589f8a09f4382f81e2aadf09836fdae0c7869ed01a58d68123cc7a4e16afac9d2315fbc760cca5592544af6a97be91b718167f7426c74d0a635a858ae3f9b898d9b975e07cbdafe434c9884ca96897057df00e911dadd8179340ad8e1c4180bd072bd5534baedea61129852ba233afe21422de90fc71a0e6607b4685c1580190f99badcd51ec322df50115e987f9ca5a6e3b69500fa4833bde7c204df8e816189fe33cffb11b03959340a446a270f92a187449e0855dc4ec9667fb1bb57f3f2687bf4168aeb01ed5c977cc21337e96a148fc848e6c4f7da2b979da1e2767ee4853353b3dcf4cf48927d469e17a8635d8bff6a65a40f9af30a3f52a71db18cc720f511d1afeddce20cdb8abb025cb3adb47d08117c0c4992f057e1b18e2afe76919e7e4aea117fd56e1708571e9d91341d53f42b5613e1c0d44544915e465d30fd1e487d2bf968c3344bb78efae3422b07fb6fa7d55f7c9d67640f7084756f2fb2d7082cecbd0b0777e01ecf1a919416e7adc0ca89d3d3db77207e6a34b7461532fdc6a59b3b58e073db92905d2d36975d2081694e7570b4d1afcb989e6f36db7b4ee740c3d5dfacb7447e4886f3089d49cec9b44647ae25376b74b079501cf4ce3d2f2938ab2d5a0f07a0195f12fc2d34e7fdc0294de427373c6f373c40dd59615b2f71bf42ede91b8741b30b0ae4d68c3862b0fd298c9e0af307664f0e3123190b0ad4d810d4bd2efc968974c88bf76e435db5dd0355ce9bf9171aa7dcea18fb32a44051c1fe246d2ed58069235354df706cfabfc7dc844be7d66eda48823c72f0f2003248bf0e007a1bd94e4ac30fa748ce0d7302a49c63a44f9a8138510f2c4b3f1ac877d03648e83e7eb212a4732f1487fef2b3010cfd70483494ea9b412c3d3ac84f56282365ee3c26537f21ffc07106eb020bd2edc67727871f261ee8d0cb350237dcde07dd4695c070ccfdae794c8790e68c7c6f9b41a7d74bb15f0ddb1d31ea77788899ac26ddd73a278b27ca21aace9fdcf908387dc2717ebf334c141613f519bbf78fa49b0197222fd1079d55b4729af1aa1c31cc5843a9440860432b28baf3da247929e1497d7c6d95329f238bb0e99313c51d198bf8ac62ba779a32cff36e6f2d179347ebb278c6cea2fcbbd4b94132a6586d10243b7e8db8442405318de1916e6985a430c28cd601bf5a211a68f5c589c7e0af9d5664bce9f8ab8ca1557110fb235e302c7c7e2528ed2d44fc94dab522568c8b82862e4a623cc71d89c43d45524ee61fa7b402761442efd7cb7429e936ec14c88b6530a2559525e74339a3cf343691c91c826626f42acbd05626582e5396bb242c18577353c459aed2b0afa320a411173ea372bbd093664b4c4be8eb2507b90803afde7b1792469fcb8b847e5f8383240e45fb95ec583f6687455d68893214003521a99e92006f6d3d14bc4e796d8e5cb410b7ba1f4e4b61e634a5dd524678e14d4cc700cd4cebe292779c770bb0fc4df4d8987b31a9d06d67c7020351b04193dc898a78ff62e6153dc1e1940e09c0e74e785feb603a72b753865bf50b91400774b4ae820c0812b240862c18684d50aa448058cd7a352d1217267d964fa1df5e0551b36c339fe2b75e98c95d04534f8932e4c355168ac380ca0d9c2dc7c2a55fe78fc215c9f8f07153f9e37a9ccf8e2315e2f539fa324b5dc64a53429d687432fed97993ed95c95da63665ff15dd0b02824fc82603eddb2a98a245c9c0c7f5594c400bf52af8b360dd9dd199bf0b08636695c1386fb2d1ff8f03f9a04678e8bbdd007853f03de5bcc4e56780c243363b4003ef6c40cb72a66de47fe36dcbe48d48a86c548875e23b298c981c4088d70840416ddaf905a6bef572bfec4ec71695d408b66d99b6399bf73089a7ab0403b0a9acd9133e71fb61d78e92ad170c0228d64f3f69037aef64590d4d74f4f5f9a6c6e980fdc029f7a73d1402015adcd1ef82aa96b5eedf889cf49ca28c08c50e2403c1b8518fd77a75aeae612d650d17dede1c0be3ea6f3aacdd47dc4c59ed3045d6b1fd9ac12f3bf374363fc0b0edc839f2903a967ad3a7e2e876426e8856659bcc2143e0bd451e4f5ee5d98f70c067e26f555d51feb22d1d648bf5dc016f2336f357c32fb78a54e94af86206d3da894bd24c3a9c5015b0331b653ee4e82e5179a927a7f4e6bffcb76029f12a7c55e8b4a6d8fb20ea8ff9a6491d5eee5f5bece7551aaea84c9b144626ee0c169e5c2b27903e32fa54b38e8720d8b0ba59cfe2b2143f8902d0f1390498a9710b2d447b557b4b628b6afc5e179f68c3645cf3d675bcef6a0ab1adf978b04bb3a55d501a38d2de8e86977fb7321ffa72fa631e0f931ddcdef2916bc3ab4c52b8576ab44b24bac0a33b04989f06c1cc719a17c9a0fc8927e4b712194b3a3c8e3440ada3eb228d43f8a22bd84fa478757658b534c8b1473e3cfcde672b3bfb90c787c3db7c4b4d45d6362610ac23c46641a3b50f3bd29b5461ed27649a62f2c2434366226bf2da8b1dd73ee5763ae7bc367bd4222601fc43b2f35f39f2221b0f9e5ec133566b30bc12b3a5f8a9755b30ccd9bd039c71ee417cabcf4062f9084f17ac0ee47fa933044f54015dfedf79570758aaa2c8f79490080bdd9e832a89e7d6b647ef2e45389988f7e0c07b375dfde94a5ccf751bb1118f2a86f4cfcbf8cb56873e6d3176a5a380ef300a95fc6ea425af91b2585b5299d8469698a37f047637bd5388f13175b5598dd8b4a6ba1e18921cfce61cdcd1b260ad48671e743166d5d626ab1a7f30c7051c7da61c49f6eed9263cc20bf60c379c58ca2ba7bc1b61963ee638a3a90132674733527c2f15dda6d8f8285b944f75868131829464df091d50865e84da094086b6ccf03ae2f6acda028fab72c7fa3e62b5a235913f7e15735700c463e5b963f828a5e0335c5d5741117dc26bd515d20ca06a4e24bddd22f62fe8d4c2fdb8483a2a7ce187023d3301af06ae89648ec7e1089d3dd32245a81ef4de8f31b899024f6ca0ec42fa8397d428ca958630b91de2616778523a7f222657fca43e3b29e6431b3df1f5535080eec68b45c01b5163179198861b83443f33f90bd1ff61888bbfb6367234dd3fd039a8d5385ef1f35d385d4ed6ab02e217762cfcb143b7aa892e2e2249c4d9d641c6a0236ea0fdf529465f8cb530d814ae9e0d884576e9421641aa8a62093e5e8a1e1016b0146c9307e702ed43f97fe7218b2e632386c80d90c5c76ab2cee1d32823b108284b538e4d6f42e1f5e61b2586a7d7e1a0d33322f93b96b78fc4c9d3917e66d0170a205b27f10fd2621d370ef2a8ee63e9f170637ec124d3dbd07dbfbab15c06fd4750c0c2199261468c45fc0c972671cff436fad00f113d6c576343ba2944364a48ee27f79a0b0e4223fe2c8aea1a1c6ebb90067590db1b867d4c285b7e341300f256d2a1a4427cbf7470f8d3a19447317fe3a4dd9120761510d1dccfb6137bda81e4f2a4346ad0b07005098cb25a428f18154cce0125d74b224ee5fa7dd45077f64a88c3662906b6eaa6f51e52f58c15782fcae78009d49e44646bc647b27b48623654d916300f0e334f0c978385b878a887afe04483c09303cf44dcf0688a0130a726db1d278529d0d289f9814c24b1ee4890819965f9a44f85a64c79c8124d4af136e7e346355f8119f4cfe1ebf91380d1a1476de074ee6c9e9cbfef1d184b0c104bde675e4994c1e2fb0cbc0c3ca83cc67810d004a7c3476a1ea155f066affb8e9bbe9dfb94520e2e3113a4a5d8f82d152321a12ca970a7b739a3c908075d6ca8d141300d279d9c9c35f6accc451c62c1a90dce90ac2db09c870c9d7b10f948968b987e0699a26a075b18f0bb9df8e0313a0cd2bb8bd85b95f20f8af012ded803875b7f31d96b26eecb35a75afe2415c35af14c75516e845995773d9e7e679de40b44ef818e5551dd1b379d2ba637a99c498d04329b71bdf25404c5ed43389ae36fd5fe0b56adadb678cf555544caf2316df3f6e8617878be6e4983eac3d9dc66346911a04dbd716d2a8b9d2dc87b1b548842fcb4885af717b6c6c138126e674b2e48905ffaaebed6caf045e98addb16d2c937577437d1f499fc01a93c3cc60b06d101cb77ffadc049ffd77cd88cf491da4a24b3e18e62c3251cbaf5ffdbeadaaf33459dd2814d2244de726ef896ade1d9e3c8535a47a501336300484b1d80689e825d8b7595e262e21c388a9dc09b33e685f62d8b7653012edc7e58339e5cdfe27842716e216fe87748b921876482ae25742367aaa919f3af8576a52d069883a1aea48932415787bc088493f19272f7c2e7f4e530693d893a5360bd6431f43cfb067bd57781f2fc3ce301acfd21829713d9acbead1fddfaa4eb2720dcd91ac6fe6c131740bb9f11a0c01a7486099002bf5926402b043627d0c16d2be2132c0a4dad1ee4dcc1f7bde38b274f17f253174146d99b80a374a968b4c29acea574c67dda5555074980d00471c335f593f5303669e3cb7e2dbaea5bd3e3bb1739c6284439913d9930b06047e6201569a4c9e51e707590cd4b3380419c77183b8da7a0048082d371bcf40a3c5787f5806f512e05d943b5c8bd11c5c60fb4e2e9573a05aaab71d85f77574e079e438672c954f4d512fb590abc830c6b21773cd4e6e5e3dca663ed7b10e0c2825bd31f3d0b1559ebbe2b91544ccde9b9dc8173b60759f0fda1901a652ac84b10e5f149ab4b980462c00da4c3400f9ecbe839cacc077dece50cdde95a3de029ab341141519a862aa23d8def3e441d55e6daa880cd1637cb64a263f2f8ff0aef7f10ccc5863607099d73e167ae69e3958ab31ad21d3843fd0a91653cea72624a23026bd5c8fcdcc5679700e6962a4d7d0dbfdc86afd30f5a5d9c97eadc3414c5f0a32fc9c6a31af2247317461e0f91a318e275f9ba7ac504a7dbb057c3e220967817bf3f6e443ea43ed395d33c7e44f95522f7ca0e42b6bba4362cae02a98c286d13380984f5a3921578c0282bb60b2e39b5f7624aeda2303c8d58c461a66a77be082d29fe5d00cc2443f3a086909d2744ee483aee35c08073d7852caad0b53dfd94c409626f86b3601d5650c0e5f1fe4153685bfb7c0e11de1a637606201c4cb00dba7a49a7d913e5aecb8c1be301525e4fd577125146adfb8da765b95ff8991c55556ce48010b0e52d3f765a31308d401647363156240609193fe8227bc747755fadea803baa34511eee839a98444a691bfeabb5e2b5035d705e792eacf75083869c39f60c69ce8372e864ebc2552f70bf7e1d317285b8c26da6ffdcc69b8ac7ca90da668efbee62ec2d388c7731577f8ff5f419cb9d45662544c3b0d29cadcf085c1dd720f314ec34075bdfc58cfff5a49fef7624609af02f5c0bcea3a86e8d44bc5696ce0b4ab369a1cc20401b368e5264e49a89fea028c1cea4b969dd0cf0942bbed8516cd6eee8ce57d67507907e3f3d753b533e5fdd02edfc17d4d4f840a2f20fc5d6d2fa31af13230906067b8660ea6f892fe7c3404d685f8d1581bc1c8691f616a278ff62e2fd7e7e601a69412f04ff43d1ff1e34f4191d63f5b3f069c9fcf0b081e9f9d1091d845e6c6620960ec0bc4ee28b6f2b8510920d5ab5eb012b7f55434e4f8959c902dc015317444fa4bbe45f38bb05789d4978ba94e49752c9692fffba2c3f8f845e5646bc11e3c7c8764080721e6054e535bb9a4ca6c833d51c44250d4933913576615332f25a7212e6eb4d7a1708cd1ce9e7fae5e428cc422abc26af33aae33f92fc8af2b5ae5e5d9298d08b95de9c11547a1c65014e495d96509249c0da918c37c60c9a07f414808a5e23a0dff55d188df0e1a04fa7d13970b9a48fc8d58f72691af4c80d20d5360a8e24e09fc76f89b888942216d788572c63dd4646fc0d32bc4c8a59a9cf0b7ad1666510606539c94615e3ffed12d62d21cc6876d0e75feb23db98d86976f30355ae92403336bf398911348523273875421628bd6fa76ca8908b5e672041988e0c12ccd8cee22c29fb4a85368971b4d42dc7eb2e05e2873a1de9fe58ab60460277d7614ff0e0d3446f23703160a718f4ee8638f28e7a6b35063073cb49f2d941c693e27efe73aaff2ced411bcb5c310fd16cf38823ada7b8cb916b2072e2ef4d2f6d96948bb4f93aea8fb69443c2e07c6fef136c7b510d1fc7f7039d01957e19e00a958c0a3c768d9c5bcdc3eff9688d5b66b8d7de069c75a29790f82012ed271ac79282408cbf0c6c4f352d554e2bb5e9a574820bc05d76a9713da7e609c400cfc748c81db9b83cf66273c80f37bd6859dccf69f2154696c0b5a38c6d8b30aaa989941da28a0b2162d2359026a5e8ac6be8fd3a0b819efc44e6b7105c436e0a6f89f1022a7c304d1c2622917b0d59b3283d903ed318a8346308be767cc5491c72b17205b8aac7a7c5833beec7a7b0c0339f4ef0361bf7aaed9a0e420273b3015309c3e4c8118b0f894165c0dd3c130bdeb0bf11f91fd1876524fce54a064dbb980cc47568b098c7178eb1a247b3f515db2ee5248b64a7b85b224758ee3d166d7533057327e1d818b470b8e13b94765dff154e12d51c992c0842a05fe9cdf10b7ab04ce40d3f50bb4ff254609da8c40875aab841c17cfff1ba90d203e083f3f46b8d78fa4ff24646ab2af319cab8f4caf7fb7ff798251814c09cf6d5e695dee0e3b3633dc528d3d1b0f058fea6d7e5b8d48fec68f90bc4db853fe4ce1ad504e6430ac03c81848483aeae376673d87ef830ae2870e486662693a1d8b217a67d6d7ade9766bd94fc8a063d70201e086366216f5fa094cc9815d9ad4233bf56989eecfb6b5ee1ad1072f5e754d5d884465c092d8b73ab4285dece5e0a9dc7307ba0c6fc68f5ef1ceddc3ca798454a3ee0c54c2814181fcbb553c92865473597cbc44b5680f1914b268326f1f60382ec829204a7e457b393403878f519388add8e2e6a3f0683d2223623856317aa5828537871a2a21cf97057f7355c17e93adf3872dc5922cf9b066d278bd11d7ae3c3a8f8d4d8339a35834e2f8c7e030e391fd9a00975cb186ffee56443a3159655cf507a87e66e756445f81a12ab3e7beb6d109bf08abd5c6d2ac39782affec0deea5014487ccd0c78975c38deb497360570d484299d51627eba522feb19f36cd5065d5fae0edd9b69fe050c4df293329d43de06a9536d56d5ddad163e99c93a7e484425065c563821e8c13cd9cfd7b92f8e6b2fa262bab6676e9963ff9117fbfbb846f0ffc68a8033159e7ed81bf27756fe81a7751c3d18422d9bfd92d1b31b707eaa70cc8194193de30c0291c106d7a3dceaeb4f9d880f7938635ad40e3d9623ce7a3ecb175d0374ac28f04531572d1ac91377e9c2f5f543e125b0472acbab43f87772432b0ca5e4f64ca7e7e7fd84fedc07dc8dffa766715320fb5adca86373b2b19e4ecee975c15aba6c9a7322c559442ed3265df14f86556321f722830ac02d2e8565bc3ff5a951b9e30389d924a4d4c5d58aea2fcb61ea884ce5cf295fa9108e56f29ccbc66e59dc101f9d73dc4c51e4daee0a3608d3c09f8d3d66f567bded95ee9b4bffd09b0c69127797b25524ee02d03196f45aac48782e253298d4732fb0fd1a33919035d4856aac3b0207f0a4956ca9f84410c27ed1e7d184444cfadb1c7d2c195b180b9500eca9b3f85e31c10c0627cdbd013fb9e7a8ef69bb41d58bfb888b08cda528dc664ace6ca9f686f19bd3a355c5972113458110463bd46afa3c5ac3628a6f83a98c5b401ef2d791d6b522ea821dea7dd5882ad891293db45779ff8ad972aa478b7c085a09408e34fc3e2d84987134edcf1267149a29c6f70de5fae53b6fd6e779964324388720864940d9df2d055a6e0567fd33bf2fe123a02a0e420b459f5b2dab92b2437d41f033b44f00535a26f9b46ee3c407db1c1a3112b7778ac209afb682ba1357875ec8d5a59f42958c0f2f76e6238cbf00d2bdc17a5da1a73dadce421941a414804a706ce957f898b3410f6f03d7753d27d99ea7622dde3d3612995b02f8f97ed91a7adb19c857b8b933677545d718f9feb3472a254b93b5148c8d902565ceb44cfa2504ea8d8bf812a231c25a675b032e66a41ab962bdbc332b903555901a392a9a1e8c9716a241cb6dfebdd3eab01688a07c9aa5ca4b0beab772ec5b716e6be5c820a60c99a559fc8bdf0f79a4d0e8a78dd0ebb73fecab92a575ed8a1fa4da3203d9f4a09ad6b910eaeffb2c860ac6a6042c44dbeba2136efd3e29cb2567a1a804c31054728827d1203bd9aa679f10c075ccbb76b059fd293dbba4e5558eefa03918efd37ab38704040e515f8f4c16c0b71cc67eb377e78c858b14a8ba7b562dfdf707c82a0ffbe71a5b38e80dd8063293e2b7b84c5c3a433b4e442cfdb1e4ce69add5c13e7a6b6aff55332a050905704b281837f907d3da2cf85acab6b4171f9e273495ec6321adef5a0a8a2394e74fd78ecc7134b065d26f9f1ea484f5cafc16dbccaf6fef8d0876fcc4e3faaaca1f6dc45e9f82166b4191180626a59df418c042319803a9cda6c254eed4ce886893325bca3b030586ee4f48c788de656388dac698150f6aa41df88dac03dc9f288e223571c3a754d55346b85ea59f84b005285a2d447fd0161e642f892072c7d47920f0433086a270a69ff62eabfd9a12868a41f37ae464e9288f04171116ef50ca20d663a8716e77f8a5adcb380f4658f85c79bc6320353c870b9b10401941ffc9889eda28a5a9236cae589d454d9e42f3ae8e2e85572c3ae8ee1611a64ed6de889ce5c0707be627260194219e6630e5da880fbc73e15fcfa81c9c2d97da169381bdf9b4e447f63ea047b8a38db9ae4c2e91abbd7afff9b8d1b27a24b36b7136fa58dbc8a484dd1b04edd1bc3b48565923b610b2edad4e65628be262aef83f35363b4f923f179df99d2c374a2b95873c02fca826ea286d8afdaed064dfa55bd3ef45ea11cde67cc9a988526de9319a66d9df6b6dbff1eec6eec62f7b0b4bf827556239b311308cd279092a11c3609bc83036d8ed7096c462a7dee5a03a552dc1bca550bed7c7e9dc4b1138b5afb9d32f33cca7fa2b7d30006294d7e2e8cf4b167b3cf61e43d95a56dae9cf040af200f8c437e67d1645ddbd9e38f0f62816d8aea4420061419c16028486d913c0c70080e7cf3cf6501c7a7fa3a9613fa25ed840ae004d0a922b45b7fde8bb5ca35abdec9b9261a31d8ae9a256c62379ee522787bfa1effa29921a43314c227bf8a025fed7dd21ec942ec3bfee6ebfee13f9d9b2a7dc664792c0f372b21075c11f9e1208cabe7a2a99d70d60af2bcd7e145687874b3a67ec41dd4ceb6bc2970d9091b9ab1490c86105802d8da93fb425e41b184774eb0c06c296bfe20b8c2fba6ef7dcb3f23c7e0f42b5efeb352d96e2b95bce9d4b1e5c7c975fc9a2ff0484b48b3d9f250feeaf3e2853e73c8d6640ca63769daf6232fb8c64679f564030ada0041f0841cdb842b407c6d4eaa324f7eecc4a134f8c56b0693969a424a117ef05bfb259a24a55056a8009654bdba1c7e99a5ae3561170fc53a1da2478bae7c6319f272f693a23a8e5e081b20ecc237cfada4c5019eb3e080e1ca586cc5f8cef5f023a68858cc2235b77755b7954f7cb51333daf947dc96c36515900853635194b43dc87eb8e93b306b1ad97cf005bf5a63a8ec37b2f1a8f603926b6066f8a307a54919b6814783c332cfc2b0c6860b5770bcdc36749299c95e90a3c0b578a3c386f26e0d35c9a9eec1346644dde9c430379073871bc4d9e6de0f6b8f4c82d6529319b5fb8a8d951261d7ca1628852e5edf358ba8542cb034b8a4b92a8373385cd105fcf83f7709f0ad465e3dc9550b800e843b0000a35979beea95693137768894017c29e3170aa7a2ecfa73ab8ade98857c46802b17d8af0f79788655e8fb19c027ff448d7128153a490440e53ff69d2669bf7da9b5ac73997619c13d4ca7d0bfaf21e61c22c37b14a999bfdfe7c02b981e054eab9258d44642a8d6ed8f126b712e25996dbe2901124c6064d46bf72ad48933eec341af20c83db2d3b806d65003f5f743021de5f668e8d2338fe402d8df7fe2199353e7bb3d0572242072df7f98a0469d1315fc9903f68356d6aeec08a6caddbe949b2d24196c8192eaf7c493973be0707ca96905504c47cd9dedfcad6d1cf425a1f5c03e0177efd79cdd6d2024c94d8d3047d37774181bc7910f3e0b4d8eafc5a051e07e49acbe1fa4a93418bbab7faf92e900f328c9b1233e6d145631c57bbd36a6f74287a98c94eb18f3b1f30d0d4d30b995b24dbc257efd7d9e3b8c953384af4166ce9f2d8413342b0ddcf337c017f5219273bac7857432370f3491a71a42e0d933775b2bcc727913cd7b0d1d4fa67dbdfdb01b965971cf931dbf609c6d87599319d1002243d828f45a43c027e4ccd4b1fce0bbc7ccf3bde4823378263b2876da5485f166fcdc88a5474380f17de429315cfdddad3a9965f08a3e6f273ebde0853fdeec9df081b6f08bdf6240d96464f83e2284f1f1d7822293dd60bd1d9fffd97c46b43c4667ff8262652b541eb74e0313042ea498304d3f29a539d1242fa1a7a1f1737ef86f4cdf1c578e623c3fee5dfa2e2cf6e028a01ce2375a9952a123018590b15390714a6f5bbe23bd801711c5d43ea61f026a062384e7900586e8f0fef39a9d90d978b34e607657040291717c2e327ce5699159118f1e47f37eb28015444f3a66a1bcfc33164263e09e3f6771dbb47882da54a9211bf5c6d1bd0050c6684621dad7efa97016fa1f77b6e0364373631b4f021f03cd08cf84ac1445cf3367224cf855dc49a5671a864ce4a8a17864551be32ecc5c2b857f8ef894277f260af8616f14a75c5660c184214fd3f5217bf87c57e9beb55d165d944f286ece60c45d9c3283809d34580806af98faef4e992c4e4a5e35d0b1ea446c72bd21a9d3826c6ef55e80f470f2c7dedaffd60c25c2179ce2a11ee42df23f822812c378e7b146ffd0448429a2421d6db7c750e6c06e927d7f24a95ec297e59f9706718e3298968cdb2cf6299b011ec505015a8afb9a10261674fa15d764022d1541b13449d7553af27c888343f91c3e912e24b1ef426917159daf8dbe57e1bf8278d71767432f366369f9aeedea0c18f2c56871b3e9e5c0f10677bc5ac394f291cbdd66586da4390ec04a4a3e0fcb6fd37ec5e204991de8d36c727dfd0f8c1f2300b508801758e38034454cb7f9dacbe2db4712472aedacc5439617062262280cb3d0bce1eb774905605ab9f75000ac79fe54434fd125f95915f8161f465db50d97f776a003312f0faf1955878b5ced8e4444cf082f2cf8efc0d5ebb711649cf58aa5337ee35d897986bef3a917db8c1ac6381ff42e275488ff4b8cb51a22078ed816e14552e47b04eabd3f88cf3db218d5f6bd38409edf087e23ad163939b45a9afc92d52e78e6c1296a006a37ebfe710a1fa87c0b7d7d4024681106e66435fa6cf512553e0e67def1fc0360fa932d394c8f9c3636c49bac7d534b92cc5e3eae71348294418dce7875c9aabda4e8e669690c69d2031ed90b667d9383229e92dcb69a281c6138cbe2698788e0ff39ecb751182dba00cdb1d347c0da75e29257d4c514980aed29dadca2d2ae194352d25195be6cdf721b355f72a388e810fe105c16e0aa3355512d905180ea3033e7747a75b807d5380ccf1095a61bc1b313078eac9cafe267782c31c9b61718d98bc18184a76087850fa1b8da4f6a23395ea9c3a46de34427b2d27cb93b0100a6bc1a3a22e91e048d93e5e6e1ff597b305527be9bd74a0e9b8edb1bf253b2a77adb35c095030e73bb604ae26a10a50b47120c5f93844674aad06e2b1ec428224fe3e27ac66d87a7dc16bf6fb3d92a347c0511c14eb0c26f00a6d5d0c86653781fd9ca447c04fdcf3a0694f06e9bbd59a27a41ee0bedfe954a81c6870a957e52e3c1279e5d32a178cd14404730bd9568f755382c51a8b01b332b78ac6f6ae50daced1168f6eefc7694646766b69225c809ca499f781f4eee3c0e4290d346873f75763b240a8f82c92705a14d05cc97475bdb0b0220775f97258795f9cf0945a3eb4e361bf1703bb5f1c73bc70c67ddf85efdc05b51c6d1037cd23a79e137bf86cbdbf1b07396cdede01ab4137ae022a9499b3d9a008cdb48c1274cac6a57fb10729ba9c4fb164659aede39ca1f82a5d474acd07aa1de952f863a585d4799c0e7e7b27bb217f102cfe1477bf27cc02e6f627f0cbd2edb5f2a29325acfdacd6455c4bb6753fe93cd2f9c2a1352c1b543fea0a8d8af738c705b2e41aec52e0917a923432d51d883060d2b71bea2963048a08ce748aeb9dc8684a11c4d16527831f5c8c3bb48f6200ac8da0a6ef5d3eb785bdc18ad75370d6685647a5cfb42fb95c6ce904b3280391cba26968a73f3cd99c95db3939ebc744a50c8e888156081a5af357d9794f446ddd21406812bbb1b008376ca854b75290eb1205ad509c2e88ee0460aadd54671e4276d658bcd2f8e6f19b4a6f86e4e69f9256e3e383a09a28663dd73de55ab47796ed7ee69dc159a4b3413d9804fe9476baa23954a826ef03776872d558e6e3c8f06257eaba1ef7a2e0609f75105b365d62dd773f5fd3c800486cf4a89e81ddca42db5b67f9c0a32ebb089920c8ac3d05bec8859e38338b5294613fbd0a8396bb736500d6c97bb34e3d3a84a60f423e82a6308f55eb0a2c31e602115b990de8dde140b2c65d79060683ac18ab4a2be00b334a5a3fc0ca8e732e8a1767bfd9048be17ebb9c183748944413a0fc8181fa21240119b876cb4f499a37dd16b7fbf3327e11d1133535682d9426f0cb33f257b8025ec6f83f597c4ee8dd4016b323221cdfe0482fc1aeb0eb12f7dc30ca57dcaee232cee6f7143a8f6181d8785037fe1aed20292349a528122e54c1c0071513f08cd457effbe011b61c72664d66b56e055b4f04d939f38afc6d401384d11cc1597352d4fbd32c02ac9d790397071f1922204083af9d7c369e63196e4e8206b455525f1b8a51773dc943f92f54d3768243d3dfb830db0157d140c773e31fbe72352a3647ecfc6745f4f209a810856ed7836115dec257d7cf5a72066def27f7079bf7888c3830d16cc3012a14df93e006a2146f7abc390ef6beeae1bd8f583c29aa0d8fb035fed1b4d8b7e948494ccb25bbc3ef6075fd6c3a06258012a7190a0ed825aaf2bc6989d8062bde3eda1b2c7922c87c5c5c2ac370e2e0a126ff258e6a583c74fdcc733cd6e85e685ebc4318ae31947fac196bbed42bae2613f63015d0496aac85cea6bbdfa1bd2b8f49c87819066ee3e8a37ba7fd60838295e8426b30c958ad00cde15c203d98e9ff354d32f394ef88e5febecae3701be5d1752161b18594e4a7d1dc018de6d19f0d4f63aa5de7e0a1a1d7f05781e5ddba1bf47b38b012a2b61abb5e8dcde199b4785b20e142bbc7cca5e093af61263850e83627e0ea7e77e6bf86d8db3673ebe9d834af64c90318a1dae391371be37747066b74be296680c0d6d46e0f0f6c047eb1feb29f2b90154488a6758ee8bb7867c2de0b8c42684d7cd3c330456b3bc1522d9e601a14c43d9e54ef630bbbd41309c41caca4a821f7f4cf53aede3edc9a0da61c7e1445d829cb139f099c97dbb1200f6d68fadad0d9df6083f8f9dab5dc66cc9485709491e1969f01f06dabe350e85d3046e797e61cf8d5648ccf0a8cd5a1d4660c219f91c2028d74eb5210d157755df8a418ae18c2f65dfae696b0660e9f99e79be4fc1400cc0c01e5b998f50dc8ceb8f414d97274c05fd736adbe266d628b75c78fde6fcba852ac7afb30abafd856c9582dbda88a4118a3d9bff8364614aeffb607c4e2e480fd4cc9be8f8b53138b03c5676346dd8a6c631afa3551913eb65c02d2467ead141621b40d7061894310dfb9814c18fc99dcc4ec03cc10552a32f7e7a5e9e05c5aa2685deecd1e0cfe23e220c52109ad4c3ac279fb97fd3e2687e5baf3d0ddbdd263a846773d6bda99ea9e5b41ac7fc504f990bb5a8f940a2e6a39b714eacde96730d36c8df8a9b83174dabae125d75dd35aa4f40610c58158072436a6aca4f98f51d6f2d50304bec2b4fa24bedaf35bc3a7a092c01749fcc38c7cd54fb73b7eee5677e7f9bd9a77af038371c47b35ea77899446ceb0f4eb1cf26be0b1ff518d1267feb8e00d84be479bdf16792040271aa4bde216387db4e1a8bb3b8872340a310ed79653b02d2f0c0cf7b20e187b3eb677c8a2411cbbe8e099164468b082e84b30d32391dcd18cc5448ab7ea8052a28f201d5dfa7f9c7a6953a6b43634b934566c87e765762a2e5e41fda5d0cd59faf77c0310d5f02507b770c7964462732c0c41095f859d01adc73d06c3af101ccf7456714dc10dee253144aab08528234ec3ad677c809f6fdbd55e12ea16d6dfcb98cc2b774033f7288f618491adcb8b7c85ce6bec34be776022bd73806500fa0cebbbf1ad407d2df8cc980806cbb6f0ca8ad05e8dde987692e318c1704d389b7f8d86c11c96c65a72c642578ec95766b4a7aa450a6b16a6dbd269119710e5a13951b0921739c4cdf756c0de7490344d12c3605f2ce5008222c6c052660521f78fae4453c3dd3c7bcdf1bfba31e75a01382e1f6cbbac7a09c40d7a77a87a1078ec5b8d0d81d5c9065453a36857ead8d1d934352fcc3de06c7b04a307b9d8157adacbc9738e68221d0fa4db9174ef9d57e2efd1ce9ad097c245ecf1e17b24017f18458560c8c6f4446004b7024489c5465c66709c648e06dffd0be8eb4a450321ef87b2aba9eb613dddd3514025484cc1195677003bdfbcb55f7923e121743e4b9c33903f3c88ed8b25a99f2066ca5d60b8bfa3f1a3ce1df20c245b3cf0d5165f2dda9a368d94e667c246788e5ea79f6195b0e8fc34d8baee5153a2a9b9811dd3a1ebfdb8985318844a3b7d3e8e78bea326ad6b2b1c46a0ce106fabf1af054a4e63b34803d5762269c105235e6521273f8705a1cdeeff0b18487dbbe7b8288486ebed2704fc169482ed4aa663f20a08adfb65afc0b3a6f7462774f411489478757d9f90f50d095b7aea5bb777ed29cfa2f5db1515cfcf13a40248f800db8a19380ac94ff159b1184daaab70e9858477297233b3b0efc37c8e11a99762876d5d97c2c13b7455442bd8d7e8a5241169b9536a37408190dcfc82dda4df4dbde7006bc7d134543e4c0e841f5e0c0e471a31580fc4674d8899fba1eaae6dd887f97c46dad5321866c58bd4998b0d5cf145c1016876a876c520e28c855a3c62816b73101c96b0bed8c2b591fa76cea12f5ea13a763fbc5c11c399a8a0fbe05ec1e7fbc062a89da07c9c8bcba110f8c3cbc9ac182bf3e96ca4851f7c534cb93e8a8030595b887a38fdb31f1d3ab53d9501324ec8bda4f9ff2c5e2aaa9eea923473f3ed30c4f692ba46a763c56ee5bda4fa6fdd6aef1dce407d7ab120c4cbd8cd3315bddaacca659dd571c1443e9c6f6f246af5fbfbe1eb362fb5ba4cd8fe13acf9c2e57299581b99b324b52be1057212b927c5e919f3164de1690d620a7de6e6777b6067ef23e09fd8b3cc38587d6f301985f1a2671140b7529d61f4608307ea3c291752fa1da899c38b651f349f2f32844a3fd4164889129251a0fe28425fa550bf9f3b4b6a08bea1ac8c66fad692bd73fd9d2d8ad03da912ab66398c83501305eb06ff6492eec10ac861d49e20a6337f1c834ba0650ac99a511d7d3be6447d19c892b890049dd22742c54e41ffb38d48cf680a8fc38d7239f76dfa4ffd975e8c83c6d127ba973ca89dc57065f4b68184d8d68745c66c5faa837fae65a6d9c1f4230520a198879fd2c9f544b7c71a3d30194f63d8b4a4d4c25a35c01e21250802eba95abb2a2b8080f6a849a7e9a5bdb958e41ebd07b743270c42d4da4cb6a63cc6ca916c38f20137dc43d4843168bc226cd5d0f2a2d0786a775b002b738c968db5591013624b1d6e125259703f6832312f9b99fc912f637be31c40f334622f9abadef4ecca0b269fc3fcdb6db3cb24ba4edf956a998bde7edbee30c20b7894c7ac9586f83ca059f617cf7af2aebcafb98fcbe89f97ad417fac8b97591c0f4c9ac5c3a4fc3adbe966af42b88661baa35029114e4699d7be833bf70047773a54d7709dc1e5f47bd240990d440b04455de428f10c3bf1efbcdc4c57f4d41620ccced543d3276cffef76b607f6a0ac6b39cdd20c61e64fe407392c07c4b62af71452456c1a246597ec5918fb9363ea74671a1739e8dcd1b4495423166407708492dec18140883e057586e66198fec3845acf9f86eac02535303728643ecab160b35e89406ecfc889cadf8121d597813887bc5312b55e03359359ab821febcb5c2a3d00cd1766b4d787528dbed9ab486cef724090f85d031bccfc300e607779691fcb8ce57d5faaa6bc86bada9d1e055d6664eed81dce342971eebe59c4f15b2ebf69b371117951f8a78f0e0b7e5250e91287a1be0f8b83a91322af7b70f550c90b37cdd641016c2506ca0e3917914c15eb1913d24dcac4e8321bf8a6662b0e1c1764dca168d2173e57b2aeca716350bd0020d1608419c0a334cf35fc0b91f7e71dd656738d467f65df615f54bbd76f9bbef83166fc10716d67462e39c447d76fc0fe6706fc469007d4552a3511011bd58268259c3a5aeabcbf183e2bf423e3c89226a41ee37752e95e3180232794f7b3e5d6bd142d86c5633174107c379c2bf7289d750821fc69a14be661803859d8b3469ac7f8c090684531818cfa78b75318fb7dd02f4dbbdf050ff3eecb767874ddbbe69cef05a0ddbdd7d215035e21b15b5a9e7d2f82dce8286b4f97ba413251d98e1147bac958c0844c0a7a84bb82fc5e91d37daebfc250c05bd3d8077706eabdc3a94134e3448913dfd603245e5fed28b588e77fe82002e9dca3a34c0bf09fcd1c39e801b80be978b2014438fea19bd13955d380cc9d3b8d590589682e8dd667033698330af5e320abfc2e541313fcc98aed21d3372fb0f7df5f58886bdbcc7ed4921eecc221dc54972d3aeaa84c82aafd059b1734ee459db5359e846c65f8c32a952f8af5ad93abb85bde0a08d625538a2beabbb120f621dd3a4c4aa13a58b7a400e88e2854e778cc732307da5e2fb7089607126c014bb3b4a4a47c3e90e19b95bcca019de8983f5b90723f2b14bc19cf5c4e9e16899d6548ad6978c4b175ebd461989573e9a15c0e0f27f044067f585c3db2defeee5b779b0ed6806c0bb22f007acbd7bc60b3934aec89bc9c1cda1d4010dcd5e93a5874f71284f8f6d76b84ecb0af17ea03303741774512172000b3f81c7461ac154262639218fae4ac7e9b9c313502419f89871b332b761ed05c0dc24dccb9b5ec298c28813ddc51c286e537379b64d7417bed1d3ceecc630700d94bdb2079a5c2328ac8d32caf77bbf1c1ba6ef7802116cd09e806e067a9117f273430da80836f90589843b5bda5dd5dd2222d07f7ade7786a756c32ab12982dafffe580b7710897b9741710175efc3aac3b1169142186cf517a4bf557126ad07c49df8c700bf6e61075adc0cdc1483c9077cd61a539b861b686cfbfbb760d22a8becd7c5bc82565f471a43804bed8842096ae31f42a0212e02f7997a31f940e03b66d31c1bbfeaa8a68f34392ceeb0201ee465e35af169e33162b9711b11fa4295696b226a68715eb8fbce2809564c077dc94478d605888593efaf2b1b1b243498e6fa8a6401cc0c2e7bc53b4789b01cc1f5ddbb7e19f83629c3b894a5b560545551306821b22c2d277105ed35b00af463bd8fe7ed95cb075bd7cce61083fb08d91c47fce0883f18636727b13871456c33bcb3b49a8a9af281d388ec0b01a3c5aebe58ec11e4144a54a1ad732bf31a118e4ce0f96a3f7b0a78f6f2d7654a5cb231726c45404a52efcaf822e99732f5a29e8b9319160e809eaeb0bcb8dd659cdfd83454e071e26e75b18b5348390aa684bed1d6618beb693ed28fc496a8deeb99c3c4226675f7317c083dadfe5e472cae707de44d8e25ad193e29aef8d966f3d72ea07529292909c0a8fddcc1a0baf803a11bb5a49931046c80703fb4a68b970c102f5389e45e54bdf69264b821340d866775116936658d685e9b7aa441faf6c137786be9724dedf5d67f2e565e9d51fdca04902b617f36b89aed2c5bf5e598175704e2fa3d12b2349e80484487ac548eff4377f415170bc5f9492ccf0390baff6501f607b76f508d870bd9757c3fe12611bf699037a5751d0a9107b484b14995c5b031fb95b6a5689c4f8be914418fba38ec15202ec1b15d9d24de494c8762653f27bd49aee408028cda9a6bf4404dde5f7df9481a5a37407422b2a91769174e7209bcac187ea8d5f57e36e27963c50a921a4ffe98ee88c9e08c7f21027bcc974a2776fe9f83889f6b07979ec026d50ba1f7d2d0280722db26093eff2c5a8968c0ce2d158dc56d0842c0c17042ffcaa030192117577d232ca880643fbe57826c933a08a34967fa1e0c3081cec7dc7f3f76d1222c0550c482f172f26c4f2518da3417d1b3bcdf7f057d0b719bb300fb1b7477778f1bc5142e2844de89715be87b17e2519a4280cf2d04030132d2a01e6d28319ac49084fe57d53cea7005c7f73553022291945a40f9e3f347c8e298584979cb6ed7f03a566f8e624509ca52c99cb39c47e40fba2b9a1e103861369e0631480eff503829d322ba66c5d613aec170bc8e03d33f00137e863048324bf27e3a3476c822f4f479e69b11b7f7f98cc89288db465ddee8364e327205be185a6c8ce4bd3a3b9c680cc469be6a9c02e7ef55c1694ff3b237aa087cb88cb7b5e8a0cfb1e9c912c20090f0b4218fce1040b9a84372fcda210e5e00732cae4a752c6b246defd24b8db27763554eb6179085cbde35ce84c6dbf3e4f91ce4dba53f6344fef08c45f8c76322485a7ac0e5fb052729ac5ac25e6ca26d99dfda64cab8a9ab30626269126e0e344bb0e1a401e67806dc9792b245edce7908b27caf2065f143e0ece8f7bd30e22ea4d73f0d63b216b8898b121d828a917bd16c0bd74aa00f995c85a1f55b24eb70b9cc15965ed98c03b78212a836de9acc77b294584fa31c3437835ef4a639b853b8896a7a703621d53420cc0f890095b70ca8c07370fdd079deccac36bfd18547d52c4bcefb49de483a125fae3e4970c2d9680e4e01efa32dc22bcb17c81ea44d279e8aae530086c4e9a50e8b43b18bbdbab870c8d7def0057a2dcd682d334070d2e95f8a2adf7311773551b5ce834e9e4d6d0dfaf51f511611f15c6010475b981ac1b02669890cca31c7845ba766df9466a939721fcd8a85d0f04411a0a7a41545c5c23b9399f1b76595ddc1fd36cf45f3034580fc5966c88111f6550a27e17c5036f9fb1feb771545c41b77178af4c183e37023e479cf5033ea1a65fece94bf1134e6ca0f5854e6fb10a20868a9519cb430fe037898a12d12caa88ae0df9e0b1f4c1f2a694588694e96af0e4054e42ecd61c83a904c77ed3e37c33f112a62fc3ddc2a81eb10fcbd3c86f6305308ec70c352d58c2ad2f1723c16e31dffb3d40dbf72cd24ec4e99efcbcae98cd0cc2ba9d461cbf13ba54412e3650ef55d456f8755c5b7791126df97df61f7467334aa6aa0c366462a2be3b69472cbdafaa8b7b97b62d90722efa5b62b601dd456a5dd7dadd9efae949d4e983c7352ec4ea10b8b8d8b28225b701786cdf7928c0b166de9fda983ab86c117d38cbaa07730f5b2d327cab063356a6a0a2ba6a864496b3db1e3a814753cb4ed538aab4f9b909103f4b76b318c87e1f8617c4e0993b76d2fd18ea9734f4adea7b6c4c9a44c94d83c61b6efb447b1ac2d155536496a5cccdc759b3a1af633d81aacdc698e362ff66b36b3ca0df05c49541f587b8944ab3a4a4a454e2bf3c13f9398493b2ce34d5de3ee6e974e15986f3f50ab1c1ce540b710c308373ded12f4fedcabca6ab11e4b61d96d7f578b2962c0a431d2766cd8737645d329ff93700573c123671e0fcf41549516d8630926a98f65436bae17f323622c932498cf2fc0b0f004001cd7309990a00a800a24ed14b247243c9a7781275a18866c1cd44e386cb6bb3af2ea124cc98eba78df1a00f5c280a91c0f78d0f2b348368659f896be5812377da78a6a5c7777ae62e7183d806fe8c59d5518aad4cf1d08f9f922d4de20b984f9e141fb83d48f94a077e129cf7810c7c3747ce2db3289340132e7dff26fa2371cd448cccf40fb9890dd71e9b391c641931d651b0d83fb20d541b130d256bd56ee06557b9bc27b92ab26e77bb904d2fc48c97549474ddab9b25f9902834ac7655ac716924f53708d24c52db8752b20b8122090a6325a0b1b0f9868e5bd4d4d8c1b4041571cd86f810a231f67d3786f5273568e48e47005701439e0a5f98ec351d460d4f33e7a0047960a4234866fec2effa8da3f8948d4cc653fe559d860db7978092712c27ed2f7fbdefd1fd9d6c2ffe723fdf9d2c28e925f5d13f7553f489f29818a3aa87272a9cac77fc3d805bab3be013b6498e1e006ca32985ea604c1bbd6ed39c5293af9f25160027032436d8f43f9f5498d6e40cdd1d7bd24f00c9ec2ea432b560864b81d3fbd67bfd207b542ec8f44d0347166563a054124abe4161762af51647e4e1db049873241d3f6dc5d3a40d10b1b5a8572a2b9c41e5eed66613de84fb263ae830f13fec37ab6fd6e3bd6cb109d4977aba00e7c2fc1dd3b2cb7d19eae547e17b71c9b3159a2dcb3e2b414ef984ae8d859bc6fe539c4d928a73cfe2d444f6a0fc2d82f7f6c438c6dbc6d78b91a54aecbdc07472949547d139e1f6dc34a22ea5448f3b821191807fd0321ce9d68be44e35c6bb9efd3c2f5349494364c5c9e1b62d64847215ca1b69c09c4fed2af24752a088f889f5eaef727f3c06b59f20852c23d9fa3d9a34ef613a131c74cedb25d57c370d7872a331cef35bd979b937d00bf2a77582859f65f5f9c43c718d73a2ab1c0d1e6826dc70fdbe8d581798a8e8338498ef70f477534f575fdb880adc7f092540183422d28d81bbfe884105608c594dfa31823849a76a5e9aafebeecb9a5748c2160066ea3983e599aeb1d05cd6c2516b4681add500bcb18b9dedd5cd3ad5824c2a6730c0f39c03a964c6b07c171794714dd65a961103f616cfa1306f07142495881fea42a18bbae40c2fc592713da4c75cc73f0590eccdc822609ee28ef3471464d47b5ec5a30f13914c1d6405fc5502deae8a5c1f42016c40620f5f1e8c5db40841ccf97bdefd69a3998fff3fae38c4c433d3e7be4b72b3239b483cf36f83c77546778deb86654539b1f2fad8ab511daabed40f84967101f7a43eb8f00d83ffbe3ae58e7a17862ce4fd3028182ae31acc00930e3df46103d06b7dbdbcbd7c72c771dcf522b49fe919e592ae86fb29cdc4d430c8a036d0af52a9630d15e262fc2f49aa65274f41835395da80e1b52ff7974d767d329bed059e7b287469cda4533e32068a2af48e70efd59ca9ca4a6f14b0609064066a1116f8a5583089ed7c2397c2c8edc0db89b9be74a38351a25725eef0869451463b4874df1fe973cb9f9af9cf16b77438d98ddd90febc7d17d1719032d89f06c3e10b8f28944fc66b4df31d9784c2dc620eea8cdc44a6d4a81c2fddb1e6262199fe2122d72f73bf8abe2dabb6a66efb65727372c14d514bd0d8d9c8c53ba469c09f17bc6a6155dbb2b45a94fde0fb93f78475cddca00b5781ea8c7c9b8573dc6e0dba9437ba6f017d52c7bfd7f90e05bd5f840786422f08e83da358238827e95d910565dd0155532f381e4fe55b4164898df5e0309685ca03fc157224fa8808039c7d01af831d32b890df57d11143a1d6b0358f5c0f87148187e71c7ef18bc58d5613699dbea5a789f2a95fddc04ea01a9aefb1341143102640bddb4a22767c1708d819d12d4d444834afc9e91428bf2a79462c949d5df719d4fb35cbbdc71ef1a76611db1d8ddfcd32a0a0d81f06139bc6f01d0df3119c10f9961fb1c1cf37b216282e53c6bda196b28efce79aa39e3c4fac99f457b655daa2213bedc12ef36cb8c6a4df16bb34ec1ec07256c5cd58dda67c2ca9102d689241c72745ac7f38ac099ec5a2a43813084b3e325e072e01d28ee7ac6e9d13b764b3474763583975d71674a051817d93ac1b7c00499e952f502e4b729704e1c10f429c1ec55e7034ebd7732b9b99734544d8b7af1dde4cc8a0c727060356f8db71fafdc16f974b1443b9e311f0ba5b14c36f7fe9d2232c10e7bff03ad090a6f39174705b99aab4f1444150d3d50ee09923035af32ed8e4d995b70ae30e7611b9368c17752d95e1fe9f1e4e6b6267ba3f3fd72b839b977bbe1909fe5beb18e8112d2ea61a5ce59762fbf02297d46489c0c7d7d4c0282a211420cad271d19c130dd766debdc4d0de9ff635add9ac8c4c90c417a17043797765807626b1efa12828f91344383afecc2a77ecc5497118623e7a1d7b703e3ec312375bd59a6c76d10e30bb86927aee1c7227d4054574f89e0f9dbc1a70254b59029f33f4df599907773427287f53d96d300234231cb50def5ba1e6299e36090532a3598ef74c5e06ed4214f576a98393e298b1cd07475740d9afff852a71b629a214956613a9fdc635b8210d0f83c408d45d1a9c3af63b8dffcd40045332fa2626676ae64cd13234cbde727e4480e069854e8c6ae241967e9868d96eab32b1dd2ee0a6d56670914623c20b5d754ea5d0ee485c161e21a5d58f7a944dc9c7b57f180a88d9ac6665a7612f2c82bdadb8f1f929cdbc86e7aef6a5a231b40b53f451b3c270ba24aa4f99f2aeed4c9264512ddfeef610b35f85dcb60732cb93b9f22303ab7fa483dfa1b6bc8810627e7f21c7491a6d78231a56563337d5543bed9614bbf74949a2b60d47a43b4ee803c84cd556f73684beccc5ad29053e070863baa9a2e44aff73391b888dae073b76a5c403773932e6f4f7c33f300af71baa84bfd54dc899af5851ca898c776d0569f8ad6a669506d630cb96e696961ed962bf7e79f48cadcdcf7c374de5f3bfbb73e4e999a97132c2db6083f2a6725effd1d9dc9826bf1121594152d8992036d7d96d4cb2f8e4c22602623066d1aaf40713ec38e82ca3b3319d89cccc232eec9afd3551ebace856c6645a6857895ed431165a569e00a74c4ecff52fe805f32659ccbdba539819e8b19dbf99db0e9c112a9243b55caf2a2f966694db2a1cac84133ec86a3e439096a62342fd981f51e56f7b25515ba6727d15756151435ce096a34bb8e1d3117642ba3775df1b36ae535e043553e6592782c202713eb3dc20459ad398d1f338ce03a5359447f2fab87c9c26599ec4ee95aa59408ae0b07071ab2422454261f62b640b40b7e43c4592e50b85bf2fb424e409a3e32e25155c0f875c4044374308b7c0e64c2b1d751bac8bfb62905fa630441b6aabb39160318afece5cda86da7251f2b0da8745d30faef9cba345c682063dc6b2d7dfd80f0a94e4418fb2c5a6d8d8ec4b00c178a946d8481a88bffbdcb61a42799207434ada3de5940c6a7a91ed2ba5f98cde5234af6e5bf60a5e9aec3bd786ff388eb0013a1ff10133f39ff30ea8407f052ea5380a2c5487489f4619c5cea3aa4672d7ebfa95fa2708393cdd562cc090d87aab0e9fc2cb8254d606c88ee0b5f590d6000f76fb7fa7c786b0ad7b25f0722e0615b5077b2687fc1fed8cf033e84385d4071c89a84eece4485b58ce3d097bea2ea7f9256e8556b2491190383de7f445e247a24e4496aa4c145453007ce20eb277f4c30dc27b4aafffa3c05d62fc9b37ae0cbaceaea17f97cd89844bad0ba5685612991bd0f51f4786a87a76ac5e7385eb870fea99db43edb693b49c454750ac6460d5ccc49b9064a383f25f228006bbf8212118cdd343d89f905ec99090fd3642520608fb2960ce0a8b5595f8906bf1ec240ef1653dd2a2bf0cf6c11c870b59beee48c2f68b4822913e1c03d347ae4b1767b16c8dd544d200baa5ebc9acf127bbd2617b3091cd6ecab4824c5c1a054c59a3d2324e1f85f39cc06a22f380e26d9e4f4cfa4f03d0b73099f293f0d412ea07741668272c34f6db2d3edc8556521e1d1bab15fb5ff3bc5238d2421fc47a63f7668cc14f80d097fed645e421733d348109c8846417095de717b090939472f50c6e5d2e11bce322cbb05afa90144070290543162f51972fde364f5fd01720834aa29fa71b2109bf068fcced031805cfd749d66b3fc4a6f1e989cefb5f50f45c2870e590ad005d164f40a12c5571a74adeedbad06207f007e0741969a77823149e8defb5672615b71c4182d3557fb1812badb93aafa58f4229d4547a5641f61a17871c32e1f120e05fbdef72623427693840e2858036d0c7ccb797598fce6815dc52787b20a6fa9cee06864962ae73e37e43645731e377a312a52fe0df6f2a8320110c54479504f9723000b7f701e795d05e3716e35655ed09dc342cfd86a4c967286ce2748b82b8ea4d3e47cd45c444ac4e5e7fcdf0e5094a657792578de20f7769ca35dad36dc6f469f995ddd2325604f692a0305a264af87993ccf13601a8951cc007dad9e8c7027949960c0afcedf498f4492c2e71ca93ebcaff904d982f49da9ac8f34aebc1080ecd27cb208ada74b79d9f5ed0e3e217fae6e273c57d1a2e0eb9f9a1367cece29913e1a1111323fe96e2af8450fc90a6a11aa3fc670d26c2ea853f0140b78bfd78b282405ff6aa63d987e142827390607aa78a9858e04d6cf5f78708cc84a2f8b46af4830e2776933fe4474b7e33de05ed52dd61885bc483c8920e5d23b6561a51b16080aba1873cdd4ce2d48447ccf6ef0027db26baa4a2af29aa057c7d62715084b6170070167197c188bed84098d7b9f1876e3585d139e928c051cec647c8101720f968fc2c54f782f1f54b51a1c7ee6c36d55ddc5e13dfb3ba5aa8ac3bd61ba14fb2ca639f29e234165e9e96417526af2e70dc6e570b8e6717a92e02847975bb809520810fa526010630df7eece1f72db7d0212cda7851eb97c14d56bd34299180c7ecd62e5a8855eb2aa669244101c6af089b795621bfc5b6b7fbc8d1b0f1dbec5bf06a8f66ae2a5a1ff263c46a01e44f08fc20bf78817d0c891e7886802cbdc06659ffc14b8a11e83cf514be45540451872ff02aa875632a32c3a2b138308ab67f1b92ba3afaaad01091cf878cfcbd9bdf6e019d24aa8aa4b547a238b105837f871c46a110e4c577f0337a5ba6f66c57aac751c13dc0af8c982fbf59c001cd5ca7864acac8c12a509bc6765b5110646e6ee8521d1cc0cd7261f11987154ee93a5a7830317d52e9e03c9595faca9b27469e2e5e0d37e2ad4ce6223e9e0cd26deaf813d15c7bc6d6c0377abe823e34bb5f372f7473bc2338c206d7422741c4ee6e3155cc22497ce7b6600882b9dd80ffa55476ff450600671b407601424686b3e1f3b91669130e8a82d89711de6e9ec149907cabcbcf2d0a9606e3a2b54b3c44ed762deaba7df78cc17535b2140f9e5bedba04215c98bc1bf84d066abaa9807acce0a6edf000b14ee65ca3bbeb0dc98d29d548989139e82a6d718cddb5a89c321ffe95c829affbd0a77fbe8ddbb93ff322f8945ce42a7064e20547e65b7a7f0be261cae8650502758f9b1e07e812bc8c300168b0e1b749597e5d75b1df8f77323b643de2befa29271032d32bc19004a3b19bdef3aea7caf2ce192cac956ad74a01a8a8c4d72b3cc8405fdca06910db2b57fc2b6cb987549beabcef47a05b838701d6b50cda2f93fa9e9b334cd7bffc4fd9ba3d7d2c9eeceffcc61e4a8c27ee8633c0b239740f41b33b614fb9f4bb32889c304f3010fddde6851531c88cc82f6fde69a894530bf49b085b4add379feb61078a15487a46b4c70436b57749ee7b4853ba3246d72ea8492e0cf2cde37866fd41a0f6e39b1330dec3ad3a2e279a5aa9311a0b14fb7efe47303353947ed305d093419d321c05e4406ca3b641a16efcedeee5cd884dd9ed18f19e83205989ab891b93c28503df51f65b2ff7baf5c27b1ff6a40b73df060dec31058204e61e028f6801fb2350d4ede6ffdd0bb17f90b1d14d4abc373f523d9578d4d254bdf8583e76e5c5c6525d5c6712f9e83ea3c866617482717ee1d96a51777c4b08c5e5934d59e704f146714881c2c12e300cba798ed7c83f896bb68fed256a5d5e46b206b36039f88b0603e7d29734128e4eab696a459607548bfdbe6fc48887f55beab952f65133d1e44ad4382a2129c66c014fd0b5ee83f96e908de270f33cd5ad3f3d6c415fccf5a99b282b64387478ba30ed1b1772de012a8b94bf38e03213647b6b616671d6d3eaa1ebe2715d2676d00866499a4b47aa300cc8d9a8404f10d6e8db5d9798642de347d549295d5e8c5138476e123d26a5359780ff414efdf834e386f7207bc6d1753a8a6938f20cc70795e1b83688e1c4dce1f5090f7d334b5909284432f3bf0c110d8df758653b833ef82e879b508f2a269c2b71e042b13795045dbbbe61616a57c4ea2fc20fe1fa6d2cfef6b0d2ca0b033af0d091ab2c32192b35fbfe6dc9b43c73f08ec94d195c6424c6439d8565127743e98afb571d69924f37d621710ebabd87b1c99b5ecd7c5da5a1c5f5a1aa572f8c961f81565f6a6736c6851ff420b4c468242e67f288b7e57018285641b82987f6fb0da459db0f8d662e9efb02eb6d4ebd7f8b0be8295983320b6eb0dd0e894f2c3822aa0ee33b8d0afad090b30c97aa41fdbe49b861ebc34bfd3216f10ca07dfeca0d411b0069f1295370cfa5dc6e0d93bf7a7ae2c168bb62cdef94f69925ce5121e816d69f0f797458ce7b0c7d5714b7249f27c6a816311db978413fc76a0e59a7d7b5b81d851f0a5d4351c207937195c2dcbfe8a7d5168f56c955647ec8706d2278b1e05305026a9892503814af817e0e03d47406c19b19196d7323f29c7e343b404047185c5315168b8abd3afbe91680d84770021a8e27984a848b8b82717586a0e1ef4b6904b82d0b21dbf06a858a24eef589d2d0512e6eba2dfa95e5cfa3f75275d3ebc9c01d6fc39bac140be6a9c54e44ef6c8976e5d0fe8be88c8979a942507d203e53eb16939604b588cc59bbaa714349c4dd73f0581686cd39f09e1f83cba7bb67fbca6e63add643c10e04f767b963cceace69fb36ca12f7963e0dfda85c3426dc1777566748b347e2376ae83267af3e063bb0594d16537a53a05aa4ffc63f7182eabd8b7d2c912e161c7dab1ca3af4ceba479d7154e8a351f2445122c877284458a55e5fc7e25193f6c6917ca6f83bad84dd4086110e6cd5c103678b742c1c7c66f8c2b032861e577afb937730ddc9d416712b6e2f8be3ed7b7a826849acb41de64056ccbc8a6ef40c809fdc3fbc477fee6c029df6196eb3afa67d20c232a94102e3eee1f3faeaf7a3555e9ec4679bf9c8baa3f612ffd15c9cc7d7a5a4d56ec6af55b5fd2f19b1d5530c0945643e633703e73800757d32f98306ede3a42bf896ca2d73b32ed56c12d903b4c9fbb16735309add08998e58265a9ad0b06193573525cc60901dd4d7d18b603c8c6cdc34db03f81344b1aebea3090d5d41e654479b6893f596732b396e33f36c89bceffbd6b37f9d173e8cfdc7b63b1e9dc33f9ddcecec8a79e7a0430206a7927e1cdede854c9b4cb3bfb30651dbf0b0e120d02e9ce7436dca41287bcb009158905f28b126bc6540a1869cbb241a8c28e028ed177fddc2f1f316e40fc2ed31910ec5aaaf3a050b6cd36ed41f0ce751d653d900694998546e7693de576240f226f2456623e03a38c17907ab69ba8c4382608efb48e2008f02d380808ad211e41ebfa27f61373003be9ddb79bc5a45bdc37cf453b07810d6c5bf538d9cab97607731bd075f351edb0ec4e660f0eccb7bfe8ba9b8be5946eabe335a89e0b9b7b4b6d2e2f63858bf28e2de16c1bc1675e2a1484c81b3c4f284a3f1704186f46f77209597fdf6a13ea115f02b39172ee4c5e987e6d6d481bafb1bdfb2bdcdd9d3924818348011aa38ab12b6c8bd20b7b54a88ea55d4c52fae69bf892fab00eaaf549785212fd512d43fa5a3c1f1a390682e361110e2b97218e48086a410e50df686cc15e472847de8236e87c34d8e0556eeb4ffa3ff5b1013f6e8ac65b768e494f6b7e6521d236313d756c49e75f715bc657f6cba89a56829bb5cb18d1a0121807a0056098b0fc23da7f48720de561541770588eeeea69d93235c59873a6ec1d24b8e0332329617d3eb1cff9ca9a8cddf2ceeb8081b13213094ebca9a97ba86ef769f06dcfc69fb5f548f2a281ec56dd5aa063049b2f21cecc7fda13cc9407915f64349c4c5a7786b47ef8051ac70b09f12f648a7405961a9b4285080ce228fb45bce69deecf7d81ddbf2431b6df465c3b2515f0a214470f11180dfd18c2109ac23fee2e25a8bc7a968b1363def0131de9b3f4ac790703ba78da1ba0c6c640a605e056390b369cd2d1d73ab2c5b6d5d03520e6d6d71687bbd09ff03d98b06be77b3218c4819e76075a16f85653a76e92b3d215a68a7b7120819f641c7092dae6993682b01df9c4c87ba5c6a67b49d0bc7d404d286bf057824b1be7366ede2ce9a78e7ddeea516a86d133b124552a7664d2b63e81dc3e1c2516abf7a9e96c374825a5ba255c058436d46aff08d18203aabc247c74d67de39f265f4abc90b39a64cbd12ea96ca638df92206b71a38186f2166cda39de24a34945459f92329556fadf23bea1a6cc5de8d9c827989bbffd650bc4cdcc372283a1f45e94bf3674765dcc3e66c70555ddf7074100d73531c8090e70d94bf898a1d5a41073520249e89e04e307e58e51c3d30f316bf98a1bf4bb2ee8968de656251c14a592a4ba86daa9a2c7273acbf8e024de6dcb84f0e018342d778edbf933d6eb10e9aa900c64f005e14f31c7db7f75076a29cbe390bb20c4aafdfff66752658ae647edf0d9857fb567ae38e31935da38459e468e44cc42e71c154e94e743cd1b87a71148d70264702882a8f7c466891da32a908325a1c564732df9668c64cad1ef37d7cf558aa6b36bcb3c9bccadcd8d55331a5e9a8687167e4fb471b24cdd59dab553d60d50cae040680933812b2928b1d6388757b01f569b678dcf987b4803db2100e97d380417a74722d82ff267599d158d4913505cca105675f8948ac42964defb9414d95f7af6cc2a6527de0b5f33e005d10a29eb8346933eb697640c867c59d9d05da4933726f8d75aa2566d56cd722947a76a0228c1a2228c14b3101a0320f7b761fc028fae15222775b6d1c10bf74ee9be773d5d00e330c5338222eaa66d45b82ea4fa8e8afc2112715ec3aeefc2ceb59d8f71e5bad85060540f095e2915ea2a8a2e426807e1cbb7ac894029651e98744b18e9f62f7d5e768214123166c14538361121e37ef2a0d58c87c674d2128a4e162dbaf3810b16a2247343192d7ad604d0b43f51859cc3ad4ce491d85f7d01a4277895847b56192983c120c6e48d0fda8be49abaafa15ab9dfc32ebc04fb15920c69b3813391ec89a0d151a09b1273fe85d5127c861165e5af82882159abec24c37c889c01361527cc6c540dd310d04a15f40148c86492d68f98719ac2c5887c34d1592758ecd60020ccba644b8a3b7af4785a9140e715021a0aca38e4e4b06f2121c1cab83e43fed702cdc0b5920b6999fa85d93cf394a4bbff049afb9d0e082cc2400dce5b2cccd8f0f8f701182d9b47a27d3baecede3de4cbe460881ac4811d0effc1ffb5cc2ab9347b01e2e3eb93782343665680f5b4ef1c1f7d100a55982b7af29086a3e8c8759c6a4d39d379774ddcbdb13dc1670b17d2a902d1a6f90b9c36b2456d9e83e7bffe049b5bc34033ccc383cb362d23726ffe9fb7977205c6b5d6b7c86642a7c161985cd83834f97a3af289756db36c089666d5b8936fe3e09130e2c0d44079305469323a58750a9abe1c507508a4499cacd876f039bd09720961565ce4b54ccc7cbaa927319d806c11ff2125407fa459d1258c6c216c6530b745f90c80e9991c8ee92d28bbb227a9e7a75448d56fae3608ceaf712a887ba4970116e3a0e27ac7c07d9f85140364ca8f3427774d19159c4e687a67d4512a7f5491b781ccd0c4c3416bbe5156852f33a435d02cccb2202a3e9c69a46f60d97704dfe4f018eba91bc086ed992fbb958827c882a60fb19d20354c6d790db33e4c770b8201b29eb41966661a42d13f94056d65805f157c1eef6f88b87940d1ac90e6c6acae7ae7f447d8e2547e23fec440dfb9f9ac60efda6a841890af9d65f488a412070e222365944d68206126c9424e18f81bf591ab3349eb7c14e319f908973c09aeb1f87582cc07b97f3c6392fa230168766118adbba6c6630c4a722e9c68524c6d76d24835f213b6e21c9bbdcaa5de6c6cad0563c017b6b3442e9a0f42ad226b0823c08a12e30569ca883e81e5ebbae57801078779ee79cb283536b86c4dae027e05b090dbd51669b19a395d386fdd14a021739dea51414cd5a4b6eab57a7c57a05c557c5fa8c07d77cb3da3332688b2a249915327b4f5bbf545d5df79d0b492307ddc466de422dfb4c35cce60859ce39b45cab67d712ea7a39d69469e5f49fc2557056bda4353dbb144e9b84b9f332d1f81e0c06efb2102d5a2d8298497b0f175caed6f2534f3ccb046a1769c1c39b2132c327000d8c32e03d19346d2f22117cd75bb819f08d1e59c46c61b3b48d149ee73a102eba32c547236ef5c990e444f8fd9221e3afdab01e2900bda00b07144429e48d5c4a2c8717640bfdcb28dee853e00c122d14fb19cafd61e04e9738b84f9c36952e03e265309cf38d8aee433b30d34d57694153e83e1be820205395077854665c9e1650f268a5138ec2489a8554423bcb9f59338d529349e91f266ccddb2ac2c12b17f2c56a62e01451a0362ada4dfda285394b674156f273500599c7eae452cfe8fa669c2645f36e6d08ca81a5da23fe4b40bc511fe3bd20dc9392d757ca25925da19f81b84180602ccad50274a6764a4250334c1a72dbcffe593ac1511b416c69f48bb447ff23f641a017461e9f24221a08a88aa9f4f826d8a60fe0254d90df746f8947d59d50bdb20f1087f7bbd68f52311bb456cc9d54112b2ed9f86d33e16935111e1ee04d1b0d4970934105c0a98ae2e406250190fe200dc1ace5cb9f86ac37722910c7818f55d01fe2b8311059233747fc6db369343c0fc636d12574f067f150fd54b80bac2f4a418091b61474216cbb4d60ca8b89696e06c5d4da8f049c3e8eb25be03e6e6a3c65ef2b8e63c9bce0318144f8ed5660e37811a641ce64eabc54c90a3e1b9d14c37004fbc047b6ac45bf3ce0685d5791ebfce0d1a1e324d3fe9998028283c402d433a434a6286c532acfa3e3aaa42c3fd3b4913f8cd726c40aa0f2c8d2ba5644a6cfe51a5f48ddfffe0e70d47e10406ce63d7d84cc6f015fa352e2d39f974e55726a749b6b9963b890718475499fb1fd048428c292267ab0ba9756e8423cc560ca246bb2710b612b0d3c70a04fcc32616911d97f9e7d717eae6c60b8e615a5babcb183eb28437d509650346a41756210517ac5a18da1e0c684fcfb201d62961df9c31cd54cf42654c9b8663d223088345de08173ecbfad50fd249a266e143f9e966048afd847d50091d12bfc4904b29ce087735f3bc9c570d166c55f9132040e6d0fa49f1f4b1820be82f67f4c4b91ab57423ce0a1adb945dc8a15e4093003a1064dd7d7493e278dfb8d5a09dc318a0f9b49a1b3928c8eff0a547e619fbedad0874c4a3b67504e202c5ffdd2df30f7c3c033b12819b7915dbb78a15515eea9e65a048ace0b8aa8f8a9be55c33e571f2b4dba2e7feb1e502774af0b314f48eb87c010171baa65610dd8e6d2d2fbbd9581b8f3646507c231511e0a718e0d6c3541b4020ba0efd39314a70cd18b436ae89325cc5da695f57f0ae6a8a208a1ebdd2dbc7b20847092f9dd2a40756b1b4cd2c8687f58fc973dedfcbb01c6e63761eaaae98351c05066763d6d7a088350e26c1bb9e1882766e53d23e0e83189ed35be0a0f205aa4d6c7d2dadd10d533a13f4979a77e370e636deb12b85e0f3ef3f7b0822b708b06d6e5dcdfb1b08e676618f8eed7a7f102fa9b4ffc5614cb4faf70281dcaa160829bcd214694858ecab784f5e9abe4d73a92a056026318b949813f019666acb3e06d27f114362b401346a331eb58081160e41d4e7fc6688d7200499ecedc4563c0964f4f83c52f1e2b5f53b2110c28c62963d7dd943f434042cebcd060cfc15a90219e992cd2eea4fc16a8ef165a240662a74b30a77156fae464b571340846eaa5f7840ba989e0b69d1b2d0235da366a9da09802259546512db8f8da629d15725cb63d62d6f8b23af307f2535f2486bc13783016b65ca59e02b60499d0acc7bc9b54696bdeeb8c187bea576d15a676a7dc2fd7459a8b8f90bb68d51f69a3c2b63b3e2094270fc67844b4e0a62e776b10708e1737dc1dcaebff38d44c88cda89dabe0f832be2da070e252384b3dad5cff9150a398399ef991f7c767cf3c8909ba49125c363ce5d4bf1b5ab42d9d89953ba1df15d35154e85b0d210efa651100e7c168a5304f8c621e41d25fbf0bdb05f5c2f944a0095173dc941241219736e37742c7ba5d2a32fb0df4be2f50956e8fcc275c251c9da96ad15583f704dd07037a7a88580e6c7795fad862b3f7b1350d8ae4c5b6e62ea26b723180251fcb5a9a7c4bbb08dabf9bb447553b6b05603da43dea16bc2f85637f1f103397246ca501aac4268f70234382b20e808056289b5cf0ef7453529b96d4fceecc42bd134340f9e8094eb464c8f51eca2e914282ebda9b56bab0fb56e9e582446068d018bd173754fe502897c75285c8e4c7f1af583c673a4e38df237911186fc5a98adedab78cf09b50024375c83c285e997ba2f7a39d29da09a969c2bc9f9aa48ee41c54cbef7e318829a770f08d16afa87c48a1efb2b534534c0337a25fe72bec9423eec2bcffebe207a4f0712f56497b59d6bb03925270d90d143b459d1976f721be6af77e27fdb780599cabe126d207c28ad02ddb16abc91378925d443d2ee5defd82fd59c459131be3ed93ba72a8bb8104fe09c76b49df80353c3c0e9d5486b13d4e5968f80672570941df1ef14dfbc0b366c7cd9c350181140d116dae68bee4a5eb578caefedf3679a4210be55a0dd71cad1446ef9c34b447c252e925c2933e2d11d562277cc820d9a3e5554bee5acf3b0172a8871a3ca0f09166136fa6f9409ca417607c2b6c6aaba5d082eb1390fe812e19778e8bd6d5056988731b8547689fdd620e64de0b2e2800647a39786fda74c7beb9136c6e16ffeaa1ce3db10079ffc40a13a2b83f81af7b51215d1e003a1d85541634db6f58e2af09a28e18d714b85871c38fb6b27c1f0ef410aa0fbd41482ae07061b1eb59c2aea724166c56f350002e1b222881ec868c416191fcf060e7750b9392e9055246c23c4b5a7894c6ea2e2812a3121e8b0f7fb67e0bc8e83a41f4091b02f06ca0f120a1ab87fe9806b3420f42cb37e4574c714ec80d745efd17df4437b68edf498f7281a81019b3c64a5bce57559bb55abbbeb2f2b7ac5c38e69421f3ba4fe85dc071a43b9af13c3a3f3ef3f12f6b7f4f87d1e160ab91c300a344fd64b466ccc1c143a566e901ff151822013382400cb42714f33817fb7fa09c4edf0cea67a814804f40c913b5d5eac6692e1dda720db623bcd1a72c39643be9e635569533fda9c0d04315af74c3ea7073a6d4a93053eaa1a0f8e5a258445aaa40ddc562ec46cc2a9d89752feeff8034bd3c00b784b070213f1120309cfc9f161bede0d2629c48bd01b89605e83c7d348c8941411a29b837f1642e7195680944eec0472507886e33eefad5b57d7085aa66b2080c84a792d275a0b8b0f51c872d53d76942a441c78e3c82ab71b8b6197858f070c520ff809c3ea0fb1244df9c77f5faa03b78f6264cc2a2da0e87c9a81d380114ac7bcca78eedb8f0f45ffb85daf8dfec63ae6f87caff42f64818c8fe173ce104ed49d13c1d0aa38e7d1e86abcdfe8db0cbd4d029cf709882fd08fabf4474ee814e4d14c56c66f05e7eb5d10720b154b9c7feb18c6cc6352e24d7014739c9b610c22980e459fc1fe5f9f430a62e9e83a4d4b693f901ca40b56e7c030ccaa156070716a3a8bfd270cf5c7a13b1bfde888a7447485bed8e90721038a71cc125cba13e65d46d898bc41a0e1fe263e1b0c35790ef7fab62aefce8d37abe00081175f83ec4d8899ccb59514a93c0ae93db491af97c6a90071267d75b07da4cb3c24935f8bc03248f926d0e2015bc8bc2c76b5080d9ecd517650afaac477f1f08107c39012e1a375592997cded6288310cf5f8de4887a9fcf7c5ace1a2012c8c5fce8500fe7c8801ea875e0692b4352d40952e66edd1042700cc477b0031f82dd8c7ad610863db1663b4ba173ccc576194277d4a81b9dbd8e66e106dba15704d2508419c42ee643b97c7939597451b9470a67b5664a2bc14e5fb5af3ecbea7c498c96522c30cd8d46f0ee7a200ae86fa6ad2e6f04cbe4a9d2758c9881ad63efa53ed232d8f4b5ae14c007221a56fb3d9218c2560928149b1cea1e4e85ae22c039c5230e10dca5054f0ef7dca01f0675bbf24d9909c83f215ec38e0a912d03b07ed36585853e48087e828ed383393ae31a5d7aa0bbcc109875232adc2d999d7b716fc393760f00c3300420758abafba1619f4ea6a80fa4434de7420682deab680c3071f586c4e3263363ca56e509523ac270d24f03718a789dbc369913f2f9359c31547df8995f9da7e10ede4f25eb1368de74a61b125c8798c3d47fc112f62e56e3037fbe451cc08b1dbd3542295e0294080281578027f28d2004425d61ba224d1e779b47073bf76045251c8fbe19745b735de37f449de8ef04004c327951824df1dad9fba5f2442d2580333186192a409c05af2a75d651dd3c904cc46329577f7fd1084880577276162d0cf39e3ba5f09d47897028e7cd59bdf35603f2c50dfa930c4be7c17cc8887966743f9a9b0b32ac1315c4e3ac99b0e89b82139cc77732048f883c1d28ab87ff2cffd4bf7cfd0a8c066ec5d4f34c72bc2ed755b140b91b2c71236a1a77b96c07ca9b7d99269987c54bb7cf3c1bf376f6068d8974a1c330944004c255763889e08346b48f8cbdfc31c6bcf1b414e63b6881e112e5b2e4dbe326f28efe510839f5934fce72286d451469f0d74556084541a730d354ce08edca47adcc863ea3a9268a6bf2870ce46cd9778c9caba1695190ddc55f903f7d6a1c4462b2f2dfd2c8503715c2e7ffcdfe656e2b8c271b0d02b093771dfe5e84e061459dfcf44c30782864b310388ade8930c75e7b741eda75fc50f403d78118202dec35ea4b8fcb83c3b0dee06d0743e297fed9725dfa1f2e6309f258ffee1d3241b60ebdaa5c83de84cdc5b2237c282c0320d1a89b7b1093a851f8396241c29e1278197ef74ce4dc82a4a4f278b718981337130f97001327c12dce6bb4f2b4bb96a0fe625e85fcf3509a724a78224162e82da283eca8696cb909b43b580f30f49d86632dd4ad12bf6fa24d0438a1b1ab37c2aca44fe9520d1fc58df015ad476633bd9e3772b47028d5b8f1aeb478b9f59093571c0488a6fe6f5b8e3f2f203d5afc0f3e9be3ab8029c2088db42b40942af03afc7796ca48d9d0a58bb114901f6bbba86d2e91d9d5171a832f5fbb5412ae0d4d2b22a8f9e00e1dcb978eee061e021011c3a5629186a37e6633e0934b524d63fe6a8b24ae096c087453a8cc47e19186d0f4f3e4e8e529112ba8cac643a76de6ec4350e2ee1c5a5c11e24b753ef2507a15147308bff4ad985cc86daecde0551cd2f4d51a173fbaaec44f09e29bd6b8ecda664df73c7700193b7a001132b239edfe5ea0f23b908a7761427327dc40b5fed9fc36ef89c10f5ed173ac46329b172442612685e44858ef41900683497a3ddcaf4b4507ef2d5e929eaf7ba0ac41b02fb4509415f3834556efd86b8fb7d238ffa9384e1c6ca3474e1f62e85e47a59bd16bb2be4629d5ee1c630b19db0c5af57fdbb7ec6f2cf5c4e5d2a7a77d848c2f04a866602f1bbcb623c43026d7d387c2ec9bbd25ce01287d64438aa625b7b755b55287b6352eb587e8adce890a98ddb6cfd52d1f7bb79f934dd792cdc4ec0b8ed521e3242fa3bf177eec19ba726fb5b03dc7da73c20d4df48766027771533ad1b7b629e867686bb42b5c14dcf80eb348b3851e5cda16805fda4d007a1d24cec9af1e8f1ee36017cc1ec799c0d746739a14cd9e5ca578004fc11993ff8dbf09914eae44d38a5a01a180e3699bbd22f9f92cdda9920c0fbc4b745cdf9c073581a886086da941a2691d753b1b78c1270dceafc55f4a5afd329469bca2f8f39ac3e808b06f29f5dfd718afafaed0b3d55f49d752f00df575bed44b33173c9d7b6bbecff055f8b2a80453133c7dd1f37a7f5ff3e85f85c6094d18a5f85bb6166eeca1aa782ade0a249e646339cb141e73c74a90a059763301a0b7938483755d05192aee56f9ecac1f3bd971e3349bac81189e88918335067f44946da46477994f29ce69ab03dd3c1a7d2e130f8541def5afa651ceea81d4509b1ab84f26692f06004a96a1c0f1429d46dfe03a0079b52198968982ba6a9006a92fc1301bc86924ee93ff7bc92eac22e0db01213a6a1a1b223f0407a9ad7ca46c708b3b9ebd399bff9e957b00d3af153c2a194e0ac937791b81655e5b1b2b396d1ef575490242bc5fa4ba64929b0d0297fdc1e649a241bcc9a6e87837e37e51d5f1347cb62b0377bc7ad259811c6c2627e09ebca401de8d44e0bdb99425033f1424378e717a767804f07d6e6a8e03a7dafaee0961d9ebad12df358bec41f86be51788979e0dcbc07b2a15afcc2c76518710c5ac6fb92d79c912727dbc56683a0fda7ae3ef17300a23fa571d0ab2400c926d0a35942853471f297c71c9cc1e6941b16166cb584c33c421dd227a0203d5df6138578249047ee61b564184a3a7fc264a77552109e6932279b591853a72e2bf1812876eab07f3c2e914d54acd59340227a5797ef3d893623ff719e57d989562af055bb269882cd2c29c875657e0d3e22b7b864d7e3fef4a0073100831fc40b1ea6f379f3c3a6443d7c5fdf8eff353ee6a6adde63371f47dbd708689c517bbf83da7df2aead79e621701d4afba860254795355a617800880cf7d62811424225e4dae244a2db744fe317ca3705c719907d9fc8fcc77a0892ea96ced08461ceac49ed32066e07f0642a5279982729072f83c04e151f803a47eb79e9012d6b7ace26918233923963326c42d82edfac863cd39310255750c945072915608692cede974a7f9e7eb1b58ec8ea16bb4974bb5c2cfee7aa69839ce70e6601cf51f2239754279ff70d2fe8fa127b502ef23fdb415d71733e03ab744831713e2e48c1614c7f6cb3b1a7bf32587f9ca9aa84e858a7e9484daffa595be13937f691f483c8e3c336ce72bcdcb858a484f40911e8be9a922295aa85eaaecc04e49aba47c934a048198a1779e5fb44670d9145625ccdd86dea155886f27ec05104ed68265282975ece522657917c06bc452b7923cb203629fd5236664e2c05fe9751339184d5116d858e0c79c3d0a69dede19358e9093427365f8670a0ab99d9b73a00ffd2f4611196f51917fd7fe904e49c97e643ea867ca4c4c934f4d1e51748d742f81b3d70a3b7a2ed60eddf3ab45a2ecb81fdd7068b8d18acb7b55b4d406444debac6fa89c6b23368c72a3fecc173dc8100dfefcfea8be3996a6adcba2d3337b4de4e8656280862c2763d840a079731b13aac614b18e49843a736da236a7697b6fd4b8025091f56ecf898c1a9a3167a96a9209cad9110b8a0c953cf8426fb208b542f41ce7ff9430eab5db88df2ee86acaaa6013bb30e178f8c3a574cf741db2dfde8ca800d6130c4bd41ff30b3fcda0699755a68c84a964768d9c34412cef036a633ec301bfa9fbe01074f94e6aee545cbd98cdef25bd491d02b124a6dbdff1c8809ae1c6c7c51183ee9bd50f092d6562ebcd6d01551609aae8ec6d5df362e6f269426f6469c6e33a525810f02310a75ab384b6391c8b86544f3f7057b1a7c335b96291d2e362b2c2e14d6399fe976bb74e7959383249cad34fc7b741d27fc5e7c97f82a8b4ea25983ea2400e4924a34b46c31f1fc9638ee60168625814121d9825fdd5c59ec314cbc0df383942cb1954bcd8f5a9a798905fe6d0036800f67e85509ab42a8c696b0d82ae341721684ab467c731ef335b9132c11228f26bacb29d8d8122ed22b8b5d16fd615cea41eb40081d9661baa058ebea09f7669415eaade94a464f32932fa6470645f4e45de539249eff61f8f70979f576135e20680bbb2f9fc3356673a9f9af23897ce47dd012a4afcad6b28b5e1b50173c04e477b1115c34161220a226b56143190ce55a231c41b48c91900220868aea9919872674da0a8ec7b3b6f9e3a3283bc3195fba96e26594284614f8cafa055cb37f4d9501c6697314f31a8450821b253704aa7b8e67ebe0100b334ea1d71987227928a8e6150353ccad113a8f85ed9022b62f1db2817e0b069fca8308ef989b9173a318a659c19761fdaa52e9e4ca4ab0e456ccbd760612ea81b61ba8ab2f8c3b4a3c395d0f0eb97bb087118c40d551662edb7a08ff1cd886e8517720a85d7f3cb3b5b0a1038a585a157e3798d08bd87a8fe793ee0c986a81bf0360e362e4130e566c7d82894f4a568b2ce320324aa4a1b9e9bf604cf864424c3272345118a01251e633dcef2a85ad7ca7430acdede7d6aac854b688013c0ab5095273d08ebc5a2ef1b464be55c71ac8a20c01f7d16a7cae3d8fb97e0494a62d41c55cc8da6e81bfcdbf83b06f1706804af0f689cae32cd279ee6c1090dc6379dfe903df4003586da86c21893968aabad800a8eb048d9cca7095bcd589e59ab575820fad2508130121f6107e4773d0d2196ad1f2e3ddc9507c2dcddb45b47c34d3964fc3c81810afc5fba4cf23413e043d99c1a3017070438d8a9c7654929e723c7a34001159534861dd423de6a4e2dd5c3a4204e0adea97019156b698e39936faafc9c09279aff1dbe630b40b9da76c298a1b664a8687d3ead85ade1c6b8edee66d5d78525d6e1c13c66e889c600a8ddf7f4587797f9a866730b4fd2db2850e94f52836b8a925c681700d58c47e640a726b724746ab09f7328cb64494568bc54d15287bd5200381bcbcd98ade15a81ede63240247953bbbafcdabf7f6c6e903fbe178a2f305fbb261ab8144bd9525cce6b0baf08ae33c0b7184996e5ecad838442ec90315fa9c6142d1ab0919077a61716c59ddb0560bf3d20395efa771d7cfe185cce6f4eb93c716c81e6dc8b8d0cc49c0f09dfd528fb5cf631c63b4ff5a0998b96ab97d0303adc85f10046dae5873a300c63c5ea71368690800b8226c1d9158ac86789723709b79ac67e85fc720559f9e9a3e3e525831d4a09bddd34a6f356e54c0933a5f40eef2da3e164e1017518746514a0d42c70e33c4529dafe9fe548e6cf52b9e8a0aba1ee3c9b0c64be9ffe962d27eb3d50838152c05ff04a0b1cde7b727f8f590278080a6e17123449f413754b51af1032557723a892cc3526f0bb17e59715da7bf8cc82f19868e4bcdaa746986e32fc329e0b621a6e57d3829ce4dad7e86e1ea8afc5aa5bd9d03952286c7a26f11b46b4eb24c2cdf2b6b9feda56a2f5656349674a863dcced59845714a94f60e09a30a99b0d01d110af59dcb86c67d69efa9bd7d556eb9c2d7271c992dc0fad8fd5848da3f5b0c1ac59e706079399db3f1e3f8c81dd3835cf0fbd26e98848256bf399e295a0434c7875ba4e03900954c5b8f1d81d2fa2991305500fbd95a34b28567c17d46aa0ec374063743101034fbd0bd33e9ee60c05f8e7087b57fb556d0d2ec92716319beb4e89a4a133bf211f89282a482326fbee67b6ac6a121b8d96b971978f22a6cdba004175562c7a4dd64a26b343dd4eeb27e5f578292b34df665c7e7f1653fcbcd21aa84059edc908760b7246e2e92281b16eb1d79b464127c620992488a2242ca0bc3c571bc08b78d8df9c699c7d908953e14306b4aff00e40a8a0728cd6da60487d83a498590ccd6ff03500b09784f29aa7a0ed1d7356f14218ced1e2cecabd6403aae219aa31d57910f039800ebcb4e25baf54e7ea38ade29df48d1ee69f2211330d94d694aaf79bc8c82540c1d2456ae7d929a19cfa7170d956cad06a8fa7c6a4ef3e8f35cd6e16b163031bdd0e091fb7561969e7ba1c94f821ff1fca3aa661a813c49ab4c691b515be282dfb6a40d9e934bfd6673d7e6a0f32b4446c6ff768b9ae1a06049f0fcc94587572d30bc6a9b0e0301dadc28ce289cf13dd561f391f23d2c3b3b679a0bfb8c7efb5eb0d490395a4144d731be6451386e73c13a59dd4f3f470cf870ccc7fb4ec3fb417bb4707646019932dbf12a129c08a7eac548ed8729a717425f092904d94efd4fc5662a82b321f826c671ae7b4c29fd9734b5cb33eaa9d85e50d5404aaae5dd70dda7112dba193dff00cc9d2d43c3b12784a14c9850c3462db6617467948bab0175606b4d675f909c9b6348b6016ed430febdfb88a630fd12b870654bd2d5d513c34ec54355ac5ec38cc79b3e82a7161aff441f919876a9bb09e2ae1aaa03a13cecb39d487f04125e60107ef2d118452abce8194ff67139c1dd1c36d416d04984a1ade57524c1bca37fce364fbb64d41a15e305abd7d55c0a488f4e07927d7e7f90ad0d5c8408834695ab6f04177755153ab200f987922746a8c84389e681fc59674b6f507e6ba13b1ccd981f070a332529391d3845852bad811f899c5f08334c7f4c8f9be441619def57087ee11178abdf8138af6aeb2d0bebe95ae20119f778884e3bbf4bc5e81150ea1f0098b1cfcb2a48e265399246dcd099e207b00c88a2f3b6ea36f03818d0b9b281d5d157350b03ced304046e7f97d17b3b20307a54fff9e38edafb2bc7c47a19c90d6d6d900d135d91454e0c7fea4138158b9d368fc57d2fc0a621ca66489d866160cceb5a932055f869906725597a883ee929ff0951142c64237f04d7a1cf31002a7021b02c83e6a949deb96de7e312e98062617e4f2648ce2cfaae73c92fc828105eb081426d306b3df0faefa8d577c2783d3cbfebf4538ea82724b14074dfa25cdc0df87058c07e260489e9afcd47c43d769e790cb8cd7968006c0426d8aa8da745cf89b7d2801412e863b5d15853000252057d12386f0c19ef6378d8ade56a084058450c873b4a8be8c4f90dcc6b47ecff7352c401eda20e783bef1bd53d7ce05c58c9668cad15c47ee85fe9a53144bd7f8eb8e94e1e96fb6c8e95137c5121a937faa8b0c38f3b844aa6fad8583ffb5f996c907ae31ae2993c7f2b570ed14557982389cae4bb9580d4c4acd6d1287defeba7a85e31f864ebed0d8889112b699e5be96a9a3b2950eb44578ddba671e37ebfaa3c07ed4881f51e0754adadfebcab0f205a9d97f78f606acf7964e7b66eb44623239baf11f1f70bc965d943bb25024747be01dee0f267573277abb171b90a1629f00fd884148e7fa7424b88a76101b7a8cf0a9c13a63f6ae3a9b29d2a22b5290fa8e2b0d48b9ab93927acddbbb947a18630357f75fd9528dff908e67626194ab12a8b656056a94ebe4c645b1a6d8f8d7daf113b527a8c528a13a4dcb79da7b49246a923484a0881c3d087e5f01916b4f9622596e5692ecd030e0275267ca46eb05e37f9ff56d3b112f90f9074ca46b48e2ff121c53c09dbe3bdc2d418dcdad8c8e50ad9f55c8bf0951f8fdd746a2d739816af9e2177ba77d41bf3e25d367ea17155ee921a3e0530279da9cc76aa2170597703ee1d9ad9e84bd89636d90c2b06047db7d493106e1d72454ab9f9414d182c44090084b8eca815f3ed1e939b1ac500e876213784fd7b89ff800e79e998a087cbc84574501cc2f116714ce109629d4fcbedc9d7dc1982d5004dbf0b2d53b0be92daf8b8e96c4d0673aa4885dd93fbc76c9a5608d061d96a8eaa1298fb0fde7a2f533a7ff2d7ba9f4ce81ad9da45061dc3b858ef34513303ae89a2b74eece98f8dd02f273583a760bf0dd06843efa313bcb0d4f0dbceb85ffc4c1343611103b6415f9176aae2449002463d584d00f4c8a7e7cae84cfaabc377fbae709fa9bd5edc777c4e58f96335ea5ce2ff2ac5eaf1499ace11a398bb5596b0f0849dc2c7b582fd867309afac006ad8e23e14ff412a05782306d5ca382f27b734d91db48959e4e599dbfef15109c336486043db1b347a8af47ad3267536ffa5eed560cec1e34a06b03bcb9859761959f06300fde270234ccbfea07ab0fedd2bf0ec1812fe6d007cced7b5413614908cebfbff80c7ff88b933dcdb1bf72fb686c87bd6440c5d29fc13b2c83bdc47bc995875c843c80cade30e70a137a287ab5f759992c8cb39c494c96cdff21a14b1f2141ca738042e01ef2f28024765991f3539154999aae49d82cfd022036570fcfbf0c21783e00203a7c697b32233f46d879ed8ff02f2fc0d4645b7e6e70cba0c846093f040847af9911d334ea8764202f307112c87929813204baf8ec2fac0562d7ea5b851ff3d48fe7a1a92251db87c15ed9f065905798234fc44c822ebc61828014cf21324946cd8493a148a9a69c1ec5ca7e7bc13a7b9a18aafc43235b8d4dd141b040812923259fb5196533697f9d48783ad7cd87dab354d340b318dc0d35249553265b9c8a6505acf125dc2dc44cde77ecaaa1c593cc2e923680435c9efb3a6d0ed8fd7b8239781da2be73ec0fb07b7c817caa3d45a21af22a063f6a4473c914c81bc9a950ac945acdf376d6c8145bcad051f9903d005228253bc3d4c1aa8a0408ed5582c4a1e4284e21c3e5b4e8db69184d7d1f14b2db6d599e2072e182afb3d38c594c04e7593334179e3a0e24744cd38ef1beadbe13bd25bd7dc2086607d8510bc220d014bcf0e569f2edeffe350b4ceb961f3a5465f9c817771abb96d32510a41b6f13fa867f816428c1d29a3bd7b8b35fe5208fde09cd285130b87e51d62c4447b1e102ae93913db8ca6fbc932171e246aa102468bf20c4ea2b644ca8d7122f66affda4c38c7694fe428f3e910d6605df9fb56a83117cf761bc65351b4a2691dc297e45a2b05172079bd2ead37de3c714234f1700cd4b3b66bfa1635b4f555a8f588782c0bf14b9a227d9765c4ba82a226b6dd341d8c3f6eeaa5950d4cb0eac87e2411ed3859721d53f0ccaf84de26e24751d7b746cabcccce906943cfa020aabe09bcc9a01563970bb5846ecc56d7db616f44d08f98a6f76ee442b44be0964efc9c0730ce33986e1d86f601010a8e9b1303e5576b286f5fd0fd28a078d59b628ca4d583f62055d966f694a7917a327e5e166e24058ba308dcda459946061a351d16d0fbfed250fc0a8fed0afeb89196fb17e5cb88b0ed00b58f30603335228897b2f928ceeacc0be4a69762208eb385d49904eacbc5a9d0e16881bcb3ddbd70939b78baf8d16ab3822a87508b12d5e8473afa82c756de181e23c0ea8a0aac090373d8bf02796e10c4b1638a67a0d4dfff08028fcd4f62db1fc3ee4476551188d1a7e7244642fef7293bb746e1270bdad4e96be88f884e70bb78f5cbdecba58982ca86a985255d6900044632a926a471937b68cbc22f1cfc6eed3352b46ac5f87242774af45f132855fb7874530c743e97011bbcaf203c5b176eff07346d8a5c0d0208583693f4120ce14b3af1a383f6fabffabe73aefbe36afff1b30da239be63578cee4d4d6a337d6a38fb51007878a3ac02f954ba037eb505dc0f3710b0b44907300cc3300cc3300cc33000a6f1c6f4db4095912f5392f231bbb8c0f5a82d62fd4f774a32499964e8810b0cd9213662b746021c12050fd40ede50c3db85985a2329c4a15b6bfb9cd597dd9c10bab069b2a32686bea11f900ca295eaf695d699f37c6a2482b86e7f7edd6aa44e2f0e44a27b64d718d3769af51c2480f88598671eb548a5b5e80f0c994faf64cc6beb090405247e58bbaa4f37a6ecccfa5648faf08cf5523dacb15ced161648f890cd55a66f658ad1628483640f8aecaa7e3d33491548f4a0da1af3b2c5b057eec901491e7a257a4cbdda6ae578f0908ad94a13fa374cdde220b983aa75d4eaacd3def4ed81307e08e9400b48eca0871d53ece93e9db6cb48ead0587a2efed44747763848e89094b13ee69d3b67f1324de3c286109239a036a6107bfd3fc70dd980440edfdae2666fa9baadf50f59791595ceb03048e2c0f22096ded7a17cf7952101091c9c79196f77d55b3b98698490bc81a96a78184bb7df2ba94cd31461699a3dc846d3b8c18fb5b58c9794f2e3d746d3acaca4a8b43c112569c3c186acdf93d9173396691a2461c3bed2f6d8ac50a669322e46549a92ace1f6f0772da45a4a9d348348d470abf1ca66fcd8aabd7a088b0a9aa659545084258da619c2a2026449d2b0e7a053bc8ad93a86b8e5062e6840bde7cea33e0d3b51565250548c103101c91978b51eb2cc5548f7b038501e07294db3525484909881cfa3de397f9ffe9d626b1a1f246548f50cd5a685a91057659a66073bc8410e9ae6dd88cab71421833af98e5869fa537c2bd334246348ec19df59e9da5642ecd23e5a5e5c80348918b85b6f7bcc3d27a9b42e2461c0532ad5fa46e80ef52d123020ca8696bdd5adcdf42fa44ab5add7ef2854df73907801d74aac8c5d25f6f8a90ba7b221af6d0bad624748b8802d251fe74dcff60b33245b58eaacc30b213e44de5407245a689effde69bd3a4e0d659c240b8eb0d1e962a771662b219060a111f53055a9d78e4fce4172055f07a96daad0f9b5da59c1535b263e07996f53b56c9054812dc375d4c5ffa59e6730122aac6ba789dee77f73970f48a6a0ce37eb5ea9d3a5c2446aa40d1229a8fe69ee87f09bd38fa5ad9cb1039228b4333755b7de9b47311e9040e14fa9a65627f23f84f448ab6184e4098b8d7a2d6fc9313574324dd33441802c1227385f731ec598df996313fc16db597fa8ad3f7a48ac40c2045f7caef1a6939215339019902ca1192b4db5d8ef8ab6fd184d73e4450c12251c574ba96ca6d6a3643783347c8ca08d18b88024098b1759b9a5b6707daf8c9f318404099babed11af524c447f04feff3c55fc9ace7e91236d1c7931426284c3fb69d77a5495fa78903680a081308ea6213902491110ea76ab4ddd25a622027266868bbf88795a588aa01469224d73a4a569c620190253a918a9434e495d5b08e9346cefb5d2b36e4b41e857aed2512c6d63cb480284859c95eafbc410364a284d13e4518ebca4cca08d18003183e407ee2d97ae473ccd8e9965a5191b4dd37206890f583f2f4c64bf3e8a59e268958632244545e59be6652585458d359a86e5e5e55b5e5c525a7a704bdb3eebc3ea9e5fc980077cdddb8cfbb0a9a534d3342928282f2d3770e1c10e4ec2c38fe80aa5658c99a681e3c8c152a4695ca003667c88d4f64a8b7d9b699a3958160a1cac55560672b08bd84a7e2d575b869f699a1b3cca0b6b9a203720a39be6555e9611171228e080bd735b86da3694d257a66950585e9a061319aef22965344dd3f84ad3c0f12aed1f478b110683232a1d9f31d667f9144f903996ba4678aa87fa3237a5a55752c238811c8cab10aa5bc5d669d9e250ccbe934aebf852a855a669585e565250901a417997962e82467e2d76699719f19c7f0fa2e0a511666643b796c28528d334475a5e56be695e5eb99cc6104a46cda3d87eb5b4a58a7e117aa237ee1bf02dd7e5db182bfae64c91e6de0a7d622763bdcb80c18238a1cdb4ea5b5aceb9b2eeabdc7af71bee2d361a229e4aa566ac5013313221de6ab0a1920e2ddb94ac694ba7161c7dc998ed42ed515a4536c08310335e69adb5e8c88c9465dfc6dab16ddf5cac6954549e91916146a9fe182e3cec89011963486ae674db1291aa76583be598ce39c9ead878324d83a25e9df7a15ba8b53c6c7d6f612181b7427d5a2e3a3b55c985303d08c623c4ddf2af9bb576d4e320c5058dd56bcfcad37994374d9fe1460925bfca674c57d1659aa6699ec8678a74cb90a639410d12af73e8bce5e2b57620076537d5b5aa4209a9964e9039fc0c2040504083479a50d2d5df891b3b6706899b2f63fbc5f88f92c1a3cb5ba857a585ea52a6697ec480f159bf3e86d63d62ce34cdcaaba03c4ad39400062d770fbf173e63da94691a315eb07bcbbacc9869fb30d3342add32c4bb4819e98dc31a5b3ec7a9ad8592679ac68fac08699a232b0d045de02b2972ac184141400bd869f7c616cab34e5297691aa446505e883411b8c10bd5efb767b77a1a65589ae6d9ca0a56ca689aa671e136d869f9dcfc88f58f3a3656d1739f626aecf862a6695ce5535ad3f01aa9719bbf996eeb36d53440dc6001267452aeaabc94c9530d6f0d9d3cc6273d73d54cd3b8c0d15f04e5e587344dd3a0aca4340aca82839560054a2957f7a9fb0f95d29617172098c66fa393bbf6306bdc1d6264fd186d6c00c8a1a150afefc5f4aa8bb5368d0a9aeaa46a25ccd6322d1e920295dc3857151d4cb70705e8a465f70b31a6f8fb324d13244810969795339a86e56525e5471b405afee50c222c2d65b02fc246d3040142228433f2d363eb635b4ab34fa669e4f815359a26f3f272cc60a57938e1b2862d55cb1439f2e2a3ad9cf1458eb4d13428284d9383135c4a7aec20454fcdf3b4c68222a48cc5adb596741f93622a9171e8aa2963fb9ef6170a32466b42ed6f7d26fce617023116f95f2767670f3ea34c909346548ab8a48ca15284480a90a6294224a56988185949238cf5c76e477c4446fed2f2620861cb1062750b2ff155674cd01ac2a5d6ee72c6dfd219368212a03b87a953bc4879b1cb344dcb8b0b4a1017f870818f1723443600a409b25263ae34f19cd7c39d691a143048b01417ca46c46753b7cc348d8b02c174c894fb64b26fda324df32f292d726060049dda6aaad5a38cfaa04cd334cd0b91d6341a681ca1a3129fa467539dca34cd7f4b2383196a2b95afc73ce97988348d0bca8b0b4b0665a5e5048b9b1a1b35d36f8a35cf348d1c2c2d43c050abfc897f4755332dca340d8aaf340a8b374dd30411f2438e5e230d65768bad94723ea79dce34cd909514383c904efa4ffdaabd77cb39d334284d83101116961ef9b9ded0223ec58b67659aa669f21061614119d28282d203515c8cb4a0a040e038208207800181107ce007044040810f3cc0031de80007ce053610010d5c200328184014140f5c00df05e50216c8800f970e54a00314f09546f9962e4284054d80c5050312c00b44a0bd1899000410e533280f20420107a0b4b0bcb4041a8074020c9883458e170a2c008e66ece15080a6e323017b70c84a4ac6a5333ebe7869e9170e20e060e0002b43525c2c60007439f270a074a0001a20c021c2c250be05e1d0748ab077510340e980003010000d00000505033d38c0e3c7c9100eec68e9576128ae9292611ed0314713a98009a2b0a8a0b0a83ca0648ef739de0709a2f8a3683a28e7e16895f532c77f0053803204e01566207922bda22300af7803c6650024731880003087e0842884603007508013305fd0400b3d04803904273421a4472e5c5ac0100109192ba2686921a3063e6ae0810e14e91639568c348d4be6a5c87b9146e3bfa58d307c342e2d60fc4b0f4989a3e780c17c00f3c58afa62a5dd2019c4cbbbb81069038329d9010683e9a103cc909597765131e282a2d2252b2445587c343e9ae68565884b0b185fa86ce10b95236030cd28e050c2226209cc3bcb0a26d070861d4076b022831f3f8290c08707e6f0940ebcb45741b346cb0a5edaabc0870f1f3e566490031f73780aca0ff147818375cb8b0e5ac8f12b3a00f1051cb7030b709020487b15145761d961031200f101021f2baf8282e22a2c24282baf4204932eecc0604e08e1e23e484002d682d17146193e8204a107e82304242001183fc4ffbfe56589c06585a5a4e58b212f9817b471861842d41022860f203ee6f01431bc112648d0d1a24345478a8e8c0e141d2cd091be68270eff15373098921cacb094c4a1a262240d97d3026cc1b5c0031dc0604a70d0d242061c2b20a38d95941410616fb4bc8b91962f62840d36d2505111a2a222444545888a8a905f6149a30c95141738065372c405832999a3ad40450e95141760302571bc3021184c8991976f6136582c2a6160302599932f8a2e7ba45b5ad0916e69117283159634309812ccabac94212b46cac0604a8a1869184c098ba7b8b48081729cf86275e006292378e98c8b916f2aeff2455858545c7ca4118227a2f272f8e87d43bda16fa437d01bf9c67903df5839e360916e6983a565c58d9716962246d8af41060b4b1baec26286caea179634c2789634fecb786149c333cc484b3357497181af81c194d4a0c378963654548c94d1f2b2e2861a6d052b2c2964bcb06f8d8c1537fcdd58212942e4a5a5d538e22c61f819479c250c3f63a5336d7c0b0b1a2f4288b0acbc136159692983a5b0b4a0c5888a1aae929211e388caca0a8e7c0a5ad819778e3cd239de574e7aabd144dac5480ad438b22244a553588a1b41814bca9057814ab394950cfb363e0e92222f292b6ed8a044050e1ba41c79383018923f946486603024458278e0c749231df0f1c3031d00f2a26264068a33d88b6306e8e238897134cd89c3a569308e3d686406774e1a416a440f5fc02014184ce6a5d50802847d0bd688cb1a0103052461b091c60ace68438c34dc4001ca1b42d06059f1d1c292e2d20246ca8b8a112222c03848be808119184c49c360303d4a1e832959a3c4df0c0c0643000c13088029c2068840043460018381c3a5058c77160c26052878630e0c06832cc0609680627282f828d20a0686807d1c2a2a4dc425175fb8e00583c160301812746213188c1b9815984002180c0c305fbca10b0cc603180c860a182b7cd1021d60309834305288020230982704810383492100065383385e65ad9415127ce1860c7c8ce0f8d0808f9557391f24b0808f95579183458c222e435688f44aafa8142192c2be052e294584b8a41469cc192e2d60306759496979c19880a5a8b02041d688a6c322471b0f47ab84d12ddf2d64a494524a092184104208a1cccccccccc73ce39e79c731011111111efdcb973e7ce9d3b77eedc6166666666dedddddddd554a29a594524a5555555535a594524a29258410420821843233333333cf39e79c73ce41444444bcbbbbbbbb4366666666e6dddddddd5da594524a29a55455555555534a29a594524208218410422833333333f39c73ce39e71c444444443ce4559a501e4483c8192e2d6074cb8b00f3822f5030000c06b3e2461972b0a87c189f3286ab186171014b1a2c2d0f832361b881c1943021184cc97a3858da5083258d35309892c660487a515283767146061b64741862b8b4a4b12244484a1c296394f129ee2b292b8f0396160c0683f1c1b2e20139585cfedbca19293e322f2d29cbc74afb587161fdab557cb834182e3f0296941ab0815242030ca66406415c5ac05047baa5a539f0851826c060304356525e5a5896101f60bc8f232d2c449e480b4b4b0b19cd176180e28b306a8121c160dc38b2505c5cba8819c2d081c190e4e165a5575288a4b430232befc385884bcbe1c262864b0b182e2a4588a4b06e21c034e20b2163603018374a16f18509b05083346af02e706901c3ffa5cbc0604a6430642505832989010643d20bc698d2f17671f62c2f458eb4b01924a433c8f43182351283202e2a1fc7aba8741c2829282dff45d060699a6ff9d56194b1460b56525a450d367c45c891962692d2a286cb0b8b0a1bfe648421240c232b5839a38c355af0abc3f00052233e7e2035d201e6e2efd2a0a0147199e3d32852a4518ab8ec4137fce74829c31140648171690103c5a5050636204921c941c90bfc978f232aab5f8c1049c1158ab092626448cac294e18b112801b3078db8b480e12b282dff92824284a5a589807d1ce98b460dea8b110400a3a292b25a5e0d3e1101068349c17cc152c0340d4a11179716308ab0b8a0b47c11124ea4ac3d88e2d2f245543ec3525e9e48e625a5a5f7a09194a662c4a503180c11cc17bc0016478afb682c2944be0583c15800b3c3043b10c6a5058c95967f79e922226879713159c417fbe3968b0a8e7ca1544152a4e55bc0c8bc7411111c79c110b0b49594210a080653f286cb8b8b9135322f4d83c19014c194b88004102d70e3e5e160292f184c491b180cc920be7d1c2943d858e385a4080653c2021595662f2e2c44505e1a05832951e38b1c7941c160306bbcb8bc633018365c309892156030247ff09492345a304711212fcf46cbb3c186af1869bf86af04cad939cabfa74ed91688d141ed16f5ebe2f3245930a945ae4eea28e2ba3bb62e430bd5a853f3dbaa37edcc34cd11b606254c66d1fc8e393afab56cd48c112226b248a6bddae1e47e5026675af02305409ac60c9358ac65ba1237f1ac94568305abfa74947284d4abd699a60183c92b5c35dac6a735ddb51c334d63e20a5dcec3f456a9360e12440826add85688d965daa68b73b9092b1aca937be712b1eca5ab68e853366574e7db1f4254856a5f8adad11fb3a9bc4bc5615c2b2de466e71c36543ca74a08b55faecaad99a65181c929fc97294598dc733176a6695260628aa4d4f2c3bbb2fdbdae4cd3ccd168fc38f229f8d1f2199736a348a351a489e4c0a414dbdbae1d65eb91615fa669c83021c5ea66cd6d97cc98bc99a631c364149a106162aacd749ed144144cfd3c5a9bcd59adb484fc68a30c93501c96ab8f764ff5e0392598806213b1f57ed430d75d7f2261f2b3f47e7922a974d6f9de3b6eced4346d987402b1f5070f1d655dca5aa6697e48cb130181092790f9dce9a3fd8a507fa6695afa55d818269b40f7887d4bf6b5078f35d11cddb9134b9bcd59669a860571204da308934c603ab9cc14ea9e4ea4468a60e2513654a430f312c750efd5b2eab563cb3fe3d29915236b6209c58d131f2da4ee6a528974ddfed891a162cc54a621630526943888f68ee9ea74da5d049349683bad5a53190ec144126939ff9a294ce87871109220984442171d6acaf096d3c00412baf81b5a79e8db9aa54cd3a4c0e411ddd4635e36c6dd3b9b699a203f7c2525053f7ea801e48da874d3103171c4497a6b95e2765af519864923165b576f76cadffd87092316622e52492566755c5cbac89185b2e246d3b80e4c1681fbcf7febd95a88b1cb047995d563b8c044117eda42b878b74e3bcb3341828881c60f317eb401c4c57f8e94329a26072689c83eedb2e1fea6e39c886082885e9749e9c9848db5170d93436cbaf69c10ab938ff4649ae6480b119696328e9028c1c4106a172a23efec83cc5226c8afb0a888d134bfc2a2c25c80a4c0a410c8abd84d257e4be64b888494a1e5e9b135bbc386fc09c41862328886d2dd599f898240bd3a1962f4ebef5f8c104179318286320944d2a39f6b69b3763bcf34cd990022cf5ab44cd71fc5fdfb0764a558a53e7dfe70427e6076e82863edebeb1ca4a2d228b730e9c359b98bdd1f4febd91391948c0b18afb2fa258e1ce4c00c133ee0aeffc5d88eafbdcb4cd398ec01fdbad126bac5d09f33415850dcbb6982bca4744b1b3e5c485e61a28783ccee8e553575882e87491e16732d632717d37b5615133c24f68c90ad754e61267587d658b14e8bd5f9961f87891db00eb702133ae01c48602207212671c873120c5fd4b897f2a3f8fc9c4cd3048181091cd4f979f742eb24b3446f68f5ec2731d430a13ae906c4c9266d406a9963f2c3cfd39d48306183a246642ba94bbf7fd21a963ac454b275564274ada2d26298a8010f31a6e10eb1091a92bab39c770ea96d36c4e40ccb8e96f22b764c8f2233f8b9f2f409a9fad395ca80dd90ca4dfbdcfc2c17c3840cdf4751f3f193525dc331b463de2d1dc6921b3a2986469d1e9d5da6ccf630b02e8492f24784cc75c1e0ed2759bddacf6c545230f9c22d3fefcaa8f15bb2f20262e92c86b437199fea0e4cbac0ffdcdd5c5d1537435c408f9ce889bbab79611a3f9260b2054597be975779612ebf818916d6a52f2b625f9dad3c0bbb5257d34499ca91b3154cb0c012b35ac63f4e76c9e40abef219325b9ba8296f6130b182723e8c3e91b546feacc5a40a892719cb73b67d397a103fe3071032489a604205e7e3a698a9e5de1d329902fa9d967756af930e6a13296462b50721bf7ea510bdc0240a88f42c7f6642a9f5be0914f0d433e576da46d63479c2317614eba50e26e46f4427ece55a977fbc5ba3f414932630b6ec898ad1e9c33c08041326e4231ea6f25bdefbfd9d104c96d08cc7d2f13aaf0a792216c14409ca4f5343881d7d64eb97609284efc50ee2b5ba663ccb0409beb85ae3a9aa73a33d02ae9696ba4b7fcd1bfa3480981841514a0c3d6aa65a6d4bcf5254d8784909a3694884605284f4aa9af6d94e559488b08f4bfbd949cd0b193b623284d64ca72f7b93b5bbfb01240b2642587d5252ed1c8597b7b4c5240889a594bf8819cff90f32c7fbca0f202e2e4f42061320349612536bdb9ed6ae9dc90f549542987ef2323597890f983645b54b29e276a46450d28b544d0fba94d479a6fe5a4a78810e29e62951de27ffb48bb34bf52e2927a6a95b5082c4a04417c87839b3b356a59beec8a7a0694a72c19a4a7b4bf7fc2d45c7c51eb630f9f629b3b6d62dd0f5e73eb36a9ad808881925b648db3413222f54d6d06b912d51795b9c88ff94d182d133f7b37e653acd7b168cb81f3d5eb6eeafcae25ed5d9d63c5d7bfc148b853e95ad96e7932285053b6bf1ad6b79107f2d324a50f20a477e2d9d2e4dbbef0ad6ed34bf36754474d90a6e8cd9c9554df5a79f1825acf8f3c4e4e75c1eea6659417996a2e2b28af73e8abd3ef761c60d5115efaeebb45c96f9ebb454e46623a6ed9a9eb6868ae6d4b668b1d6a89fff148b6d239fb776d8ecf5ce147ad051dfcc9d29448f1a4bc1d2ab5445a7183b5b88a450be3fc8dcda21aafa51e4b567f77c8e226ef82828110572d3a38b21c5d2296da168668b2dbf46cde82c050ad47b4a11abde3eacd92714db5b9c767711cae39e40ce5d6dcdd6498ba5bdebc4ffddb793bf072f59e344727f7ed44d35b3916d42134baf1af2df72969026101e85f8a0d4c7dfcdc4f145c6f40c5d4aa5081113eb5b31d3a2ef4c8df812098fd141ced6b972942cc1aaa9b4749d2984feb712875182b110b374e78c2e4389c447bcf42095b954771279184b8c075b378596a54412ed7bd3bec2b5d8f22381eaa8daf72b3abe522181fe54cf2376165f2a758fd8e3759c36ed592cdd9d23fcb3253e0d9335dda31aa17cd06f2be4dddaf9670453e8c795226adc7b5dc4d96d7678b936b6eaaa08f4ddfedb39a848255f8948cd931763476b39b18588e6dfeb9cd81fa59aff10279dd6abacfb49557a43e06a5e7b89ed9c95ca8560a7698f57ba5b47a9274477af373bfecd574a3808941043f69347fdaa2741b02bf5d5eaf8d7f2ce0bc437d3dc84743f357f06049e3cb49429a44821e60c1a257fd076888a795a756717f303db64d7f9691dc4d0f37e50d2074dbc08863a5256dd5c9f97e9655e50c287b428c158dc2de952fed5e9bc324d13648d923d7062a753ba8b29fff5489050a287c6dc6c89fd79b5cc360f9dbcbd296b899ee54a3c9c3dca0eb36254fd843cd081324aee706d216c48254787cfac69de28b143432cf5b0f4deeaa012a1d2464d375bafa2c3adfbd743aa9d6d94760ebeae6db59f39436c490e87d122b4091ba66b75e280164327ad62d5c66a191c78bda333c3c44e71b6372875d6da3b4825b6bccb0dd8ce749d267c4d954e1b12a30403f969ad4e4ff33e73cd344d10204d736450c20646c89bb95aeaa25b6b585fbafd8dd9af937e0f4ad4b0a7fc97d5b9c4ceb71c42491a160f0d7bc91d6562e9cfd0be3e5d939d83d7943a6986f4cb51bb4d2ab14b24849232dc2646304e73b9bab375943e65a66982b8b451420647f5974b1dd5440dfd7cc9183659135df26a2be55a7094880175a5a26e781211e293691a7f77614149185621950e37f76f6cb51ca38d12302c76ebdea90ff9bee317585182d14e35963857b5b412481196166f9a96972261947881efd46db7c347f9f429e982725faa2153a5cb9b38d33441c668255c406c5b5abf4dd9424c1d0afb385084946cc1d91f5bce7bda912dd64223a49a21dcb4584fbb240b7ebf27f72c42cd98724dc70c2062946061d1135aa7b3693e627f8594db9ab8b5956ca96e215d28b102dea686dd8aba9bfd194349155853d6b5aa7b2a25866c504205d53cd3ae4476a4d6392553c86cc4167ac676db5235522285c556aa6232a4583d57a6240a8948a9e25af507f3302894408125b610bb69fec96cf60447ffcc88ce3d438c2ab3851227dcda74d8e9d7aba6dfb450d2044c798969573bbcd611131e5bc2d384a9937a4b99a65141c9121aa274be8cf1ce51ce285142eac35a31d64a7fa1575f2849426af5e9b7195aabf57f0912fcd7cf63dabce49c47858565b9517284fc6c0bcf51b9ddcb7e488b154a8c70ca917fb717ca6fa74d438592222c2b2275eb89a9a2c45ad050428455bea3525525276ca764084b6f9d937c91e2cc472e940861b321bac443fffdcf99a6597995a679615171290942b663a416abd54cd3bcfc90a621410910d0ae4f6d71335c469d5728f9c1fd2f4dc6ec1a91bddd11a1c4070be1a6ee3faad6701d1a24bd38dfd95cbd6fda74cc2fcf06114878b1d8a8f9bf5adc9629dac5227c75080f576b435402892ed05d3be5c5f64f42293117eab0a6a67667edfdec10487091de55427fc80fdb5e740be5c850d3ea3e6d153b1e90d8225752ddc6edafe922d503925a74db93143d7ddba427d1c24f59e7cad51af9b49d455be9ea97d7bbca4ede01892c583536a34a7a165da20e4862b1a7a5b63ae27d453e3f56d042028b75f848b54dbdc350bb0824af68d5186f5b8aa54e6c33d33428435652dc207185a6579ed8f549e47495699a33485ab15cb1ff19a1547d1cdb00a242c28a53d75a759ec2cbf42cd3345806c92a1ab2dc4be79b7377350da22ad2d9d55652ceea9cf3f5039254705bdf0ec3b33cb9b145f203125460539fbe68a59490ef29d452dcadca2b9f9db5a66066cec7d8fdb0b5548a57cec7d2ea616d9a488c1f61fc10d281374848a1ac18aa5b879a1f456a14a82ddda6f3eb44918efbf296d639c5b61d2c908402a542ee8b0c39a6c55a154840b19948a5d3e8d0e22ab602c927924a847dc888b789d914483cc17ed5625b4c35ba64cd04924e9cb262efb74c99c2cc209070a2bd27aa76d62537638c02c926942a4d744df13a5b194913483471be8e7b4eb645c5501d8124138f49935fea628c0d778e37a3e5e56051419260e2195b0bd569d6988714c822b984af854d79fa46ec24a69a8e1943482c81fa7e4857fdec21371220905442217b623ad766c4456990508221b26dd4a9d1bb1faa4132896ced6db1f39862dfb7072571f41c858ebd7642745810a44680b45f03c80d4822d129d972e24b29f12a438484365d8bfacaa7f2167b44e36cfea929db4a08a12370fb2c4bbf9631bafa4670da757bec1a6ae8ed1991eb0aa16e8ad80fe101c92216533e6db5c6ab387922490289224ea2476defd592fb6ea6695a4812912acff9fa43fcaff65e5a5a0d1d9020a23545ef8a159f2db6ff069032480ec1995a37dfc5f89a5dc201892194910aae493d7f363cf2824ef2b056a9c43ebe58dfe2738207324eee90d29e133ba0b4e7a40e97f69cd0c10527735847e9a786c9d62a36d5342c2772c8a6bd9bdb54428eec6d701207edd44c8a594a454d0607a4cdac39b535d1510ae4e54f0007fbcc0c4eded01c9b4a95fe5a7b633d71c36108b5955ae8b0d575276d50debabe2add51d4969fb0e156ba9fde5faad55a680d8ebecfb3dfe6cf7b748d31cc0072a20694da6208b5bbb3cb47d3f069b12772fe5154cd4ed0c0c8de8e5e6736c5fee40cd9f8a8a350a3771e4c2766e84eebdc5dcbd3ca8a55382943e2d42a5d6ac695ced709197a611efbfeaf9331a84f8e767dcb935ccf8ae1f0aa7663dbdcc9ce4ec290d8ea85b4516ab52aa1760206ce73649d12395adfd772f205f58650b73db16f3f3ff1c22a5aca766962cad7a997932eb422f3775446a53a9519404eb8b01ab53f86a97d7a65b785f3edc912b3570b39e91c275ad857b696b15d2743978a9c64e1154307dbd751b43c1539c1c2afa61419bb76f5c36ae4e40a7bf257b7eaf993cf9739b18272464d1d4ee40dcf3a729c54a12db44e5b3e6ad3733aa1822fecb628dbdd394725979329e8614eb8291549a12df73a8b5361aef40c52868f172344362004880d4ea2c05c1d53e4ca54d385f8040aa8ed28de69b9f4772f48b7bccc41c60f367ea8a8b4183f8400691a12289c3c2125d46ea1d62ae1e92f72e405c504274e78c52e17dbc5691531cd9c34a165afe47d3a795d374ae184094a7db75288ae781df45d3859c22374f7296fa9c3ecd98a164e94708d9826e7a48986194e92706721aa6e2cdd9d4a068613246c36eda35a6297f652a2e1e408cc132bc46bde5a3b22379c1881e551cf8eae43ae5657919322e442c7fdcb7d11a15929aba6d6e96feeec062743e8d5fddb52677242ff2f274278d48c7952c9d816b206e1ac46a9e541e9ccdbb1911320ac7b6ac812ba7663e5739cfc601d74a7ccd1b2bf65eac407a87511fb5ecddf1ea55e1c226bc55cb1553fc9bce8b650fb6f4b29e68a6917caafecd951d5d34cbd0f76e8825ba56c7aed7c15a15ca457a7e913da4629afe1e2f06242850cadb6ca8f093b6e91fc9fbf186ad5577607a2851db6e87409adc5eda056658ba4093b6a918ba8553b1d35d33a2d1a53e596504f536bd32c725722bdd529a576d964d156f259b5b7d852971a8b555ca95afffaffa3162c3af566ab3b0abfbd7a2bec7885ee399cc9d85208a555ae50e67fd6e293943ac274851dad48a5d4a7d75ff56b9dc60adeb60d99e23a66897b159d0ba99ede934cadc5aa58a97621ba5e763c46a9e0d5d4acd871bdf6ea50917ce1ede2a75ce88ea7d87fb458b362feba4553284ee8eeb44d8719db550ad5efcc9dad4abdcdd11a7690622545ec959d4b31ff1e851f6b29b547847e9bf232ec10c569dc542a5b5bbd83870b3b42819cb1674bcfd33d5b098a85fdefdc4e21e6f8aa0b3b3ef1bef0d8399a47215f67c48827ee11de2afe34b2851d9d60e5c7297152bf8f3eb5b08313db8eb6c54e31f4e4e96ad8b109d5938bf69c5cc40e252fecd0c459bf54dd51cced587547267a6d7e2347b930c1277bf9e9bb6aaa39c661c725f0d57db1fe41a79d68861d96502ba583ebd97b25bca95c87c729bf554367d841895bb5dcd21faed55802c38e49b4bbf53d282963bc9addb0431209174256cb2a213fce37ec888427fe4bafaa594b2c1f12a9932e3efbca79d6b247a45685dab7cc769827e688e44b8af7fb764f52d608dc56b434dd39a6fd8711c8515d3aad6d1efb6f66c722d0da43b7743f537628e2d6496ea9e9b7739d180f76240219bae647bd6b3beb550f7620425b7b94df3617bfab3dc423f58921a7966d5dd5108e89a5f4de492d5728ed6047218e3d5bcc7acdf9e87a8e1d846889a81211a93d77f483389cedacb2e794c7b01dd92108cfc666cd50a5d47cb10e7604e2df579d7e7c5eab9b2d3b00a1bb14b36e7efa61fb1d7f60cadcd51d7ed6a89df5b2c30fbfe7e836d32b574cb597958fa30fd96a61a3df6d6a07570b4b4b0b193bf89072d75ba13ddccad71e96a9d36567d11f2fb61efc7553da4eccd8257676e461253cebf061d3678a070f0a7dbb4ff4e8d4eaf91d7748c565fc7927b5c764c10e3b9ca6d261bfce945125ae0353ec5eb5ab9372572e3a607b42a7892715d7f61c14a5d390fe694c54ecc80139b9d741858bad2d8e20ec8803faa35b8d54eea6a5ec77c0e1d21d3cc18e37243f9ebf4c13ee6a4e3bdcd047315d3cc61c9925204488903861471b54f2f57ddfed7bbd1a1b70b1e1496eee6b48d6bdc5dab3e6a3a66a58c7ac193263a3622cfdf8e167e861471a98276f46f9c88e78dc053bd0d0be6a21b275e6f97dced0d81de407b1f14f5aff83a599e1dbeab794cec94ea87347191aa6e54d135b8a6d5d9221f1f95d5dff3942e7778c21a5d488a96ae8b0a213034aabbeb555d5741ab730b8af4f6bf12574f9c960c0a54eef692ced17f657528ca5f2f4a7257a81dbd99427d53a72ab2e284e679dc4eeb3cf94e2c223eaab761a2fc6946b0b27b561af94bc515becb5a0ed5aead449751610c25c480f226bdaa9c16007163c6dbbe66b7c8ebaef1554a3834dbd216e5eedada0d26162c7d5a37674b40a0b19323cfc54e8092515b2eff462cbd8b911ca1d53384899a72e5f6973b53dd0811d52c8a314aae4ef8b841d51607c2e53b6a5998e5ec1610714fcd2197993b3aff261c38e27785acbc8ca8e31b76a4e3894583584bc781d76b80e3b9a809631c54a8ff5a4a69820763021f53929b1fa84a8aed512bedb7757751e45b95012762841b54468f75b55f795ed4842c265bdead6b3d2f6bf0309996b1dafa4bedfcb280d202c3b8e908b531b956ae89b4a771881eff8605f2aeab41a2b4243869c889469b7aa4384b6106be8203ec49a321c42ae85e9202347b4292d2124e6d45c3e7bec169e2060b685f4f3b7a5ff0e2030d4a354ea3a2686f93b7e70af10bf22b5f46c73dae103540cb143caf5646be396f71f2d0f8444093a7ab10d25840efd29f5a9122f38b17dd5449eb295e22e76216efb8752920041872e4eae1fc55a3d75a2c25cb8a6bede624779db22367eb401c40c3a70818b797af01cc6d06aafe3167d9cdb5acb7bde9381c8a1c316085113ed6b23f293aba3168c1d318412e7ef40072d72f59d33741aad4f388b4dab9542d532216247872c92fbb3c45c131d57aa8e58381eb4f08e3adb743bc182ad3ccd942f3d7ddab625e87845aba65c21a6d2869662516183880e572cd6c99133d3c5ea8ed2d18ad6daf26b47ec59d5192b107999594366a95f5551c72a1453bdce4abc0e4beb3844872ad41be523624db56f0b659a46472a7415aba374dbad7bc23174a042b92574789dccc67f975903e938c5b3263cfc948e0e537caac4d269adf1e257a5685789b9423d679d858814e9dca2dd47d6dab13c3a46c1ee4fa2be45761032ca0429c2d23246d3b8146139c3c5c8186ee810854207571fa66e0c7d6a94232d2f3a42c1770d99529c569dc50505f25796cbffcedc107d42b19fa9965c61ead6f504fff223bee4c7d9c799a6e9838e4e6442adb5fc5ebde7343b473e053f0e1ef914fc402ce8e08433d67df2a8c594f3a14cd3344d101d9b68b5fd0df1d2efa8f7d4a109d57e1da774f8f4ac763271f8b4a7b2c48488d26182d1e5c284d4fa25dafa54ca2bf32cc116f2326f7fabce4a5d895dedb6d78e7e4ba99cd1410964979bb075da4e9648021d9358859a29bdc3eb7dcf92389b7ecc992fda7edf4cd3440291336c7ee89aee12659ac69b45a56982b40144e980c4a35377cffc583b3cf50875970ee76efbec5b9d699a17e87084f3b77692224287b46da669988e46a8abc398b5559a6e75ea6004c37da6c78f5b4ac8d6063a16813499ab478d132b3af270a0a01469348ae850441f66ea7b468752624bc42652c5146acb18c3c68860ee65cd67ec8df3d8214edafb7fee8654114286582db5439aa7b15adab0104d25649caa4ecbd64b425c4b99cfad11ba84d98348e8929fc572b96add2588c5f567a6963aee992710ddd7ad2e1d6d63771410e8d9c283cc3159eac37f58cc83291d968a7699f243d25fef8ecc1829f6a1d931d4d6f9fed242c6874bdf946a4dde50aae33d206e786b4ff67deb1e3df835969ab5776394d8e781fd71576821d51836443ca08512e14128952b46bcc3e2659ad626bdc395ce0edd99b0b1957411a77475487e0711f2ab67d6d6e890127bd61073677338c6e9712d9558fe7a25073cacdb37c63dfb0da138b476c5a9baf4ac646c7040da381722f5cfee5cbf819de4871afeb25b546e58af7039fdf2677e89b5212dc5306f3152e776d9905cb5c4ed7a7ed711ae013b99b14febe5fd536a48af30d7e2c614b64d9686c3a577b7d2593bba46434aaaf27335fa7414ff19de9bf9dcea5e6da9941914da94ce56e5ad3d6b95e1f8fe93a1e3aa5ce8c9c04ea2f5650b65e2a31d439f4fc688a94aa851d304b9820e31f061283bef9ab1a5fe868e30e4ca6488ac2d2fd576c1b0c8fa645babda71a9fac2b3e36ecc5ff16a3af502bb65f68db911b7fbcb348d8e2ea885dfb091b25c88f57321315d8735a5e2b5958c888e2d605bee792c793a89d46b215b9dd34d971f527950165e71217b5cbecdd51716d675a7a4ad25d6d2fa2ba8b37d8e2d1d54ac9d6485961a3796503a958ed2730308cbcbca19aaa30a8827314c0b5b4b958a10712388183f88b03780c0b192c20611f646d3142162040a3aa870161e6cac7c3f5fb1659a660a2725c58cd849c78953e990026b7d27a95d74562b33744441db296ddb90ebaa961e65083aa0f088eacb19634ca1427e425ad6d67ab5d83be11cb68f4e0fe2a45c9d269c669b9ca90b731dad0e261c4d5dabd8b54454c4324de3a26309ccb0b56b85fe75313fc332e4c5080b0a8a0e25fcab5d76c484124ab986e8480252ab72dd737263e85f0712fa2f11973afbaa9db74cd3e83842365dcad6375ff5dca7c308cfd6266e8b31d4bfb424a1a3087cd842e798ad5eccd0669a860c1d44e83eb68f1a3d1dedfd10160f6f7f6f1b7da7679aa648cbe182b2c2d234418ab41c6cacac007f5c0780341d42d044869a27f5dddae9a62308c99136478b56a1c4c47400a1e9a773ad11abd7642d43c70fb213155ae7edb9650b0b8a0e1f203fec93bafc3457ba4cd398f4a25d36fbe9b55ad233474a7b5e3cba733abe9a5228ed1cbfd234419aa6852545a557f0a30d202f670099c36417fbecb466cd8e9e0f1d135dac574bb1f4965cf7962e14935c1c94ab1e51fad5e99be2e236e9eab16e6ecc3e6f711778af608c8c9a5bf2c53e475dd198b686fc6c5acc2f1b4b193fce0052a4d1689a222a3d5a7192d2a516ad6d4c317656b46cf8affc379562a77aaca2d9d9eb6feb550f552ca51263890bb1a6b9d6919697232d6d90a0472a1c950f21fcc4f4205da840775c992622f738054aab8d564aa78a19ea618a9558b684acf686d0a3149958e9b65fcd9142d64871903aeccef7394d9b1dc8117a8ce2512594fa4fa3ab472f8a93d65a8897c2b4a7dc4371a8b1c3fe5b59a2931a137a8002a94599587e439888fd13be5ad1f9b6fadc7922616b2b25d7cc3ce8bc13c9ea13ba4df4478f1527dacf97a9d7ff76ced8267a7193e7aa6a3cdd5413cc88ffb87c32a96b2610ad676db7da6ea2c430b1de18931d67d8bbdaba04fbbfbc4bfc8c7a53f31e9660fccaf96d55625b2ae67f2ee1127a50021d46abfe94ae4924d65637535359a18724f49c2a4eba9bff0b4522bf137add8549559d0ea107243c256e9d7bed390ff623902ad68ba5548ebad4112a657f5a4d69d3f27dc446681fb4ad98d9169f4f52e8c108c650f5cf7e42f4be761149d1abe54a29f2d1533280f450845ad5e684dbca2d9d4d446a4d53334d67b5d6af1e88688955534fe8f84a8ca943ac657936e1661a02ddafc7c3beb5d21f2ac442dfbfb93c1d5548312154f57956daae744f1b04e3d796daaff68b94522a3d0491b25b528fa85a5bcc2910dc524b0d9d6ab6df59213f322e6dc60f26f400846266bed6b186f41cd31f74d9497c16ff5ca24a3dfc708a0fa1ce6ce8db7f1f3aad6bef65f9a9354b5ae8c18763e81163aa776fbdb98776d82af6d0031ff6eb30b284eca8b57ea801848d1e79b855c79a334e070fe830ff5fa61af5b8c372c45827c6ade73c29204ee86107a677e79aabd39f48a13ab46ecd4ee7faa7434baaf82c6a6cc76a7f0eaeae97b23de939c872d0b3e7ee4e428db9fc2e0e08ada6b33acfc1819d1fe76cea57f5fe7ac3618f4e13ad374ff93ddc70102618d8a30d87307bb021fde47adaee67c73dd7c08909461b3dd4d0fa704294bcacda54a781dd613a99dbbd72570539038e9626824272841e6848a3c7190e7273a55ced31f386d2c30c7bed3cf6693ccdb5fe5b505e65751b72f41a26e851063cd6af0891f5a53d2a33460f32dc61ced764bae7594399a62112c4874bfb10020488affccb1c64344dd30091a3c71896d19e95d61566e2cc8c3fcbcbf7104366524d756d43c90eb98505e557525456108657adf5ed7a6d2c7523f700833a33667e303d2e7262e3471b405e9e0deef105d675d20f2f547c7ad8c30bf997d9d2fdea5ca73f9342468f2e68db6fc9d75a9d0829b402205ce04fa9d8ee57152f3694203db670df78316eee74fc8d9fd2d2461b3db4e077afda2d7a758ea1d6230be72853e3b53cb1c3980a6206901e58b85669a5a552b1df23f4ce92468f2b30d6a9f0b855a1ca5f28ef2c6958a1ad750efbf12322e659dfa30adf54516e6329333da8a0da8877770f9b726b1594222c2dbe22831e53608e4afb96223bdf2a659a06c5575aa551d8b7208d95961e526064ce3feb74ba52ad324d13848d346ad0230adfd652a47ace2daa5f99153380306749a369508ab800613da070dacfea3195e88b5b0e3172831f837d0b9a468c1e4f58ebd16d6bac57a66982a800c88b1134c218e3535ada58be1ce5535a5e84f4700263a9f1fab3841a42d504943c25ece5565e67eb480f26a4a5bf5253cbef0b552da1356d6f8997dde93b4d098b6d7285cc8edee8be471256719fa6492d7be2e428c0410f24783beafacf67cad561d3e4a0c711ce61cb8c1eddcda087116e6d62dd4e656bf25484539938ef0e331ef420c22d475c8ab576db9caec7103415f5fd7b6f4b4a6f8e1e4258fce7693d4bca505bcc7a0441ad46fff97b78cae9e2e80184fcd5ebf699990c7afc604f6eeea58494da96ad870f5c2d527d7a33f5625bd3b44929f765bac98317eae41f77d4dec81aee2e341b9dc5c8962bafb22e745be386fe9bafbe3b3c7281895d7bf35d9b2a35c745ae448f1ab153ebdaa75bac223d49a5aa8650f5a9020f5bf8395e4a292ed662d33d5adcd033736c5a1c5a8dadb49f3c8b4ba7a9e68cd06ab70b334d336425c5c5080f59e4ee39ecc9bcf6167d2cd68f326eccae70dd2d2c38bd31d7f2b3c8f00f8f57b43aea5f4af1a966661eaed88516f1323d0861ba3e29f88129789535051eade8d4caeca82e64dc2bb1627923564a956ade0c99c72a58a55cee8a8e6a6df579c04315076ffd696a17397ace54f4da3bfcd3122ee6b93c50a112275bacb9a75fd39ac1e314db52e3fec58988a972cbabc1c3146d95e62ee36cc8fd56bff4184058da4a29909f93ec16513f628499a649010f52a0e64feebb58db842dc5e0310abe56accdd9cd10529d699a4f6979e1218a3f8add0d617b84bc27148aa8216e5b0b29a4ab7880223d9d5bfbdc121dc4021e9f48aa1d96fad69f5f77f504a64b301e21d57a4993a15edb323c3a81ed54d9a9cab3bacefa951570c2d37f9dd6c66b7331a7f0d884f2a41e9d739f7cc858093c3481fa94afdb9e3bba12f2c804626469f1aa47c4d6f6796042b15e2b1559196bb4a069541e8e961696950c73699ad61207900c8f4bf02146f58a6dd2b612b3443a8b32a9743051a2ef4aa0d6fcf49b51157a46094eaacf619b1cdfe03109ff452955519e2b6b2809bcc658e26eed7498b637784442ad43edfdcbbdee6443c2ff8e33ef2ecf5da9404ec0e311f92bd3a78328b15ad4322899971439180f4778faed45eaa8a183b899a6093283201ee8400ccce0d188f38c91fe7a5adeafe9c2083ddbbed7dff16a789f699a35782c82a9a3fc55eb838e8722185ac94ea99e5b0c19669a6665488a0b0a7824a2fd3d0ff3e63f6cd1e08108b6ab7b2da9968c2d55a66966c0e3107dabbd42e89c322a3a1e86380df734539d36e39202031e85388efdffcf18fefd352192f24cfbabeaaae847e4c5081a191e83f0d572e931757796fbf31044ebe39ffaaccf56273910e85437d6d429b3f937c3031099fc58734af7aaa9de3fa87a4faffe28b5569b7e3868b5c4b3d0e24dc4a30fec77185b7b758eca4e3ef833549f689d4a7be7f6f0e8f1b467e4dee7ced103a3449fea51a3f56b118f3cdc4abff09b071e12daf4d63635ffd42b659a26c8b7344d10124bf0b843f3d7940eadb3543bd5322c2f28283cecd0b275a6c6c988582fce34cd1378d401b5e3ab7b1091eaf37468d558364ffd0be1aeb0a0143182e2041e737083871c5642c62e35a7c48e66c601153bddded33d52c9705074d6866da9d35633bf01b939f16254e486443df44935194b7cd8064c956819b783bbb6950dc8f7bb885cad4bcc514b0b19428018e1b186a30ea786586388f52596699a3680f05003e34e98d8d7bf9e6e798216fc48018f341cd6d6e36d1d3ea74f424326a74c4ddba15bb5fd45bea56992c7191639f36927bf3f4833d3342e3cccc0c855f246ddf78fee5758509a66043ccae088ce79ee88d3317679e0418686cbd2fbe7e2bc84ee25258c213cc67079970db5b6f6d249f93cc4909e2a559e9e4ba7a8086149e3c5081a2dff7206111e6168ed5755524d0c0c9ed85cd15d2eb6fefa0b2bf17325cf3d4b215b5e70cfb612b374b5585fab018f2e30a4ed93ea5698aa8b659a8607171626e3954d612e4d89b670dafad3d3ed53b558b5d0ee169effa9dfc559606e4daded490bf51dce344d6341c9b8b419880716d89e46acf2b69d63371e5750cc9533d4e63d9f5ae26185b67861ab86ce37845cf1a802bac44c2df23a9ea7a9223ca8a0efab3f05457e29194adaa4904e9ef783e81c6d745214905a89163e4bbbbcd081c2413dc7abbd5d32e4f3846677e9f44acded83c2c309a994aa95cc6fa1f5eb344193b3862d6db2ec6438fa8507135431cdf66b59d7556399a631028f25b0679cd061849c0da53283871238ddb33ec79f96f153a669e068224da392f262a40d1e4948c7ec85baa98ba93a0f242c47c67e745463e72c3cc2e308472d6bea70333ebb9372c0c308ec0d1dc4c9d68be0a9ff136a4776e8be791021a5334368a9b3d85a0d019b72af7350b5a367918710bc4feb39c4d4f93545791ca4a83c1c2d8f923c827079f0cfaec689d42dcb340d0f20b4d6dafdd6399dd8a1e3f18373d82de25de5cb9c0f0f1f305574dbc95ed93ff6674e7ab1da4fadbfef69dd8f78d12a2576b7ed9b379b868d935de05ef7a342c70735b474d1d227458f9cb566865aa6f5abf44b8fd1fa55408408114e72a174b17357877c12e367e2488923658ca6c9bca4b434903fc185dad5145ae970f3e0e416f8ecdc1eb7ba3a426d8b678f583296cdd24a89b558cf87a888134aed10ca340dca91857244a5481927b4f0a6166adf55d79271cfa21decf66d96c7513bec8d1359a867e6c5b42d75128b459ea714b9b5931d3372fc4acb092c947ee2e6b76fb9a79d5730d4ac8f528d4f9d449e691a38585832282a9e82841357a85e82918c92a9534f2a386945b6d6947a3fa97da244ac603fef4f9d72334d538893555c9ea59ac2f448158bdb36539c509fa4a29daf3d3cbb6af1bda18213aa53a8fd56d498fbf9c347659a06e583b89c98e27d97fba3e6841a434cc84929f24eebbff77ad5d898699a2027a4600afdfbfaf87fe9c928d2a6c618b64a957cb1fd379467a2d8b3b85b71a2de42ac659ae65b8ac0e024148c7e99d56aa750797b5034e4bdfe34ff6a7eb6a6091204c8abaceec2c927d861ea0c3f13d2c28927de2f9f5f1d2fc50bc2492716c25dad279d57becb4e38a1ce9978796b7b7f5032279b58e85edba2a684ca8f324d73860e4e34e1da6db95a7d5ada63e324139edbe9b816e36a6b85658e134c3c72c5f694d921ff9f934ba444bceb10a323a4109f5882bb952f3fd952a89d659ae6042795404c6b99b1fe71f52d2c28629c5022bd9525325de9ad3d3a9904e23a9cdbba9d766b57a66982ac408c1f2e2a2a427efcf84146d39c48e2f85a2d53b1a747dafb2791487da72d3f4c1dd284182470b13b691d2acf4477159c3c42573aedcfb11f6ef393699a1b7cd304b901192a9df25284480b4e1cb1f6cf9e559579d84e3b698423c5ac9242acce69df1f3f80dce184119ad6e6bad5d44aa9523b59445abcfea462eadc3975ba858ca6e99677e34411cad22bba2f55ecdb46e32411ceeaa8949a4839ef22179c20e213b1fec5fef964429f691a169c1c428fa5ff3f2d1d420d75a669d83831c4df6aa2b6f547a9e49f691a354e0ac16aa5a69a0fc254c7de8c1342b4d53eaaaa1b434cd50f42a9e24eedce27da762688e7f50c95a974b0ad5d814009157ad464aaf0fc02c29db529e3dbeecf57f11494159657f1335656d0342e70b0b0648a9cfc011743ede0355ce85ce2133fac52a672971eefeff1229cf401d795626ba4581ea5480a277c68dfc4bf9eedce75e6134ef6b08d99884b97b35d27193fda006283133db82652289496a8443127f3701c0e464110c3200043c94d9b0083120020282824124904e28024caca0f1400023e4c489a462a262c8d05c491501c1086c45118c4300cc42010c5310c8651344ab53b586dbe4b345a39332fdc2e6829dc12cc2644f03012cd895ddd7b0a5794087212dedfabf03213364d93dcf7fb0f11b2426d2aafea1dd84cc0f5950930e36a53c09a98e72b53d0a4acc347023cd3630138b701049c119ac5350954b16850daf7b280e208c8419fc8e09e1a3765b61c15072ca394f95ec2cead48f6a8eda5661e85584c756c7a3ebd164e1332a03d00e85738b2c3e55ec16236cf966c2d00b15ac7803ce95a2b366f280c6a1c1b9ce440ae8be962c011b98a74855872495f0b713ec51da55dde918164d2365f87defdc96be92881f33a831db424ba9f2ea560beb4fa0611693ef5ccf930aac9c586e6238f26845359d3b7cf8f2df6cb0b58b32e61d88b25df175496b34ca8d3607f811d60634c696ca1f9ec894995e7ca1683ad9a6f032bd216f5af9eaefa250f3e5c5f7d925e1303c64b3f9606dfa14515f20e4e0cdf99bd315f5cc7a97ce0f8c42abe1f7ea009bac310457a979e34b6cace6993e925b9a4223bb9de1440b6e33417b306f25c87d0cb48c7c766961e1e2442b446ac97f129fbd6e2922b85ec44ab5fd08de4eecfbb9427c12c493005cdece038893182fd7d95c7c7c12952f4e48f35d8e7c4290dcd367e5b4a115404855b5eb20cac73a3eae1d4126d54f12b300cea8ef78286b88ee8e93103cd0a9d057d7bd6d4a0e086bff25cb37a85ded42d738b304af08dcd7bd4c0afe6c11247a398bcb39c7ca35c112bf21ae407d4c876ad739d3692264b4be4e9bce28cbf6ae2a314ad0408d10ead8305b21fb0634eba78d911c1aae84f1fba64a0196cffce2aa439adc0cc1f0942734a6984c3cf4ebe564f6e4a8fdf6ff19945b2d9ca0f7b24828cf8c581e8e277703c3c3970d51d828052f4b29248c4f1713fc7a45f32582b7d3b535f4f98b1ca93847502499e8c628c31eb692896ab2f7785e5e2275964b60686e6ddddebd2fdebfa31f3bb62366e11d8a7d77ab5a9b9883b7bfb75ed0a43bbc45ff30e6f840f535d18f97e9b729ee3e45f8102f36ad8ba37f59b68c359ebdf658e7c2a391b73913f3cefaa2f9c0731cc42868840c7cc5fdbf94a1ab996538f4b67cd46f52f44ba17b0e1e6e45dabf8d753c4484ce944e9ab26d1aad54712c255c377a14da4875f50b646c0614f56efe34ce21e788231b9210dac5200a140b3abdb8adb750799dc6d98447269d9ede28242a0aefa46cd44e227edc1b2e4d7426af2927c4f47f247b0df5ead973186568991f908c430abd958915e1abb883acded7ce5a33a69a5d1b533550391a48c6195bd5d91e65909764525c3fcbe34a4cb5ded193e9cc34f9e27b0c9519b2c2bdfe043615158b8d6c9623d6e342e4ebb21842b257cfa2de44534d1269c13244f3f0b93855691061414378a51a7614552be4f4bccdee51e63d33c119bfba56a70208fa9804b52c4d4fc3d4d6155d32c6947a7233c69eac222ff8022fb0062b61834e097bbb0ae11aea1331c56466fbeedea8dbec69b0357b2ec3db283bb2e7b77a24a14b2d8534b6f86d3c0e39ff1b0a7dd7a2fb39f9561f844f6add1a088ab52a57e4b21dafe802e68f68059b42b23ba61687c3455a81a636e7bc6475c7f8d5df5e57f414588afcff0d43cbb926991a80d3ddafdb5a0b5cc580ba42cba81aa0e1adef59980d1b9681a7344162523bd558dfbac06bd074f93486442be6452c399cf2bbe3274509b580505f463c99f8e004a1f5229bd5a086f1717bb32dce4620980fe0289ff07fbed59f29a1aefc3392f4eb43fc650f180bd9ce33f9557b26577676efabc532652f404af07b219117c85246ea92a25d9d9433c6cf249c45f12c87152ca56886bd0bf75eb92fed4421ee043cccef14215ad501e9a0b13d40a90b086e9c5f8afc3ee5b30638cf6822b37a536d08223c0a0422dc4d09c350c90471086c9c0ef9691248e82c4eaa806689cee863454edc38b5d1b0ed08215b9689108eb1040c7c7b48a6ee7d1ee8f26489262584f77f88ab6c1ce1ee848a6ebffda686cc32b14a5c294b7103afde3e828b9456f9309b40e41208213c66b684aa6c007b73f2f924df66a23ef43a575503cc519fdfae9e8130400805f563ed22fd54a5d5600d975e914b178807570e1e8c2a1f807268c85c4791fc3093b885eeb6262170da25c98ded1f6e44dfac2dca6a226b85e6e2a9edba934a9c5a111a3e986734c37d9f41d4d90e5140ac286968287401d5b4987de4373383a86c09cc3b6ea3dc707c2380a8936bf8e67b1706c913ca838e72781b715bdb193591eee8acf0fa3434e974c41e251219a0613a09923a0fcef621ee72ca43f9d7dab7d2d2a733ca9ba6f13858020e242df257406f675e0ced30da184cc3b46bd4a302130318aed71d1bd9ac940893b26f7d05c5ed1b2b8d18fae43aa6ab035b2e90a5028e1d22ea91e04ed8087a57a1d1523e2338894e46d872a14cd18736bc2a9fc80252e3c1bcdf14a3bafef05894ecad924a7f3233198bcc3d725086c996a572614d432fb73148853f9569b4935f6c58e11e805c70c812692c23867e7a35ed1c960a5850252b51c9e263d43501b19f4809e9d995e59674acd6d44087c992d927793da54f0380f16ead9122f718896d5f3a2c58e9f5b2d59f20bb5b745667e60043bb252afe80e791db3d4e7cabcd8d995ada12efe6102ad02ff27ac2ccb478c8ed026ad4d57a75e13dd312012188cc4ae0504b9047d002864a3b70c7ece8f10c99a271ff83e3806cdbfe63bc1db6e01fa57357fcb6a4475b5f4a95ecf212a318cd6046c37cf092cd50445b0c804e10fcd6cccf37584af3744b9e385999fd8b48adbebfa19289ec54547906eaafbc2a8ee07a767ddacda6a8b0fc4c572d067568accbdb8d270015bbdc848201a1f70743d1c834252445ab888dfd605ac8432a89044a5e5b52d7354a175e5467b8a9cf22bf4d68aa28c4697e8ef7eef173873bdcd452ac81bac1af82a0151fae3c9906bb1287793f47e3674c3b5fc1434840107634f94e2c34794a167c9352ff14e702e616210818a457c4863cf405a8c1bb8f578470761f23f191f766567587ce37ef05d3ae22f99b48b6151ce41c16611cd4d0b7f2894001cbf667692dca58d4bcad3a0ed3392e3bce45fd37dbe4801d6bd964fe72bef9583b8a16e35e8c758f75d8719bf51f42f159ea559ec6809a85f90a70e8d42b00138c74389ea70ec3b5ed69dcaedc268d3ba0f571c3544da62d00e076787756bc9409df35c8fe36d81832762d58bfdaca70b755d31c75f33abfea865509b8ecd2c906d0b319ec1512bbd9937c3595240448d195ec7a0bdf902021b4cca94e57b074a0826897131e10c7a8919f312fd49bd2c9f01da25b11ce9d0ab82ce106016338a22ed576ea33b221c40212877957e807342206d20e1a21628a606a0bc2149614e6400c3c8c36f55a2b4dba29a04fd4ab983229be28b612c33c0db44f0839de55b9d36bec058e87e8bd23dc71f367a5fb9f90a9e3445121661c03bc2169e2b7b954d8bd91259fbb5ccdc7f94407af3d471f82ae76044154c6ac8a60385ad01a7a5f72bd45e818487d247035cfd44378d1526c8bc3f5bc8e319dad55834627b20bd239f964fe8251929df2e2abd7806e5d43a0dd2fef5f5255796d30419dbe182a5c1f740fda187379ac19d4aef0c83b63442f96c317f1642891d15485d4cde049066a9ba5187551ec570913c32e0e909a8578e80ccff6aeda563e2e6949edb5a3ef63d09acb65ed9c79827d5388e3378b4f8ec4241b046f66b46e08fc0a381430d4fc34eaad354176b14bec3bb4489aa36e1b7c2ffe768a6224d0845b1006978c680ae2d5d9330bf56ca678bd62092b4610b3edf08435752727551f159a3cf8549a803ddd28669cdd6f341ac8a4d6d59904ff6a9953a3ea21273d4c2e0caa861e8ee74a8c57d1688f137dfd3492db4efad47b9fd8c9c5fb1d88c3e2323f63128e5fe9cd2c56ccff1f7c3ad001ba48b875d903cddf92057825a5973cbe067b130ec2bd07e369a63e755ff3e550add2c90c8bb528c236f1bddc4a0d0ce3dd07a6a38c7f798c7b47e6278e7d911cccb3124716d5ad23a4341bd2770ddd822d611e1291d1553c15851f6f833bdc1b58e9569b1b8eb3da2a6033d1d30fe000eeb6fbd2fa79265bbed4f6e0d0b448da64d4abda02219990fc9cdb97b81109a62500c1e6fd5a9cd282733507a8391980d0bf7f0eaff6c62a7ad008f17761c048032be802e1f505508e71d4338113549f1b09c7188faad250add7722f822768c21d03734611719127d46dd585e9169ab15944e2a8027b3ecd2875e8dd6d9998e39f36d865d3279e89490482843c95f92f546b22a4d46dafa2c3c332661b17a38b6d4272cf0f47b92cfd9df84e66dccb814c2a42df68577098ed72439fdfd4bcd8abde7b761b299a38d560f19db3c0106f19194588cc51e4365af696d0577fa040469618b95f32709d320c4cdd11e0aea835bed86371814c65513dd55d6812aab23af32177779cde437fcfdbbb45ce91afcd341de7ae94d630052cd59c191e170c3eb9731b0e8004306fcdb5e7bdc6adbd1127046dc6858f9c4ccee1e3498baf5baa8e5307fdf49c9473b774e6779678662144b325a4f2afdbf1bf17d70722246ff8e734599e561d7c16b6e2a1ba68574e45959b9aa1c5a4e1a2dc18185cc9f4677243a72b0b91088a45a683b1fa06c17aa2429b8a3751e8aca7e9ed366df0e7f9eca20dbec5a2e74d4e1018eb7fba74eb5fe0c93b27843daf0a154708e0517490a7c97a3593de340f128fb1c37a3879ae4f92f396e83bd43431546003f51b2e1173336f55159474ea188e99420ab2f4eb816f782299744a16811023e2af9461908ff81bafe43fb7e571851ea3b6e51e496cd4c3adb4649f478bbe5879d1e460e2c9c2f49920f6ce56a86899d8075506a569bf944d50362a4018be6692db979fbd643b01b0795c5172337220455eb9f3c9d25b0686baa6bd3be899a2b88971ab4f92cf2020f5376e70669f790155a4e48d429dca9626c70ae6f9be2725c14c4a729a42e3d1c512087e6743621da72ed00a2ed50ced7e252a548e3ed2d04a767c4eaf46b08bc49748b9bb582a63a28cd32620f4ea8d6db06df5d83d031a86bc6e75355c71c655d7322d870653a73e78102e369613a1017b54363c80281f00d4a3f26189328b637bb38a9a476e12b59315aea4ff4c75cf0aba05498f40c6c80741d7afdbe54785cb7a25502ea73ac4ea8d5a5837d22e5790eb6584d3b5a0c176544b5f59b8fb159503ddda283442d5233ce8efd9b1f24d46d7c39197b92e03599b137a050937b799d064ea724eb559bec6e213722f189986e58ef0731ab1c682a5ac3a5c68606dd204043f5be8facbd8a9683bdf8ebbb8823361680ad2b9d0085b73756aa3a38748b32708669747e7fc0bd5ab7cc65dba6061097b7059d19237222401ca42d8a101833b038b3a37886d0bd63c71513a14461c70329eb3b6b4d128c039d803fa46802794f36234171b5e35a54ceb666882a3516f9042e1c125f079a826a2fd3079deaedec2fd93268241d29a0c7fd9dba1b373ec92fe79a095ce7010ffd66eca773ccc02d4e3a513acac08b46d0bdf3a0a23925f328dad7d463c78dc0dcd91d56e8454df8857e827e351d4af35e8cc445c6fbc3b8c483476434e0c3f947df9975e7aef27bf646055afbe6a2e0c07d93b3040536b0add8ef8009b183f8335fb974a2027581b464bfe0e95005d50553b1098457674a57584e4f95946fd24c409960fa40c3db17c35c7100572ffbfe968d691f4830e072da3ce6d423521e933690d7fbe158e640a0fdc878fef06693ac18b58224c1f2d774c3f6fff03c34c4713a2204ef1b212326dbb1c6e1da968d367844e4aaa7f3b28587869fd1d9c5496ad5083c72fa5c6732d2a23ad1882bfef61a055eee80a92ce2a846161f822511f9d57040229d5b8f15628d010627cc9c767cdfda1ad04c7a649425881004c01c46ac8185d6d3560730a529e8b92abee4c0ea380fa9382e65b3d4570c90cabf5c2c92f51ea29c0de122701073ab19b2cfa5b3a469788c5c90570af23603893e14ff14a070eeda7c4501b8fed18fa798a0dfdb7fa3cb97daa49f6df15bb56b4fbac2f99f6219356cf7ef8ba8c1c9e21478d4b6e797306e0179b8fa0c52f8816a19f21f318624c77ea1900003a45743e44e7bb5efdb4092f5257c2f7348fffdb4bbf21952b76a3d46207c6f6f1a94078bf8cf0b8887726f99d273254cfbbf80dd79f4ff1e738ba3e537742ee6fbbd01a4877b98358e8227fdfed4c3c8536200932f03dc4362aefc0a328cf6b2e6cbfad69896264f49dd609f72226117c17bf046367d5cdfa79637b51a481c204922b6c3a087c0f5eb7f4e3b2fe8c16b2be30460272d23af6b63efdf4a2db39a3532df3e0a24af1cdb2ce90d175304d382002c736be33837c680e6ec7239b7b46d174ff0522b599302c7c44f2c65e96c75f224f29c2b5ef6914b5867c793f29c9acb52f9ba7a7348ad081db615d6d5b167d85b44b7c547e1b59a9c42add733605c373572984142630dea097e3656860b5d44c27d9a2faf1f2a6874f1f5980b592ef8935dbbcc16999bdf365daf5aae67ef7261264f40ac6ea2e8ce309ab5003187f3f766e51948ec2419218018421c4d1e04a1bf1fbcda688f79e4fe047bb1138be32b13e10bed86f515293fc5981f8c94583a6bb705e343d85c5254fc02a80df3f390b9e07e72433bdb01066ad972994d089b0c53bf08ae622c626fea24ce7c42d1fdc2fb92f65879258122ba7f2c45a04dfcce178ed51648a9a10a47dadf9106af58f80de9fc2070617a9d0eed39016317f6aae30c8cee1d690e2cacb15802b05d3454f3b9ea6a701e0065e4c6e819ff6502adb72c243eecf5711f1344f2b477a3d6d3bd6585aa6fa81a0b2d3754a2e3a09318bf204cf25fa4f59e661fce1b5ec204e659bd8cf9aa060a654f8d5e7ae381bdf8d7f25d60865e3f32cc6347ab8b876e94991431645e2b748c44f1e1c348f3fe9320d7bc12edd383d7144df615934bc34c14e759d2c9b638bda55142519ba6cdd88406dac7cda2f91aac289e6c1834775aef102eb010c093783a27732a31cdb4d38959d26a4004a24e2486efa69b69409c6f706631c1c11480f41572ca5ed346cac4a3ea0550535cbc1ca49140626a5a91e79149a893b7a322154b5e26dc1a991abec77f2459f5c7ead95c21c74ab9a34bf2924359ee11d3a3f0063b6f63d4104e45de24fb15fbf9071c796abeccb73d77c35d8bf25ea74a75c38f4d41dc4e51db4d426f0c368c0a9a93770fa60671a3ead3b3cc31159f1350187a60adafbe021a1445bfe4acdda8efc67fe484b8c28702e7f394d4631f851ea25f188b0148fbef73df3191e72baa2ad70545348ec144598cf5e76e513daa32b2f9fffebed418c31f144bb41de5065db44d6a1abe1061c6e743c709800e8fb7927a92066f73100a230b9aeb1db155d7ba0e5dc49398c27c4b605b37d008e702495b2db4a222e3ce89e14f8210e25f9e81a0b8424c8a97f2428094f0b7afd6310ca455d10a0e0f53b04238f030b00c5ae04175320699aa3261d74d074e0998ecfb2ee0ce939381d74bbdd4abc8dddedda2e8f7ecd357e108d44dd08f0a1ebe7d62f771f6445165aa8e2c8cc9c2656ddfaa7aa126e33743b6557ac857d4f5e888aace97d0b6b6070a88ab59cac73c95fce0c699de1391865e8cb0fb1d70ea15bf8be5d8e952996bbb4d75961efe41453ab430426c63205603c7e4675fd76d8b05d108aa9d4e48fad504f84bfba241ae947d52a79be204897a96e7e5c4e931f19d13d2ef447b9cf0e689e97da23d9cf0ce89e975a23d9ef026484cbf8bf67ac2db26a68789f662c27b26a6e789f638e16d134b8f049cb6af647e334df0be09eb71e25e4ee85689eab9c21e25765b45f530610f2776e744f53b618f13bb79a27a9fb087137b672740a25603face1dc96ff11e93432f20f8ad50c9789715252f82b72c81b00aae80e3aeeae87bfa033ea300fe2b38f7de25f20ef5f05c690fdcab957e7f533107f44a5ed29cb206b0cb588404608e89d8ad09442e01497f9ff6de96e7ae9b9582422c21b46c5d7c887487a73e9e9df8e715572843011de60a9ed55fad16ad02d6e3421c24a4c374d8c3c1a73df99d2f50c0ffc1eda25ba59d220e1f3f15ed714b40bf00ef4487ca1b1fe78d5951e7e57a9d08bbdd46de97ac40f85cc269d3da2b85bb11fcba4f0200a6a3fe5a2883ae188fe1809e4c1731ab44f23a1ed194d6a0f8a8e1fc032c012ae068764ba9e4d3544313a8e46b4dbcab563224b95cf886dc78800eace8ec10a58eef855c6c20f2849524b8fb5c9698051919bb8f1eeac46fe8bede2ab4967f2aef881e82258dc8f015ead31538a93d0cbff0344309e20b542731ca83bd743dc6367ca7a409047b9c052f5bf2b6507f689849af526b7a74426d48c5390f9c6da53c28feb12f0e7d06a078e7da3141707c394ba3f27f56185b1f765a2dec520326f882ecceded9b144350751daca80d7db5cd62f8c05e98521c90c88ff2f7520b55e23c87d78faef10ee9a554dd56d58671af987e9c28a139bf0ca13d1e3e8429ac2e808bd66c95b274b0c1d90bffec3f885470582e3b93c9a48372ddb1e8036ba4edbb336bf600dc3a8f403660759ee968140923f32e2b5227fd1bc071b5842068bc71e116937e9155f6fc89b6f42a722d9f34d35e7165c47879ff6666564f2be469a8f4741f3276c14b522b6764d0a9f63bc2b1709bd0321715f057f22974bb6001577f177e931fb7b08a95fd83f90200572dd8aed63eff78027dbc60d1f2d3b34915d2216c08b75de20bda878c34d7220b490396adc89bc621ab443fb452a03d35811d744e8ef210ce33e3e93611cdb7b5c8f66faa0094de053811a70193c2628c410fda66af1277fde3867d4a385be3aa96e6cc68621f68499601b96c013d164959107cd10fb1026ed80accb388428c750508b3ab0d63e80300436e191d7172f3332201c62f644e985a83df3bba615ebef38e51b168f637fb668d19f69e5a3fccd444bc99588a87d9295b89d06d3148b16e941300701cf3eecf726f522c60c61db55c1126d4ce11ea1d3a4f96955593386588de06a98551dee800f2ec99aae593adcef2d4292166c5727c10910e2e582aafff19b50932d2653ce22280ae7d07d29050aacc515a495d4355dc0243df93568cdd5ce1140f9b0f8615a290dd1ba68ef8f37933beb38fec17562444d81e69dfba623f56c10e54df1a56657124244add6d7677a79cb0e0aeae1c43294444387ab96d1760c90418545a3039a402b2aa021bf513f5c21392e45e5de01788a63c3a9563d51f28ea33042b57f017c713f4ecdb6570d42f5c0ec9adb9a069b25b8dddee787cba0432dd0b959048120fe43e70ff0d21c222827e72e4115d9cdcb7a2cab98020fbe499c0c536c4c2029b6cc368a671dd6a41b9f86e479b7d6e8fea59170840416d4e7f341a29da21ad5759412ef3c1f982e0f5b0a400fa7592f809bfb29ec45489cd16e20099c027f383b2e86460e127b36bbd326b4c1526e7403c9a46f2007be6a8e2f1dd0ea323778855523460421d9457df9719d26685073f6b0a38cb8b6cc146b4630f07eea3ff5906796f94602840e9dd395f58d0e1b54a0ffed13878370a7736a30b3d26c38cc5239522a903a2bed420b9e94f1f1a9687d3dafe120b09b555867d9bc17967203cef998e148b1306205fb87086e1906a41cb576be64e2387553ef44ef3a6327a05be131a37d2cf0368e19dd3ea6cdb9022e508ef54f786d42ac8fcfdf7845c5b5f40af529c0e8714678d863e14cb9aefbe1595115ac4cfb360bf51746053cc7829d2d8779eafa8fcf21de4e56c657b92c5c5bdf58e99a115defd9833e0f7782c7ee6a6055b3b4826e4b7b13f81a20594fe05d26a6d8f85df504a27f003549e07703fb9bad1141ebe0474fa2a8d14e87eb76f7f191e70dbd0530b90e212a0443416236586a6364efb45d77cef0c0864957267c78fe3472c8bac53d0a97fdcc4f7c74f172d675b47bdc2bc82cbab210416c2b11cbc1913489c22978aff0109e139d4832e654424d60c492c595b3fcd103c475bae25d6ecc18c39f7813ef046d14b557d9046b6187833e9c77db102a7f667c05ec9534e9a609400647f146d14ab5fb7610f23b9a1d5e7c8d6c328470b73e3fc8218c2ad643ced8758d025ea4049a2c6ce4af180dd6272eef95f4f53b6bc2233a8e182e463d5cda6611c8e1433d90cec58dc932d5fd9cdb8cebce7d5c5fcab41977b1656b3b2c708e8a79de714c66d0b5694fbdc990f864139d478b22088788eb2874d44730e085d45e1ec9303eff9e891f7f621aa26a8949b637183f6f006fbfa48afde8868deb2550865ba9560c910e0213361edc08a25a6b15ec404a05c2a5f3a89c0cc0aec55ee3275f83cd245e0784238446045f422c62eab73e4a04adcb52c683e3e8cb3e2f409022f28b210cd7786d8ea0e3fbfdc0a6fc67014da82d74987b548a54961a66c1dda0e84e4189936225d50d6eb200f3a7054e463fbad69f72b84c313d234600914dac834ee5df6aecf08c2de9a4f2f2d9a6345611ac54a171b4cc89c8412e99e1d230bcfcdfba302ff417a1f5a5f0f774c2849ca50abb08a742586e4015d44675e78f7195c4b152d11678e2b32267b5ab486d77fca28b37a2d5ba261183b0834b677ae167c4bc3035659cdd2c3f4ba81ddf10867b1beb998edffdaf77446843040fefd8d33bd59c546ae0f5aaa2e61c7791f0d84c332e81b27382fb480fa75a5b08b5d1576b65f8316322e01a7c619a8af93ee39d3d555ec975741d864508a3738b639a45c405005bcc6853dc843f2e7dc1ea007b43b7ad1f7144ef72dd44a03b414c57ee2de034bc103c10c70311eff5a927ca717e050cff1c40328c694e57e32b0d7d1c0dd1fc0a55094c901d5ddaa3b08f6d2203d10054cb637fed2e7965275b1370b8f4be328688704100620ba6b5600855a7e8dec2fbae52e563c8d422763a30a9f44cc6e44a9d0c0c84bb61a43498626807a48f803a0fa3294354c16f7e451f0b5d401a10a1bd674a77c6484269a4c92545ce02e2907c44000568c14332e7e29813e3d53cd3bd73d2e06d0b6721f6aeabfc4eb37c5428c791fd35b454e53a288fa0c57860f8434ee594fb287cec36a3008d10233227d761e4bcc9f387b02bd4a08d0c8bb415ebc4962eafa07027b0ee960970928934fb5a3443c249d91cdb9ba21239161f3b246bacb5ecc323295e54d6b74b394948921276b2d3c6cdf54078448dd9bb00248695fcc290aba4d5f5b84ce570ce8a87a51c4809ab0010f145165089f2d731a28a935f030d73eb5f47656b416b0c1652d2b19276cf680574ec862a07090633a68ce61b6e81b21c5eb4e851d1b9d8b009eee93d71270624c7e546446a22e53f99d91a91a8b101592dbb31d33e7f39928b574859b8af5b2c221be538982b911b45fa4e3caff7851feea2ab77baf386a86b892a37d0d49411bc8eb4712324c1481f58397267bab6ae371b27df272b553ff983f4b9f383dd1d504fb75dca7cb263f1eb482b33f2891e8672014f248d20eb1610ef4aaba9acd4fbfa3c03701bdf9b130048859c38e9f7338a135c9acc3d5364460c64c2907fd6fc7c9eab02da2649c8d22b822dcd00e6a67969ba4a709a38cbd77022ec999a3a0a64b74c7fd21f764c20f7c2ad0298736953b88a784fe2ead71b9f0753899bf905fa3991e7fcf9300df95148b83136854724cca0f7437401d3c747b6e15884b4962e0045a6a2a730b318ea4cfa7906355e16b0a6d9d28913fad8624069703fb6ba4fe117bc9e55af20270a303903d0e3b0d4749c0a35e4f92828fda448588ad72f2e4f76dddd4ef77eea16339855a8a8675e744cf420448f06742a578b58a720737715e71eb4cf24c1e7e703fcf912c68ea3cdc94dd4966c42faa1b498e945cda508fa8aa8e4ce23fede90cd4edf538e7a2a74fe2db03368a125928f1a7c02e41437443c423a4d3ce51110cb6da351bedba2633dde63d8f3efeefe1c5dd4b6a845447f48842a70b2fa76b1311d369dd11e69d49c39d196b595dc3a381487c3376e59f9a45beb426575311241b843a893192f9d0415ed8fe4d21666244bc193648af2918912259e51788df40aa22821fcbd1cb88162c7509dfe59c2708016cdb53a3796776251ef6384491d78de7547f39059f099389d4e947b8a6ed512b281b196f61bb11f3b02b929f3941be8ff368fe84f9ddbe40574283137c42a780ed3b934d272ddd5148b83038e390f6784fa861f09944ff8b0bd24a819234f5404353272a64487a920074fd0a2e96c15bc6fb8da4b8fc07fbab70b287507eea6438311ed7b220981c8a7fdebc30561ffee4435f96ec449fe24852c0f51ada24b28d66bb7a4a2316866fd8a69c087a784466dd82997e2cfeaa2134f73bce670cfecdbfb3facad6f1718274ca67cdf85c2da6e49987bbdc996f6498993e8ac3c41e1e9df8162be8c4038042d56faf59575e92cafb6c57308103f2e58298af9b358b81dca907870b2232382cdec3b2d18c1a9668fb674d3d2dca28b334948fa47ea5ca4b916088717b2298b078ee16e50fa100bc57966604edd650e0e3f47023d961308a9857fbb05bfe759ad37f7a53cb567f89732a5d09312be21dc944f1b1bdf77683b4f640ea5019f1ad96c4c0cc5accd98061afed125311bed7c5bdc424f736f2234b62ad06c0601df4116470e35539c9f357da2d5784b235a461c5440c31cccb1c19b7d077021a75283e0e77a3e41e4fb0242dcb654748248a14d507e9e4bd94e92473d90a80dd3ca1c8f4aae901316bbfe487ab9ee09e2abe68c2cc26ba604a5d91cd9ede75e3c08b8b4fa41cb5cbf8b45618ad335ce0e0f314d55c08c724288f3f8addbf2032d2ee5bd113da0ed01fdbd354485282330d07b1e22441aa27bf797cbeb73b321aee7d5a25ee327e71a931568f3f3107cdf629067ff9f671342062b8959f272c0e1f3ad23c1c94356e21604f60ca38dc64248e92cd13749d6a5aef6420efba9fd24d41e8159fc822e747e76624ed5e9926f8ec34d4f13bc92df79a342b7bbe4d9ac46df29406038143f4421ba3ae52bcc6ce60a452a5ac0f9019d3602138be214c3f0e7e12f80fb2bbf7664a249435fff22d45bedbd230a4d3068c4d2b4b31dc35c4755e001b4baba0637d347f24d0a3cd43fef10dacd4f25b401b4afc0aa675ac4176c548f14450b2b6372e11d4d4ddce5f8abf6108b71808d81126138b95f4bee51d4331cb3bccaefa291bd47a935a8fe0b02ebce118506f8bbb5a2d5444ae361393ab29b6239b6f19be511c1301e4cb8aa77c4dc5647266259178700b4687c29c620412825cbcccba5f11a7823daf23fb1e3151d1dda1a52c28a9b8d03ccd6f388b76e5abe39795afb1085aa1c148a8a709184722dd70b916269975a863902eefdb63d4d05c4ff88b8c7c186523fa97bdd5ee91a0407a9e6dab64a2ef5489879faade44b6528fba66d90454d78f0c7933cb121d7ecc69e979b89356d75e467fe118cdde4e9f6fb3f4184e2ed565adfe1583bfcf41b68d5e7322af2ea4b6679b5e6d7796c0ae78501607dde127693fd797d266c6baae42f55305021634a719f3fb5ea820da24c8caac249ab076c8ba7ad0472bd3b50846e693f011d1922a885e185d2d5326e911e9d379dec6ebc7252050fc27594fa298d32d26cbea8c5c9d450efcad281698e92b86b07615a29c8882eb0f97f098371f954d6991d624a9ca8fad68452aa826b29358c8efa31109d6da9b42d7d58fe5f5e8f669ff2206aece90a213015eca748495ae1d61c2bf9e7e3a3178f91a79ed4627f1672f91b97b7d24c80681521915fca79b42975f243c67eeacf5d823458ea70a9ef121dda30075cd691ec13a8b6505521848715711ca61706935b2719207000a183bfab4a6299884fb5d8f2324a5606dda02e5cda1b65b19e016afb8c457ed0a93f13bce74931a7056403e06cf55283ac57f8ffa39989ae8710858b7dfd85e2cebaf225459e3590a4cb35e4a8ff49c03a224d047f06a1abf4bd4e04e70266332589217d7fc3487ebb443a6249afd017f2403f0945a86e94b9a7637f31541e63efc56dd5e41a579d26f4308f949e14496c8f9e9508e2d6e0609af9c092c27792511f7ee0d9d94b6403ec91633fc75fad952592623780ce7a6ef6b1df9b1242a961d7ca9fd315ddfcd3ab536e5068bd324a66fbc0a74e36ac4ae4d60eef04b5c51c28e72de5a84fbafc96bfb19062166300056c944d5a00b0429b875e0b87bf97023496b286e6e5757f79f6006433129bb93a814fb7f642004f7721b3f1e1dba1e8714400d3e738ebb59fc3b30476e6526a5f1faa5877fb166006b5925aa53e15ef0504299677ad861e314ed87c482a37dfe5d20fc4a0b4266c962572979d3b07624cd190772a2d113df272399d320caa8ff7c2ac66b610f53a5ca12fb92710c9e700637030979845e4591de6149fdcd59afae618252d6deb6e5334d7daa3abcfa995dd3725c42c82746d2c4fde89200d632b3fc84c495c8f146b4d8ca9458d8221504505c4659bd1489901b920d8ece029df885bf7db0fc635ee3ab30e6820c4fea2c8aff7a5b853f66e6035145af207323e01da3a28fc3f6d1e5e8d154bd5611e42ef540fe158cbdd20f10bc8a041f09f936f05cd538f7cd00a4dbf24944f1428770463a3314f7462f9f397e10f3da422942a9ac77f71742f3bfcb5d38764f3c3d933c5d880827268a28f5fa00b2b327910d5e1c8cd39986c3727e0d981f7003943abfdf01a51e200369f87c05b326bdb0a7fb044a98e1ddf998d89f15a96f0e3ace2f2940d2dabf8d8a4a92d8641d44cb39770096a46281a7bd81e873fc1ed7449774696e3fce96b2a6562fab9021c0730237b866b9044bdefea30a0493c179b06470ae07677a7f37073935c856b6711efdf546a6dbba480f3c7b4acf9140ba6818a601b17b39ff992b8f20fa74862638191d3d260b151360c221b0198de7110340010815f8f42e6e9a64bb7bc5bc37a2c2a61261aca89ea27177066e2001cc90fa09301534494363cfc7f1032bc72310840164cd1b8df1402dec71e0587839d000b6c6f6ff74dba2e8c3990d9609499be05deaef268e6ced98c4a9361ffe09febfecb33ab0bec030314bc3ec0e62cb7f99c5ae53bf26203a486269c80eb5f2096389632589aea8425048f83a5c7b50b88759b82fe42118886ed7d9da00cf507e5682c679e3afdeb9890482b54960c34bfa0687c1130acbfad68ac869c571c33e62ed614a8f85b2345101429139c726c3dda2cef702789880081f8a87061e176e5a9095d1f01e2733abed9312182c5b1e8ab7817a407e4d3d9a0939fdc82fb37b75b6d4c28fc403d17c23b92a215a0c425c9a5c964f322dabadcea368a6b1f4b57d4188a28a1684df5c0d579a5a196cb5c7328d91867f3c85354de4ce020b33d6abd45b5a347af8dc0a040d896a686f40d941aa5f3e31537caccb50c46979cb947bce682b415e6cf010cb6901cd84bc6afe3b1aae5c837c54eea300224062b92483b5f558d8463cb49b847b6c6b43369b9efeaf4d0cafe9059710881932dbf3acbe7f255253021f7b61adc0abaadc665f134277e3b79bcc6855cbf9b7b20bd2d25f8e2fd78e8082817e9eeb9fc73f37468ade0e317f2ccd0f057ac1dd64a8b667f6d652ddc1333571190272e9c667160ea297c07fdc7904f1dd4cdac9c78d7ce1b906ccdfaca85cf1dcb315ad1ba9aa76bc79e6283be1ac404680a4e0107517022f7e45bdcb3de91be4300dba4ccce2862652f588c2f7f131c56beba22d6eff91787f78f3e30c4ab7e6d9d44a0b176145d62f59e63df66ae2c6dd9d609f6c4ceb9b22beef482c9e3c7cfe63c1f6ff4e524ba560bfc3a917d4f0c919eecf44bc57030c00dcadd5bf49fce0370fe7286778448fca5843f7a4a0d44936ff2bb9a0100c780821edefdfaa600a9352f13baddff74e8e9b203b55fb6ed17ad286bf75fab80e59f0f6520f496448a9005eda3163238b2b3461ebf54736a9dd4af96c6df6b229090537e81c26df85726fe0914652f72d76494780a89e39c7bc135e7b26bd7faa1faa29b37a48cd966cbc91dac72d347648a66090fab58f7bdde53822d12a899b398bef363fe48b3ac6930d8c10dce2adf88388cc99872b8ec11de9c7bd947f1fe8e4484fc19af9bfba19274c97d6767e143a1cbe91d41b0636117b77043a77d2edfbd6d925f6779370ad804842c897e7018e179bca727529044838775010823c2b6272ddb16402637d942da4a532ab8564afe6308568c4f63c8c831dcc90d8370e0aa590cc80f43311fb45c9fabbc3fcf6b0e3f936e8a4736c453f083eda593bf1b31875418f3019fe8c1a32916133d903c9b42a4c32ca95810d4e19a4b8fe545d57d7ebe986a6f1c0ef0eb83aea8ddc0d1c8a7654357df18ff148785ca8668c71360ff38d892b5ff7c824edd7f76e3b64d43f836c1c4027896c05770794eb56508395ca355a0e5265bf2e75626fd082bbedb8f4d2a3f2e7091e726e430856736c66c1cc38c40aa95ade9d174390af4e697fe37253b054e67a4c0db66ce576270674b8dc0e05878e1286015700e0bae15bf91620496df7f5a6fd15c58df9a1b16f9c6709d8fab70e20a7a6ab84e74a23d700c610ee2f3bc83b5615bb8ba7eee79cc586a01ad3321e2de223cc1e3ebfcbb0ebc8bc46f8786e76020c07478162370e73c58c8ca6f3953c5029191b73bf19cc8be28d369ee45c8461a1b66598af331c63e454bbe8bb0ce915fb15af0378ebbbc736c99f7fe9cb71139ccbdbd25e2e3a204ca97be2534cd6a28a183c9214325d25b50cfdf3084f7ed6521bfff8a0444156e2d6b6ead317a7199e134c7ca3273eb0f8fadc8883dd32eb8c84be017b8919f172b68e23deb1e3219dd0251b02b907e529183deb964b4f3323e81d5ecf3988ff72b381de601ea507da4405350f93c8fbd6d2ac8a9db8071ed370c7e084fbe576dd35584bd2e87f8828518246f4aead8899e486722af23c623f1ace2f88ba9318a7c4b6c0d148b16cf6c9525875e72cd27dd83838583d340c3d2464753c8deb1fca9e1ab7d624145d2a9cd10f566511e65ba24ea29d5a19ff6bbe8bed76c686b104dfa521d915e7d820a26382579c749829a08cfbdf8460540d6c74e5eee12620556f975df0358ded55394d513aa3b90a9fb60dc735e44072b72146737a887c3d979e7bc5236f53b06a0b77f85310831d89bf976871b9a3f0dba342a08affa8d0f074a3ece2ef1478a3ee5c6b96b7b90f9850be067b0b3c005a214f11ceee3d17e70569747f9077bd7999c75cfad01158ceb8f5e712fe5b19a2ce546da93953b10ed73384680fe81c08058b90dfd2b51d9d0c348d9eb7043fb6d41a9675fb7adb85a7ca2a126842c4a6f23328a5fce388e2a39ddef496060fcf7b47fe9d4942e1dde59555e883203361253fd7573184f2dd597b587a295c423669a0d3bff76a50209ff372adc12fad0b899d5beb1eff93ba0e13faa4e6704f08a0f5920dd1836ababfaede59c6382efc5932058caeb034bff2d836d71a42d1c35ba438c4c6c31e4eb8ebff8bc90eb6de96bff1e49f904613dd458d3d71f0e1a0bdcaf7afa67c8105803e821946a9d90355c60e8de2ee57583f345a75cf0cdc6d2166eb838e6cf7262978f0e0e51081d13ba3683e63744d1a9fea1bf41e4946c708553eb3875403ac02013d8d7ac1e554bc3d48cae425c373519387299bf5a78631dff709d7dd71ad99b5daab6a944f5ee9236fbfd19cf6d27daaeb6ee5c2187b3bb05b7f4b75bdc566fc8ca093d8c5557c6f64b6ce1dc8a623ab6d1684dede2a9dda426f6965ed9e3bf5c6ddbb14efa66d78a6daad13db8a3cf7a73d673cb94b62baddd57cae2766fc339ede536d7d59b2ace796e9fd086bdcd0bdbe88fabec3aaecadfe8b6be5d0d6aaf2e74995f9f7a6837ad7d8565bb3e5dc668292937e1b609a54dc26c126393fa9a98d68454137d6aeea7b3f085085aeb1dae2915c76ed9729edec59bba527723b5a77bd8e6548db165eb397b113fbd8add8ed64abfa19b5537560bade7ee51ccf495733d6a3b5dc36b5aed782d599cbb6791d354eedec86df50dd53cd5e3b66635c79e454f5989fbd1753d8d57625c4429a8f59eb21daf36d031e95ae2d02034ca2de5f33f606772eb1555df528bf7a881a15ea06df10dcbb8dab3fdb11e39a43c0b41bb1b85cc5650201002bd496a1f135acc20dda9c91bd09539a02883506a4c3b9ed5bc06cba84293e62afe09cc14c5c4bc332e80fe0adeff0a2b9aa9419b37936c0700dd12191a3da5b5f930de756731323158180dc6c8fbfd47cdd543adac71587f9f529f9d9e674ae64bf89a026fa1289964982268a3fe2bcbd4ebba4410eb6e61ac7313ac39f57b861763c8188083175f3dca9dd0b4c399271aa49a7da0ffd2e0959a8a7ded0b11cbed659c5f479bf71c5f99b110913ee34b6b91780498f3329f0d60d1e1ff51606dbbd46b5cf69bf005c1ec3ebc806d3c38c76e6f35bc0ecac1478006e4abeab7e641753fdf0c49853d826b34e336be3f3479a34169971100b11188e5e01441ae527cb21920bc2ac76a5feb1e67b2f85e184459824a54ad58d04841644157e7723666f1d350010d82eb68f7106bcb27e9e67d992ec8056b489520a29b9926095784394f592aa6d6e68a496ab51aa807174f5f8cd12a1bb417449ecfa50ef1802cfda1db37f60ec5d08b2a2fdc41241c2748372e68959c10c454ab4e1d8fd58c75e614483cb9a188fd27d0ca4525cdc08f1188056958e16acd0c510b981447507c45497412c417af682785f4c3ba6dc7a36b0cba787ce1679f6092acd18d071af7df7d4c94a870c4dcecf878e35c88558b59586cf2fd077bdc19bd2442dbb880727363ff9d48c5fa1ff6fdae796d4157bdfbdf5007faa33a7605269bd59fe8d0960272479cda1fea39ae6f2ec80077922abfa0b029bcd9a509a5a4e7acc85d3024d45c7991851c1c5e60abbd10a03871e3ecae11e96d50ccc07abea34491310a7148c3f24c11c5965fe74683eaa141304bc7d80731ee1fb445a833c7e9dd1498f1e46308f9fd7bc826568f814b581704317cc70f38d9e0c7c04f86605bee06d3291e53d1d309fd3d9414f1d1407936c19e15f2c7291e0a579ed95e35b6bd93b0ed3687908d82f96f45bf7e946771a7f58eea2484d14b7ca343e6be7c520b28b887179cba3d9f605653f20b2f66bfe282ebe22a095be2db0931aecc57dd0f2f7e7281393a127542e52e26410a9fb13d3a41f72c2b010b501bbe7d1501c00703701d30ef9fca57aad78283d6d0067a093626c4cf090496282812c4f841e19cb3a03e79840c92462abb9cc2ab9339528368f7b2f73775fe3094f1a96d53e318594eb8d38d013b5ea223ba41635c433acbe9ea1b37512103e7897eeb5859d619c1c284cba78b9d5b0ff6e633bb4d2d0ab196a0c3de17f2981326d22b3790378333bba47d2a33e7a47aeec219606c1d437f5de7ef4239d0d37948152fdf897251f8cb6fd2d1c290abe0460a553e1913a6a763bd587c973ec73de6abc31e36aa51309f55dbb5690e9657ed2e97f1670da01c3bd1960223059d325bd478c98bd8a9b3544354793d336748187dcd91533b17cd547a3639f1670731fe7ea9dcfd86ad417414222124f98e1c03772d13ea60ef88c232b2a36f37c2fe90676132426b30d6027e1e2dd9d3845ac5e30e146763bd1e5eff9f00e54d5e8b00880f4a2933f3d6796a512247e149041b347823f04caa92749977f49782bd682e823e12b2ac86ffc28f631fb427cf4e67fd8dc1c36db8172e02e05d564cfd9bb837c14fee985c003ca048cf14ab1f8ccf3fff71a8753783cf48ab3525b15659807c2dc5eac8e6edd4c51602d05f7196eb6583e6defdd5d4024adea93774e0ab4742603d9536c3bc270fbe8e9a4f65fca720b5e67ceca9968b49cba604792aca9390aabc5355b834411b6a40ff913d0957cd4ee3cc41739b60e3bacf44080f4bf0ec0435b8010aeab67c38202e25e9c000030c30c000030cd323dab6e15b6bd029f929a594c436ce4e0cdf0fef0a594f929452a6b493b20953faf7f926009634b2f17ae507ea075907ab02867640e50b264e4212c7042a5ee80217b600e41f50d1829ab6dbad06317baa260bbfcd27f73ca3b95963e10a22152b24b26b90eab9fe4dd8834a15bc81b0042a542801f22318a84c2103152968a01285bdd326ad5189b9556f050a9527984ca0e2049312202640ca3841032a4d50fb83169e4cb6b0512b4cb07e656b9413bfa6e30c06535942d3b4f2da32373bdea9a2844408fdbbfb57f15792c09cde10d3cf8ebfb90c0653418235287ded522a213a2b2b47a001491c6194381c2540dcb040c5089cba59fa4a15155d7b068369a35204b4d2b572d4a0a39c6dfd07c9b251218207f1202878e30de5b181ca106c3d9b83da0f51a1f6352a4258abdfa8d7a2dd4fc995205480c0083576aa179defa2567e8058294e2bf1997afe04a4e2830a547a00810a0fb849ebf0f972cdc596789881b28b113818480f312240d1050228b958000517cf48a93ad3f4d6f4f92d7a29624adefe4d99c8167bda4fe24d758aab069ea1d4e22cf2c926ad7cb475560683a1d0829bd3d634ab79dc4d89190c86328b045064a1b85f7db3770eab7395c160caa0c42284020bb4cea5e635e7cb0d81bc099013644e48dc5801e5159e7dce4a356ef6d87a041457e8a5beafdbd7462dc760c038a9c1082a60a21530a1b4e2e45f834d67a2a3e5c60ae5fbae7cd7f55297ae421d396a109bd5eca7e5425054711cedf8951fe9ab26a562bf1331aaadf4333b0a2afcdb3ecfaec2b5e84a39c56955637cdbcf848628a6e0e66fee6023edf58b4a9196732637b81685144d7275a9d5d2d4bc5146812b4d14b7f25042b1545240914dfbda94b2f3bfd7c98cb880f20994d47baf9f3323266a12860a289e502bf7b57953bfca953a61482f3d9b7c4ca7d4f1a070e253b314df3acda15cee6a5036619af9df9c950d23bf02038d1d695034a1cec9dda48e21fe4a720029892313be68d689f714feca3e0902640e450307144c64ba26a5bb936b9c16c89f41b9c4377dd7bc4a4d9b368c144b34e708b13272ae5ee74f7e286b1b20a054a23b1d3a626d4ef5b9c960306e5028817b9a7ca5655ecfdff73526a170b17a32d55d41c098c3cfc89868192265a048c253ff1fb5960bd3fff3c0002512978b4a21549dff682d63a2652c0a24dedfd6facab329ad671fce06e5116b65ea413fd709175247ec71e3a175eca81549098f377e8c4169c449b4558d5b63278d9b6d1e22649c2152c60e31c64863c71a144668c3a7d79c72a4ba5517716ccd5fad5973908f7c318688173bba405184a9fde63dafd461b3ffc55943e4a040e49c40e4a821724c2072d210396878e13de208723252e23f7e90288192884ef92ad3a3ca759a3b6f5010d178a22f3ecab58c55fa82042264888c40640c9118500e618b8ea7db9fcd930d1aa2516a1b4774276da6dd425842f59929db0981b65b4d8d97adfcd3643098911220180c0fca2050ae37a4b78f86f40e09288238fcd7a6cdaadb5c510683f112130e5002b10e3933d1aaef2e0384fb59ab959f7f2fbbc6615206e50f2a79993788d23778f2fcf04db30ea2c7e67550691f747fcdb261d76d94be06143e1c846aa5749d7dea64efe14dd7165acde17b5e3ce4a0e80191fa336bbc534795ca603027252e87972081920795a7991b75b3d69d46e1e19142cd6adcf44d731fca1df00ca9b4c8912ae6268a1db049eb6df1325122491d16eb526d3b45b790297440ab15115a3ba967f77c98419943b2a43ab028725888125d5edac67df153e29096682142979a06513a3864360de275ed6e8dada7bc2153fb0ca1c267d4f30cc50d67292b4c6829a3b4a1d1cbf775da486d7b296ce0a5bff830625faea6d6800e97756983eccdd05103de7df254c6dd0b29e524253c684049c32ef247b43b4ec96f51d0c0c8b74da3f87beddf66309826a19ca1d17b35eeb264dd24a5982177cd55a3b0d94b442f436af56dfabb9b7f7583c18031c79394781b143234ca8d25a5ca97fa78ed80328646edb83bfa35489163264311836b9ae65ea2f46599190c6683988c0039693376b8410943bea173bc0fee3a279b028683d0c2a32cd7672bcb2fac42cf4bb16abcb0d025846bcbbf0b671d5f4edbf5558d4a142ebc63a306d942e906650bab14f57bfdea79bffba802450bcd9f43dda877fe58525938c5e3fbb80ecae6a884053fbe16bd2dc4baea917205ffd4b035898ddeb61a2b785aee47d536bc9a3d4da982e7374d23648d999bdf8e6eff01a407159893dfb759ab48211f382853384bea1c5ae3a8d99192824ad5adabe8e77bc951c876f375aa598bea704181cf51f9abf6203de7e413981befe612fd196d278a137a295faf6a4d69c2bf6ab639ecad4bada21d4a61c2e6aaf7a6f93c63454b0c913076fc20a12cc1fcedb65953ce6b4ab05457c9efe45254cd49d0d49c9fec126a7af142021e761b27aeae6af8087bd7a0ef93acba0a518c60ab3bbdb94c8e185115e11ea5f44f87dfcf534384767dd564bc2ca56b9c3204a4ca8eea475c85945708a89bb4cd9dc4430942ea3edd9e1a850c9b44226088341744111420a88592f283bff4b7ea5255a932668ce2034fe494b89fdbd331ef415fe2b7d578c997ae293c3085d23ab08b536b919d6d7ae902a95cab96fbb869fa201b07c885ebbf424b6983bed94bb8d8e3abb44175dca6fb6ec10bbde2b58d1dc0162755cfd5da5ecb795f8c03d4029bb4a793abf509f17a5a7093fc8dfa55a6be56335f78310b3c6a79181bcd6e6ffccce000b278d5344db35b420b91d258ace6e12d2fcdb6952e8e03c0e20e69f3a17418a574f215c7d3d214e9d1118898b1e3e447900c1b701cc015c6d6add6b18512b5214c96a9d9b3e9e851c4c3d208c5d56d6965f36a1a858cc0f49e3a3f9b360900192c8b40467ee7fa587256b68ac8a6c9e3e53b55dc7612f1bf48f14a84500683e9a17e623202478f20fbc60f12165810918ed2b141c4bd4fa745da10396347899f98e16f94781a35b01ce2b2edf8e13a863025ca8cf4508b219652db34eea42a71932c8540b58fea8e426dbe9a25b01042ddaef9e5f1b6e62c8378b7c7739ef464c0e81235cab008c251111915155affb4302c81409956e2d55ef9c91e65309891105800a17abdfb5f839f1a918561f9c3678377db2052c90b5d060c13ec30711325e91146737fb0f861e99e2dccddb4ecbfe91fce465bfa709a37c4c696ea69983383c180e18355d03f9c8d332c7c30c4faca8bd8b1b104836933d2b287d4547e5453a6852e4f0683096347899b81c1f088142c7a50b9b859e8d29f3fffc987fa62306b58f2f0ffd8fd76ccf0c0cf479dbfa4760747d6763c79760683f11f6b58ecd0ecf77a6bd475e971ca800186183b4c4cccc0607ec4c49b60a9c3e332d7934ec369ba4e18191023033bd4b0d021e92f95fa2cdf95c4b0cce131317d5ab3fa4c2d9403a245c6c308b9c257322c714879e698d6e24a67cd0c212c705066779ae73ea9528e190c46e4a4c4337ca26988ec08631096379c667dfa3b5e8db3da2683c18481c1987cc0e286c5da9d56d39c3a6706044b1bd466b3b78e0d5323d4b0c1b9694c21f384b99cccb206644d674797a56dbfb6a8e16f4f315ea24d8352bf1eed9cfbbd8fead12348891aaf8e461b226788bcf183648e31ded7f00662824d58d0808e62afe522564dfa3d0367ea95fe5839df9b2d6670c55b88f7ceb29421996f61baa7fbb5f4046458c880d2a1650cbe89f8d0c16f101ebdccc90a2c62d8f33644aa3e55b36658c290f8e8af56f6b5d0496b0103f3516d4861b63a5ef50557d4f0e206717ba11736bb2a0f4a7b924a4b17d651d37599db1c84c0f0112c58b8b08c131e1f6e4e93cbd3b205d4a4666a9ee4e8acee1058b4903eada59f8e9de48d26a620962ce0fb2b3ec7f8cf625a20162ca05de176f8601558ac8034a92e37de34a9d0a52ad85ee37e0da2db75351f162a346b9959adeb0635199ac2f9b42b29e3f6548a95450aebd2a76ed81c48672c51508dae3caf894df187050a276993b0736dbfb5b7e5098f79caf3bc3ab4562e2738de21ef52cd6ac21eef6ac6c284a4ce5a1efe563cdb8d65090b1bfd94af854af074b9ebfcf59270f4fe9b06dd5ee5494878db3baae9d4bdd4f323e0da5f49315afa0d763242e3a6ea33379494ab2b82a984d8146b6ad360524430a4b49b1df5a4c2b521dc41fda31653ab949f8480f42ce5f651b30461f53a5608d7ea3ff70242a3c5479d34d99a4e66f9c142d638af627ab5f69c4c66c46d4062e2c3e283335c8f3e5da3d221f28ca50749b1ae6dd6d295cd1d5a78a0fa70d24f7d5465de4c6517d9a89d5bf8d6155de4e9e4f6e7dc350a359e8b4bea1bffb83252ec8d0b764ecddfef73ea93f816860aa5a3c8f171514ab6504d2237b57ae5eeb95ae04af5f77a7dfad84e85166a1d94ac78b83c9be49559646aa4f49ab55831395764b1b8e669f5a553dafc4a412516cb5af97275b4492b9955609196a665c50b2deae2e957fc5add2c2774e892c2e4838a2b4cdbf9d8fe1eada4df8ae3d7e6d736a6dbbece0a35c5cc5bbfa32e4dad028fafeee61893a654a70a85580fd93b7e2515cd5f3a8b2c61c39ed2555091e7d04eb1ce61c514ea1c76c0c4a894e2ce618514dc34d67f50d7633adf0c0a2aa3e84ebbc5cb927ad6a5a250eaa44ab7d45735a93f14b89ab23184ba51d3eb2aa0b073ead7f59bbb57cb954f2095d4ada3e796ea1b4fbcabe586b73b3ba12a9d4a45c5086dbd66fa07c9b351e1445e2256b4a3d0f04e890699810906b3096bb47d6d37697b35b926b631741ac66dfc5e6833918ad6a79eb488955507154cf031c4e6ee7def1c6ee5128d4aca4bb9d1b2c47e736a35e99c4df9aa2a95388e349bddd420b2e58912d870a2a6ff7f6ed8cc8dca24f664a67236aa8eb2b38a24d4ac7daf51befa2a552458d1f55a93493d62e604881826273f4880c431820a24ceda913eb2d3a8255ae5119dc82c9ddfce9488d74b4e80848a231cd976351d2f3ddd0a48f3a834c21336294ffa6a3b944e082a8cb8c6d5a9b57b3e4bc75f7065111aa82862d13143b84bb5b359c995448c90c451810a22245039c423b5165accd92c674a663c448ef1f06287aa18c2cf111aeb26fefeed4c734144c0787534126acec0604c4e48fc502984de3aa8bd39ead151748440fc7dfc91b35562aa4148a022084dcb8e4aa81b1d3ee440ac57cbd1547358014452a857c3e9a03eaed87f78e5b36c9d6e8e766eb2219286088f1d24a8f801b96ad4fa3dd274e79a854a1f1450e1032f6b16eb516fc7d70c0d91324050d9c36ace2b226e5ecfbaf5153da0c6dc521e3c11e2940a956ace2725e2c37b8c6047864f540c372a7840ea6c3aa4f8b091f255b9431ab2e16b63dffe9832188c0fefe160a021f2c60f928c8996b12363a26594a8a1273ac61a69a481c18c94f8f0216286080f915954ece0238d0554ea70e22623ef2e06032a74a040650eebd5f6ffa6a47bd852068391833add469ac7788a8f71f8b5d658e7eac1e64c508183c91c0e87052a6ff8e3e73f1b759d06d50d24718461814a1b50850d17a8ac21011535b0bf36eaaef86446467efc880f13a5c1889f68c989c9072a69504d2b9d83a79542e90d0d678040c50ca831c3b44f74706da1322c6bd2f159f888ddb221c308491c61f8aa180ba88c41031531a4a56edb8e96fe8df785173b4e250c01fb171eac95c76d8fa2a3e54ebbe0a3123a29a5f5cd2b5f5d60b37e9bc3a918a16c3417b867f11dd7c3db9b0e2eace14ddca0666d56ad0eb9c51edad35e85ccfb1d8d84d8c2b16fd532de847fc94d530ba4f8ac662547de6ea468916719b9fa35766a1b9ec53586b9c999d77a5c16e969dbe8419f49195e2c7c3596883ee9a33d6458fcfac5c71036fdcd7c5ee1ab16da4ceceed4ac0b714552aa6dd1eaa6bc94c90521ad6054bbd0f285527352a421ac705fccd4fce6c9cd89890799411921abe8534596cb8751eda62a5a1d6fb36990716a2e53e1479d5b299512a39d10549ce5945c579b9efd0b3945e2dcd34748adcda428c4147a0a539db35f8a5ccdbd1effb744e324456ad63987d6bdd6aee728defd1f3d661e7d85f80710921d21a2d07e3c6c945b9bbdd5190cc664040ef592c59050e442bf0a79216e4fb871a867424091ab6e68992937e7e613bebbb691a3d394f2b827dc9a83e8781aad36c5219dd83edf2b7529e44493bcb173cd6abfa3769b50538e07add5c44188265e25b57c5cabba15da00102124137a7ef9bad5f06fda564ca4c5dffcc2cb948bdb2fa196895026856a89eeec54495df6e7a1aac4fdef9f75be127aecc4430825d0a6f3b8d63946ce839340c954882430990a894467deaaa735cb947990b044d6a4f7b5ce9dbf7f849d27dba6ad3bcb9523d258dddd79b4e9e718d2883de509ed2b344e7ac9886f1ad59c558b2eed32b408ef75e89ed0a9b407431491770dfbda856cbb2f4312c1d6c769ac7c4f931d221626de47a8cf37871a0fa1ce6f42898dad21d625bd4eacd61702a9f7a756789ae56b1121367fd7d6771b0e4206618d122ee6fd7544878240e9675975bb416d3605e2a829cdde3e8c144a0e08bbfdf42aad6ed6ba367fe054cd7e3275434d63ca0febd835d6cbac8ef2fb3e74830c53d3f85b67d2e68332dffa528467b37ff7b0befbf4f48fe7ef593d70937e98ee0c6db347f3f0a917227ab2e61fd9c283eeea759a3c79fe6c8377c86ea49a6b4ca1e5273576c86f96ed39e89ab32668f808a98375fb514dd25f6d5a311d54e32d3eab3947d52514328786751bbb74a73d7b71881c8e652e3bb98ad159e733184c0c42e290a751a9cc8f19223286c0a1955ab36c676da3c67d034227afd7b37243f285fad0d4fdf9bc15d2868590dfd96068f9781a4cbf9ee71021640db9f63fd1e3fef1340e514326a3d334ea11774021240d47b1d1346449695fb32168683cb95aeaa0ca747ef60ce8e990c2e59ccafe9419fe8fada73ce7159d59481994ff315b97d4275ecd93e1a866358da5d49c7673561142c66077cc672152895935791280218488a12f1595e2cf4c964c85c19a1bb7d4a8ae1e5bde216038979a5d6d9a6d15847c41a1215f6ad15263aee885a4722184cd51a869f98574c1d7ea376a9d3b5a4839480817d06ad669ce41dea03adcd80d42b6a0d49a364eab43b4c00b718fa9c32677658764e1add9e67db538ed63da20040bae87e8d45974ce429457b8e3e97aa13594acabacd0f449a7bc498df99dc22ae8ca47678fa1940a21a4c24a4cb59262da41cb3f42a6909263f266a5d2af631f22853fbab471959a131205f5cec55c67adee447c42a0a0cde1c76634e3e6e813d4da36db5a3a763fec0456f8474f6d9feb9f8534c1d776399d861529af3f2784096dbfa61079937fa30f5942a314adaea5c3642b51094d4aea51d3487948121829b3eb42e44108120ea16da32a6589d7b305214738fbcd7a76b50b3142424774893e21755d3f2145504c85ed9b861ab1414470df573b7f4355d45c1b226dc68e394286a09217d11be4d7ac541922846c143a45374ede6e17128453dca8ec57a5d61e744068d8312fbd23fdc1a23bab06a5d9b1665126c40776bed25a49a1e67fd109e981d274efd7d85f080fd272e15aaaad71dc4c190c2608965d20b55cd952d683f09cb6e822154f72b3ae5908a94ab96853acf0d67a1e6cf8d9b0e062f959edaed1e747fcb7d8e6150f35ef1b859b6c718a865e7923ae63a96ba19291755a95bffa3fd1c218175f4a7fdfc4ea58667130a985896db949cb9e8145169d101adfe974a4945ab158a8935afc7df683ba31b1c0c22c2d54556c8e36a2d681e515eac8ceda62228b2bd6f3a7ae333bc3d56f05a7e3b37b4494ae12b3e2efd04ec3e7e42af2382d4f75558330992afee8631efd5d29cfb5592a70fd2f6fee694c73374345ea3f758ec7bc5b119e022d55f86fbf6f9a4e9be253e739fc8855eafb2d45eed9c7c7dcee57bd48f1880ede6de7f36ae451f0b6a3566cee1c75cce6b08842575e5ea2d76509052ff671dc6b8ef2361f040b284e6383b069f8b3d1d4f889b3c9996e1bcca6f94b164fe0523d7e65dbc9bd4e2750a755a8d7c284499d7b437b90e1868513c7ab4f7a839a647692cdacb1238c12354e483607964de4372eafeae4ff865f0c164dfcf2e563cb3da9712e1c5832f10af7586aecf5efbd30a1aaf655e63a8cde5c2fd12ad3503aeeabdcb1b158c204964afc2e65ac68ffedfb8f1269f92772bec349d732095e993475e3df9dd892b09450ad7d528dae439f19c3120944d9f4a1e56490306edcd535e7af8b546782988cfcb03ca2155db39ad29fcc181647a04b691dc8a5025fac8603e970c09ad354c08b0accd1e324f306c90f0e9c0e20d401c300010230c772200400272641d6184000fc0d0df2c60fed7100019894380769202571505200805499d0d04fd3a0a2fecc6a2c0806e3c34b46e420e991761b90f4500ce6e4a4040d1d6238929306e2230c4772d22363a22323141d60b89103e8f8c2919c94644c7a8c8c507478e1484ee420e9202323141d5d88c30773e1c44db6e07200f1e1c37d18408716e688837db88f02e8c8c2f9e36aa97ef4d628a2347460613bd9a156bc48a595987138940706637205634c68ff59ff2f2966d0d061852633a55d94b6109bd464c0f8c20b912f44da8b7638dc4fc0091d55786b5c99eacbcd90a1830ae7e71a8f6a901b6a4ee99882ed51d99e0ddfa1f52b85557d92ff3f9d858e380a9c6c15a34cb9a699090aa7fa8b15624ec4b7f609785421a5a7fe8797681c31d0e184c73b6e14358b76bc9fc1605a471374516a386da736ae16e86042ae642a214b467e96038e1130c068e38c93206908c00c3a96b096263c7ab2390ff9e85002522809fdb98e8f724e4858e9913f52f5e7089ddafae9b997da5b8a3417c40b912fbcc800eb300262e742b75ccd9f06adc1404711d0615a07502bc54b951f6466cdcae8200242bc52937aa8b95eff43f8e632db2fcf857076f9590b3d9bde431b84c6d49ee52725a5ca32012151d1afeb69b2c166ef07c99b6db785d6cd1f843e58cbdf1ba59aca9d763de03f889b85a647070f7a1b6dd32b719318db2ebbf0e5fd76be086f9937ba585dcb3171e7a59fe225178bedd85f4ad41c22b65d70a1d2ed6a9e793b1da5e916c70e37176bfae6f84a725c6ca1bf6bbd9e43fc97d44a2eb5786b5e25377f9afff5430b744e1e6f5757eea67f1677ae50f99d4cd4bc5c838b2cbc793e7df4131df7731b9758d85acd6a3a19ba1fa727c10516c94eadbc46ffe77c675c5e81547310b2659ef0b539190c66067e71055e222ed5c9ac89cc5bb1df0ad9eb1f345b9858a1d74a91efc9d4a80fade2782b5f4d5a2aa9a6495685ba6bb5fea64f9da53e15bfd4921fb66631a66f54fcbf26d5fc2d544b479dc21ccf1b33b4183f9d5d4c7192cf9d2a5cbd638c4b29fcf251379a5069baa4a4e04d9752ab459a90af8e02ade9fd36d4ec7f835814b8bcee31d5515c88f8128a3d6c56172f95c77d900a2ea0b8948b47d7d7d1c1d47c4217e159f59c78d3a9f644366fdb4bff3c5adbea847a2f5dc669edd09f71023596cc0dfffb9c4da4d454cb07e5b52fe53e2e9a40a82dcf59cae6f2bfc9043769ab51f7a1b394e589e3820965e77ba84ea17ae464c6e512ea897aa7676d094fa7bbd29b73483552974ae83336e75f1115325f20174a9cea46adc16c4e83bde7039749e0c23dc54584645c2481d695e2dcd328bc6b13ed01824b24102aa4d48ede61e5095d20d17e50264f35f508848953d349df0a956a352e8ec87cc48d32abc4abd51ac19aeb27d32a274b741a001141c95f18e1989a548d2afd519e7e117feed371d4e4ead1e50b78b4e0a28846d769d4b3d9672e89484389ce3152bc787af982883e7655cbfe511b6ad4214ec23ed43478a9c7d3108b9e7c9d857f7baaa910d72063832a31aaa649ea42884ea837d7bb39d58a3a338885d96093b90862cd3653e387b6114aaec62510cc7e4d3afdd8eca7510f362e8040fed4981eca832829fb431f6ff210769ea2e309c8c90f33fc70d6d7bae1d9e62de74b1fde50a3ab0ce9416b1b44f2cfa30d33c820638ec5606870e143639a8c90d26c909b3780f4b8ec61d131ffb4ed759223bce8c1fb1d511ef75e96aec9c33a2b7dfadd6ab3e79a302e78b043bc8ad769bec3492a6de5994adacbcec50e4b1ddce4334b77ab7aa9431a5b2ab54b6ae54a4706173abc21b5962537abad6be4b8cc8135ad54dce06afa25f2450e4df66a16377f7bec1a2f19b9c4e1d02e4eb7c88e29bd8243e2842bd9ba5c994ead3778caa59e6f99303dd58d8b1bfaa84307e5f1bcb4c1d7d7b23b6cc833155dd890321be57c9feb543ebaacc191274fa77cffa286d655356f6c76f9a5d634244ac3c6848aefd6718c0b1aaeb5b173526ed34af508e2435dcee09f8c3e5337696532929213931e297883440c0c06733103db1bdeaae2caf4a44a3cc325ea6ccca16e00a1010f0cc60397325893977d6ea9f560fb850c79099d56cab9fb6e6b0c4bb93944dc38db29566258a8bccd3174cead52e71286c4c816b3ad1fda396b471a1730346c98877d96dabbf7043b4e487ac4c146c9090c2e5f50db34a64de7246e2eb117ec99d1fe0dd5a7f4d6053c5cb0e6a0cb165036ebd44ea3936c2d6472d142eeb37a4b77f98e0a3118931d27b864e1bc3a26ffc5dff449c4c2c2e6bcd39497e9ba2b6c73501ee3eb5f76b615fcbd3949736d17e23f5538fe6625bf6cacd73a82c1850adc3ceab5c652dd0cd1e03285d31c641729bca17783c9aee7120595b64969ad646899e742611bc5cb1c35c769efbfc7e509aacaddfbd6424bada70d4840707182a7b4a7ba69b139865213d673f2f3a74ea726f16202f231d3d3cbdf92c26609b93e3d8f3668b1d99f2f5c94b06797914acafe64ea439724fcad4dd35668f5e141021e578b87bc97a2aa3ec2715f08b5a9e2dd4b6a84a330115fba2a646c3883c1d0c07f98e052044bbdda2c3c8e30bfdb05172264a6e447ad3dfdeb9c0ee1575ac9cf1b3f42a6268446dc0d36d7872797201cb4de2c37ede80284c3699deaddefcb0fb2db35253a9776d07b89481833b8f8e097ba66b5b9f4b80df7a507c79bd5bdd95a96288807a8f4f0823151241207838160180000831d1c0b0043110830503c168d87e3f19898b84e1f1400004e3a2864422c22301e169105029130200c0442a170200c0885412192100582188bd2d40ed7507ac4d02ef01f1fbebe987ac178fc87330262827eb16f3053e8956d232a85fabfe806dd79fe2595c6469c9c8ade01d49e3413f809badc621df8c0690252f6136b0fce2064ac2317be00d4cebb52018aa1eda5d2900e53f3ee786099271f3edbbd3b727f8bc5337c68d0516655159a25a38ebe46dbe6f5ca22545ff0ef4cc9672d6a6a5ca0868a4f55c1c9bff22fffd4db0ab30a1a59baf50993a52f0c605b48156ee3ba9e494367b59a30c90c56d386cd2b19059a182369f7dfad2182d7ae4a7342cbe3b3dfc1d363b0f118dff7770dbaf26b908d2965542260ccaecb6e06561ec02a5901161c449f38dfac70e821bda29d4085cbe4be61095dab870ada0c8e2cdfffd499d292b42200a193cb2ab11c75437ca0e50e924ecbf0124b68379834786e287abbc3f1f754b3cc8449aff616cf5a5aeb4b7121bb73bebbe88ddb580dbfc48eea12f86c7e5553b80e0803afa811116f4eacfc16c17488821d4aa0cbb4409069b9acd4a71d35e2d61e9b38bac18b28eb97c1c2d6d51c0deff73c36314ab2381d9eaddc4ecec9759b7cbc0d19d2386176c3c8d8228a219d8d619194826e30ae768e41b9a61dcbfa3f2fbb22c9252c97c4b767c3ebbedf986fad8d76636b9946c36fb9b7f6f7f258e227072d08afeb20c4e099e7978793ea71b0c40e3b6cb35279b4ab582e75b38c603e87e3c882db0faf180b24803cb9b19ce638a86428fd09e31f4b9461931d17549136cb3637e66c7a567cfa4d31f038032c2a77c3c8a678b68b50152beaea97c2338b26a5c6e10f57b7cda380b1154e383263716727aa8fde5526c7434eee919974ce0c9b15bae6a8fa3b4fb703333b19aafe7aa5b5f89f86e803c1d740714791308f805cdcd5560db070a83aaa0ae1fa0798d92917aa1edeeffcff4a9712d473cce5ea12f84946b1672bf73180b57751791b464a3e8d11422113c374ae22a86c3651456b71cd22ca22c0613c6e7e1cbac0b18e020b7515253d9be523c5161849dec8290e5c671b007873f0cd43f7f16e1c90c4b86a9322fbfd394efe849608de0ad49f25bc4ae0c1b678b28bbd9d257c3bb0c2a3c232c40ee4ae0ba3d412f211dd8e55e51019c9f489dff6460cb18aca4308ce8578322271f59ac52261de18018bf12b0ce0ce703d453e00c949fcb2bf0fe96ae6ccb98101d266189e4b2c33c293db2ac34272e92485ac0822f952b0fe18f202e63556145e8255582f978897f49e035bcac40634c4e65401861e38679161fab6e2dc5a7c039ed6217a6198282dcd0913e880f22777c0a8bdd0ca0678d3b798e37c056bdd7f23502bc6ac48c6ea1f88529b2ef38409b8432004d51468da081ac3bc9c53f69bad41ce36c0b52c2741d87c6c5f4cd65500ba9a94454fbf9971d48fe1cef10767289f21ef8605d2babfe4f6f3c2dd4b196dc375a12b554e25d09291348f26a8a514333b71a9fbbfb98e1be193b93c4a24251ea29003ad615c7099fd6c451702e9fa1b7c98b15541381f0ab94a2f974b90f94aa79784f6c402b946ba12d6ee8078b3c4bd122816d487abe45e0649055224353008638027da3b4b928716e5a5e5433dcbed66a1cd253d8a8b1d73f910e641dd7b13b4dcc0f94d1d86e11c3418b6eebdf6617a4324b3942f87c7919cc6837a6fcf325626dce10daeca80d6838f0043d1f0eca881e82c8d0434e094b2555e48a1ae277af05c515230ce2b61b167e6aa2b60a9d90245ed8a676347455523f276e0d6236920ac7a486c53e3b0f96e8d9a75e3aeb1df9e107d21533b701e8ad69ad5cc56e692d180c4442c3a46f62053b9edaf310776e38122f15d840d5d8aa92a30c7df7e7798629f3c77a6055f9c11f4f6130701a31ef527aa0492f8efbe6effee7f8523386a24aed00c71762178b2dfd8e903c70519f194a1a2c8cc5858c47b81aedc42ab0bee6cb55467cc4ca961a5e2dc3b3302d7d230f4a194f22b0a02c8a281e49db4227e4a353142de19d275676db02ff142161bad5d960eec8689d0814359d5a9234c63bc156f067d47c86040649b75183a309c92e7fa48f19106892b74582ff84d52fc1744d4451007c73086ed3cd9bb8054bb8b3171401e70739e3152ce59ea54ed823d0d49fbc9c7de51d7fa085d148b7be7510cadd46f48941c0169510334195ef6763550486a6c78bf710d0c68b80f2f5e79c0e2d77eaead920f1ad02039bf1af80319f978782fada6a6161bf6461a5e9bc140c3a197a2d82e0f7c04106f2ea08f9d98f9fbbc4707f6b3a9b1d6b1f1a3a71369a101002be1f5b6dfe70005ca0c64fd1c11c8fb0e07d8fbc313bfc3fd7a209700316da8060aaee29b1b37f7e37f32922c1687a1d376c30b4ed8b58d30af1b6c4a50ee44084b5ce0736fcd529608608aa9ee0d794784232f026d29f0b7cdef8d908f7a067c62a5ff79d8d47a5acf548bfceff623f7a9e9fbe1a3f44f7ffbaf637c3c239e870675fcb86b1a78ba6cae33fe28163ab71dcbe6be9d5584eebf81bd46177d348aefd5344c84a3030aef074acf02befbc7b7a256be8d2983ef17611ef2d88ce9709cc3da36036e4f4d3818cb9cfa9df64a50c55c98cfb4525f401ad2a6ec670b551a4c6c9e45168635e77bb0e929173bf0cf03495045f1d983163de5a15fe7f82eaba2c56da64bfb023ef14005ae51a3a3f5677da2df18be1d667e3836ed1996eff5ee7b8e70991c42446af0f32d22857cdb808ac28961752e254954088b826177ec53f10a3aec420f46d313727af116478c42106c90c5d2ecbbbb1c38a4a95efbe7da0d0372beef933da40b688faa919da9deb01a06864f8e652e6c9b531c6e8c1dd85aeacb45a995b692d1b40721c89c443ff2d06b4975f74e55f8ec4fed326cbd35f68e4ad6e01fe4b44ada7879a7c871ef2e7c8aa4df3c6abe407a023947ce52ab5b43396e7b8288298914b775e093525a5430a005579bd309dda27cc477b7aa716ddf7fb745c175adf7251e72b71459410d766d24565df89ce87ebbdae5172b124f964808d5254469d5ff3172866d1ee5f4a9e3dd53027967c386d08e2b72c3ce3c6322645011f1f077f1cbc2e49eb2ac33eb23225c29d8b79e18eef530d15f7a9b6c462c10617967dd056171d50066d690fc87d6f4647946fffc06a14e4bb13957d7cac27ea4477a97a612a19778b0b19dc256fe75a1c7ee96bcc2bea5946af6a7fea5a46cea38ffb08e55ef2a5951730f47f2027a61d8b71a45cfcadd533ea4f960fa64fa76a5f0a1ea5850d5eba9d98ad24fb7473dd71472a359069ef00c997b4c63e1a3cf7eb61886191f3913b03e1ee9beafec9eed805dbceffb08c75ba1b6ee487d796d3afbea84062d9e15373cd73fcfca6d6155ced0b276df3aebc0d18b754930fc5d77f3c8f602facee22c5f164de1332cc04f6312fdf52e308ac48246c1f812ae7f1a2e514bfa888e8844c8f841ef22c9d511501abc02beaf54658227fe16460f457ee3c00b721fc07c1deb0e03a89c60b46d15b9aea35f2e5e38402a70afcd60ed1c3b71a4967749dc65fa2c21500b0216f9319d0e90b276051626251ea9a82ff320326e768e229936da8531bde249ce32823b323fb971eef44e50fd20564368cd32316171350094466ab865ebcc91cfcae929acc30ca37bdef4ee7251b477909210cbae32353adce5598a7e5a49711390b1035cc80a08c2faadce3c3a5372184438c3e71e7af93cb9a63b152acc253958a6ae35148421323b988f16aa9ac51893777054a6e28183891bf7c282734824cd4b683be627d823c53337e95fb5b30ae629ed13661cc3d080f531b6b28089feb0fda03f42726e3da4e56f4c3f9f398f52fa8b13e238db4a61f005fe7f0db227dd6802932240dd8511a8baaa752e33ef01c5a874215444ac81872224322bda33fdf462da942e23f533a5033f8d0366b433d150e04c634fcc79402a32e753c1abc2505cc07b3906460009e97c3cebdf634cbeb6ffd051b5dde6071e4f0f04aca8522d4640f3ff313c83eb315992cd0ad6fb8f48e6bad4c423d08aa5bff879cea14db5de3cb02d74eae832d13b268004ad21ad7de479470573cd67aafb78a987fc6d1dc1779940631771b6e143fd04aa9af8aa1cccbe7e2dce5ac0e003c321b14e19fba975485d41d8a4a2249fb526b56e4f435751797fffc604735e48058cc564b5e54e306403ab89948657bbdf09344ed7db79d8805ee7d2380801f46285e5106df14670ac9dcc09dd862762bdf28e6e561ac52a728bffa8d6ac46b86c1b373f16a20f53c8f9c389440ee261a54340142f6d33f82458cc5518bcd4966c6a46d902f386fb344d9be6e34d21d5ee7293614d509e3e76211f7b53de0d08c2984914776ee0ba6abd949cd9cb6cc590c39a447bd3788f922578897e8c39c7ffe57bc9a69ff8d35b67c567c1efbae1cf5432500e4f87d8289be2fa33012c1664ef96144358f269a481bbcdfe05eaa36cc50e030e4b249c9d678a69adf726fda1fc26392d9c0a88d5169a7901bdff58b8b30a06f8d32cd7e5098ed1106b51e6b6f6accc14e78f5a44423db0cf5c70f754ad3d8f321040faa0228f4902d07e91650e0886f9faff4cd6fb6c73444063269cb24ac957633ed0a7e35d7304945877e81f2085bf0c21d990af510e045933a56e363ebae285792a00ef52d75c0ffe54c21c294e23304415e2813acdb94eff5470318468d7b87554a4fca15c98465bc4bbdc1dc9f6e7244c68ddafa27edc41b7d8ac837fe06ac807c59fedcc04888bcae764e81c8e1378abc8077380842d528e930debd54699b509c7c6691c6acd283e8534725b2b64150d9eb2a007691c7439f638a8344a3a464c105016014bd498a847e36de28515d3a464cb0b2064a7b9c51ada3aff2946c6df24b2b1cb47c41294d439b6c7905173a71b6688e85d017c56fe0736babcb36ba549d808348eb7e3e14033d9514e4076a3c81275f74367b9458ca73778d2d7ade4d98585cee0f453f1e85d84580fc66c49183283297ae84c08702810de4315d2e4a3fecce5aedc054a9b32827d033ff7668b37b68f742f3503c1efa5c1ce0993d20626d59cfb46ff602fe7ea6fa09ec5baa98eac42c376b4c3ef48db4fa5416f125a8c4679eedefb529fa33ad1b8892746ed2dd17d924f8a05684e801218b7ddb57b5c887ee5569d4f2e9799edc0213ae96517593942f885b87881b891cbd163977233bae8739d47f59fd6764c3ff24393f9b9d32f9d3a61f517b805dc02508e0d18c363fb0ab1a0f586e8c96268f4a4118989205a2a8609eecfa6b0fc8343c545e8c13e137d73fd08f1ed11722a66103c8074acdfe353e209f361aa619b3967bb59db1ffcc1d33f338a0029418c70043280e60eeac6ec9da55d9b2add90643ac2e40a01159374cb0e0fbb10c4313401b282143379a18de34efef79ae2ae56ddf20a6c2228c917f880d7112fdee333360164436dd79e9aa29ced6cc29646e988d18966623e98a7df245cc4b2b1cd82cd3791385aac8f4524e5b6b974ab728e45c441d6fe0eaa6e6686f098e4650093d22f16f99262fd0759147e29da81092267815d026ed5c4ece415195b2883d9bdc3350a410618f4abce51227755ccc2ef2b90cc1c6b69365550fbac93c6380ec807abbfc6bff4a146a52681c1eb8a43a0f2716d5c8bfcaa746e479a82285b46dc6519167631c4cf70a1656b72da4541b751a038bac38fe4472dc4f09f1cd87a3cb317777691f39182a9b35068f2202b890dd41f759cfa35ca77d8d3c691b79b1bb4ba476a8b0c5f2538187bc71e63a5347748f1a2d8f8558a918a86f781198a315d3497edbfb263dc2f046c7fc6aac893be0a4c9c0aebd3da3eb07ccc6afe2030eb7a08683f4f9c8a0cdbc5bc2356283fe10612814289e9c04439538965b8b9e2b6717a8415e1594960d52ce8dd5f7572b53e28403009bc88b0839fc1030eab93ce4eff46622a116cebb7f0ca622fac8c5bebdb45d4304f39048ca6e6f443e3512f945a961852eefe95b10447c17c7b3ec95830a90ee813c028905bc02d77701ac6b2a8390b6952b37b28de2a047899920b4815ccf2460003485f135cb0c0748e30ba0709f2770f42f84e208ee7f1d3afc66c0a1ad0835ad41fa9f1410b7c421ec0295ac525596ccb073a6d54b826bed83cbb0f948d81438e7ccffbbb156485240f546ac727a00f0cbc928a08cf1f6419bf8567a3d8cf8681662fd0cdd607727f1ea15e4427b9e7baa8579fb301f216d1d5f202270ca8a0ac6828f1027708682056192f50be147177013d0e3844d85d6804ca4bf92a25ee691de430598a7ade69000b28b54e4045a81fe92012f70c3ce2d743a201e7eac69679ce53b37e510bf0749662c41f2b983ae85655d17de0dd6a88d8a3703f31d30d2f168f5a4e96a400b8bf7f16eb0c0d0b99ab263c7c03a81f76a56a0c210c90f6eef4660a245efa60bca6cebcf2bbf8bd1c8c61617b14c161718fd052b99d0356e5bcafe1fc9c99ecd296c97dfe63c23992c5bd1cf6079fe99af4caae762019e531689e5a0c3d76978526cbc4edf74b13571c543175993b20786b0fc4f8dd49c0d312540ceeb119c8d15212c6b001f1a8738a04433d404ea9786a8c796e756be7afb549b85187a31bb7332fa0a37f8b13d01600e5b78d3e94a124bae2b88d172aff59b245717e0822c2cfaf6b06b91bc6b3f61c7f8651c432c087cf066fcd993762d576b46588451e7197bca4db67c98eb9a4268147df9af598a933a099820492a71758cbf436a7e91b9d4745c1cadb94ed786c1a65a40de82b9d3f5f7d3557d3ab37944d2aa911912a2ee1363cdc24ae58490d6b01d0217a97e3674e16ea654786707acf5b54f73b2305c5ba2c9519cf527ddc9d9f69d06ccb627b02dbf301dbbd8c7d417bdb22665ef21a589d09f694abc35c17e7066c3912cb1fe511d859e260707d86c55664ebab8c5bfa562ff27f08cb732a9d5f894648eadc0e98d25c34431b74df331cd4933c01913203cc638b2027c531bc5a551ff4887d32dc91f9583e4abe8f4c2189971569360fb77c90eed8d9826090a451a579fa20fae44a07d560ef4461b2c56bc4171298387f6f02bc2872050ce3655a6f237dfdec23990366370c917a66404861fbbe989fc3b41933b372b490e8bb9e00f75122b3e6e8b28df4b3ed4e0941b8d2f2145e0cc6ce82250c210a0820c26ff4bed9975f232b3c60ead92916c962dde88c8b35e963ed103bd9c387958a0bffa72dd8bf7ee1621ab85380631c5aaa350f202fd2d21449efe2efd0b5f69be9e14cfa0aaf30e126a6443b1d5df88c0604a61c58eebf2ed61a28ee04068352ef119b95a29d6a815db9d0239e16102e1d3dc2403da591674805213b3cca64f010c3e037de1ba71548213dfdc9350691a5ac2010e5df5bf24394198304c77459b6ef95cd162b339242d2e4f7f040a99c539685db06a1afd5591de5e8537be3a18b926914a68f72742a6244878de058be533c49271173c1689fd6077942380f70df9fbdc3404d04fcfb7a0376e77c47d80dcfed2b537ebff469b2610b29489b52ed509ab8f316ccda5c0e97552848634eac1a09eb3f91b15592f2322e66302c178dff306a660efa8c256132354d28051bd3fb69912c20d3e1129cb64db18dd7bf504db86ed10d0c52ebb30a0adef4f9785aff94f53b5dd9285b8a992fcdaec73b7e9c9f298b830e48c24ebc267eef3b5bafb2edadec29e218d9f3f0a494f2c63bd01f94ec5e6f3ca94a844fbe7ec7acd2eb037d08d408db61218f4cb88207c9fb1896c5c695591038bcde3c4c3772aacd9d3b21eb2a13568ab8014985f1a824b0537731f94745c4f2f3f2264e27d32d3e1901c4ea0f335a13eb4636266c7763765aa13760f42adee8651fadeb1eab5984253be870f7a283d38fe068022117bb280e538ae4507af461fe174ca6136e0a9d589214eb458221565b6c6c3faa30e6c91a3f52575f523a9ba598db70dd8909996e7c17169123d221de6e6a355a37b4c0962be410fab65eef9a876ba6432954e496287ec7fb468c94556b4a034bffd8ff3143f7d8da916468d5b3201950c2f0469f8f693cbee9303f1be8eadec1dc69daa81eab0410c5cdf9229ab7ccd1612301b89826b69187d0d386e4cc5a06a7c1e2d6bda2e3b335534725c5804555eb3b8fd498c331c699a60b1bf1c73d2bc7386801a615f75fe7bb0259b55ce50a31e1dad047c07901f570447dc634e4bc545897c0bc4c4a9355873fce4bc159ac551bfea3c18d3071ca93ac7b3152991682756443a37ecbf081d1df99b1e0c6fa3f9956dc856960fae0ff9484d40fdb86f26e0f89ee73c041070bb23e8b088cc84dda5ad0c18cd1324c7a31682c2f5e281c7777b17344a20189233d08bb863e82db91f8756b4563be07ef605de76540d366d16b41b533f43244a704d59a2e8f8536ebc349db61210d2890e3e96399150cfc3487961334128279a05605ca5c16ac1f3698daa8bd268b89de4a954dd60cd68e663da949c4273a99b93c87ea0c2bbb43a68505", "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3d560e0b6940e074462475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a": "0x0e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfaa076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed3586975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef7430e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477bf49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d62276", - "0x084e7f70a295a190e2e33fd3f8cdfcc24e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ef9482dba3e5b0d862616265807c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f8df002813b43b80696d6f6e80560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da942cd783ab1dc80a5347fe6c6f20ea02b9ed7705e3c7da027ba0583a22a3212042f7e715d3c168ba14f1424e2bc111d00": "0x00000000000000000100000000000000000064a7b3b6e00d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xd5c41b52a371aa36c9254ce34324f2a54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9935ae9d4cb148940af99a366d100d5af02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0x26aa394eea5630e07c48ae0c9558cef7f9cce9c888469bb1a0dceaa129672ef8": "0x3d8e18726f636f636f", - "0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x201efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195009ab51029a10e53570617261800e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0x6a0da05ca59913bc38a8630590f2627c2a351b6a99a5b21324516e668bb86a57": "0x00", - "0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000", - "0x4da2c41eaffa8e1a791c5d65beeefd1f028685274e698e781f7f2766cba0cc8300000000": "0x201efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d000000000000000000000000000000000000000100000000000000", + "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", + "0x196e027349017067f9eb56e2c4d9ded54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950ab7b30d24546522861756469804e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x5c0d1176a568c1f92944340dbfed9e9c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f5bc812467e867ac7061726180669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xd57bce545fb382c34570e5dfbf338f5e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da945315c068df2baa1c677b9b3e81f7439fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195054435a901133fb946173676e8016c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d7ce35a3ce71c3d76175646980160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x26aa394eea5630e07c48ae0c9558cef7a7fd6c28836b9a28522dc924110cf439": "0x01", + "0x6ac983d82528bf1595ab26438ae5b2cf4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950091b1bd4e8d4c12061756469802496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0x2b06af9719ac64d755623cda8ddd9b944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950149cf457032f53e57061726180d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb319b9aeb2f5add22992ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0xe1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2aee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae8629878a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037244f3421b310c68646e99cdbf4963e02067601f57756b072a4b19431448c186e2c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a53", + "0xda7d4185f8093e80caceb64da45219e34e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x08c41974a97dbf15cfbec28365bea2da4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503d7dc9205a149f6a6175646980306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0x4da2c41eaffa8e1a791c5d65beeefd1fff4a51b74593c3708682038efe5323b5": "0x00000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a31727416d0095b96772616e80e1b68fbd84333e31486c08e6153d9a1415b2e7e71b413702b7d64e9b631184a1": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950417ebe2c60c84ed5626565668403a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0x06de3d8a54d27e44a9d5ce189618f22d4e7b9012096b41c4eb3aaf947f6ea429": "0x0100", + "0x94eadf0156a8ad5156507773d0471e4a4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f87a50c904b368210021127f9238883a6e": "0x201efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01a8e61ffacafaf546283dc92d14d7cc70ea0151a5dd81fdf73ff5a2951f2b6037669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee816042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f0e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205d822d4088b20dca29a580a577a97d6f024bb24c9550bebdfd7d2d18e946a1c7d", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012fefbc5e5cee2846173676e80fab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e887ec3d30b64e896173676e80481538f8c2c011a76d7d57db11c2789a5e83b0f9680dc6d26211d2f9c021ae4c": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x08c41974a97dbf15cfbec28365bea2da8f05bccc2f70ec66a32999c5761156be": "0x0000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb33bb8d7990ae3975438f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x36be9069cdb4a8a07ecd51f257875150f0a8a1be44a10d9d98dabf10a030aef4764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe218e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b752496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c0307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d58", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950feca8028a77ba7626772616e804ee66173993dd0db5d628c4c9cb61a27b76611ad3c3925947f0d0011ee2c5dcc": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x3a65787472696e7369635f696e646578": "0x00000000", + "0xcd710b30bd2eab0352ddcc26417aa1944e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503c0791148c7780b8626162658038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043d506aedab0d2ce696d6f6e8048a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508248d97b4996007070617261806a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500a3d203cf823b13d6173676e80821271c99c958b9220f1771d9f5e29af969edfa865631dba31e1ab7bc0582b75": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0x06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385": "0x000030000080000008000000000010000000100005000000050000000100000001000000000050000004000000286bee00000000040000000400000000000000000000000000000000000000000000000000000000000000000000000800000000200000040000000400000000001000b00400000000000000000000140000000400000004000000000000000000060000006400000002000000c8000000020000001900000000000000020000000200000000c817a804000000", + "0x26aa394eea5630e07c48ae0c9558cef78a42f33323cb5ced3b44dd825fda9fcc": "0x4545454545454545454545454545454545454545454545454545454545454545", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3df32aff68041374f02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x6c878e33b83c20324238d22240f735457b6fba544b383e70bb62a27b57380c817c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd80813d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a6a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac0116c69ea8d595e80b6736f44be1eaeeef2ac9c04a803cc4fd944364cb0d617a33306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb53102fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d31ed6cbd51d9f636265656684039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a53": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012b62e212b6a7a9c696d6f6e808e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2c": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", + "0x084e7f70a295a190e2e33fd3f8cdfcc24e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x94eadf0156a8ad5156507773d0471e4a64fb6e378f53d72f7859ad0e6b6d8810": "0x0000000000", + "0x94eadf0156a8ad5156507773d0471e4ab8ebad86f546c7e0b135a4212aace339": "0x00", + "0x1809d78346727a0ef58c0fa03bafa3234e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195075a33a2ed5ac2cdc6265656684034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d62276": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da995445d4efb6eae1971fb125f6190c49202a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0x50e709b04947c0cd2f04727ef76e88f64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x94eadf0156a8ad5156507773d0471e4a16973e1142f5bd30d9464076794007db": "0x00", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9b483908290ae9b936c519917440306ea62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043f25e7a03a30387696d6f6e8092156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0x1cb6f36e027abb2091cfb5110ab5087fdc6b171b77304263c292cc3ea5ed31ef": "0x0100000000000000040000000000000002", + "0xf0c365c3cf59d671eb72da0e7a4113c44e7b9012096b41c4eb3aaf947f6ea429": "0x0000", "0x2ce461329fdf4be12bce01afc0af09bcba7fb8745735dc3be2a2c61a72c39e78": "0x00", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503639d22ceafce3266265656684020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f7aec8a47707294b61756469802c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0x2b06af9719ac64d755623cda8ddd9b949f99a2ce711f3a31b2fc05604c93f179": "0x2086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef74348a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055ee93e26259decb89afcf17ef2aa0fa2db2e1042fb8f56ecfb24d19eae86298788e95b9b5b4dc69790b67b566567ca8bf8cdef3a3a8bb65393c0d1d1c87cd2d2cd2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1ac4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca65192156f54a114ee191415898f2da013d9db6a5362d6b36330d5fc23e27360ab66", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e193783dd6b845ea6173676e80ec60e71fe4a567ef9fef99d4bbf37ffae70564b41aa6f94ef0317c13e0a5477b": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950636f684eb09a15046772616e80d9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19503c75eb9438a505fc6261626580a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x63f78c98723ddc9073523ef3beefda0c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507d9c46786caf74af6261626580d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19508248d97b4996007070617261806a8570b9c6408e54bacf123cc2bb1b0f087f9c149147d0005badba63a5a4ac01": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xd8bbe27baf3aa64bb483afabc240f68e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3328718e032416872520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a": "0xfcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d38757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f48a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055669a10892119453e9feb4e3f1ee8e028916cc3240022920ad643846fbdbee81668bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80df6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f34903a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e", "0x1a736d37504c2e3fb73dad160c55b2914e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xb341e3a63e58a188839b242d17f8c9f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3fba98689ebed1138735e0e7a5a790abee99a84ccbfb4b82e714617e5e06f6f7": "0xd0070000", - "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950585cf1f6f8e46326696d6f6e8086975a37211f8704e947a365b720f7a3e2757988eaa7d0f197e83dba355ef743": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", - "0xcec5070d609dd3497f72bde07fc96ba04c014e6bf8b8c2c011e7290b85696bb3dc18ebe8d771cfa002ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864": "0xd9c056c98ca0e6b4eb7f5c58c007c1db7be0fe1f3776108f797dd4990d1ccc33bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5bc4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff351efc23c0b51ad609ab670ecf45807e31acbd8e7e5cb7c07cf49ee42992d2867c4c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474", + "0x3fba98689ebed1138735e0e7a5a790ab4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195097e3e605d1b3579b6173676e804c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0xd5c41b52a371aa36c9254ce34324f2a54e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195043d506aedab0d2ce696d6f6e8048a910c0af90898f11bd57d37ceaea53c78994f8e1833a7ade483c9a84bde055": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507f532159f03d44eb6175646980f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3c": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a606acaa4558183a2102457959a213a192ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d1e1b030b162ca447061726180042f07fc5268f13c026bbe199d63e6ac77a0c2a780f71cda05cee5a6f1b3f11f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", - "0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195012fefbc5e5cee2846173676e80fab485e87ed1537d089df521edf983a777c57065a702d7ed2b6a2926f31da74f": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0x6a0da05ca59913bc38a8630590f2627c2a351b6a99a5b21324516e668bb86a57": "0x00", "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950deeb3985cefbdfa47061726180882d72965e642677583b333b2d173ac94b5fd6c405c76184bb14293be748a13b": "0x38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404", - "0xd8bbe27baf3aa64bb483afabc240f68e4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x08c41974a97dbf15cfbec28365bea2da5e0621c4869aa60c02be9adcc98a0d1d": "0x20034f68c5661a41930c82f26a662276bf89f33467e1c850f2fb8ef687fe43d6227603a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e039d065fe4f9234f0a4f13cc3ae585f2691e9c25afa469618abb6645111f607a530307d29bbf6a5c4061c2157b44fda33b7bb4ec52a5a0305668c74688cedf288d5802fb0330356e63a35dd930bc74525edf28b3bf5eb44aab9e9e4962c8309aaba6a6020019a8bb188f8145d02fa855e9c36e9914457d37c500e03634b5223aa5702474033f1a6d47fe86f88934e4b83b9fae903b92b5dcf4fec97d5e3e8bf4f39df03685025e84e95ed043e387ddb8668176b42f8e2773ddd84f7f58a6d9bf436a4b527986", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19507d9c46786caf74af6261626580d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a": "0x92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f6584bfaf470c1b26175646980f6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da99677d775b618280f5c76d192b43ea38c38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a0404": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f308ce9615de0775a82f8a94dc3d285a1": "0x01", - "0x2099d7f109d6e535fb000bba623fd4409f99a2ce711f3a31b2fc05604c93f179": "0x20f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3cf6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f3492c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950d7ce35a3ce71c3d76175646980160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950e592f5ef74f560666173676e8068bf52c482630a8d1511f2edd14f34127a7d7082219cccf7fd4c6ecdb535f80d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0x5f9cc45b7a00c5899361e1c6099678dcd47cb8f5328af743ddfb361e7180e7fcbb1bdbcacd6ac9340000000000000000": "0x00000000", - "0x3d9cad2baf702e20b136f4c8900cd8024e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da9a606acaa4558183a2102457959a213a192ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f": "0x0000000001000000010000000000000000407a10f35a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "0x2099d7f109d6e535fb000bba623fd4404c014e6bf8b8c2c011e7290b85696bb3": "0x20f49eae66a0ac9f610316906ec8f1a0928e20d7059d76a5ca53cbcb5a9b50dd3cf6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f3492c57f81fd311c1ab53813c6817fe67f8947f8d39258252663b3384ab4195494d2496f28d887d84705c6dae98aee8bf90fc5ad10bb5545eca1de6b68425b70f7c306ac5c772fe858942f92b6e28bd82fb7dd8cdd25f9a4626c1b0eee075fcb531160ea09c5717270e958a3da42673fa011613a9539b2e4ebcad8626bc117ca04a64d59feddb3d00316a55906953fb3db8985797472bd2e6c7ea1ab730cc339d7f4e262811acdfe94528bfc3c65036080426a0e1301b9ada8d687a70ffcae99c26", - "0x63f78c98723ddc9073523ef3beefda0c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0x3a636f6465": "0x52bc537646db8e0528b52ffd00587cf2041e1346b713541070589c0ef0037d38990596d40bf8dcd604f21f6be13b283e40046902729805d1547369a81a401c42d559e691220f0355686207ba12107399dc367543acecb86fe506fc073e615ffcb4a4edddd6f69652a6246531140f132f14ed95c27985dc55af147edfa167532865ceaa3cd93294ce3f00d1fc7d77bf24e0f7f30302fcbea73bff864c31f2f7ddac7e654a6305f2d761e75238d1c85d7f43a61624993f0cd40ff4336b2499835872e9836ef6be2335a9495f0814e4e5d27b35cfdffbce0b7f6cc873e6784f0a479abddfde030abab9a4031d2337fea145a5f0c726f7771efed890e9cc21bd178e9d49df51cf0bb7771cb6f7bea749a1f75ff8438b0820941bcfc983148e3493bec77b7afe289ccf8df4677f939e2e065b85737b48f38b0a79cd1da13300489f6bd574e966b3e8fdda4fbff6b6b0bfa31ffdae7a32805edf7f7ba7dfddee5aaf7e37d0efafbe7f37f8d34f0033d3bf21cdf3bba19fa6a0a1787777900ff1ffa145454545d93fc8b363ff9a1dcfe8e06fdf73a0ef78a495d216a8be59a38a47b33cfb9528b1ec8fea161533e741a09b38238d65fa740c4ad632fdf92a6fa53ed3f7a7306f15711a25bde5f58ad27712d4adfbfd3d4d9900272dd35779cb3ef5bf610d79f096c52a5fd1a74fd47de44a1466bc800b3f68c11362dfdc6d450d12e4ee57b11acf56391eb939cb2a1e1409faa32ad3a74f61cdeaa74f9bf8d1ac9e4e9347552ee569850b488c2a1acbf3e6d542b57d08ddfc01824c74f26c557d1ad6563901402e2fd109f27c4314442fde8fe2e2978e586546879afbabfd7e8b8368a62f2ae44da7e8660fd08a19b13cad40a10b3df2b452c61259c7ed535ab63f472a826c5bb4895ed9213453184501a8e3adf7af5f9bd55ff1b7caf14873ada18a7e3838c66995fdfaef2d4afaca3e97474a8e9fed77ddf4462195d22a5bdf432ef45a659f6b957d2edba744ae3cfad92cee4778f4bfdfdd9092adb24fc202a479f42325b3fdf9e130fa5128d75148b3875eae61672e44b5ca82adb23f82d9ce59a6b06c9f92cdba6f9f4ae9164892a411a2fdda2cff8b83805cf690a655f63beabd7d0f67c6e9d614edcfafe254abec070370d4c99666fb458068d6b4528612d97e50b3eadb1f82ce40b3fdc9e551c7cb6c7f7a8b8ae3b4326bfd388b90ed8f938c6cc5719e91298dda283a3ab5b03fd63c47afd53ff2c833489e3fa790c9ca6166a55533cf5735cb7ffe8f66d59fbf85dd1c0038afbc20964f795e71810c72b76649926406c491266f3fbb35c511276f3fbde5f28127caf20ad9163b10b7e79a65f3f6db115de40d8f4b74f2c55cabe85b2c0090e69929cee1085d68d5ccf46bb7a648dfc30e6bafe8e300a6f22ca3d0f2cdd30a17aac8f4270eb52f2a44bd55106516c50a7ff7777ff72844d9dddd97907104175301e0151aa4510e3991fb390ffcd1f500d29f0d64feecba2982b33c02f6cdeaef9a6a563f4eb36aeed2083172bfd72d176b1e79e4a6c9fd54a749479f86adc2e923ddcc136704737f47dfe98f4edf7fd257e261e73243b91f0d6bfe6a190a8ba96b8f869e3f28d7a365285e690a01a264feb121d3ef9fdf0e952433cd0124bd66cddcdf516f4e21f4c7b1f39005d2ec3f7f7e3838e6e6a7c32cca748613a7b11230cf1b21a76d4637f36cd6d83fbfbe4c690ab09ffe387fb66ab6aa3e0becdfa15fc9c4b355153bee69a1a607e8a608d61f53d9be4eb3462e48b34650d5ac5127dbb7ffa3599eed152366d93e4db75ae4c9f667b33a8f3cb27db059fdf651cdf2b76fdf6b167dfb13c76225b37c75f327cea893fdbb19d2dcd1ef86da2a8ac720cfb5e97703c539d49fe1cc5d373f1c2e1e3fdfe7fa9bf4545b85c720cfa44f35ab7b7f9a666ddd361ae171f4a41f6d1e98e783cddade1fd5acd1fb77b355ded30f079a6bab3c3c7a4ffa2d9cd90b833c8fbea33da997e616cedc85339346e16cd598caf3396f517971f66ace9c91264f3cdeb7efdff99c33d770a4198acd6391cce1209be7f4727fd7b537bf8b47a17c9f86331cb93cdfbf494ff3472efbcf56cdefea37e7c96b154eabfcb79fada2ffadf29fdf0d5bf51b563cd20cc5f338440ef27c7f8660385bd54fbf1b2e9ead1a511673ad6a30d5ac99fd6b38f3376bbe3fe7ad4a9224498afeaa29c4b33f4ef69f388e95e8e4792344a296896ef280b324d1c8b3249dc83ef22c492972679a38e3e7fef9cd008e35f7f734479fe3a6b766af4630d31fc13c72b9bf366b7eff6cd6f6f36bb3eecfe79a35f3fcee86336f21cdddec0176f307d8b947bf1b361c04bcdfdf0df7e7278099efd32f87ed2f1eb7dfbeeb2f07306f3fbfdaaafaf3bbc17e4f77d4bbe1f6f3f36e7ea4e7c291cbdcdf70f4a47087fb233cd27c7f0bc78d1b6be6fe864a463ff3fc6e187dc7856300f2fd6e7e1c1eb9ccfd0dc759e6fb5b388ee3388ee3b8fd6cd528807c7fb66ae421df9fad1a1b90efcf568d45f2fdd9aa11887c7fb66a7492efcf568d43e4fbb355f77b9c0b95fc785151511a99fb99b770e61b8e3cb97e473d2eacbf8533cf6f8720f97e4ff7f428fcd93287479aa178be781c22dfefa8b78533cfefe220cf16cf568d35d3efe99eaee16c157d0f67ab4654a63f711a2bf93c6f8446b44ae962c0f9f37632e0fc79bbd92cfa2397e7cf66f5cfef3aa4998634d766d19fdf51afc3996bb3eccfefe87783c54140fa1df56c48f3fce877edc900f6cb94a600fdfbedfb7783c54140fa9d7b36a4b93ffaf3f3efe9f9ddd0dfd33dddd33ddd518f86337748f3fc0c3033fd9eee69214aa907baf903ec4c136704b3ffec56ed95fffc6ef600e977c36cd5c865fff9e140f36c957f4fb7409ae9cfd09f79b66afe8c0e5ceee772e3191dfaebf7571c4433c5b35563cdf3fde79703fdc6633ffd9e9e388e958079de083515eaa608f6fbcf668da9ecef9f6ad67c7f9a66d1f7afdda2a23fd8ac7985066964ffd9ac994754f69f388e957c9e374294e2d04d20e02c8d88e5539e575890449ea76ece0f0820ced34a5151def2b4529446a679c27453079cb69b3ec069bbb9034e5b32825e41850c52098a920abe354a534a514a524a4e94884a43a523be31be2f7c6a7c5cf8ba503ac1575422bf277c4ef8a05042a2f481ef0a1f16be257c46f8bcf88ef081f115e123c2d7c5b7c5f7030a18f962e065e16b818786d78597822f04df14df131c0ab8146c62741ae8601d171d10be283e107c2cf8aa6c45200581040412171f172432484d208d411283538344237d41620269099c17bc283c2c7c4e7850b80fbc076ec579e05af80e3c0bc7c2cb2f0d4a059d82b280ae807ac0491326412c41b2800240b1a1061a4a1e2869e0b3c257fbaaf069e18bc267c677c657c627c6978423df10be1d7c3c286580f3a2fbe2db428989d212a50d7054f0a42095f149f19cc07160fb82878557724870497c52a0344fe6c580b405ef06de13bc1a7445f068e0cdc0938107038f8a8e0b1d16484d7856745e7c439d11ee95bb4523e189718dc019a18be2d3e2d341b7c4064647eb94d025e10ba3838294c6474609c64dd9aec051e98670bf2075a09382840152942d8c1119f408dd13dd07465c904c40bbb85c90605f0f3e2b5f79c1e0bee88ec01d81030117a3455e10b8127021a030d8a4c03541b2b25181db00c704a70487018e887a817485b4036ec81382c70517e556e18cf094f0ad80e403520f483cd88a6e0f3e136c5ca05ad8b6c089c0cb62c3022765b302a701cf0aa42cb69a57dbaac01df149b19de101c1fbc13685ad8c7e629b056d577cb08f892bc6e681ad898d031bcc9302cd010f5c191c199c199488c4819b04cf06370caf8a8b048f8cebc53dc206855b84fb030e0bdc156e133c247849f0c0f096e085d111e13bc2a391b4e8a8b838b84fe898b850f0c6205d718140d24033d14b9072b0e580e2a0cb0007eb60b0a941ba018706dd006903a42f90bcc075806b02c7049a810d8d2d0b1fd9cd3c26785e785f6c5ee87e40c24127842d0adc08b62ef4940d07fd812d8dae0b6e096f079e16b4b669e1fae06a71ad7024d8d6e09ce09ee03cc07de0cbc1770597814f09b40434c69980232f11b82570b43b82fbc475e27ee07ae076e03671397037703570619789bbc4cdc055e22641b5b818b8542ed145e24eb94357ca8d728fb8465cd216d92f582fd82ed8352c17ac1a360dbb05ab059b058b86c582bd82b582add92a582ad829d833ac146c141a66cdb0655828d827b413d609960cdb04cb04bb044bb3635825d82458316c18160c8b044a03fb85f58266618f4075608d608b608960bbb043b0332b041b040b04cb85fd81ddc25eb156e815eb03cb03ab85dd81c5c2eac05e6171606f606d606b6069409bb033b0555819d8185818582aac8c6ec1bac056b12de826ec14548cde805d8195c2466155d054a81a940b36051605d604148c26b2315b023b82ee800d8105817dc23a613f603b60396037603560617609cf81cd8055c22661892c12768a9562a3d01dd823680cac1196ac45f50bd50bb50b950b558d9a46dd42d542cd42c542bd02d500fd001501098a2e4a7744670425025705c98a6e0cafa83ee15d18426de03a6810502cb407e8153a891e6a0e7c515a03ad44638022817e41a3408b4097409b40cba04ea069d02c5034a8129aa456a05da06bd0332813a814a819f409140a940c1a06f5a243408d407f40b7f890f07d417940b1a0e59705bda2a5d01b7c3ea032a035a03310829e809a8082808e80868092803ad146d00e502a5409bac40f3e10f9661f1639e409480001758d8ee649474c18b5fb3c314201224e8cf800418448471d09131f22444893fa2ca18091202642f84024e8880f5012244c92102112435a623e5992c448900f12223e3e3ee42029319bf8c024091122807c84f82192c4490e62e21304114678785212d3e70893264c881839c2a48901829808d1e4c8915c431a9a4f9ef82ca921912d232e04510097911a33c8e7890f3e3ee2cb280d244d8ef820b119a1319f10e1a3e409113e3a24201c5d2189934cc4932401202287232b0019d57046559843f83061199d31a5308138d2c489cfcca88c0924c40f497c60d2e40891244eb20f058c882ea3274c1f9a34017242c44912209e00f930a940132244f828c93162c244e2c3e487244f98081164e44813284984f8f1211204d4c4890f5090d11226922444827c9e0009712466449b4f7c920425016a024490104688fc402489936cc4091226468070b0311a63124101224a78b2c487899320808020828489104d28c02449128298343942e427082461cc263ec88cbe984f8298f840f1f162fec0240912263e4e88f8041941920409132347788c8c307d90343952332ac2046ae2c3139f27374644984f828470122444131ca32ea6912023488830699204894fd093244f807c9ce41809613ef1016a7284081141499624a1809125498c4031f2a320cc274e846802f403111b2320cc27404d829e3411801120233ca4465acc0a247192817c94003561c00ee1a89c3e3e42f80871801e90f8fcf083911e768cae984f941cf101e2480de69320263e403e403049f2232b9824f1616634837924c9132649808286f02142c412274e8c1001f241b2248910a292234d968834a32a6610448c0419416224c8a700a7510c2c9064899124414998247119c9a692234d965080884f9010477c86f06119b96002350180078367c426bb62460bf214ea664992990a79ccad5da85da04ee856593b73ceb9c362b1ae6f4ee9d64ebbbba9574ae9d6dd777bd978f875bad5ba757b53774adda973d57ddbacb5be550ac45aba39fdf182b78dba7b538ad2a19b534aaf0fdfb6daa3696fdbe528dd71779d5a43df66b66df34b2bad1dc37da1eebdb5c34029b5f6c5dd5fdca9edeeb9f97d717a299deedddbcbd65e7ddb9c6e75bb9b7bedde9c5ef779dd5adbdd7eda4e27dabd6d278eb69fb6deeacce974dab68df3d389a32fa7939f4ea793fbe974a2d565dae5db4e395b9fdc4fbef9e9744fa7ede47efa4e9b6ff56ebec95419eff6666f36daaf8d7b9bc76d196f99ed56f7cd2bddb6ad56f7ad6e9bb5d676d3cddb7b667319bf94d2a6bd3975dfe1ee973a6d19f7f6ebf9e63adcbdba6d4ab1d3952a078a736ff7995477cf78bbe7796edd5f5e5edcdbaf6f9bb73bf5dbdddddb56da9c44c2f1e2deb7b717d4ddb67add6f38755263ba6da70de77abdd9b6ee523b76bad5b9b96fbef90bf5ed76ddaebf6c1b6d4abbdb5f5e5e36e7dc7df3ad7ddbb66d6bdfdcdbb7de7adbdab7dedadd7d6b4a6bfca57df3da4ebb29757777efa6deb486f56eedd4b7eef6deba69b77757efeecd9bba6f9bbb6fdb8b534ae9db4c4a27a535f4e585d23a29a51ba554666e9b8d1aae69363ae9cca432bef556db3777ea94ce3abd5feab6799ee77925234a51bc05890f900f12a0264458407af824010ad2e1e520c5a4643c25478c5060c99226403a628cf800c9b8d87089697912f424c9103e5e104d543d92f8e003e404a3665c9a340122f2c4e707264680388299f838716224e88891274c8c000511094a1204058478b2f2794224882648981801c2a9a02744940035a940900f139cd2139555c120616284880f90112741345962e44893253f3e244996188142e4c9cd4b1036dac707c80722404d828c1c69b264891197b91344922026420061940f4142d4a086f0018248109324404e881c799224089a1fac9a219a5420c8861223478ef8286101e9d112a4c70e911e3e4a8c2ca100911f982401e28911209e85c90f499e84dcdc7942848f122247922ca180104e5440374eb307129f274f7c809c04d1e40811201f284d8ef800ed286101e9e1e488cf93d60dd027c808900f139f1f88187982e4c88d29c7b7c4078acf1222431809c2a6f4439325447e6092e4871f9a2c89213d2132840f122649883049620488233ef8d0e47790f8dc7473c7470991a0217c98f0f88078928449121f54dedc01e24890110a1009023212d405f9fc90833477808cf82c3942c4e70723404d829e1041b22409104788042d11c2880f3e4888040de1b382c2c4c747b30711264d923c01f2814284081f9200f9402122c30e10203d809e106912e48408a023448286f0b981c2c4c75b661301d424089f202e14263ebe63a2f5b445e64b4848c8855efd7a09d52253682b3285ba22f325b4bdb62242740abd5ef3f57abd8484be22f3f5e28accd7eb3585845e5e44a88b4ca15be445855e2f2ff2a2b388107dbd5e42b5881015a2455ef4458bcc172d22445f54c88bbc5e422f2f325f2f212f22446791398bbce8ebd545e6ebf512f2222f2a44bd1679d197909090902d328584bac814a25d44880a09097991964ba1734e1ac4132333230db1ec3fd26025fbd32085b752d84543cc5baf16b1fb32bb6c9682ddd4fc6928bd750377ddab6ecc6ee0d448ee268643bb51ca706637351aacf016cc0d9acc0d1227d6e1c06e642aecba31c3a9e19037311c1a0d326fc5609c1bb51bb0161c59cc4d7933bb11c38153c2dc9037b41b311c244e7943ded06ed46ee0dc9437b31bb41b244e0c0776d3dd90e1cc587ebca9c9c066ca199c1ace8f383864cc4d4c662643cec4706037b2181acc8f37603238b2999bd94dd9f2e38d1a8c0ad3e0c48d180ea6018653e6a08188c6611ac81b320d729646f6e7f9c25baed5cc5b2d61cbd3b2e380ad38da8aacb5e8a865c71153913766aa5acbe360170e1cb0158cb622cb6821b3e390712a588baacc31c3791dd88503474c45ce54351e9ab77060d971943754319c1c3968ab58761cb3ecaf5ae52873e4c03153c97294396a3960384a552c872c072d07e9c22153c154658e991f57309c15094363c141e3601cd9a2aae1cc6070d458622c306ed6a22a7148989fe28d1f55b11c3fe6a0c96038384a1ccc43746354c960300f2c071e73d458308f132ad58f394a9e98af3c1c73c478c80ec7bf5ac45a761db0956cc77733da4c2cfbaaacf1f8991de40e18cc2c3b0f72472ce76174c87494aa50c73f2cfbef90cd6078d58a560b71ec286f74601d640c1ff288ad6238b06b47e9d24173e9205d3c62c0ab988b870eecda21d3315bc18057b5d58c07b923a62307ebd0115b95bef21db51d3cf00e988e9a0ed86ac70ebc838663c632abc15632da0ed8cc0e52476c55d676c47494313a64ab19b94336aba556341e3019fc6a1159308f155ff98eb205bf5ac419cc53faca75d062308f15be721d640af3c87ce5ab58877978c426165248c1437e91fd471e32fbcf40f3d60b76bdff0c5f78cbe5854bb1e4901d0fd98f98cb8e4c874ca5e12d540a95039be151c210d381fd90a19e05bb72481eb21fb11d990e59f3960915cbce630683ccf4a3cca97539301e250c311dd80f5919def2ba1c190f5a074309930303299353f2a8cdb2cbe4d0608071d89553f2a8c19003032c47c6830643ce0c063227c6630683ec47cee9c74887bc3bb21c92870c8658f7e30fd948077661b6b4b2524e0df5e38f3227c663766128533fc240c6fc9833cb91f1707979f9118659aa93f91106580c66f931879663cc294d3a82c0caecb57f6fc68abd90d93fd59275b4f05f4a980cf72ccfd5b2cf7c4b2cfbcff0cbc85824cb8dcf81f3375a349c160ca6bc7996582dc7ea75b466aa5fb5c81caf62c9707c0e2030203ab0abb5c2ae16a9c22e962c077601c18181d06e60578b86835d2d988be50272838170d8d5aab566b08b350382318b0c42b6642e160d488859b020b056c9aa0179cc8af1a8c9fcf863162b6d8f12ace48396a2a174643b33cbd57c9c7efc511be99433971dda4b8f5ae9c71fe40908e98d682e323fc5910d1e399dd90b7eb588a9e92b1b78a786fa295a3c7d5583c754a63ffa20f1f4150d9ee2ab4534fdf80336aa65203358c9aab1583020651052c6a2b1662c1288ac1673f9b1056395406a40622f3fb6682fad990bce56b4583220b411086c9c41967d062bbc65c2ae1899b73c6c6762d985d0629726c3cc5b32f65b60d95f66961de632cbfeb4ec6fc2ae1962426842624168312bde4a61d37b33dc1fbd8bcc7e61d96d39337d0b76cd009bc9000b32a3cd507a0b854d312eff52cbfe65f64791d9df144426431923f333b5989711224b7dccbb6ad9df55a507984f0589c9209bc12e2132d8252406bb6448615710182c832b48cd57fe2ed825a47409215d41643294ae1948192e76098105296500695f8c44db623576a27d33126c9bc9003bc14a3352b9cd5065204f3f45ef4721654908d9c950da1f83c84c3f063981f84d38cb6aa50fa73c9cad1022eb48181ce15cd6f0ab45dc30e7abfe295e9cadf8ca7f9441967196c257fe53ac78faaa7f0c12cbfe160069ee1f2716524c2c6679debcaa507d9d84ea2b25442f254214ba8933d25a8bfbede783deba3f3fe52d6f7d7d496fc3afe116ba5c9e0b5d30ff6a1137efb777ddeeefbb60d596bed292fb9e8bd9d193de55a507f047efa259d35b3a7b52cbbbbcab4a0f2cdf42239d9ef4ae5973c12e29533ed155a5879787799714221b44979f424557951e50eff22e18eca2325ff9bfe029547441614afacabf05bb28cd57fe2c780a1549d8a5e32bff1376e22bff117615f1953f88a750d162179df9cadf845db4c453a8c86117e82bff0fd398affc37ec9abef2f7f0142a5edc610af3959d55d8bda08d8d7ea4659ddd9fb49fe2fd51679b3591f423a5dd9f2209bf5a44fbe32c47f8d522d69fe2f62325b99f22f7239565dfc21b82bea26fc394afe8d7f07d456b79debc5042b4b759679a39f44d53c87cead2c54c1e29443188fd53aacde421e2217a4b0fd1fe142ab6cce421aa339387c8a3993c44a89ac943446363f210e1888e5ddb13f9f0268f14a21cb1fe942b5ad4e421da5c260f91e965f210c1c04c1e229bd4e421ca213676dd27f271278f94289b48a423f64f71b1e26ff2107569f210914c938788059c3c4432a7c9438445fff92c93874887e8d8659fc887387988acc843f48d260f910b69f210d5889587e88658b1cb9fc8079d3c445c4f1e22d0270f514a9c3c442f360f914aec9f3f274f6357fd578bb86d7def8653d65e0c3a7611f910fd2de67c459fc887e86a112b7645f1a2a222c7d357f45f2d22910fb1f1fb8afefcd7a5d54a478900e7678a47fa339f0810ca967f28997f9e0865ff51283b7e3267ce3873469a6938f31020fd21c059fed83cafe0c00a737e13a5205337223b1e2999e7a703cdb5facf7014caf3e70fcdfe33a44bcc9df9b313328d4ecaf5eb6d42aef8c78b8ab8fa23cc84c323f74b84a8a8e58b3957ae4f9f7b0febcf4f871904263287a3b0dd2b8ff4474c689052e6cb64060196ef8f16c8dc08339964f020450e62f0220b6e88ecdf185022d3e45952b9a108c48d7c51021551cc20ebd328c89a0ca8a08918d08dd80bac90414e2619390a32062fb220a1d020a51cc202f97e14474c32c40d93930c7162d7fc17131298000946748124458b492924e94eb2d7d0bfbff92de0b4042540f185284545e214002afb8bb6bd3de81a96fd3b6400a8e47e8e3c5e4c956895123e5308904e8e62bed07cc2d39f13572c654a8e589fa84554a259a8ec2f53aa028e4b3255a255fe3a4ee0414a7d028e5489ec3f4e27647fd77cd05742e2cc82086850021ac8682429d6779186649d6209141c71822b4429537244fa442de29432a545fb443588f46b485483e8aad2037d170fbef2a73357951eec57eceaf195bfc5ae2a3dd4a7d8f5bef2af58c75765497f9cb3a90524ae4431053058b0842e4a32708a421de0e20a1290008b2f608005718af3479d1e9e2445fa4a342b0785bd5a887a2581d71a5aafd28db3f6fd39fb9bb5b786f48636c3b3ef9fcd424e8534ffd0a25cdfe24a7333e108173a24607f181041fe221dfd893382484c9f378578a9bf1d2aa558a853889d42a8fd7c440272a4b7dd5bee2df7f63bee491cf776f4d65a6bbb51e879964890919f7bff3caf18c145a66915c7fdccf69e3bcf6c9b14b8bf233c5bc56da19d39f3e75767ce7c1ceb32a0646ea2263225f3fcae5beecd99474a0ec18c1da81179e291925ffd1942d1c134a790b156fc63ca739c4579f49fb907907e95cffef3fb01b3634ac280be800929f9017d8222e02c974023df77fa5df74418947b220c0f58e1fedba7037d41be7f3b400587593671c5132a80992756e263030571f9671665fbf71b32cb26aec8d76221523928959d867403447986f48716e539d239738432ed70f4b79f0e7d827cbf7e39f8df9f25134fc8f6fb7e7f3ad4afdf78ce9cfe9ebee148b1bf0dc7ce5da1707976384b269ac83f39048952db11860cf2f8040955744bc86350124c4891208f415294e0cb6310139490e7ffe040aa9120ffcca2a22fe4f93f3a90f22884067e90e7eb10e65108189c20078e24e7a5978b26b2a5227b0ab24da6dfcd0480b30481946cfaa1d97e373f1c1adbaf782c4320cb3da4dfbfc747a1191d2c154aa0b8f8dbf067161515ed6093e9533c0ad9108a8b15366a68a9c81e0675b691fb756825edefd6e2a06e962090410eeaec78ec8742b34df6d0267738330d83ba3c5fc8d23ea3ebef6a07d2494ff573dc3b27c551dcb7558c7c6d1674ee1af96e1e0d3dcf707a21dff07e67bd699d7776a5b5b47d689f7e8f779ebbf99d77eeaaf5ae67c3fadd90049cef1f10e0fcf9ddac9c4d69ac409e98869d6d38d1c81383adca911da75a4585e88b0a55af2cf811a45f5b35eb5b2954ec4f651bd6707e2348ffa1741308587f479e57bc90921fa708104ba4c09246649c912d8f66d96dfbbbe16c1868a3f3bb6df43dbdd19f3f93fbfeaee71c85f71ba759963ef7f4d3818e917f68f86393b7efb8b07f86630fb93fd2195e3cd29f1b9e9347e39ea6d9bff3d0003dfef31be2feded1ef06ce6b409159156bd5c956c543039a65a7150234ab66fb3a196822dbffd12d17ad956c75f2cc66fbbff3ae7af4c3a1fbbba19f7e3af8f78675a06fbfdb429b5367282146de7e66fabffd0de96fe148bfe0857cbfabde16ce9c6a967d10d5556f7e38bcc87cf1e8caf7db0b03f842de9e16e5fb931675d6dbc2b1c97c7f3699373cde9f4634abfd676de48222e4fe8b8416f9fecca6c64aeef7d3b0bed7ef699f98f67f385c1deef71432df7e77c3fe6e87fbfd5ba8e44e1cbe1ceefc8b474afa9eee48e148fa59bba75c388edf854ae66fdfdf90cd01e02c9380e5ede72cc0e827a6dfcf10528e3082cc40a47f22944998f43f6305d6f042517e326752348181dcfd13a1dce1d92a121ea70e233c0e91b7fbe140caf75e6b6dadd5ddbbf3fd8674dedebf21a4fb0da17973fbddb0f5378484e7db6f088914cee8b0fdfce9cd70e651380e31b112ee7f5c79f4cc3d97b7ef692e1cefd3eff1ceb3442296ebe7581b72de236ad1e8200056975215ba3c4b2964e449a384141fce00fad39f73a61e490701b0825d6d158a87668d6f258fb308b97efd5b6ffd11ccdd1441fbe3fc22df54beac911340b346108866dde76996e7fb0d2823df8f40b7aae8f38ba945bea83c06c9f7e7d7d3a966cd728a12f93e4db33adf7bef7bcdc2b958c9acf5199d9b72b87ffdaf6fd6b7e7debadbadbb5068de7efb1bcedc359d3d734f6f5809f7f7bd00dcdfefe90d8f4279a3376c8fc79a6df5e66ca8e4c7c5713b781e857277a6ef6838e34fdfbfc319fffeed3bee3bba3d7d2edc86f46fcf85fd9e43ffb67d4f5bee3b3b1a3d90ff7d2eacddfba33b0aeddfcb7de761d0cdfe371c3bfbdbf79166e7f09c3c7c88f557c2fdf69d03790f14747337fa202f93dcf346fe6ebfa3b43cfa8ec4bd876367eeed9370b0ef3fbf0108e5119e930737d2cc7d7f43ec73d8bfc73da4bf5d6cc3b19f7e473bf73ca44368f6af1824d1519424d0e8254914c1bf3f65aadfd5494fe0d482d21e3ad277a6996bb36cf7f32737e25e278f46618a9b3f85d03cc39f393a79becdc13ee93b52380a65d2b7470a496f7b9a14ce4cbfd1d36f0867a2b9035b357aeeb7a7df0d243c0a6d616a1476368442f348f3e84921149a47a3b7e1ccb52bfd789e19e2997b0effcc994fb30d4758c9f6dc93c299ebf7c315607b0e9bfe6bc0fdf9a49066ae55f38633f777e48e1be151288f1e074ae61f5a72dfe3a49076d49bdf08ff786eaea7fdb1fec53f345b2cb4513ba59b52b80206482a5778f0851588f3035b457fcbd34a511a996621e0f8d4cbf469904c9f3e4fb3b64cffe9e3d01f99bed7acf9deef21034025fe39f298e977730a1975b215b2022065fbb6fee8787c65ff71349b902d8ea2da9f617d1b2e20062fb02812e77b38bab28ff7970889206f3fbeb2fd396798338671964450e4209a37cc6492917fbca8285f1c856bfe4b888a9a583139bab2c5a3ff38cafd3dee618edc51af86f3e7f7801904983873e4f6ee42d5aca12e74373d219799b3ccfeb559f3b929c4fe68954321eb8ca9ec4f5fc75bdcfbabbc35aaadbaef1f640af99973df7f148221d7abfb9cb752bdbaef9f82c9feb34482288f3fb23fcc1442b3bfbddfb557c3996dd856a8dfd3939ebc56f5dfa74fbffb33f569ee3c537f96486021cf12093372aa55f7ed4fcd1b9eadba35acdf0ddccc99b3b4ddb50e8799699e58acd14547d3e812ccbdfe6e984ff32c914023a75a359ffed43c67cec4fdddf0438bf268e6f4f78703cdfefecda721cd93e2cacd9c7e990380b39422451ebdec8da69099fbfbb92984946729850439d5aa7acab39462454e598f86f44b799652aee454f5a6d396da93e8ba6e7e6eff7e67c31bea00daeded2fa01f8f42d9ff25bacfaf01f51bbb8444977f8bbd8535740989f4e77783b7fac78b2d1e69de30f73a80ddfc7aa05fb1eb254ea9f26343be4f451bdabfe1e8d97e87f57bdc8633d7b0c5f9f5e022fd9ef6309ca290bfa8107dd1da315aa626ffce8473fdf9b58734771d72df21e5bea7bbe903ce1203b3dc3df7f427fd70d848df8523e9958cae37bf1b263ddde7be7e07528f0ba71772f5b870ecc2991c2a49e6ef6bf6fc7d879de7970325f3f79d7b5c58fa0e67eeaa17c589e9a3985c42a2e9fdbba17f260752e6f08f294309eadc380ad3977e7a91757267bdf2664167f3b870ae913f4a11268a8a8a8a44d377b6e9f46b6fe98716e528885e34f5b4b46bc97b9ab9708a913da4d90bfb7bbc33cd7952c27df79500423ae8fcc3817ed775dfd35d7f02e8c973f218b99f3f843ec7ddc07d4fd32f07eebbefba52f87d47bd5238a990bb443fc4d25bf71376710f62a7f9ac6b35e6b29e11e10a35caca6157f5c412aef58758b1ebe24af315765599d77c45bb5ce0c1168250c50f8c9851279aa002287811c5ab7d20032a3630842e8440acb8d62acd65b4a43392d29e24024529a39f028adb4f7991f4535462f7537444efa70411abd01f6909a6108a7f6651b6259839a125c1dce9ef423b82b9d34f0aad08e64e3f17da10cc9dfe2db420983b34520a118d28458a14295c1373a7bf031ef8008e38c2519cc662b08d48254a91928125e64e339112391cc5d4b2ada8e80b48f0628b10c4a410fd10a5703f25886891f0c4aac4dce91fbd46852380d184125801439ce2d6c5078e500324803005719322454a14d39417ad14956887e64eff141dd14e993b6d496f6d78ce15fd9b4acd69c98ae75cd94c1ef467b6af94503b4d0dba8933ea88dde8e4f92aa7293d28e3de45cecce7c15bfec9fabdbb2cf583d8556596d6322729cc4a9edba8d6cf523bbdab7f44afedf199af7a963499257dd651d94b599b9534169b3f6bb11a0f5e9691a797b51be36058daebbec12e9d0ab3323a6b5a7ed39aca40ebb59c7a41bdab96fb7be65dfe6157c76cad96947458c32e59674ebc2fac5de6ab9e3f7e086f8d5addcd6efe474a9467a5b9ac76931776c93a8bcd5ac33a666bb5e4e130bf4ef6665b96bb3657637666ea9606513dea52d76e6996a6a5ccd599e1602a8ca5c6ca5c3b5db3ac8d56fbb2bc6bd632b5fbaefebe8143c294b09a9d9a596ca71fc8bb7a7490dfe96761174772a31b046fb2adc695a33bdb621b8d938dc85b6eb06dc659d846faaa370ec6d1fcd67cd5fd1c4bbd9b4b8dd1eecc87dd35efeaefe7b0eb54baa060608c8576835d34ef72d332319ac7d805d650b596d2346381399127cad402d64adb9f9ac1fd5dcff47f885da799cb0c1503652c355f35cddbbccb464dd3d458bec7ffd8f91e3bb1b0bfbf7fb0bed5409ed53f1e48fbf81f2dec3ac958d8e50204bb50e40fec027d6096590fec3ac576b0cb25e66aa9b9401dcce23ac15c2e30570bcd658a01b3c89af455cf60c02c315ff58cb5d048724693f509c6b54beca6865396c8534c0625f351bca8e874d3d222838b7091e180242e8234bb1982f86a116360b91ff41676b18cfa595858de2583ea67215f4814486b39d55c6aa8129cb5c04e34171498835bc898988b4b898239edc452739181a719c965868a9d642f2458929ce652dbba0506ce4eb5d3aa0c16d2e5854cadbed8306ac66335b32db1db75edefe6fa5f4c2fb346f5d3625e6062fa45d6b5975a4af602134bd15e68a9180ced05969abdcc523098194caa44d152244c0943b6c85ea87803d26812baa0628c2d6a32705a09a35db23b50aa810535ae38616731ae46c23c0b651455a1c61956943419578e605b8c36855a1194304617e29d6db5dc8f851150e1c4125e88c1912b27ba5022044354b0224ed1377f6eb6450eb6c882114928218538456b7f142bc9a210630ba2273c204e91447a537ba108527e7086182128a2fe46cab6fe224c0f96de45eab2bfd64f2abd59571bd53a1849e6951d6d44eb4852cc9375b3d18c5423c1bcae1c95241a89f43ad948469a5d538b8c44c294b72b8822952998c3cc2aec05769ad999c760fa76cba7683525c3af96d268d52d760a154718994fa1e2f882a7507195aae55ec56aa84a235c91365c11852b58b872c2574388c1155700210b19299bd1a695269e8005285eb0821256ce48351a82286cc085155c418a59cceb681de98412074f70c14515e2884692014902035dc036503e419ce236924a521849a06009244449429c22c99bc14c9902ad8910ac914657034264650b4f78c11455183bd8118c908228aa00414c9ca2735bad7f9391ed35d92cfdfd2613acc96fe6d54c6497649fcc2b9525b21433c9be98477e25982956aa7db08fd6c546b58d06c64ca5dae883715dccc2be9a2cf717f36c798a994ae4e8ab4d9666a4fe4aaf6637eba3a93c81a0ada3c964024b25dafb5094ed87bc6886a36c387e8a437e86b83d76d9e00521b8483f7e43a3578b083ef823bc8a9546e0e84b3a5e87a9e4f2b88852e94d393ec70f0d993e0af7432e175c84c9a47ad5ddf1531c1aba1f85a33fc5a15111f7feea57bf232402c481713c18aed2f0553f0d9f08e521c07195860e98b74cb85f8713de2ae17e1d44debab85f07e9ad1176a5e12dae4b53e33caa61314df39e0c4c8636238ba1c134640c4c869499cdd46ee099d80c2d261633036b726616239391f9aa656a3d8b898999c9c4463d539631341959a96766b76fbf9433b019daa8fbf6cc69a606c6c0bed4295f51195a0b066f9f3027720df6af62de32e15509d481476e945ae111bc9f55784ce1e9ab7155cbfd39f0f8fd38c2959599d37f017054a591bb57641ab458af9ca0e9afa1d988d9a8d5c468602b584dcd868ca64646435b11d190fd3660366636319a590d8cc6466903ab99d5903668644d438aa1682eb1dc366a17c6d1accca5a606364d8c235134b59a32b70d126cb0615f43e676f9d7cc729fdaa58384233a708420ac600a27ecb2014361d7d4a20b1a78208a0d445902885d45b4fc686396db154409137461c4d0942444f0a76842793fdac45c26258cd18326c4a82121d2bc0917d1b8887fb5882ddd5df3a37e1aca0b38105f2d6211376de351dd5e7fdbf4377e96afc9dcb8bb1bbb304e87355f7588df653373611786b9c2c721cd575d73d994b8f455db604cde3ccd468663036359dfd07e76a306dba0eda00aaeed479a996c6683269bd1642559d6ca1986813f86347236a33014e50b2324e10a718a1ce9474c53030d284824c81588533ce15810ac78c20848356e204e111cc39a9529676c0103532812a748835f2d4f841a9800044eb0020ac4296efdaa2fbce59a798b4b712dbbb17e55cd5b1cf7dd0ff6f79bb02b84dde0c86c6ab132bcc5954add5c7fbb605718bb89e13c7903a6a279cbd4dddfd8d5b57e14aeddd47e06e3d0c2f286ec184e2d94ddc0701e76a349b12b14a10547c881685383c9643760326a70d18517491823168bc16e90b356053586ac64400a4c06bb2171489c9af7a00a1c5481441a421063340b2b1c91c54c0a207011f910fdc77056c92932141c91850c8853ac0dd282b0861948d80217e34d6deea0065b58a3e6012c2461c4a1e5ee23ac78e204454768419c22875d54dcb0cf5c527ffb572fddfe6ef913682a75aa53dddd386632d8952316835d3952d8750306ab5eb0ebc6cc05bb70a09a05e73861970ac4ae1b26ecc251c2ae1c1fce31eabfbd61178e9aaffa3d8c23e6ab7e1276e1b0fd15bb54dedf611ca4afba1b074d56bb635bdb56c1bc65b9b9ce31cbdddecd75b7ff7863969bb42ac357dd2b9aafba2d5e7de1abee8a57335f753b5e59f15537fd716525ebf884eeeb468856ea011a74e04d7d7bb5dbfdd2cf7f4f94322588c8fd88d4791fea5d7e3ee72513786a61f9199188a25c5e5eca949408f352a680a2cc4b99c289319f923245479cc15725dab9435fca9417ebdca13f2710faf3654297b9433f2644cd1dfaa9b065eed087095fe60efd971066eed077095373873e2a8c993bf45b426eeed06709b7b943ff148ee60e7d3024cd1dfaa6b09b3bf44ba13777e87fa1ccdca1ef853373877e17d2cc1dfaa4b066eed01f8536e60e7d2eb4993bf4b7b03477e8dff09b3bf46d689a3bf46b08ce1dfa1e9ee60efd0e59e60efd970cf5593771c689c52c8f60eaf3fce92d151120d08fa73f87b6ed5daf16d1ad7dd7f63e48a477d9d2f7e9a3d41f3a957011a4d150e9a35422c01f9ab31433c77f8a43a5112ee25444a9c70f016e7828caf6435fbfbe5b3c64edcb4d75d916f451c243a552a9eb19add14ca52e5b4667a0939fde3ae1a1d347d97ee8e435adc952875d3da335fae44f6f91f010e9a36cb88828b448ac42f3531c2279ef8a7990c8c7cbbbb81b4fe4437cc1ae97277de76197f7db9b4ad855fad3db7e9a900810883ecd8fc2a63549a98eaf3a76a3638ee3b40c49619119725d6be95ac3661a46c32de421ec099bce66ada4354aa3e4cfc81885e974c3a86cce66d9b51e3f76cce257cbce8fb4bc93367de5e37bbe20b33f8dcc5bf5d5229e60a0c520a365b7ef82657f32bb15a5b7fcb3156f9930e95da67701799d677deb8354f0bb77f1f81d9ff3307c0c4fe403c41b27f32ef05d39fec6ab7ef53a9ec887b871987b57f8fff86f1e0776c160170b7671d8c5fdf62c0ff338df825d33d825835d2076815f5fe667bee563b02b855d1f7675d8d53de9bf4f7dccbf60970b76a1b0cb845da63f3dea5dfee53dec1a61d7c52e8b5df64b7f7ff4defbd3b002a017c2400b6390853ab4d0072cec418630d482c050cbfe2e610c65abccfea850a7c6d2a9657f53e823760a7bc080c4b2bf0e2cfbc78431903190d93f15c630836196fdbf7087cc21b37f17fa9091c21e311eb2ecbf2396fd71c218623862d91f268ca17653cbfe2ce14e0cc77cccc21ee5f728b37f4b18034c072cfbcf84318431d0b2bf4cb8030b61d91f0c7d94618fb0ccfe37421975c19414941c48630434198d842d010660c8c088274800434da746c6d69082194e40c3091a398b81b603eb2103228331c8c001152310a7587ff411032c0a5ba8220b2e9c118538c552e9c718623eb0c10eaa10c30363d8409ce2e954c42886da0fa820c18095e00831718a24d209177177625a884208d058238a28c4296eb808dba3f42964a031b3011632718a15bb4ab888d3ab452cf99865ff2c85b75cff6a112b89e649b52645b201e2226cf0c24c2c62facae66da88923f723ac0048c9aed6189369969d26db6664ac7e6576af25cad2ec9bb0cb6734999d9195f49e2cfb93c8ecbfcdb2575bb3b10fbbbcf46a69d66315566926d2ca62d93fe5b0af761766abc35cf5c26ce92bf70aabb44b5a9993b0ab9275666bb63a6d9391c86f06ce40afd5728391685ff99160b5b1cdd65c56615fa58156562fe931971aeb6a2d654bf0c21cd6f3c57bdc56ded8a8e6038f9cd7612f66048be1645bb79157e6fd0b7671b1adbcb111796b3df0f85ecb368a95d9df2bb33f2dfb0826db36f2ca76f0986ac1443ec4993bdb622f23d9cb56e3663398232f6d9371a392237de597b671b4517967db68e3661b6c14e36eb9351ec13ccef28b1babc5902e314f6666bab2d446bac03c99b28566bae506f362236eabddd906f3a91f3759cb4c372a7fe4682e3b7e8a28fc2367c2303d663a310e669a65ff323bb733d391c570dd0f1f34954e399ac1f4a0713f6a3e6a40c8116d87a6fa41f6a8853f603ab3514dc707b953fb01d3998d6a3e74f04e0d0839a2edd07e903d6a3ae568d6e347cdc78e0e57fb41f341eb31d38971b0d94ee92bdf91ea62a419a9ec6a5e99f23a923723c93c9a07eb4a528c5423c1bc9a17ebc86ed6c1481fd9d13c5907237d6447f364249857f3621dd9cd3c9a07eb4a528c54f33a923723c9ba186946ea6a5e7969a42ed6d5bc925492689dcc23bd194946aa751ecca391621dd97931af46ca1d2c77d993e58fec4864c3745df720cc54966aa96f568a755d87039a4ab496af2cc166b00b8499cad2378b994cb1d24cf5c94a24292bd1be12cc4433c14ae5cc17fb6a30a699a924fb609fc944963ed867a29960bef2d2f7996aa65869f6c94ae4370361a6b2542bc54ab0af044993ac442bcd4ae42733d54c3113ac547eb52f66a265996996ad3091b92cc9b2958ff6c12616992893a712ac813116180b2dc75862a7d98964a981b25309d6c0180b8c85969d68215964271a589e602cb1d3ec44b2d440598681b316184b798a9d6a2719486b89b1902cb3930ca4b5c458489619386b81b194a7d8a9d642b2c84e34b03cc1c0180b8d05762ac1da8904652c3596d86976a29d6060d942b2c858ca53ed1403672db01e5a4baca70c96594f8d85ec49e324ebf902a44d32f2384bd917d9bfc78a1e196a86225b642e31975acfcc4586a2a1602de50b899aa1c816994bcca5d663e505e652a26a2d3354cc4586a2a1602de50bd953b6d05e622e3394cc8544952db517990bcc85862a5b6a2f3217980bad85f6127399a1642ee40bcca544d55a66a8588bcca5e61243cd50240ad652be902e32140d5543c55a662f3097d265e642a2642db497580fec45d6e3840bad27e602eb910255f610b5d47ae4d1065a4994fd6d28c3065a0c9992c1d05e4a18580f19932a616a2f30b118322583a1bd9430301bd28889a56629f2054616932a616a2f30311b6a31b2142d057ba9c1943165aa968ac19030b39832554bc5604898598c2c454bc15e6a3031b154ea8506a3a38c21636429185a079389cdcc6260a9b283a9c9902db2185a2a969ac9a45a52b08729532fb5dcc5c8ca9812db60e56d98a5623c7e8a2cd8862f6699c336580143da00cbfea30d56647f1b9cf016cc5b1c27539389c1c4cc76cc9434301b64de9a659f21656439686231b49a4c2c6656d2c0a4f0d60d1a19cc0c6d06c6c5d464ca1b8fb16b664686261643b321e6ad1be14a86a429676a37646633b150862603a399cdc86848199a0c8c663623a32165489a72a626331393cdd066603135999b1f6366b032472d26230b7f8ca1ad6862aa99590e3207ec864c8913535bd1c85433b49f22fe71a69673fc1471fc3813dbf1a3cc8ca42957b8861ac6af16f1e6479a990ad790068ef0471a3207b681dc3123b38188e54799327ce53230541e6b28cbc8fe3558f1160b7eff1a4a6f712cdc93d96b643434161b339b987f0d346fdd70dc0e1bb41b1bb09ad2464653fb1cd86583ac91d1d06636315ff917de0ab91c36a58d9a0daea666f63bb0cb06cd4629a3a9cdbc0583710dcc6696c38684a9b121c335b59a980d0d061ba50daca65613b3a1d9286d6035309b990d5943b321f395db94366a366ac81a1d3fd2d062366c9035b29a92a676c3466683660366a3665643deb0296dd46c481bb2ffb186c6d5c06ecc6ee01a74fc6843abc1065683ec6d943558c103d7d4e0444d8c94471a6a353891064c4d15b6d8d4be7c4ce2b20698b774741886f364487278f633157685a54dadc4242e6b20f2d60c7e5838533d2d8461d893219efdac0612e63f8663ab3016d26042d9cb702dac6159287b19ae85352cfb8fe158180b69f861e1ec69e19725265bc272c6a636433e9e71b016b2259c853099c7b4877138d612d2f24c1893f9dac76898e1e0578b78e3475ca3e10b5f39cc8f584603edc7b036836928e3c7504683155ff9cb6c0eb355f4bb39679ddf73f69cbd95b629b522ee24c8ee5b7607c27f9c34245e99709f6b34c184162d907121055a101d27bb2f6182ec9b2d32aa56d8ed5a9ab57684016b8562008513d6d002952d9c6103d1de646baf2c41668b7554ad2aa2c4acb3452edeb6304e5ef346b33f82579438e356cf3cd81fe7ac078b1b30ca80948a55ade2418b788bb34f93ad3565bb826c819075b62b379852e44a06625e112068488a784b75e50447d86beb8f1e529e5792d042fef2bc9244189b7f60f4c440095fb53d5fc4c00a6b7988c10ca7eca1013028c3dad1d6138312e47c048358af260ca4e0c00c084979c1195b286108547c2007f84a1261d8e7ec66377bed6d5b9f7e0f958759898421eb5b10ba1fe804d1f9a1e3ad1e2a4a30ead169d4cbe4e9031ed4b8594f6156baa5610ba4baf5c8bab0f5502165db6e180025ba4f574c408200f41cd1e21360eee92c50d0854a9ac0d9cca2ea902419a5e705b56d732d7a35b9e8d5f422f46ae6115c6276610b4f50614a1342080114c22a451be6a1553dd4ef81871e1ea4cce0034894a08a2c06553ce1abacc143f3304bf5bca00c983cb310c119339a5b141035f182210c810661a0c1c5086c5c3022c2066870011220c84209a2b0c5086c6c604404a2347660852f04610455a030418d0d1a548111921045e145196a80000444343bc0916759c5081af8ae30318b40748513b480053f00638b99236460850b37d880ebcca84e10b6d609a2f32388153adeeaf1810e6ad7379500ca0060015421eaf1968e0d99fe7893fb76a7727f3867a061c640bfac5296eaf6fdcf619d56e9f4b4e08b6dbb61005a453370802ac6004194137031450fc496c9dd5a287183dc02c03d5680b327003a3f50cf09a08a347c35b150e308d9e669a50aa23cce7296e78d10476f0884a85949bfffe85d6bed757f0ef4154eb5ea0f90802229487471e5095888607e31b9a7a70f7a40851911ba08638a26c4e47eb0fb4cbb7fd04d1c4ea6d402300c229595d066f94a06d0e98fdcdfeffae39254dec24f067241a4b2ed7efaed0085668a2b0e22952d56521f83cdc4120cc06a10a3c1112df8803872a93c824b0ce1fee0727996547c808a4fe1833a85166ecad30758ec206f796ad1832e985a74ce1d4c757a73b18523cd1b5d011a5232b5e25b0ab68dbecf993333996914356f8d03cddbd3eb51fa743ae5a6906dfb6da394bad7fea6b8b3ccd554fabc8e74e9e80ee162eebda94b6172fd3aaa727d9d1ff553f569eae79acab5eaa4eac7d47b5b58ee3ddd3b04bc30f5de7b6fccbdd7da7b5333a7debf78bc373585d8af1f531f6c1697abcfb26506265bb17ba51cddb2fdc7b1cfd9f72c982d97ade5a610faf647967a6f976e14d36ddbb669e98703c523dd629b4258b2ddb66ddb465ddfa7176f1b3773ecf61b1eb78d9b42eedb1f4d212cf6ea7864743302a0ffc8cd528a34727dce6bd7ae13a7fa60ea1e32670ead15cfce9da7a93473fcbf99e3efcd1c7ffc438b6815709653c8c03e2da359231d23fb531a25a35930d91f24233b0bd0c863cac3c93079f4fce9378425cf99639f8ee1b53cd22db213b09033852a643276a056c099e39f03b5024e21f6fd4f53080bebca1462437a65e67ca703c38e169e0a669c71051da80f9cc0822632b5926d0ef41b32819077a056bc5a9f9c664efd8ac76a85ce30f37c1ac514f2844ac9348a99335fc8137a65e6cca750d8ef6f076a255b28b2b53f67c021b33fb53285582b4fadd0199accf3e91653084b9eb8340548ade411cc2a005f68ab67054f98ab99fd2765f5ac800a5335f36823d319e49947963c823d2ba04dd5ccfe283a43cf0ac89831d814a1bb9967fd643e30f58130df0782e0bba2d87c984846fc7efe5b1047b1c1aed7e7f21df8afd1b7fc7c1a1696ad4a10cda6ff50de975afe354ab16c0eb2ccbceb3572fbddcf47c5cc6c1bfdd7f7332c2eef7aa1deff35fa520ccbf6b5fc0bfc195ca5b77f8dde65aafdd24f218930d82553c255b87fd9df62586648fffabe24f3825d2f972f7928fb2fd0e55d709553c91bfd0b7c140beafe0bc45528a66139611488ab98f0b78a7e09831fc6e97f75dfe12a24ec7a8d7095209a395c719597c5557095975769698b4257bd0657141b19d1ebbba65cd1ffc7e6b50d4174ec9a5212fd895ec4fa43abadef8a62e3f86dc5516cec13c988327e39925702512c3f9f66b37e39925762017f7eca8e36bf1cc903ffe582b25b37f2cb914adecf076bec36fafe85fa8ec62fe7fdcbe54951d4ccc4fcabbe7f2a85a3d85c9f89c1516c9cfb97cbe4024ca491b1dba833fd0bf5dfbba690c4191cc52626855d4432761b3df7ae57f7a477bdbef7def5327d096479f997cba3def5ba6fb751f7994e2eff427dcbbb5edcdb6dd47da6967fa1fef4ae17e9edbb5eafd28fdef502bf7bd78be5bf77bd5efef42fd49bdef53abdbfebd5f2f75daffaa47fb93cf712e234907e97b03610faa8f01b487f4bc83510fa2c214d03e93f855e03a10f86a906d26f0ac10642bf14a21a48ff17a21a087d2f041b487f17a61a087d52e83590fe5148d3402890fe2dfc064281f4db10a78100a1efe16c20fdaf193a32a39bcdda7ef4f351cdea7e7e8aa659cd027f3e4eb3784c21e1cf4841b054b2b6eb46a36debae4137df67790f7f4e0ff4f33364c88fe97fbeffb1deff90fe87fb1ffbf775b0292ad24166c163c53f365064f2098fdb10b2e31f9ba2f1874291c9a6ef69d084c7ffbef4e191c6c3638af41d098f28ee47e0fdede2d1b3dfe18f4d515151b6788422932b1ea1c864c7e3926d08b97fac373786f29229c661a135d6bdb76a7ebe009c78cb7f3e75c25b343f9f96dea2a49fdfe3add1cf07c25b3a7efecfa75678ebc6f4f38378ab64e3e753226f793f9fcabc7503f5f375bcd5f2f31be02d969f397e3e95c25b608ccdbffc7c1af31696c1239765be439ad5ab1ec7dbb0060fcd7ccddff006e76f3efc2d7c3c7471fceab950071e6afb3abe0b6fe0a11be1e3fc17dae8b7cffd29cc8173fc7dd5bb84180fdde0bff130a10d1ed2e1f2dcc7844343364f334b296659e6513c441b365ff3a670c80653d9210e7d6ff3334f9ac1544ae23f0d1e8a79d3d7602a2ee2d0f6339fa279d493be251ca2417dcd976abef4284cc5c5219837fd281caac15472c4a1d3d7949ef4351c2a612a348843dddb9030151a7188f4334f83a9a0c4219aafcf120eb970984a8c38c4fdcc37a6c2894334dfef3a30152a0ea1bee65d30952b0e95dee62da6c2220eb9bce95fc2a115a632230ed1bc55612a38e250ea4d9fe3bd702807a6421287582ea6621287bcb7791c984a1071e8fecc83e150942121f106a692431ca279ff10535989432f6f1a7df8f869388483a9b438047ecd471912126f30951ac421d3dbe0a111ea5b9ee54f0f3e152ada3cc6545ae2d0e867f0d0cc53a16268bfbe7f38448387a85091e66d486f231c6af91a3c4413f3a987f99777792a549cc143434343a62ffdf7de77dfe332e1abcc31e1f4d5fc54a8f2d57c9890075fcd7f0987f0d57c9790c67c351f1572be9adf12eaf86a3e4bd8005fcd3f8594f4d57c30a452f86abe29047d35bf1406f1d5fc2f2ce2abf95e48897c35bf0ba9cc57f34961ca57f347618fafe6732110be9abf8514e6abf937a456f86abe0ddf57f36b28005fcdf7d089afe677489df0d57c1ad2d257f35fa0107dc538b7826e8ae0b462062dd3079b35a65234cdf24ccd98356a005d2703f843679ecd9a2397a7b7e191cb9b673f1d46230fb9fb3072f7b3ebbefb0ecf9943b9908ec21c6618138b9977986b64fa5e0e730979c81c235312cd1d299cdf0d23fb114028cfc9a37b1a8ee1489ffb110d67be61aac6eeb91cbaa7f7b91d3a4cc273aab89f9f0ea3a7f3cba1e6d1e65be87f831c73ad12ea688d55708edc298f2013331e9e98e20b4a4c81c4144db460032f575070061454781c106f804613513801d98524b85c498108a020c14b9e251457701f9071efadb5d67a2f145fe4ebe57bef1d71df8d46a3ef6995b778b8f75e28b6c8f76bb34af93ef7a851947befcdf75334c8d756efc1cbd3ca0cccc836cf1d9466e45135a2160324140a35799046154420831cfcc00428408d4c80012a4e10b3e28a2129c26841c30bb94752202d81462b82c4cb130ba22ccee8264d0108467141f7a8d3038f56515527b6631d55ab6c370f94c8fdd57e3faa59f51bffc5b5bb7f34cb56c72800fb2b0e0272b9a77b9a072932fd1e9a75ad096a1c8b163df8628b5a64f4c5b7c4901a2ca10a1446d84213acb05cb14591920a5e40a31541a202a2fb81ae662f4f4ac5542be2ad911566193ceaf3d03da1bbbbbfa7bf8811ee5a2441cbfe296fa7d18a20a13060c1141128a1046704010bf144832a649a1d070153b9a7c13caac03cb3e002096ea778c23b608017882185185088c20b62802af8800a40d08dcab34c011ab9cb130ba2349a04fec3164a30664be08014c0104d7904f34c51276048542590c841184350011333285d911df1e559a26028737962a103306abfbbbbbbbb3be77ef1cf962b56e2dffd4f8486f877b7854aecc523b76df75a5babe7fba3df1f3b872d8fbefec6e151887e8fdfd07e1a4d3f0eff6c5949fd2742d9be7f43ecd7a7e1b8d12920b703f7f433874725dbcfefbbe16b9e5b38f3cc770201a7955a132c482277d5a3b4a35f0ef7291e95f8f7df57e2f7e9e77f4325db673115e2e8a5811523fc80438111f526cff2044ac8df10609b9d4235c3946779822c2c13dd38ad8c9e8eff8f6e4d9e3c5f35813aae552fddc49974066f28cf9f74d666cd4c9ff3308f3c7fe2d027b0bbdd8d93a28126bc6842156863e800085f195bc207eebdf79236036d4414c6b8e204114c3186f7022284a0beaa55f4755a556f1e51b9a70891600806600c915185358e20f673cdea727721c6951764c1cb730760d068bd339833550d469db7717ea1b3fda8e2d12a17741b96e27e21d8689dd2f9b4d24af58afe6c5d5a05e83ffec87349aadfbf36ab598dbd56d1f7df422e9cbdeaaf616be4517fbad3194ec5691cb14a571c9a04c8c306fa3e0fadea6ed88056f5d02aca83b754bea2ff5eb6a96ccb133491ed570e85c72538d95e5b2906c039e3a159fef47b7056e3973cb3e0c28c5cf32c4ff08149cbf346e8522732e569c50556e6a752b351f6e97732805eab96a46e003d14aa943ed1fd73c6eb53c72d44c7ddb6dddbbd7defb66deeb6b97abbfbb6edb6b76db7b53a79aa5a359f54eb6ff7dedb3dea91fba847eea3510df2aedb765756758e6b8e06d52affeefe99e34fa380fe7fbfb95abbb7de6add7aab75ebad56ced6daf8de7bfbd6ea9df5e6d77874e5fec959afac5a7b865aab90db6157addddcdd396f36abde5adddd47a377afacea97661b5112e992dc9df4e950ca17c7cc9cf9d6ddddbd5ecfdddd7dfbeabbbbdfea71df77fdd6fe2a8bd495bceceeeef75eefafb2aa7b3d43ada54b83a9c9a35170f27c9a564dba5dcb95523367fef6eeddb56bad5d6bf576afb58e5ebeb4defaddb5d6dab5dada6dab6d5b6ddb6adbde1eefaebbd65a2bab7acfd06350cdeeb5a2e6562d674775546bb5b5badf5a6badb5d67ab76a6badb6563bf311dd6c96f7cc9cf93c41baf7dec3ee922ac9bf559e6a95fb7bad72d277e18893bdbbbb9bebbf4feaafa4ee4bbaf7de7befbd97fbf1de7befbdf7de7befbd97abadf2ea85e3129cdcefdddd7deffd91278f56cd7bef55b9bbfb7577779c564d6ff7ae2cf77b7b867baf3fbdf7de8b83f7a3e742efbb5bbfeffb847cf77eee5dfbde7baffbbdf75e777f1269ab3f5ac53d8f56712f045255e6fe5bc53d4fe6fcde7befbdf7de7b71aa555c57e7ccb9edeeeeeeeeeeeeeeeeddee247fda5ddd6b37e6ac7b87a39739ee7bdafdfee83e84e6203387237947aaac9e81c47521291c85e3129eeccf7577777773db7795d67c6bcfe07e2f7577da786e9bff0efe4aaeed462e53fab47adbfbd4fde2fae3fd79edc5a1ba4f8fce40ebbaeefe0c474f31f773befdfadbfc1de6934824128944c720cf73dbe6dcb639dfa3dff6a3b5d66e73629a56cd47b56afe281c3f4fd0f3b8564d6badb5355b6b2da5d45afaa3b5d6526aadb51473f53b1b8ef6a9fdcdfe0ef67fac2c5b29a5d42babbaed4cb91f29a5d67e4f4f21dc8f9436672daead9a3fe9d31fb96e0cb299fee4a80b11941a5487d0ff9945454135531c63c2e3b3e6253cb9fe4c6d1efa35533ca3037dfbb4e2dab40494e6c64e8d986fbf95d86eb2e8e79abbb2aab71715f50cad0488e6a0cef48b329dcdb2f547fb9d0d2909d26c71b01dd43664fa4e9d09ddc4196d3985f8d34c341a4fade9abd13a91fbc7983c9fce96257dd59408707a1e8eb4e6fb1b6293fd69f8436968fc696a42204a1346b1bdbd010eaec8810e6c5049d2c5c5a05a19d82aec0c2c0dac15b60616f75b174c1e22ee05938708944d1ea214159387e8613079885455264fc5ae28930857a8d16fa1983c52a29844221d71fb29514c1ea22ac5e421f256307988502c983c4434534c1e229c164c1e221e26983c44dc09260f118882c943944ac1e4217a156cdf6f639367c3ae2817236183c861978b14edfdd1bb284ae41e091bc40ebb90b041246197500bb240a2621711433620a2620b1914892e246c10613eca1665fb28dbc5d55ed2bbaa4555afe2cde55f2aeddb1e855d3a764682dd7d12764d5a8ea6f010b98fb2bda02002309c90e20b0e88513617ec927a1255b2bc8b08256e4faa33d8357a19cc438f93537d10bb28ad44b64e59e35278f4f2a07f5c0c768d3e85298c76398587b8d58acc1979472f9885348ac9da05bbeea370d37ae634f655985b16cc05a6b9a8d4489695468ad239a60c8d00490000500063160030301c1a8c05535510a3f514000c699c7a66569e4b9420cd625021640c1101010000108108939800762b4e8a620942f03609777cdd5880fbf616e2cf941762257fa9b86e08a784781893255c40bfd49806c902f2a0cce1c7329b12fa0002baa346e90620f189f017bad630ef06e06bfae09c47257e3fdd9c063b2e677f3ac477fa1aa8ec1d94c323ff9bbc5d72c0b96ea0dd784836397bd83fc8f3a89b0e1e1c610f9ae82ce35fb919ee342cb9bff3492e2a71acaa58e88c7fbd68db670ae39e1c70a5a28db1419b5ae853bbbff30e02190a6e30f028cfc57740c978f63a24d2d2d21f38e796f37ef7cf5b2fe14fa830777a7c411865f4b3461afd56910eeca622ab55a69b00b03e810585ea8de02c6931b0a5ef4f935d03678563ef2e8d02794bb31dc77544e1029c70ed37245c42ba332bf8f0747baf410bf507a4480a9ab89d12829e7fe9442807902459a9ff81df3ce17c6ede03efd3b19d428eba90c7f1cfe073e59bf5911bd68f3ff07e38552c69c4a85625b0f139ae88148f3167c03384b2c7507b31b138f3a44faf20497fa247da13d119e46f96a77e1f1ff579748d06c84f4ef6a00e6aeb36d4e35316ec3391c71a89b17997c0f227ea468fb7be2e0eb822aeb439649d58c8d2c343ab7ff56ddc1c9afd53ac3546eef3a4ca2e5e6edc325b20cec8d94f4505a59c7f880d8d6dae48a77b75e1465de5d5be94e35dc310f6131eb243ad3ff04cf1486ec697f88262e17360473031f32615de75e3216b445214f7c0a311f3dcc9bd618d52fff008dc90080150992e6375f950fb3f7b0bb9b19fd03fb871470f758e165a5a5f3d9c968b4224f47dcde39eecd05eb594313483e318ce54754b6a04a623373b701f0f8aaf99082fb3982b80fe4cbc360bdbd6c343c91b1b62b30c70305b89e2de7089b4ee384dd80afb233f4eb961e1c573ab5a18ca4e66285196bb5a871b06895f59cdd34a55e72b80363a13ac95b748a46f12842070f88ffa09bc67c4e6b758f3f604eef7a19d7059cce5edc027460b846de77c74d6f6eefe23a8c62df0d8a563e94edbdbe65ae045b2092fe5c1d0586c2ced5d8f21cdff8368f115382b8c8c5e2ebcad468656c458656b7466934b6427b8e7745ee3460107c0c7c0935129634a7ba5b86be03ae5202aaa7190c1ec12155ba7f809ddb032871b2cb0b994a3bb4e7288afe8c4ba72da7d3adcb7509066d9cf594021df347d806fad004e00c2ffbd99b85f1aa304c82c74a78671e99ea9663ae023065e962b60db0f96f92f0c16f5e99bf7604338add35e3d6185cfd994b613c5ffc287460003c59d2bda2b56244fc745d98b2e49c2477922404923469dda9c750e43111a13564140b041cd158905ff8510027f5b992f8f8a1ac586962fa01459dfaeca2d93ae081c1f011305709d28a5b485525cbeb2622b51d845439a42ac5c8efedbd20982ec37afdeabb1289051afcae2c09259a9fac99a1be8f51a130e9e9eaefe342186b39a5b40a67ef9e3aa6b9ae1840f860307cb470a063b94f944d9bdd89198d9624f1b514db231bf5d9c2c03e5922e438e52a4383b9d93c4a44eafc04fc4de76022f3b259e67262d61a3c5d94909372424df5ed2a1c01531df56869a38f9c333e9f86f66fbdc2d33f951f85a2c801f4ff274e0ac1ea5b8d0b85b42ab45ef41a34faf0a708b2380ec4cf58c3e4c70e47db1050b844ea905ee39c20e145cf487cd78cf1705267a4b10756f876f0e8e6065df7379b17080cc43d7e2d8d6be7bd6e3763dd4849da899517ba62b99a9bd6d7093580fef49a4bd8ba10d2f31b577358f1e1e2d3f801edc189c8761fd8e061a9cf55e13c260a0dfcbe47ec36b069842a0f057f780d3284c1e50689adedd48456c1f0fec91b4e49cc0d34c5b5401c8e889426b2146703abe5059aa714bdcd04e507726a8895dd8a857967e7cd466810e171faba0f4395f31986d0d8836108be7f00941cc406b4b4d8c066b5451d91390cf5d9015c82ef4a078045f18492e16d74b8b5ee0e9bd01eadff22110e53a64f50ba60153132bceabe43cc6cad0e07ab17a627af0e88d7e6e2fe0dcc8e48523560dea5570d595b50f3f1cee7e53a97760529cd3e1af0aca88db21a7960209ee4a2ef4f28a607171eef16cf4c685827689d358b36c651c9d11298661d78b4a8fea01aceae4e21ca0987585387b520773569fca1d363dcec5787994747c979c8d6077fed88b1a43374c5e606fdc4fc6c9579a5a632472d0887ca431bfb6c29d7c1ebc8312e1c4bfc5e995e2c0146b6ec00c875e6896158921c680a9100c8441bd868dd314961dfb2ddad9300e65b5618460d23ea5291d9163de8ca4b4dfa190ac57692bfac6c5bacb4ec6df336a255fa1c13404ace66ae52785119957001c53579bc36a01e12e47b8c8d527c2a8f168d4899420ebb93b0540e1f2138884cfe895d278d62536d0f153ffea007e2755bdd27d8f139837fd1e04ae2badfbeb864bd0011f1d33c1bfe21cfc2ebcb900c44546b7e28efc1ede401de1c2bf0f07e64d8c927ed4f4d4cfa1059b11db03ced6e57bd61a1098761ea175b4c70c46cc830164fa8058cb1e0d1a749c9ad7385187243efcaf4b8d1e3e4e64100824735f2511647b2837a0709a23e05ba3044d3478c9909c7a192f9f2320579312b6fae82366c60a20f610e2d18331d48df9253b264caafb013b9e99d88656863ed06c12bd2813539dd54dd056d1ab26f5358d15a019fea35758004d01b99a13187f300145b6c0c26901c234f849812b83eb68f11e776ac5518e2e25dfc06833fe2a496e999027333fc482cf91a72740bd1e245e824a18b3c1516777f304761a1a97971822aa884fa2fe33bb0f9d178879c44d0ba737549e9b16371eaabdf0e6018bb89bea9158d1672a067770d67e328921d721713d3d1b9dfebdb18edd3a258bb9d2d331ff4594a793a7b2b8d7f159d2d1784f56aedcb93ba283bef0083f7d28e2ee37688d579edfa876b90990b9378add8395e766eba675a3f53782decd077e1480a80d9801e93d0707ed0289f18db72c2a1b608c08a9e797d7fa753faa89ef5995d1be8b91c3b9992c91b0916a4870dfebff64b9a68929ae438bb84e66eb2cebf24dd2a5fba9f14be993249cb1913785e7a1ef24e894a8a8385ef840332edf62f57ae77def2b3a744f42ef39cacb8d5017e7c54f6e1f2c6464b78d1cf0800980f37dcfbfed71a14de86aa0eaffc757382a2bedcb5eb4d944b4a94a2a77c4ce6cff981b882fb4b81e72dc2ca1972be1b6ff4d88ae8a41b5d2d0d15301cd2cf82d45bf42c9d9a388bc94ed3393d3e9924f00a274a066e8d014adcfc32d62601c3c06c46ad5f4bf5e40a292fc42ca862e3eca2258d6bb707dffcdfda7bc1fd8efccf2df699c80af4ac8ca8a0707490c143517b14463805d699e540e626e8300871144a0d58d2063e765bc066189ba3505443e9b62bb6631e6833083b3fc6f34b948a80cd810b9e8cb4984d308846a913ae770cd7c86691b1abb464e5d83f53c707820c4779a2afbac1ecd0d54a02286c5fe2c44ab6ccd52740c7dc96e8bc8d7f99712c7b0483b3933f7ed028396333df0d0edf3cd2caf00f7b6c21f5b3a4520c0cca71d1749230567ed67c2e9e31ab754d06d89013aec38c1b8a432f111e549feacba7be16694510d690f40cd468c2a42b5e5946d6ac979993e6aa16852ef312d4dbaaf2eaa13f03c7f2790cc5897b8baa7a78b7dc02dc856ce7e4f1945cae6ff8b4a2dabd23ae7501339e13fe96204c55fcc7b38a7ee2e9c86fc7b80965005c99db09de8fcc68dae29116ce9c82b1a9a74e76c34732d195e73f1ba0b061902235582e8d7805c745b0017b28c229b651aa0fd9171570c19353e0276d4df3347ba8736c491c400039452a2a5c19728162b8ed0fa55817eaf94c71bdf20c94ad641747a13ad9c18055f275118d47b3f6de4dbac2017bd7dcfd56d45019c7b2d340746f01ae12a5982ba2602112acb7a7ff868ac526d41258d549a78ea8f54584e59de73c23ec12e5eac397a77d0009780d4ef006cadbf7de57ebfdd00fb3f7b49bda41fd0f87783e9dfc8bd1f08faf680773394fbdeed4f2dd84aa50a07ea864c3a781aec5a6b400d4bba8fa2c3351afef255a1971616a15bd3931fe541a5510c8e88fda3dd80123d716474a575683a40cff706908bd6557cb38a90f53d5e45d103b0dacad59699c47d3706dc46a590444aad6735da8b8b4fe5abbf745a17fa651d0e82a1aafd1ac52599f8888b8d6e3a9caef349baeb9ba13b103b7717b5b28bfae886a214a8c0f82ded0f526b5d5acb09a1b846381cabbe75a918c63b0769aa5e9be7d410e80b995e5c0973e98c6e77f9b30a3b5441422d622de5de29f2e60a4c9ab0ee69b6acc202a984f6a8c3e7ce7116995e1891a5375749eeff96f712cda04e647f65b412bdae71e96b4ac635f9f9926fe6c0b03f201d3638997a63a4b2808803cc47f36871aa720e1acb3e02b391e50efe4f129507ff83ea21eb8e074b0da2d15a6df2c7dc73fe286a5607fd05eb9605ed78c392ac3bdef93c0fcf8efd9271ad9f2c9a933cfd11f16e187b9183573500c2d2b79ebd37c43fceea8276a682b6133f3f9165c4658e12908416e15ed067b34caf23ad018868591cf48d79291a85ec54446fa1803b698c7e8a0847e8be44cb654bbd7ac1846baec8105c8c127eb946f5c21a2970eea7211423b30415fbd3d8fb6dfcf2d72d6e7ebba18abf075072afd4066ea81f8711d1251e8eca66389be7bc714d1dd8a42ae26ce3cb41bb132597e6678c27dbddc59656e8f12434dbd3cf5a08f855bb9ed8e75addcbf9cf48bef5d98f5a4da99579c9666ff3701da29ae29a480c96b21e74492d6a2d0bec9e21a0a4ea37852a6e1f49d57fe1eb8868517093e60f7ed0dc95ec77224547095a83ce8e0d5bcf77190f89c6345f03826301da485aefbd281893ec339f82bcce34efc49027910d073f4e6542c851ea5a32fabb119193499c26bb65055c016c7e8945db3a83648c564fd98808d98e3416fda726eea3012afed82be154b3fe944f27b4797ee1e0c69a0876aeeea78c16d1cfe24678f01df4edf22fcc849b63b4dbc99ca087426d9fd6a112a8f5580b1a9c2a27cb6686ecabdcc4c39c0fd036d7b1d8a82b672f808eb43560bb04aca9ec26caf8ef7a328ea2265cdb2c54c88962fb57ab630ef397b9dcf6016a79e5eab221da312b29982a868e6d54e70ec91829c298e012439a6271116c66e12eb2c510a980c0c3746adda640329d19d0d88dd1dd896219cf4487b91cb5abe8f9e6a1f4ecc295f55f6ec9bd80f97149cced6e1213d8b1664b22dc08ef2367f8ea0b65144366f171d2ac77b403c2ad4dafae6e4a7d9d91221720a4f50834c9c5abbde05e1c7fdd3167ec1271a8c6cea40b43d4c98dee60fec47157addde969caf9c2c3dc5f657bbb98f31d8b104df983328198fe29caad870e92692115dfc9a4ec1a5810c70ba30b9024d421912d9183618d18a957f788fa7a3bf075d5c893ffb9ceba0c740231d60bc802296d58f922c2f25eeb2bf6aba99530d18f47c1718606d4bb7d98e27c9a13f148ee7f4ba720e5a8a1dc4ede008f839472329be568512f78e2b48f5024e751a1147982585a473b07eb17f1ebca3c823f4bb12b35b53c89a1294a537d0218655fb85c06d83af1058f5b7de0cd2958116730eb119d88f417bebddc0a083159feaf6298054850456f2b59887f0429a55c60ee9614e3df28f10a65b86eb123b63bae3ca8f58a39242690902784b36f3cac6053a9044f92af4e7f81b497140fc54e45e38c760c4e464c4b1f9e3cdd721a93d1c37fa1f82446ddc69e34e809b345644e173e0ddf111c5581161557684ab41001205b68f4023f43bc4f35fd10ada20e9b846a56a1bdb63aa213506575b846695309d77a6dbfb41da178b46c2da8e03e45c925535d58d714a873aae8a014ed5ea8fa586068d8a9289197c0bc1c770851b9029e72f644e5f20d9fd2b2c6cc222a7a1d4c19e2569f754dadeffcdd3582634154671e44ce3eabb84f9843de723389892f48021454be279a47d082c2b7c8f032461b36cc3d2f3b4c2cd10b3db563a163484fc0a4515fde8feb4de2b0facdd05551432f3df46990c81bb867b7cb96765da4e7a61a75bb80d8090eb97c820be985b8faaa3e43aaea2192a09a301b662821e52eb63f44703423e833aaf8191a72dd58d49223894e6f42fe58947b283e395c7839ef14bdb7ae77098534de7f88ee5395bb8180ad85d80c06a5c48a076d29cde8fbdf9692173a089d818fd12e2b78b15670080268636d662062c0c953d03393a23c695479d2e0ed945a65e526284fb4cd952215656895a710d4edf89acbc0c96e268a75350114aaf126f8672d070a3fb93cc6703faad1241e170506ba1b62741d3ee6a8b71c31cb5f93e57e2c91336667f9338255995f3e1453f2dca8aa927c7e45314a0d55055a8b550c706415ffc7cefc572cada8a7a0259d4ff87d12afc557f3fea6811214ae7ac20e68f9c187e5695d4a17a24ad91d146cb073f4bd34b63e45f73bbb93cb820e384c6ce0cd3185804c8807af4a88908c826675d1ccde64d092e8eacee53038f4b6d54c5c7986eecc8b842369f4fc4bccd051c371d641bc0ebe48c3d2b9694b084740da7b787918f9baf58685082362ed9214cc8601f21160ca97bb41968eba0212d7d3e5f98bdc2c9dd4f30e6c012d10fb80212153b0f4975564fd00c589c2fae919ec684c7cc0b8a98b84e94bdc425588d6f4b69c2e8e9ba90fadb451c60edd849f3e6137cffc1bb2b26039b8c0bcbdbdbc147c5547fda4c1d0ddb4499825a4e10081d2bd78cc01e105b0009e03de5af58a653a823f7b7645c901c84e402fea193918aa8d33c74bc30fc66eaf79129dbb9196e08d2056ef12489817b6b503225060268ddf6315300a3d46750071ffd07b983ba5cbc6dfb820103551c5210f96356702fd19c62258ce4ee4372489c193c68f7cdd0800d480f39f49be1f23e20d4cc41aec5158fe7e6f0d6ff17b76e80781e026eebddec7778b1c927d4ebbf47dbea8e783d6247ff038e730ba7cb09df1f657dccc3951d0e0bdc68b9edbc4b8bea006ff61575ad1f8e94f303abe74b299923426af1153aa40687f28a5fd64228e05548da0775b81735972babe5f183f7cdbe78cef6340c2924e6842683530c7d30ba82307c655b5fc2cc401fb2b9ac1821895d58828aa4068ff743c7c08278245a5990121236be054dcad86261770cb5711df218a2733af681752e38f7ecfc4ba8276b5995424de0f5b0c39f6be6b52101ad2292c228a11c6ddc77be74471d936d2589070af6fced2243c808c95dbc37434f6275285ca6cfe38a4487d4f57757b6ac47a81735abb4d4ec835bd56116101b75567ba233e1baf4a773aaff2d42a9096367aa5196717c4dbff05da0b84f38e17b5e882f4f98a2210dbfd4187e3831bf69e6daaab03217a87f5a8c0ee33dcb2222b68699bb132ca020f954ea749fbe8a35e4e9b340b5e043b630870e5442d7bc916a00126f3c59fa9b1494d7f80a3df9fbfc68413860ca0f693971288de500ff3c1658b45382c3c9390e10623cc20b85560da342bcef972b7ecc4a55bb8d5a24982cafb21d6b063bf05f69c47be0981a8c3d97d03d16734dc69f6ed867a07417b7baf55ba59db2d421117a333f8792f23e873cf50ced4dc2dc042cda1cb5300badc74a14656de07494ace52e2dd5bf215921fd3181935167ce58752832f624cdce328b8f9c9df1dd6a8e356015410b12e63053416fe13ebbb40de9e4e49fb31cbd3b4b119f260582e9a27f0daded4bdc555bdad88af3b89135a48daa8d9e9b28ba9f6298ce9c260ad778d6b9f1442467c5683c2ff50d89cac174573de6d57a740e552a2fe4e10ea641bc82b5d7d48977bc261070eda1208c9395feadbf47e3e8dc795fda549524da36173b9091d632b333cd1cf42ec8eae73a91fb3d804f08ec30e409d4beeee817abd7334e41cd09b52f1614ba9df5d9c3907eac0dfe759210d3e15288dbb9f4637dab8dd349f9563e95056c5896607774bc2b701f8ecb9bacbcd1e430cc4cfc6cfbc9ed8e6f4b7aa70df40162b606a57bd054b1393b26790a40d3c55509016017700d9d6a554ab07dff293f3a0f4d6d0bbe8e1b169ec81d2cd7548920287b97da678aaa7a2e9d1947cc1a6faa216dd577cf9c73a8cd2c89ce50d2bb2332f4b719bd5938a42fe49eecf29dbb5a67e1e87f3a990062582ad41bdce1f07a9505b16243e786181e931f6260f163da4ea45453163688da57aa5147c804bdd07f708d5bde4118d5dcdddaadbfd991391cef90fbbd23ec7863f4bda652df967124fd7c610f55716806288673ada5452c3bd7a67d0efd92ab84f99779f81c8c20e59a0d4c12a353217fb2f66584f6b49271ec2f602275d76df7ede2840f5abc35d667edb98cb69a820a03725a484cf68d805752682a15b067914b978e7005b5760b1034fa58ba6f1a03b8c4b2185c95807baf84471f917d3a810be241aa1bcb85e6db1d1294010728ccdf10b9312bb7e10969890e3681077648033fb53383a20f8628a596c65b1abdd803d91695725c12a8d3b06f99153e61c79892316288440258a76d096e14f95ea166aa142f1546d31e6a663fdf31b9d748ec10e8edaeceb894828e5355a12cc29a2cb807439cf1acf2fc2a5d6dae465067bbbc3fb15e1526c211203028534b32d2f43b9e6f76275ec8a1e3e1cf4eb5f2fed2592e2219b7f6d873d3dd88a9877b5e6d0845936febba0160b10843b3d77c8aa31e2086311272d5d85703efeb669456094a7b958b60f4a79b2483b24a224fb96d0ad0722058bc57c9e3f176d901395495713b15899efa036798138bd4bfef9f47683b8faf6916131317159a97d61f75f7e6915e8d0b444479e385f8c1fd329addb91eee6035e42c7d95e15c28f8d83f3a39d378550778b3e29a55f59ce0913a573b8a29b390761b35b33e248209a85c186102dd007e6e9c15143763b82cfe3e0407e59204bdec23f54f4025086f92ae55943da582730cf4c882408f67323688466f3186a416152823340996d041ecef4d1ea36ee06979a0f81927174622cbd9a41c4474c880c1748418053357f52b937c6c4102b15a2970dbe8c8f56471ff3075c74cddb3ab560f4207a86d488ddd1ac66aa7bd733a15acc07df74690cebefbe1b9dd7343d06a6f98099b02392cbd689a9284a0c40150eca19bc016726597b88c323424b767a3257231e3d0f68502c868e97160c003d93fce709a0c3acf854ce0a1412fa7db6e4bca8449b3318c381536d34eba7eeb17f400c4cc1c8ce1c4684e41402a2b98a0fbd51f7764bbb76dffa9bf8af4c9e3a7efbfc8958422a2f7cd91c951c5516fe7d1d598f8752fc9ac56cca001dbd746e8a11dd1e23e6dc06cc92fcf25501533ac04b15dbe00e89468b7423e647f5eb9bb1771db0a1815cdd52079023841355911e01be0ceb6e1f03e84bba05089019c5cca14a4e8da0dfafc650fb8aeccdfec223b88e8c48dc037f0fdc1ef1815bde1089eb0c172e81f82dfa1eeec4de1abdc8310a9a2442b928785dc3060bf7db5e2e12c64e0af0c92eb008ce1000bd2168a030a097d53d81e09507481febf2b5e92f47f54444cce15fcb4c46257be5ad4f88d608af79cf9717d426e610a005476235a706642ee1fc99fbde576acebb170547ba85032e2eaf1121f4ad8590224d4a4537a81da0204c11d6e0c553d814f51c2f3e3a823e8897955415a521d9cca31de82b99708a364d692b4050e92c2ee52022fb5264e87233ae27b3691e8b9f728c2d591480227f87f0cca68fe1f49373326b7283e73659e12ac44bb54a05d583b24cd5006555478eaf7f6a22e648c2dba707f0fd04aa41f2c488c39c1a70e4bfb2f720c0d601e3b2632eca5d897f374c4865e3fdee257940262c860c606c8bc27820c78a4be10fb0cca8fb9bae567a534c1a217f8e46b9eb15aff08999a5a955ca95e73caee1c04617ece2955027a69908d60a37fe622b44c01e454f549d68554a97caec969da04079a04eeb00084a439931c9f1783a698016a796ece7054c7d28f077e3ae3189b80deb163b78190eb78da0b0171146627a9265245f9bc732afd9706d24365ff6fb7148d0f49928c61d35ed605a270691421b8afb66c7bd57e7c2d2e89d15e89cb433322381271c944e1ac18f154acb0da1e337bc56a28d255c7c71efe415df539822332981139f0e87ce1ca17d4dedbd88d1366da1285882204a45ac259bbda662160c9bc69de4547c6b9cafd05cdd12b6ecfd89c9143568b1bb42a8535dfe3eb221eb69d1207d228fef7e9d3170551d981fe51fd07bb4d00a3fd187a0142239a41ee50ea1b0a2ad7e7d78ff7f986f6617e2ea61398af26abe14191d1d357bce7e938c991e6c1aae59a35b58463c8bc3850b792541426549bc2b0d7567e1da0d7163a0c8d9ef113d67a6b88cb522aca8b79776a493a5ad2831788cfd96a47a6e484ba5478a8c5fb35921da446b3ddd52f59c11aea982445dc98f8e10cfa83182513c6f1d1e53f93c71b0c9a70b93c1fd58cad037853d2dc0d2da60a9501af01dbb9a241435e9e8c59bef523180d2050c343ce4bf3a50fa3862c306b72581b36b3cc26c53c1ced605c8a4c9549a5b1ba715b489d47acd103580875abde50e2a5de692f1c9800881907172ebd3dfe3f43945f1cd4a96f9f77cc35e3b2179ef2fac12b151af72b71ad46a66c17b84153b72694f087fb6aeb74d082943e5ade263ac1f2e38ef74d66675bba2c351db56b1fe77faadf294c0748028a1fcb4105d68084b8fb19d19c29f10a133f8e44ac7d105ad458ef8c72fb48d847ec7fe08c74795e3bad523a2d084a7a9b0714c0a3795b9238b1cd2d140302753b377743fe9770d177320151441073398df4ae48479dd2d947516bea982491c8250e1cdc7ee6c04ff49adb7119575c173aee8c560a9a1278acea23e7ce584a3e78567f48720249d7cc4eeead8ba2cf755493994b733efda8904dccc1f2670f7944b38d7a2ebee8b72b8516824c877be1e0d88fc5108052d7b09bd8c6238f2e26febda6a9b246f2c952e622b7cbfd3eaddd83fc93dc9681c19e5dc2aac1a1bc99befeabece638e1b38ff8e20e711df1bdb54ab9b298158d0bfc0723efa94b63f8026d8e36049b5ab09a4593503dd9e4a0116227d336bf415cdf488c4527948a091a8a5014834403adede0ea9166b4032f973939d8248ad2c12b5a4d1f60c808901361f35823bf17ed906636ab30415e6079bd61bc01367b117c638e17e2ce6cb24b152d14731ee8ba1937e3d4bb6eb7a606661435d6db2527e61e2c57c0a87a6944c61f953b481592ec8d248173ddcf5fc19b24ecc1673fd9d08d0d03e1ba091035ff73729e70a30bd9e6002ca56de58c7f6719652ccc64058c704156fb7f3a2932ab8549a60c4f933b3650352f943aa0e6d8f0da64ab8e33e2669d165fcd27c6ef8c67a556258d0d0373cb171f791a7ba4eadd228195953c9100366f56909b1ea5977b9626a1d49c98670bc699be0c6366b63564c45a795c39cca6b9fdcc825551008618dae8f9df54a2bcbf6a79ed2b80d9beb9134a5a3903748ae758de4a17ca7dcd764b6283e187615cbadfca62f520bcc02623f359e444eae442773109be17ccd8cf5da9c35b75456f756e56e4f3d1d63e1845d023ecf3ad0ce2dd3384e58d21ea02f219841a7d00a68f62ffc11a24a9c24402b09caf09a056cb88eae87a0a43396cc751c232d063d1fd171bbcc9f2508819df6fa451aafe56bb7c0113989b1319b34439323c15d7829064245145725f29e8a82859b364427b93cfbbb06ab98666c25f9309e7a650d8bcf7b78a9274dd1a375f664ac50547a39ff2028048dc182c14aedfe8bd50b41e75bf7873501532c022398c2a64db2efa3767936fd4fb23b64a8ac035214a95142a89aa9743c039ae3080e601d94a3edc5846c9c64406c85049055440848a1ab57bdf3ba8d57e7d0381c0f9ab5d2c9070ab4369df8d6a826a513d242bd3054670630d13d751ca9453471f52911103bc33146b84a31d206d79ed5a2e56a9de50a9dbe87564586b0905a85e79abea7840d79844de56436f790617d4f02c3a7cbc2283349098a81b87b5049f9b24c6e6e9a76c12a8bd471cebcf88f2c5c1605536b2148741c24a0a6fa10684d67fa2648c5506747428cc590b1a04930493199c3094ce39facb678e336f7f22314fc5ad841f358b2ba3e293030f5532f430a47d2d3b0e6fbbb7abfd5810a8be15aad89d02e4ae4f8c361b20ba46e4f051ba7cb17d7814dd898243ecbc025a73861c1cb4131294bb70d1f395afdb1f09880e025954961eddeda42e11d036c94355c63a6b2eca6f801aab04ed12e3f518743fd416edba3cfabe68c2fd2d30d6b88551527b87c018a851d70f09cdbd3c1447ad04a7dcca716488a2ec67593d25dec481b24768887d89633b007ec509252c0991e3cf7b9eb780f706c7c6df37f18cae936f9d31b26f8aa0161535ae1e4bd900aaa8d3ad048b7366346f89a984d7129ffd8efabb9bf11e6a2afc71f6eea3f8f2029d6deb8d3a4a803647f59ce2d79247eee1b09670f22f40b11ef6ac2ec9a4fc2c26398d102b98d5876445cb622322ba801259932eacc28306c85c3ac85fb505e0e044424a42a03269605c33ec518d361640d052bd274b224632ea41649a96fccd3d5df7613f7df19b8d43032a7a633d854272133b6b6c28fd0217409183307359116f727c82af1566aab07583da2242f236cfe84d6fa25cae2c499c4fca05e90309ebbe41ca3acb05894e1d477f154a2d9e3f19a03a190d8197197c303ec53411ac4e79bce48dfb8042a6c9642ab84448ed1d341191392b7aa5d4569cefc3605bcb5b2c44eb615e2469be7a036621c45c6271d37916ecad92a9fccac86eef6a927c315cf733eb37586bac80036bb38d0da86184888950d74640069472ef5a8a897a686f4262f03e96ba80e92f08b3e175d6fd8091c78e7b4149a1c9a21fc9f7f996151027d61cd5dde1bf28bbec47287ff3e7be63b1ab94152f34282f3382b5b4670c3b67b924bc19e2b169fc86e3a7957c804f8f62435783be15a42d7240b1c9f58373c5956c44a63efa4d3f7d251ce534a0052949f7a118b3f420a83382ae2023ff19bae40c46f4abfa575aef0024f3f24b9f0f1ce7049c7d04b4216fc37e9e102342a41cac34687a98736cee47f1b97713a4146c4943c0c56d7fecdcc024102ba79531d9fedaf2c141b9bd8f910d4cf4a14d16a0c558279a3979d5779df22002646becba11eba53ba6d65ecf81e71594e839aef9e686a3a1bce05989909e6fbebb8c50fd0fbd9641e479835964eec0ce87cbf1649c2fc8bd15de39b97c8477b716db219537cdf7e9224a329c623e1da4a7a7b478b39a4a2a29cef608593585e30c81b47d0a911b11c6c0ccc7102e3fbcdab57fa79b7550abe1fe609bed219c17c0ff1fe4b0ddad3592568e5a040cf637cc95d851606af788ac7fb4600a1ac6b580fe57323a754aa6854f77a760043ce121186527050ff310af9cfe028bc06e812eb6b9e4d6d0d0bed8038d17f7f1fe86f098a5a70448ac1cf0503d081a10723b14640f5720fe503de860a5dbe0327206e193aa1d43475468c9465498df8d9dd8967ba2784f208bb99582cac2a23a1f0fdc4dce2a44bd913e116db6b821325850b4f9828d233117ab245a4fd5687136ed818eebb32937004233df9967e56c72c6cbd9f9fc5bf10d517fe7969cac25dae3064fa8cd8adcf174e9447c59196004b7cfd05e3b6118c24e7eedd0466652f02316b799c7bb7d4c2990697f7dc9164b350a04e84b2e59c9451f3f67b9551cfdd9b87b24374448631af4b4c91ec219bce1da4a5c9339ee923ab2c1508914d41d2d1514feea5522222cedd1592c41a0908dbb907e2773282080c4abc2c9170cd260216c6dfc3a71cad48e83ae46c0d5e0340d845e270903f77cdc620761cd7197809326948ee46ea0090e75b93bf78acd8215439ffbd2b1ab553dd274f1bc5ee6c7abec0b555128c387d8fd5d4336efcbc7a5b4a32cce8214c2a5f02693d7762b3538ba332f9f131b2d0e046cb5771d0162c0aaf627ec43d99da1415779c4cd99350de3fa84f07898f016bf4a0262d474669e14dcd7dd8e814c674d6c1d12a4736fe1dd16067b7fc5e91b40946fad82a27a5efb64300a7891eb57dc51ce7f75d31ed1306ddd49378843c823e695082721eeba3e857d47b12a9525d8e38e0744d9e8d11707fb788eb3f357cfd0fb887294223f485f8bd9301a59a8e86cfaea610992619d538d56eb3ac62a09822ed2d6d915820689f6b6cd2e292abd89f7daedb7a2c0c8b8b6b16dc0c07a12e2969946bcf5e8103661a6fcbb42817b0782e95dd2f2ae4784d4cab4873c5eced95344dbccdaedbf52e009da4449070153316e7a24e42d20b67dc6b90580f09a6901ce64b050ae9d58cb3cd325f898718008fd869aa2807d22126f43ef872412ccb024279784ebcc5385a1920ee65dd5d6ecca6256fc9124b29eb3aa24bbcaa92c12eb272e592bba7b86ce0af30e4b8abc5ad1cdc92269c60a73c6100849ab4f8f1085e6d47e5a00a9833b424131a3f17bc84a7748b7042613d4d6d1ddb2ba4cf7df71c9317a9f8dd1b7741fc46022585ddbf7a60a2e8c5d3249394af7c4b3c4562d47a31882cda2d19cf497619bb26233ab68681a2ea7259752e9f5bf14b4907712bf2961a4ad4b512f6afa1c332ae72496c20b96bba12d3ea94a77ba6d0a3dc7ffc66434e76fc57eade817a1fb3918c189b61d99162cfa872d8e5b8f7ce323b16c99025075d21afb706871db7f286d32feab83179d1efddf703556c3956d9ff520fc124460d97dda5068edb55d7bb5562b47c63219bba1c799e4a02bd67eaeedf3145d4bb19fb4560e8588cf18c3d8793b0228761ef840124b1ca6b85a25b12deba3ea4de11028533118c5d65ed90df2f19056959d79b10415d3913e5ab7f4612b5ae201a1533e65a52cdbb0fe573322f547f79bc04636701c8f25794e82b0261af4b365a3d88a0870f7c8a5a171e37eecedbfaced0fa62972c02a9820e85d7993486ab5e6f68940e2d0f027fb7fbc9b151f789f5fbd3aa8873fdadf6930c05b4ef0ee167869b5b1da28a7d8f6baf1aad88e50ae05f3381896537bf16360e5c9f2e1d27d45b4771308578c0b62df3dee20a8109b7215bc834bb0937158bc9afe7a4197e514c8640835c1111afcc41a41a9a9bba510b987188f25d1659ff26728c73b1dffe88b82d715e5f05794f8e1cea51d5d49cc3963008106a193a8cc21dedfacc8ac758632455c081bd860f58b6c06659c93be356005e4271e559218cdfd6be0d930d92c0f42e56a3aa61587c723780aba9986ad19e5ce210ee83d305a9bc11ed33e00db59b5bcd2d38482bf3aedfdaf4f58dec30da4cdc3610665c12a43823f6873abd3aff4f5e5329b5f1ac681bf34e600ca2568277af09af1db56f60d51a0b757faf1cb120d877b79828d8afb245d9c700ba0301b557f283d35527c60f54188c6b474a186284eab13ac28608c68f885f4f2038f4fbdde401fa73219fed37c6ec6590b2c06cb2c33b3f58c1e3dbaace04408c319c5e1599d9a5b93cb6722d91f691c689a38c59e316cdb0a00a3624d0dec80ed28be024302483dd01ac5a45475368250ceebf1654c7df0251e142503d61e0a58268b9f6856f7a3c8dcb281f3335b5174130dd2bf8e256820ba2ba69651d7117a9c183e4b40d77aeaba1be4246a2998667ab4e8cae9a35da98ab04a9378bbd542f285c274a241939da1254fee603586b7370d50c8376a7963ab843e228090e6aac471fc243bec69a5abc3e9725b1d443b5b23ea9a4e6020ed09f58c2016f6addddc83cca8b105c2fc14a09dfc624c14a492897b3515d77410522a4a6582609e026d318bddd014d80da2238f884be77120dd0ddf77b78ed6b582313517692f98ee143a12bfaaa5336d9f05650ee15375d47c56abf98104cda5d7e34c76efabb80426f3f8275095a6d6451c1606dfe595855e3768ba7b5b06155e90f91a99fba28fa8914a248f82c205c2aef2b8531ec8742f8f4b1e4bc3a125d56c28c533db1c612c13387d026e6a438d154e536a934150d4f42a1b158396f0670e8c30115476c9ffa54b1b35d8f0a47061aa8d296faf1f5aafa020bc0cd9fc68103f842c88d736ff75fa87fa1786f3ed7ef07869a8ac76463fd58f78d341ec4af827142575063041670f18643ce6f2ae629ab0846e2d8212ded1154a708125fe94a05c2228221756493b34b48e141765b09fc5e4509aefcdd40210da4ec91bd2a5735a6b5106dd2ff32d4e39d5c7105d9e92bbb2a3d94488a8f5546169e1106ed8eb3cea3672bf4aa1a416c66694153d47475aa425128c371e8c85d4d3956258a1d74948bd4c45daaf6383020eb4741fbafaa84a8d8b1a912753bf0fc94659d86e0a7f2b4f1fb773b5f54ac3e0fd8e5fc35f3aba22c6e7672740af064ecd40028fa60f2fe1c9c0716743bdde4b017fa93f9a3812a7c9c03087e3a278ba07af54013653be79f5bb9b27eba884fb288e175c2e640bebef11f497d8d533e4f196360bc6ccaadd9aafb015450a3bd2ec671cba572329887a1705078684f1f2cbc4920f31d67bbbb00d9d21bf02e4e20dedf8faf23c80ca378ef8ed8c71877d7e971d2b1bce118320724d3c65cbd302ad9de38d28b07a23f718ca27ba19393a574b108ebc99d2941f9bff8a67b8f2923143e48bc361b3ebf7b6d685b09847b1e70f6554a93e1b71194b331c90f813f363961f503a35650db9aef7155577a9f77e4486ba92d726725bf8a27171bfcaa7494c80bff64fb30999c4e42f2cf4c29d3c844ba71f38c2a541c3b7b19944a4b6a9b72825673f37c78506686370b24e1f55871a7977aef14a482cffbe89f945004c3a62d3fc6ac0cd3fdb3793c34732573babcd7140bab57712dd3958ded8c34c72df01b821ac9ca08c88a5297149fc4e0d90d7a5cff01e3b9eb894de5e07ca1378a9b916ce4f15bf12c802ae1a6f6022dcaafcd45ca2f52643ab7aa9e3df9556fa895c14380509f876aa56a86a195f2a4b546fbfac212ca5160a9e2adeb7da32a8687b985abd1d70b74de76ed6d20d3f41dd698885edf118d040f77938fb11bd7752386443350e50b8b5afd54908052539670697414afa51d461e613032b1a65a66d897fdfed46e78ee7401b91a5ee8d262ba198bfc97a1a654096c3a02807c25ad2845482a515789427e34cc785e2daf76d121187e9020d83e379c7bfefba10d0706ae0b9806e3e3d404946166af29271d795b8be081e79e2b35bf1625810171e248a0d511e3b499e0ea60763dd406c91e91431e71b93828e4844d4826eb30ad83691d26d939b12d3559f5e8ca071973bca09004da789ce398811f978b2e420819fc36e257249faa31174bbf09eb86368e58e9bf2ae6c1bc8e0428d1b7221236b464b9a11528eba5a230c980d86e9191ece626994bcc621e3a28ca2819784891bd46769f78d544817cb64505fe50f6b46c8eea8b5f10b354b77b55c800ce6c5af86ce211716cce6f08182438197e7abea664bd5c9bea0e97fb49dfaf7ec957a070cc045beee4d68694b582e0332767602d00c3c155f8bd2d04a5f0e7e71f823f0b00d0c679c41cdf0006985b9b25fec8ca4ab6fc9a9cd19251672e81a48468bda38c239bcfc1a3991c8274a06750616e31ba7312a0a2e10271a011d1ae1f2c9b3a0de64b2b87e005ebfcd8109a1932cc8dc1cf0a94a28c46aa619433eda32b7f8f35c3b7a42553a19a415bb6acad15c2a895c0acac0298555e948145c22587670496248c32590c632557339f742e9abf4bdbeaa5c204c65772d4fb5e98f6f6f54fee3707bc6899f6ef82525ea71e249d81e58516aa69df25078291cd128fcd98c68cf462bd6730b113525bc726802ef612fbcf52f85ffa96611c297667542fcf84c4cba9952007d1f39466f13239e96d0775722588029c6f80d74369e8c6a38140eb486977b42115422cf01dae0e24c4e2b1038892231784aab17c85c51bf76831b2ba61e7a19367e1e08f0bd020963986c5b1eb7181f8cffae584c220f6404b75fa436fbf965199b30b9330e948cb16e2eef4eaf6545a8e95c130c71907c67e81501769b26104be6947930c1960ddc53c20f80b2c69f318bcbb3eead807fae6c3496ce18520684c17d14d00f2d9a8a387badeb0420815ef0a77154e9084c668eb0e49055172904e9a121e044c34811d62e4571c0051277405ef6107e116654a560966bb0d44699e71b272a43be62b98458601c807566762cc7f292e2305a2d7c07e8a8f22e00308cf7e92c71a964ed7199d37ec10c77b60c95278123f9101c04b93034502b5521f4970df7b803b0bc66a46e20997b634751e4af80953b2843be9e7ad0fade640665886e64d9939c33109d3651028e9568a4472ea5e8c5ec25e59d833520272f810d525804c02d55cfa733fc3c71e3ed9cf58f5ef8c34302cbff1049a481a42d205d7280a97cff8944756b362961b20e2d9318939df2dd75e1c7217c46a7550f149e0ba6d57ed6cf2096222c816659285da752271bea3242453f5b404bd3164406ec94843caf0f1593794cd7a165f3aa1caac6771d0588a2b02a48fa56188a80d4d35a384249836fcf2f505b8349591c9a645bad145558c50ad0742559232c6364ccc84a9246180705524196da52d494d1683c933ca1797cfa978d8c70c3565e1843ba23bf753e17b4d7ff45726350c95e70df34808cebf37b7fc146271eb6263ad5c3059f36252971c8bdc56bfc86e115fc05d81e04fd84de56523b3dea7aa8368435d50274d6d6a08303ef0388fff243dcce005fd6933e6cc6ea946b367e0c2c41a95da0d929742d0831cc48eab290ff2205669557732334a4fbf4c75dfbc3e10e25a7b64cf7631c710520d39466dc088292c75328cb3870d8b902e716cb030da40908d7feafc7d395639efeee31125f6952035a305dbda9665b4c680840e955243e147ca188d166002a7a6a345f8214a8da50d0809c78d36a018813265a82d4124716c121925b480c75822d5640cb2850d33a1aac930680b1bcc42552363d08a3568b43893b2e44b07eff767d52bd0c8950b73c25f09d4a6b4315933d0314d07221b9b9520a4a616d033a33b343b8b9194a14d156863a623126bc3992620b3804435342b4621a21e32924c32012cfb9b5962ae564b63e44df6332657d90cbd0ad2ec8f11576cc6cc66a1d95f55ae4a337ac932ee68b3bf8cf630ed9faba9a11f91ec9983fda8982c5422bf25b84126f895806a6e378435808e7799746896c160280704015de67421f18142450117564093994e90ac0567b480cc0094d4608d10920a7cfd79e7d365143493e1bee8417cb348b65d352458af902695df5db06b4b8e985b97a60405e809d59880a0b8d3cfc92591ccf2211d3f051b25253f8ceaf1e595d8d8649f2a54b9fe98345166f41b4e03e3c88950a78492a7c2f25d057f240ea253696159b599ad643831c06dcbde712aceaecac2458547f5d55dbd41373d8b966a3fa5325515086cab3963e05b05f1744d49159d14da0228cc752f96ab4e4209fcefbbfd14b249ae380bb13bc255115e98d5c3aca9d8fe3129e7d7e837b824e1da80dc0c9614a19e18127256c9b87edb5b97aaa2fcd4769f556d4b98f9384078abcdea696cbc69a940fba89ec3ab096c2949054e07b1fc880de0c558a04b929797d5586e91de07b04a621319b244a023ed8c407e5af7d4b814033c0e56aa4205f55dacf4ad831416622d836f55c2b5505d4d3847c1a91a6c8ba953f13e3f14fbc82da313733a4ec109e46aaf9500ba9b0c2b7bb0e31932cc6f9c84a67893560a41d067080f61ad85799e5d7164fed36e9aa310ef3f7441eab8cc89a207ae48c5ca9aa4cfbaead8efe779e4b99b78634342239fff6ec911773e5782e897ce5da7c2ec974ea4ff9b85ca83a1fac349fe6265365dfda5caea657364bad44633b3932ce41805eef293fb30d218c8d83a0358e479ab457afb522083873f879687c567ff7b9a817261c6bf9f38d9451454c3ff892bdc11252275fb7765b782687d107d567d1d8453ed4ed213b71db3e2bd761ea93cad013ed403427200cecad69c0d7fc277839a9ed5e966d68ec7d84c627ae50a844254d33feff1f20daa5ac002653ca7242bab360131407036756402c8c97c97224033d0ac20912adc15900d88b2725098551fb9ce8abb257354ea489a09e1365dff9b0d51d2db01264e67ba99a05dfd392352ecef7e2bf5f6f3f97990a833e11430a741d41a64e3301df164578a63a65e7a5ea9f860c00cff2de423b6e4f6ea8de995ac0756f5802e009347b030a9877e1d504fa96c42772a8d1910aa041d842b65e9f09a8c2120ffb40968a3536de62e804b7623351d7bc3e1bb719684843508f9926061065dbe97847a3aa6278400246a16c4e6bb648a39593f9f32a69cd25b3f6094b387a2144d91ff5afa6ea2a0372e391ec8f804e29864c167f5fe1727b818217c92bd70529be8cc23e42c4ed872193389c8286342d80ddd1b32ffdb58aa072620c034d99f0e7a23f03e9c50bc21f10bbc1f268c7184097c5f5eb35095ac2c283527e9e2c79e80a3abf0a7caaa18cd88be4efe269fde0843069c70668a07d4ff753e522f39f591bbb2c9fd3142dd0bad514b79b5ac42c177f006e6a6842a3f711537d9e2dfa32398ede3a4f8b6d65b1382e6cefe3463d7bc65cb179a80bbe75d4d228e3744ed7e5c325a54efc274a0218c7795417330c8a34207fcc9259109cb1020bee5a12039e585274ae5dad1dfbfc1155ece5f43e6fdf5d5730cdabdebb7e971ba7c91f1432042d4411afb563dcf8b090c61b1cd7c8125a43c50e68abb6a7a5ede60f7c54e99e85cae5c62cf4d02a7143acc2a2bcfd80f75e018a79562fb95276fa1a24c3631edeac1b2da55e50cc47d8b6a3e7380e63a65c3d43d3e2ccdc15dd319f561944800995904a64352ebc85015201c3ded2c651658076632191c1214fa4b383bb1387df484b33affa9fa152d196bab85e7125861e20998095f533ba0e9aa6b4e6cc01d295c8b96479aa9c2fde279fdee187e4ab85fb87437d646a0d49a5b4fe07031e14f7d3b864b47651d06815acf771b3e1231fcbfcb799f53a97519cdca1455450753ee5e264609870c3a2ad7a76c255dbb06ef0223c2d2f472f1469815ba1746967d2d9b7b23b5e56aee3e722a7018e9fd1008f5d1b71829c91a869b8c466c843a084a238de5b3a79264eaa84b5910b9ec50e95ab014c77fbda6344ae9241c1d043479f285d3fbfea9546b43815718cd18d88a1fc99163858c6da24ef68cf36c9a254d7ae86371807b7e43ce04bad27448b2017f248319590bf6980e37eb1146f159329a0662facf17b2ff8e3b2cc7fe66bcd33d3a1f6f31518076b19c1e25f2c2bc1534e70c436fa8d967405a6680efd75c398449661fdddfcd6082f7d10386b5633a15240cd0eba55e65f94fd181f2bb08d6026a64867c392ade0ee4c3c115abb261607873b8096b7cc9c241b0e83c1806d49d7e9c288075a76afa2c78cd7fb6e022a9fffd437810c15672d91ddb12cb9e177208ef4125891d858225f6b6cef7f6bd8118879423c8526b71308a6f4cb0bdf09d81264d40791667cae2c9abb9c80782d8c9f0321e2c81f6fab0405ff27c7ba9ccb200c8f6992b10c58d251d54c28011fc0bce1859a178852f0bd49d5539c7efc337a0451a2d53ef52a2c85df739fee89178c7c2bf11bb0e5f5ae64c7f3b6cf801d3737b6f7867dcdb1bc423c721df45c2d7397dd712d5b13855f8077c3b0d69718067a804d98fd91830316705ce052b1821f5c9a4f44b6e46c11bbd77d6f358f94193d19722cb739bf9d4b81015ea67ac59b8f3dc6f11f394b1379e556d4b99fc1c2548df10c09aac0fc3b0102b359ca734504f60893612f9786f4aa508d4a704fb4c63df6c1f77e2d5806762c2b9b26d6914c4408647e683140f9fc3fbe8fe396863990975d125ba21b49f6d92b18edc4bf938fdb462394d6b3fc649cf34cfb7560a0f4621561200532650b42f7db27408a45429e43c4d4865fe315142929e035faf59f10c1709dbf4922df4a94b0f1b971b030878427a632bdeea4e9dab580c4274f076a8a1c5a88f205fc4e0bc0c8235adc8b1e11d08665c48a513f9d7601e1d863d420699af448e7e2f2943c89ca1a6612fd551cd1f845de6899284e9f35c64d2fc142e8ec415f4916363414d6108dec57b0ae59a8d8aeee8e0445560f381e804f95f651297a4ba46c53b72081679f8b2958f38ac8fd10abfd8ce2ca35b6abbffef22fdb1a913413f21eab4c5590fdc49a3dd10fbc1c06363de5718f3605f04af3472147c5c08469e72c8474a2f33baeec361d79f875a04a274cd38d16efe62fe2cfa0a0b61022e8971a4643d9855150412c70837c064aa9fe6aff64738ff7ea049f0123a8aec8cb632eb4a47ccb57734f058071b7edd4303180a29948ea5ec86e4d15cb06b565b0d1bbceec06591f7d5a6ece6ed5e721344c8517c8a5b51835cc6f541654c2c64ac0bd2318991fc2fa7cd63b5b2343bfa4ccc2e24812bb22d8a1a54a8acffad1e55be0da36824b1ec58f1ad14841523558b7ef9581fdbdac08f867fad32630a21217b98052e63d8117a3511fded5a26c94d3abaf1e3c3a9a8e49327de96b2577a88fc0f6a0c9d58d627326019a2f76bdff6b7be5b22c14a820957e43afc0578f6428f461ebd8260383b22545c5fc156a0ff1ead4b7e618d94ce57ae91bc9cfd4a9e439187ef435c70db99972aea55dfde0ee013985be6767a652a1e2c35ff2cfa29238422040330bed835b4f873f74b91c3b1f1aeae76da3ea23811e553e670e31f86c580f278a2752cb2dafa2d7ac108dab2e54d68673c9156a846e55c89b4296fdda5c5896a363f6bd88adf08683533c5fc445ee4fe248e7d707a3b09e1e14c500400f8f12e0106fe71ae0f1479efa8d62ec8011032c298e62e068d471ad254e4bd6aaeee6fc3f363e81ae2c2132967d3cf4f5bf1326bf77102b3424e6cb90a2db6cdfa30f7e5248babec0fea3528bcd385fc2a5c98296624b778eaf3c068ccaaac127551e9111ae7077614aaa8a85e4bbcb54282b0f5b1eb4df2a013b770e608dfd615f30e508b08c04a3cd1a2a303dac4048bb973d45b8ca9327c6e66e0bd4a6fe5bbdf700bf5b67212a06e1a45103fb2977fbe98b885f333f0275064b7dab0901cb70b1e10917f157fc6e790edabaaab00b3e2a4048776f5d2a31f63be973707c7be59429f390456d8a76eec13e74b32316efa7ff8cc5121c17f69fc61d41c6ef28d14ebd5cacb9262681371a3d44f5bfdebaca86210b21bf38ea0dbd555b78fd2fb687836223a709455dc814e04a9f85247d96d02d8f6cb9c850349d5433125c70b972095914e8161e65adfab7669293247721ea8e26e3ea99699faf3307336a79a5e2b210f22184d7cc5a959cafe34638ef4eb236740736f9e79db86a284172d7d227752c95a17b137cd375e315dd68a37393148b81672776fc988f0c449d77c9f22c645c8356f82b09a74f187bbd4482e62857a5785d4ebbcd63ac0765d3d2428242074a55d96fbd536849d3e2831bc922c24b14b0ddc098a04c028a140a7dd5377afe1e408915316b4481b76edd687c8ee4f61fd33dc8d678ffa88ee0dd80a193f41429202446059ec84f6866e3fd3ac6117ac1df53c7a4847a134f596232f4e5709cdf045e1e30b963652b67e68efedc56e5fb1ace6ffaff3a9045d0a07469724c5565fe133b988a24717108fd4c87a6385f3095a6a54d540252e8dd3412045595a97478a5098458ae884210a2294ea9fe1652faa1d4df377dd7deeee356281fa93778369ec50f10a8d9cdb3f6ab4b45b95f166b4bbbcc6b0af6b74ab18fe10177a7211df98c0560476df1428ae9410c3c6b22aeeea24c0dd312c578a93329f060123728c5876bdc77d5c5cf59418bad473768b0245b300915a83aa14ed87b89233342eb8efde07a90543ed4a19c432af2c42f3a8d99ce503459ea2781f5d6fa31b20525c353bd106589917c27f613bedfe2207248304849fd15397209f82f8f62fdc036876414e96d04658e1f0020d31751fcbafbf650549194f219ab73a76f49ef2c075bae50396ee868a082b0e37cb0173767fb7c979b6ec2f79f7e57e02089655969f88b0ca322ccc5d5f3a434b9bb1e869fabdbf5437e4d8589526fd545a922e89477fc3e907b864f15aef03636d022c4aef77d6a28aa8ec2112311c40050f34e62afa47ebeb6753788069dc878f50781e5849deae2869920790164e95783a56c6b26cc68b8fe3c7aa3f695964b7442d325204a240f01229bbba07ee18dd1ded86318c7585e33233cde908b439881bac2a88b40c9fee251d8d2e9c20be041e8256ece597e2944499b5c49914526beba787f6d81570bfd85d01c455990628662bb43d890175d2cd1462e835d3cd9d662300dde7a036002ed3be649e84a9c20b5671096f690654ceda6ec692ad8cb698fada09c56ac698d5933263930ac2d115c019c7c5f19fa41522ffebf3551981c023e06653c121122305ce9bd00883c283ae7f737fb9827bca9dec80441de9c0f5d7611b670cddceb780ccd473e1055c347aa6da2a6a56aeb007fd6949f5ffdc4924c21f074b06bc66d52d2761c3b05638645261f06b58f857e4977fe6c078a97425582186281a0e01b90a3e20176e044963728732bc04d99a15755128fb3379969526d365f87ce4c3fca429fea140df45b68126b97edcd4ba835ab32024da3363c88470bcc2883d36fe398bffe35868da6a5bc78f5d38c6a55734a883e82cccfefe29cc01928957fc5e02c955890fdde8f7553a127a2c3e448e35b664ce41f1c1984f6d0a7603b6de0a12a47b3a62a04c9b28601d00b882effbe0ee8ee7228b7afb60729491914db5871a2f05cb4b6bee71c31fb7b33c23d693086a5463463ae452f018cca0ce27bec304d935a88f9c36040d3293a58d1e963288e78e3cf376a8696808056b40e5e250863f77a3cefab0f450ec51dd97cfec703416b1c4f476d2322b3cc986c65f2b6bbcec46f9898f2399bb8e81cfcd4fba2135bd5afe6641ca6c36815e53dda2da5272774821878d594c1d00802ace17a2a449d1914eab391843f9270a209ac53f2ea402cece36938838a9ff3d07a4e138755638f603c847bc2b68876e8b55becc423f735665e4465405ebe427ad96865ea39178ad80dd3b72f18386648d6ef20170353fd652ee120d8e9c442f8066f7179cf24e27fb428ea5a34179966d027a7d38abfb9cf7cd79bdbe6517dc40584b79a6bc1da720c71e3eb7691b96a97bc03aa547bdf224009b1b60ed7b319520cac02cdbe457e0de01956791e30b73287ee03f34e6f9a328fda19705d363ddddb3ff426d7060a847a69958cdfc8f6a7d23eebf0b8a2b9c70baef72d7f4a38f0a6894115096c17f77de0b8ef86a9620eff5d2dabc0043ab45808118481991011bbb42069f1f14fb864766a4694ebc4f046b6b0a910e045eeca3c2cab2c42f822fe7ef05caf38109489c3dc6d612056fcbb6d22454bb4d14910a99f32c00fde34dd9b153f78f8ffd7b5db0e71fd6e23ff379655c3cf127aa3e4b866bf7e67bf871660139862b9fd74b469f6716d90bf146a75c6bd8fa2486c6022939809b7813b399c76bfc02ab86570be43a76f07f23fd902d3427af8486fc0922bdb89e03bb6b736fb4bf61be7e3f218e93063b2d339f6dc1e797a14d206f41ccf93ae97740c2e80444f6c3d017d9b4da334c6dec5437c8f1943f798806106755bd9f18a71a7de8b44a42af9ef42adf00872434b8313d8712ba6ae6c4b4eac2b79b95d9b682dca016f3df07d2364ac67a91918f8bd98f9a9d94c594a38a00e2b417361dddb94c0303c7b508054f374a6a05625665f8d360c00ab31fd689332d775251212bee9b6740d9610eaf8b687c64d2908646a615602d298ab43166339e65d0c4c8d2d6869df57ea8886a23a5d303645c89d713f7300fb7b2aa43a1608ef3839c142e1cacf008c867bd788024f0933570991bc7ac4442fc8b3fd866a0201ea0d019fdd9f6ee74e93d7478d524c01b8707b2bd521b80f87fe5faf0f6fb8f4c8398d00e58fb7dcea3aff41699c590ac270aa01a438feda19b6f7a096c1800be82d14750130698a5ff7ec0af383cce5c480ec5bf95ca201662d0fecebdbad65e29d891355bd5e4410b5890460f08a47a25d25b323fc2e046f64d8eef4bac9d4a1c6d201457594461ea9a2f07737706abc82d0ef669e95153da385377202b20dc5b6f87095e00ec7662f7c0e6c58334011e8f4e91a0fa072c1f64645b587a981627eaa3d64f3cc8f07d273d8de2bdf22aa7c2fafc2468c24400effed1e20010f4a196bf977d6311c19296c7d8ddd7e01c7a64b81bfd36a42222fe26036b1f031941c759377e0fc7c088404df7b153232e988972468af24d420459559e430b6666e109f39a0625f88232155c57ddadc4290d1b447269137d968cddcfff8193d8c183848d53e0c0d5c61a1f51c93d53f61e850104c3e607176d1c1a666509ba941e90601e7f2d2196d4a31dcaec718220adc91f98aa192a2e55b1468acc01291f1994c8835c984fe9cf18e4d3ab37c63412d1998cbfb2acd6fa49fcf322aef558a5477e79282b32933a51134ed4a5f9394d62f500c3b89974c43ed0ca55051e5278affdf7090ddf97e841e8fa503a214a0f2cc72be814fc255cbf46381a1e3900ef40a18805db7c37c6a9fac93adc376e4c7b5b6827f434b8c968c6099d3f73ccd82245bbea02b131682584c08a5625279926738e6f2143ce2e5885a85132ea12e8205230ad7dd7f1b1ebb797e086afe40bb6ed4d2fcafa033531c3a5976275f88ac158d2a1e3c858f780283007226e6cc75326ea6ca432b173666f3af43f2d0d26dc5a5c5a7ce7fc9f7d6a074fb161051a683a996325934e1d292267051636f6534f0d5c6d6a1dca53764ce185890096d066d0d159dccf78bd038fd1101e45ae0754ac03a708f56b923df9b0ca567201d5859980e9083548dcd315287e07c9c700e5a976d1988c0d6992532540424997d4076de2249ba0e38a494c3c84f906de2abf31b5166ef7efdff2730382e3fbf532b575a1128e3cc4f0b49ce6e8cdba2b1c2cdf597d06b888964307ca9a3be054608ed8492fa247fcbd2cca03f53c29c0932af3692ea648def6836f2d73ce7a1bfda07352cd1b9682f893fcdee3736964af7aee078caffdd82336fd88e6a8faff3bef6016c2cfdc4c3f5af3cfde3cdfa55d0725b174fea8f1ef0cef83a2cda07e5db54438e423428b4e900dcaf86b9652a70efa4dec9d6e8c024aa66570a44b8668178e5acec556a1b3ba9d907eaf73b6ed700e2125da476e4b0c8172c08bd6702b176d1474b4186f71b896bd0f30e59f08709babc3d1cc5b5e80d0a2683b5288dd584411e723f1002f78d327c89c1fb623afc7af16168efe613db29c734e458c2094c40ee826ed0e895cb2d62843ffe93f4a0dc7d2dc94a6ce2c2082de3517bfa2f4e1b4ba7f51f199afedce924ea7b7ccaa2bb9f2b525c0016172cbf38db16869c0c62cc65fe4ac44e3ef1204018e16f72907cdbec4191a67fbddcd598d614efe1365ee9fee94e0e8cbfa64f863c4a0c9a411493b1ee8042f83dbcc8a3363137f1d6819b9d6f88a256c47aecc32bd101a9b42aa3e426fcdf897bec78f062727e543ce2292fab1d5312e74e872f6d44729dc00f33f6b212cf783b125275a0b685b90f5199695116c2b51909d4ea4614d53ba46e0df0a8d717a8714e10610c51187e56739ea3c7a1e8aaf2c4a7ae9596ec5dd06d757d4fd78cd7d0b7ee1491c8dd8c4684281b648b2db581260e20a61929205a18fd5f63dda49afa0dc861eb2c3c76790caf56586dd39396c22fad4b0b3fd343cb8cccd85cafde7b9a6a16b0370688f5b7fedb168e20c8bf25103a1ea4f647d639241dc701898d711720e7b8d9c21af6cb53827998a34fa8f774b91ac0320fbaa94fb0a6756ffdd4f9a33343fafd322e4a39514324ac39f152191ffd3fc5f001253329a6bc5b6f2e790e804f7266f1e7fa082d29a1bf9ab379bf4f0af63999511f70d211fd2ddae1663671842c2512766acf8677a8a06695668be9766d16a1630954ba40e74ddd06fb7751392eacb4cea9cd55b66dadbed948a9283c139e41e65b70f1cb553ec309ad6be1e835961f86a1720259d260437c53391b24be7870d49950b9b3f3285dc9fe33c8f4477af39a5634c2b60dde843ab51a229b9a34bf8950d1d9461bab10c1a148f91f5e2b34b9f24c7c2b2820b24acc3b0fdd1e31a9c1ad474812c26456c98b58a758a7fc05c412d2637d0b58d69f7101ead9ea569be959eddd56472708a2cfd680190f960c9eba2693640e07d64678e24df9ca6a67b45c2233d076008193f03ac0690c9d3d1b4615d79930f011e0780f85eab1f3e966ac5a55f90043f305b4ce56cbced39f6d987730693d1440e27368bcc3934f820eddcb5498c5197df57141d4a57d30cc24deb7107d9d9b1436e7a18c780d77e4dfb6ca6a2b57bb13604936eacb95bf88a2bfb59b1bc2cfd0db8b919244fbd02fca4026a4f0a775d4052324e075a12d556548a15d194eaa21da564575d32849cda857b4b5a2fe75074f0adf9af7935c7fb92251312627188da7d40f6003827f00794de48a6c8b5ac736ae0d76e13901532d85e3236ac40bff82fadedbdf7965bca94929401b207ae07f8062606e58cfbce8e5492458a0d40d953f9860996603e9d16598ea05986c0d2834bba11cb183c58415ef9f36d7c254dfaebe1732aa330df5f72956d42fa9bf4e6c4fa31af6a3f4d57da4cca2fd4becae07c3afdceccdadb269f7303557eaadcee4d4a326c889302dfc888eacc8acb15fd2e36bba175b9a1a57143dbb20736c41940bc998f93420c12eb159b823b5be0cdd247d147ffa45eb88ed8a688c28c432485680427c07a0086185ff418c1c31839b18a9943a6c4871bf400e8a7891b0861092a6a40c50fb820053183213091620c0cd480a7ca0c3a70650623e0a638e2882d454b402194734506af2b556c41baf14a6b0b1e608941896289994e4aee03d34462c8988846040b11da77e3d00bbcc0c27343b0f630eaacf8400cba8a420b78e3caca1656ace880078f7700ebc0dc6cc516aeab035f1c0a7019f0377e9c412b73dd9e336a05dbdd38f4c594eb370e7d21c42ca3c066e518e86cff42d08b02002309f2a9954be90c0cb2365073050b95196860cd4083134e80d8ae35345dfe42192557431b9a3ca2f8bb33f9c56f0710fba18ddb1fc6dcfeb0bbfd33deccdf71b39a55cce5caa734e62723ca6390930ab23f0439a1df18859422a8b8fd3bae10e66e29b8a09a141320c20e07c248a2080fa0a0005094000a294440b828618453df7177efc9000d0eca60a21aa30c318a08a0049631680073e34a8a0f144a3dddb812daa2c5b6bb1371945d06a218305a6d953bdfeb9cfed539e79c13a352aea8fef5a0a1c24220a4014c088839ba7115850cd60f518480b513111189e1e5c655941bdc10e40c98200746f0f820650c264203b05f34ed9e0cd927b230617982891a589cd000141db0a92d3ac083032fa610010b2c52a832021514152069008b1600e107297620c6951b08004a0da0f880524a77464734a0073f14690962e8024041a4806285d6534515587600861327c400924508a12c41a060bb7115050624193cc9b0a08086014c8807483141058e4882c5e4089cd5142aeec65514157806b8c05ca03c6121922862278a103610f200949b2c4f84b18a42650a15171810019354057e0094c410586073858a2d2344a1e240d09c64376221430becc6002a28fa4010105010061939a109851b3e133e249f170f2a5001cf143bf871654546e9462c64f0203ffb2df3b408c43afdd0545ff37963c5bed0ded02f345d0fe795ef1ef9e60239f3f318a4df2b90820d58b9fe11c7665708b7e7d147924cf2131b102b6bb5567e2f564913f93d7c4e93036c406c649019e4818dcc3fb899b11af7a79f7f3dae0465d8efde1fcb6e76ec333128ebb67da1bdfd71edce8e39b7855cc5e88718e655ec19fb9c41a645382903cbef5fb5340bd7db2c4b2ea5947ed3033240b04015249ad802c4095b2eed2c3ed3eb47841d41290c7cd0c096238250b988c8a1265c4a5742aa4ba7d340050b6a70ed8d2ba1d40d41d734a2bf512c844b2881680829885865f980139f122ebfed9164881370915245f10494226a6a3ab52385c50f131f78020a26480862a60a1e37aea4687129942453ca20234a14440081045002c0854b9495940e6061cd5471ba7108085b782d08ea81184036d8220b1f417861012b58b02a428911b47a70ac01143094581123858509006e6c20634194236e6c2063419511d5cfeff5f66783bd73082e76dcb882228c762ffa17d9bbf9731b6f8e2c6f94cddf496428a880ea8b2c5ca0258a1f524a8c30e4c5152b3e90620315f08d567c20855f6ebc524512a31bafcc60043d3e78417ce3c61594226ebdf14a155b64c12012dbfc8be34616433a7a588eab2c965c66b76c13729751974d575e13165b2eff0ce85fd73811e00a8b30aedf5805931f94c41c6ca08b1f6411c68a091bf0187a82870a294bdcee462c63d04004507ea87132748535cd8037caf9b66f669679439aa7e6f84f4f490f3839fe3c35676211ab40f38534d65e68e4d22cbef665990d275cccb3817e0ee81bdfded8b5107170e30774a27f24ae7220e00f81e936defc1e3fc6189fbecbf8b1fd63778a1f91f9f48321e624a000359c847b62d9a28e2a4eb0aecd8d559c60e26e51a6c0f2d7a0d0243b22fdac43a93724be7fa1e4a939edbf550f931950bf90cebcd0ef0ed7b1fa4d1b602ef56cf0cf0137762df0b8f3038280db787397e132ca286f2ca38c9c8e73c63923507fec1250809cfe9e229149647b0edc9d41974358acfc59bd7463f418dda93b1656f27b8c31d6ebc9e823ba7bbb778c363182a512cc8ca9b1ae2cb3c84de3249195efeed30b4dedde2693b531a2e2cb2ff48f61fdeb8fe3dad0ecf3039b65f491e4dcdd3d568d7377f7a871eeee1eb5172ab68d27c56a56332f8cab970c6af14f51f7f0a458c5aa17c6d54b06c916ff70114f8ad130ae5e3248b6f867d2f992412d9e1e572f19c4df615cbdd80be34aaec0ca8fee618d35f376ef4e52654645e886754b162f540ab0b18a93d60d6be84fb45cfe1aab3829ba45687ad2fcfc40458d065935600fd03fb44d5c2f5d77f709ba7b15c2fd63dfe40c71f164890bf030c61739bee3babfa908d7a7113ee79c33b8fb939debeffea5223a7ab066a0e1e5c62c2d2b37e6c6d5135fb8a811b1bbe78cdd31d6ef392533b7eceef666f7ee6e6ee6a61c7ba15fe6b9611cb76c8c632f9497bbbbb999bbc6c8dccc1d39469ea3e852e605f1594629a394524a29a594324629a58c71fa9cde2e9b07db46a7c7c831b2db784f8e1f3273fc9039c6d8217333374966891f2c022b3ff49437eb869eba7c83f35ccbceec3ced3c5c7fe82c638b3a421cae1b9fc82fdc218855d6e94baf88ec74fc632119d4a8253a2cc436cd556053ae3f2625daf00a5bc59b1fef8f0dc51b14de1f138a414878e7a17bf3a1efc49bc96a141811ec0f5bcbf5ef2da2cdf4f79e7863c2fb7b2ade9cf0fecd8a370078ff6ec59b1eefdfae7853f3fefd8a3725bc7f17c520a8f710c7e643b026decc9b2c65e34da6f29731888ff7f768b3e3fd6bb4e1f1fe5cb4a1c1882ef61cc4200b01590ebafde463a115db64425c45b4c9a488607fc843b77fb2fa862b6a948b6db81683138c68c37d11c19b2f9cafdb9fa5fac6f664aabeb13f8deab7f9b2948e4f756b70aa51fd3ddcc3aada01f14fd3f838eb80788777344d33a1348d7a33b62274f2f5ba1d737978a72d2717d7e9ecf84e2dae932e17107bb2a2731a62b0bf3bad889c8480589d25b6a31ecc2dc13b110d7dff6d267832e7044fb63a20c9da384a1ed198e0c51ce7e9ba173807c74a049ab671dbb651efe587775a9d84a28fb661e3862965ea9179c9b8645aac46cdf0de9b81a314f48f822787e44a93298a41505feae17e54341a75409248129148d6c55a9b71d47399222444b2d6e5c5c5c5c5de1f1e8e20d5cc4cc633b3d35a0905a97cc793a020f768ac8b8e8c8b415e624fbf4998979717ea916e8d775a0905a9a20f1a346a98764e7db25ad82206a3252af594868849b8bcbcc09464ec110c0c4ceb8eaeed8181b14f727ce41bfb8451fd391e050fc70f0f07091e8e4c8a4ca8f461b6da39bd5635de49e814a4fa893efab9a298981932af4675ad322c998f7c23c37af74a291e5fa9472ef9f9a1b144a60f2d51a9a7d443c344a57a81e180581d172fb1a18c8c91b147322d2096bfd4e9945a0c362dc2325bae27d3850cabbb3dbcd3ea24740a8a3eecb77531f1c874c1603f0f4f86c5e04bf7d271457d63891ad55cd1ed13bc999e122c510d095e8c3e3c8944ec64aa75613a15f89e5a21e038ea7124d2374fad301dd00ef1852a819eece9744a1d90e4e9df3a8e664bddd14c4f6fdc6fdcc76497c6a3610656911a5a3acce88cf46fa41d9e02643a19fa37cb510fbb349e0184f4f3f00ec0c2500c0cf69b3a229b0bc7c3a379ead16b7fd826001f0e48766e001efc7e9ac76ca079fa4ef3d8b7e3b71ab17381e6a947f3f1eef8984e67c78763697e93dc0e4fded8d1c0742cc44bf334ba21345f0f06fb69742083fd200e8d0ea88646d7425f1f3e68d4a8518397d8797b78388270a870fc441f3700f87eee8bbedaf7732db68911d4beb70f39d7e9e5c974c1a8966121619fc125acc4111483e8084b3da756dfccefd5ed7e7e322c19968e1a354e1c10bbe34f3cfed4e9f0a03b9eeed84a1cf5fc76a9875a55df8ce06f55c82efd80c09f9b7d28c39ae139b97a5ec872c0efd4020186c24ea7190e88c57ea6d329e23c97fe4ca7437fdb42e7099de7fa0fa13b10898d0abb088845e23a83e1919feb4ad8f0c84f782475bb75b1672f2ce23c97e6695e08cff4e5e101814fe301f17c0ef8b6a76f64586d7fec12abb24cd88646c74fafc60e4808b38f95a72ddec9750a83c17e1956fdfea8e39be954f0fb037aa646f5cf7440b651fdec63e5873686a31edbb03183a39ebc714386a35ebc3cbcd2100cf6d378a514833bbe52cf072c4ba60bbe396d61547f3f8e4ec7bf532b092bff4d3233624c2518d38b8b258d3a6ed34cd9cc88be0e7feac5e84307d6e9609f33e85f0e2f07bfa1fdb9fd9f179e8a6ebfe7856d456871782178c30b4d3fb7df86179ea4dcfe99532bb435bc10a421c392f142bfa17d72fb67c8b0c2ae72431956f8373cb542bb0a4d2e32acf0e444d8568cbcb0e686a756ddbcd074c3532bc4a1c4edcfbc10bce1a9656f786add7eef74f8b1ae85fafc846d6ec0883888857ef31b3bf70f687eec80783e677e4830a29c2627ff6ec088ae331871b8689246d21f129984b3213390f725189979a8894aa257629b78c5e51e7688381632e09c88bb4f01844b77b7112258704d34a5688a121b61ede0d26187293f46302c48707d4a29588d8a2c2c8e783122c54fa3e2e53a82cb880e23dc9885083d726744830c03417821858a1f385901102a4081cb8907010010d48009221388c182304eb065450406564505fc02497c7c18ca41162900838c941564106121430b2c7e406273f9d464cd9c73ce39e7c43eb0a607789b369d73ce392791cc897a1081317b3661b54c22e20b7c30810f9ae8000fa84c31444596121757b8a0a00211c58911bc60092b5a21f8214b9428a8684db2259fd562c3c146655404c875e1d6458bcb3df281b92e41031090c00b145cc003398c250a9e2c556ce04aa410c1bb717505962b82ea0e66e8e93c430d2c1a68f37029a594d64f06067918810a131e68208a941cd8e08a63b3073843df645f9d42884aad9812848bdd68c51446542ab247be91c94a8684a04dad2c692b4cdaca93b63285ce6ecadad9d9e9618ccb984f1715456054545281b04398906054154b18e53573ce495fee08b161d182c879e26086cf4054038b861aaa28a902c49cec1265ce39a7055c987b1881874811a989b064208a41861512ab25467ad85c2cb8333333b333e5138cb0c93310d5c0a2a1062a41938a5028a70fee4d404085105841f8c8808c1cb772ddad98c288ebd857ddb3971fa5bb112c8bd0cb34b2830e3bb05ad448dfc81d76cca97bcc42826efa8f1013a8b00bb8db986208d7797e688a43d774032ad8a494ccbce5c6efee1611d6b5758a6525e6744a2bbf30acd3915f9d62435b6be5aaf51d539d62b94e8704c45a06e3779d4e91aed391fc523eabac2c82113d2b61437b632d9148a6d20ca95b415e6b5d5c48405e3a9d222f9d8efc4297524a96f2484a7a61b78af006f302e362616060606068c02c81113546d4c468a5834190419e1f3ba97d7fb3fa26fbee55c4862e47a146793227f3b457c584525bcf654c08bbda2b1573320ff3801aa865e411ad34b6ab5ffcafa38bfa8673fc65e7423ffd19674ca1897fdb91da4b7bc911ed1ead9812b1451de10b733146ae53a1af6b7173f01b36cbbb8b4ea75b0cf2125b3f76dd2c069b47fdb2a7c7188436abbb601bff6e5dc63c25d8f7f039d8d7a4bffee48058efd91faf7ff76ff187955776fddd0d995f5c22de1013ba3cd25e97dfb16f24d42876a913258fe8f39dce3c9ac2281e098523a1cb37dd45b39ac59147f45f76e81038c628b9db7d4eea6a713befb4cf492986d5974f3a2956b5cdb7ad596e14ab35cb346dcb346ddb584542aed6d02ba3629372c8c5304f46b09fa937c47776b81bd29727471dc01d021ac3a827afe42bb6a823ecd5e5e7644f8ad5ccb3ac5966b466daa671dd884472798129c5784c4cb38c899131b1c969d4f0939f4ecdf2544711276a118956294456d4b24a0127ba80e0d12135447ce9604465652589e415414c5492258b205f3c4a644b76215992534f2e3f0771fb14ffb9fc1309069953d107ff0c177f93dced3e27edc961d9d6e9d851b98859dc72bd7aa779542a954aa55219a97181ad67998a703ad5aa0e6a218c4e6f1c1c1c1c1c1c9ca86d1cd775a311c9be94b09faab24126a15f8143354cd452a9542a954a6504070707070787c52dd7ab779a874e671c1c1c1c1c1c9ccb1f5d5e60604aa5989819319c0c0d2a5bae17ef300fa76e2a954aa55229954aa552a9544658c5412cc42b1e62a2e92a954aa5524923d1155dd1155dd12563a241a3468dd369c686dbb0d12c6dd0e04e36665015b22bd3d01311c9a2144bb2542a954aa572bd788779b88753de9f4aa552a954aa191b376ee0c0f1ef7dfe7dcdf2bbc1bde7c89d542a954aa552b25a6b32fd835248aee49024924592d5a9542a954aa5248b2559922559922559ef7d5f8e1c3a74eca0711a9a6649f3719d53e3025bcf62a2ca5f772c8fa9e753e08f5471b54444449faa298c53a999f254a77270d2cbc1371d5b2eff8ed60e1a9ad7e5e711c6e5df7870921fec569097b560907f8b2847a19a25aa8e9828fae0e71cee3ed6f4c77f1ec944a32facdd1756ee0bedf68556fb4253fdc20f9f7e21087e61cd0d9ba766c746c3758fb526d33f08d6dc5873431c9ee6893e9ae7f26f58cd46f4fb26cb91dd491c7ed8626c550b75aa7b6e7c9f14ab5e6bb3ac3152acc69a691be71cd72c398f1917b58deb463e1a35cb518c5c37e2b8e8c591ebc6df46241217bdb077a21732ebc67779f1979766f95274e30b0db18a7f78877b5cada1222119247be48fdc79c5a2f66ec521c9dced3ea953da2c691d49ee769f93628e61cd12f3492986d59a69ae69cd52c36a9669dab6715dd72c3b6de3b8ae1b8d48d6ad6d96b6e3e48893241227ade5a4cb0b8cc3c0344b98172ec270b114bdd0c61933b828637293a9599a5c38e9bd70d283d9604a254e7a313aaefc2d8693de8c6e0579655c46a659cad4514c1df5e861f32360bcc94a917ade5f1c7ee3dab81b9db9a75be36e75cb64eeb66d5ce96ea38db4d9ed6514e6706944f9c37443eaadbfc170981773a847ba1bcc56da62b6abddcdb4d1d86a70d4c3e8dd66361bdb8d0dc7f65c8ec771c3c6cca9060d93cc8c9812ccf78de6471a81197dcc9f12c83c1951f097dd10bf757eb7bffee9c5e8c36fb00fab4471fc800dadbdd1c1287e4ea29d7ecfef7ecea09c8e79608b7dd3847e8dc1a70450e8f931c89a3de0b28c432a0e5d4611aefcee1020cbb8384c4672bdcd39eac9c0d304079c6b037893e4d4df623764fe573d25f57b688203cecd925ccebc184b0893dc5e21c9e51c0fbd10c9f58bbd772dc05cbff2cbc15f877a73d0c15e1949e8f7f0c8c5b8d8b9d094ebae72b489039a76373647d8e7006e963da2977e38f4f597d1477f110927a1ec4f6cde0ad87c4a29a593d223a9b05b217fec0e068cf582cc59419631c280ad9d0ab28cdbb110efe602f6d9c76efb464dd8530bd8679ff910970271e9c3207334868173b4df9ac3bc6e183a477377183c47fb39e78461e668bf510ef328a594c24073b4df300ef3300cc3300c062c47fbad729887fd74aac5a241ac7ab956429347ee105d4abf76df08081b7aead2ac83a1e668bf695172fba4581d3590e63d973ed661df6948f6d8af907d45d147d844977e921b3bcc85ecb15002af5bc4792e3fd7de362096bee41864896118d7aebf30896530f49decc37e69fe31ec96c9bf8bfa66be7fa17bb65ae118e4c77efbc28abdf68516fbec0b4d3734fd0d4d978b6e772f70cefcb0fc5bb71236acfd63c37a67bba7c0234b1e45069bba27a77457d7743aaf9b837fb5e5c3d5ae59b76d40ecf69b949552ba7dddbab9714cebd39791763af3eb0f58f95ca7e3a325969d58f9b18321e6c446f596751256be10262161e56f96fea4535e998303628fe4c8d1e91c914aa60e055c7fe975cb8e31ce5198a4888edb2f4b980efeed15e15cf0db773b026eeee258af8379eeeb869663f54d6db57ffc39c2f0408ed6e17db147f473f4e0a27bda16000e48e7c20838484881840e8741fead86939d67774ea7b33e9d4ffbe76f14009d4ef7d77443fcfbf1d5b8574be8743a60b1595d6c535ddd87dcfcf95ec474b3efdf32afba8eb0d987b555b730c8f3b5a7f3b7a7df792312d8f9dad7fdfced04ce84ce7f0362bb979d0bf3b7df366f7ebcdd97d0e9741f8e9ddda499dfcc4637e7bc4dfb12ba21fef4a77fbcda93d0e96852c79bd00df14f87091cef6602e75e6d21a0d62d6c7383a9e5e2e9a3d369ffb0ffb00f8929a7c9a985fafdfddd60aa5f0f06f94d60f7e8c5bcba8551fc27742af0edafb618e4ef940d6b0be3dc9b93041d3f4a3f3a6bdd735ab303856e88fc3847a1ab7dfda5749b6e48bdad71eef1c53cf954befffc6e88941f6fbf099d4ef3b8e98648bfe1703a175acb174350e0f6fb119c6e88df0d8836a23fe904804f2cd336ae1b7593accb0b4c976266c8749b68d4e83e358ef764a46144ff068d9d1b732099495240c2491a49cfca1ce8c17724878447bea6c85757d92e5f550acbc9304a372ef6314f14ccc3235fd5ca977cf94e169bc7589d9392b99d3d25e4f2795e412f8f59ca67d6c272916e791c64434ba7d72b9ef2d4466227ec849d441c500c6b010e6efdd0a53b9d229d6a69d1eaedd2af5fd1070bfad5af56accd18a5add675d6c6713eb7d7e5bad3e2b92d22ace59c13db4457f384c4211c9c596ba7c33659e5aac9be09acb9d82562c4ec74e6ac3f6a575303c4cee73a9dfeeeae1f4df65a0ac5ca4c623db00e74a21b61231217fd076bb51ac5588b646737b91bfa72d22f6ef3473d9b762c38e1d22f302352c78de66f41dc105070ef4f46947b4ff76cce12fadd3dc9f5e9c5eb9ecde9eedd73ce4f083b6d170177bb672de34acbb6ccd6d8adcb5845aed6905091d0cb0b779732fa98328273b6d33967f7bb534a3f764f5e679ba6b2952453326c5881582d748a86d01b9f92616bdd46f20b99924f82f807895e4df11f247a52ac66b466dac6695c3722c59cb2550a414ca6f8a41996693e9a8fe6a3f9683e9a8fe6a3f9681bc775dd6844b299e6a3f9683e9a8fe6a3f9683e3299e6a3f9683e9a8fe6a3f9d8c8341fcd47f3d17c349f2fd37c341fcd47f3a1c9341fcd47f341659a8fe6a3f94ce9b23f07c14e58f22fc4302a368c5b3f2c79a753c4bbfb15d45e917eadc05dfa39cf132b3f07bffdaa961da34cf9d5afeb4eec740bc1b03c9582045a9e12f2d4751aa39432feb093eb1b1c216c2344e6c376993eec178d1aefef3cf10626e6fd6b782c78264fc68b8d9a11cedc12c9c5bebf35459b174f6dee09c18982735360a16f5ca851fd75c617563bfa42db7da1e9ba962db73dcb32eacd171436dc5c57b8966ca32e54abb59b0bddfe2b2e37bdcdd52809c5fe60b0bf86c1fe1a4fde924bb8809267a30ffab2d3b14662bc1a51f4658700ec96be700798970adc25b59e502b57db5c0c7ea3ee852c870402fd1373ce984c9334aa256b47d6c5c5657aa456a3482d069b707162c3aaea365713bbb9d8092b3797ea852c67e3126c616c2f067548dfe66a6273911ea6d329d2afebf2309d8e0bfdc2233c97f62b487aa4a75e917e5dfbb1d3b1f24eb9f543d772fb5f48ad469580b485c17eeb915c0c923e52ab092b3f2495ea88fee865f772f4759f37b7b94843b75fdb5c24ee86a4560a6c7383a770d806b3d930fa42987aca53178675630e24de219149b8be64d936203632b13ec5de609e1b1908e93157f9ea2ee7a414c3a854acd6ba75a976b5ab5d36466e9f3406e1b4d0ca6d939d0e7bb2a703923c3cbcc4c620da8ddfbf755d7f38b65d3707e91fd7c344f7d00db99e17b21c9bd13003ab480d2d1dbace88cb4501323866003e00c7c020bfed8830c8443206997fe38696799464dfc3e7645f93fe9081b8d125fd2d86ba0ea52948c7a997ee703d46141d52afb7d077fe24f112eb456c134ddccc24bad78bbcc88b4c607f30c85fd38a41b66799fae91becd98bbc4822f17359a6bca8c8b5f04d5d527f18e4af3f31313133b818646e1f7611567fb81e6dd32a8d31dab4bcc9e2fc7619c1f92fdd10772d8ce287e974244c09f3c046b97440df287e1919191a3c6332994ca61ab2642d0d1a9d4e111a9dce8cddddddddfd42b8dfbb1eb68971dadc703d56670aeb5a58d73f2ffa29bafcf5a72ee11b6e0876e974fae37a92e8b9fc9b75217523faddce9cf9628b2658ec48cfe5763129d2aeebeda1bcee5f588492c03a83dd835bbf3b15ba8b7dbe137df4331356be90f61ce40d7de7b2cd0d5ddbd52eccd5019a12a834ec588b7a142a452400000020001317002020100c0805a3519825c2dc0314800e6b92426256329346a3a11c45511c8551186588210010020c010019a4d0d80ee03e4f846f8830e1cfa2cc6567155d280307d7619934805778c901939b898a93bac3251f03021480a3646e20243bed12dd8ff683f5fe1124ca48c89c2dca092c22eeb101caec82b235be18d1cf63e05197ac420e07f52242fde50149ce0ed185dbc694da1dfb92811704c1d8276667a56980a520ef9fb1c77854a3f248f2e3409c4e31567f659ce931730bafb6ac60ada9ebaa947013883a7febaf0b4d552c7c3e3c605a2092856c586f4badd7100191fcf3aba4f7151bfc701fc13fcad07ffece54f463f34aa4bc1d8727ef3f3e735714771c37efad150333a3218efe63788ca3b7014fc1306e3143145023364209d7be1260f845651efbf8849cc460020cd950624a68f0bccfe3dc81d5a2d6b447428f212d0c5b96464efa6bf39704da6aa49bc56f9181e68d6f66f3b2146b9826d403e92c673689d8fe7ca614bc84a24ef31878ade15c8e50c3c77d080284efd86aaf7fb8007efbb66ada3f9733f3989d6bbb8d9547adc9eafe834afdad18d63b64a70322729e086d31ecc58827e237f235d61ab53e430dedfe7f36e9b780a367df23e076ba366f7e5503e190001216618b62135456fd2cda4b3b11f3048526436d04b89c5002b211f762ed46e79a8010d830658d0681e3b021003c77d557405068415482420cf23231bd3b66f28dc3fb18d818c02cd218b8088df1b047d9682935507519be9e7e089a9877939e86e4533475a559fa70a1cded8faf6b17069bca10504b01139a17e66e92b104ffc7a7956c5f1a61bac340c1cd3ee4015d994043a65e2a33224c0547d2260bbee40f3a93575ea62d60de7bf9d5138aca312872122bc392261d67962dd3f0f0d60ae450ba023a56204dfc61999d8700ca14a62d5a267933c378c10fa7cc356fd82bc24f4c3cd0ee1d4416bc12d4e508fa5c5e48ec33e8fbca84a1d7ac4a80293fdeb0320cd0b64c878435547c76e692cdd8299b0f0940443594817953da1d2c887ccbda8cff08235b7cbe9505b217a80d87f9c3624943cbd4719f277ed02ed559fc59a8048f16a4f6694ae6689f44325cefb1a7d9c11f565a88bc2c0bac5c3e5709c3d09305c655d0a088e138762bc91efe0db15d336ee3e353244f24e3d0e47ff92efca26f6cd5a2901d5c33bda16dda97e39f16ace6cb981e705253c014947bc37ab35684d07e4c2f173597b645765e311f84add75419e7ca62a5798de94bdac83fc2acb20254a5d2ae94620db6b7960f22a2251e4014688e199b8e25ecd1f2015e7a25ae8fcbc45aa3dfc3986b1d0fe40913844dc4685bdb636c6122810b0c9de71d836e722703a535b367c2e440671491c23565e17f20e8c3afe24d59d0d80faca4af4cc196f89fb542452ad5384556262873493640673330f9cd32928b8519f13bfc76b9aa4c5fb89404069f350a70aef74ad427894a6b9bed0eaddd14d8be10632a59e9d53daf28f0cee1a6770ac8d2320ae489753fb408a47cc239a9f16971a031fcbba7420a058f6840834749ff82538fe5cc31285f01146e4cc26fa5c24d45a8af3e58e5744787e28142b12adc286048925948bc004c7ceed3a43617efbca24993ae3ab82d090a0f333fe301c8afc657ad136c83c7b21482d2c678164ea846a2b64d661b987b008e130e834bcbddff54c5a5e1e89680ac151a5eb6280ca5a1b4b89ce8f9074f63d08c6933768fb49b427b16e2dc8f5178dbb2d068c17d73e8f9bc8ea0bbe3f6c7d7fbf5082d558b8553866e3e5e06b77cd6510da9d53f825912a46cb5a6ec85758523e2cf013b4907cf068f59a10324589bb8e9f3ee94a555aaa53527d31212d73c06725144b64dc4f1e73e33a93ac5a4fc5516dd213eb3974d6e5cacdea39588af7c1ca6ccaf0b01853e0462446a068b54cdd8a255d6848243e807a07816eb70c667e5458d5b8debac82a469f652e1cc4b07d489a93b9d534f1a5b40ce3b64ae6e0fd9ab0cb6f712f175ac7bbd1b8bcd43a3e675f490d38e1c95128be4b1851aaf0535c2667e71cb64dcd28e4113341106a98e762622a86cc1416952bf2b7b1166edf1a75960845bc833af06e29f94928a2e43b0e976bc1a86080480dfb47a0628be4481ee5a075f7116cea61fd80c225783e163aa56db9a7016bb5e0b8fc68c95c809c766f3129ee40927b145d6260e476693463dc5a01b44733fa2f0d1c557ea887e7ec28daa9a568c8c0857f008ce7892819e963047147e01b714f1826fb1de4bd8d3f90f877444be5c0993b6aec1a1ff89e3c2e64530ab4a34483ae007f5ceb1cd42adebab71c4f89430935cf1cba2b7b8036e926278435f4444a5842f471d8dd47b84125e0c4aa8042860f80bbaa3b19c2190cf6debef93a1186784deb927acfb9da73dabd927373640bb7ce21a47c09c8499e58abf1c6feb445049b411185ad1236812969c2fd4ece5c024c88d84392e10afcb8d11a35f4725a16294844403c790999e717cb7f42f331d23c56d920088fc47572ec48d0a49428b4591045c36990a02f596b762fd4888bb2e8eb4518a55d787b7a7a20aee8d8488ead0083eb72d454dabbb50e8f729ea82ee7e5e7aa727d67942b3be367fae06cf2110dc5545c269060e6bbf8db5b6dab083029135c5043e1ae21b4b3d91f034487a4b3cc74807d21f0b92e07645303d2a84e02a30aedc86f51db79724f4c94b82966b4b303b214696b247a143b3d314b4505f0f0532b5b85761cc29e28bd60e88926652817730a7c7645f65722881eea5ba04b709761101323821642e9f4ce78d4a15aa9f05817771501d70e8f0b1aaa54c6772f5acf92b9b1493ee0ea50e6ee38f869c41b525333b5968d8e9a6d38175bc4421336897ec4f37d66d0ab117a4837be38f4a02351971ad7ceae08ea72fd0fc29d041a1efcb5af57fcc97f839083aa0d5016d0e6e45d41c602396e298df90391074cfd59a98831354d4b7c4e580a2f948ae2c070105e2763630030f90f7319503a177191d1a85eca8f785b6798cd8f6bf239c30e2000d4863ba3b4c398808ab43ed2427c57923c3b943215b1e268413a44677031353ff6f9853ac30d0a11215773c964f0e4e3494c2b8e7a0d92d764cf7bf714e58f1a2994b0e661eb06664733062eaffc63b62c5c0a23c7260620b54a39e0fddeeb0b1a5ef27871ce06e5af5d826d898d8e6e58f835074b961efefa6e3e40bb382ec384bc21a5ef2e3ee3830173930373539f0c03ca464cdde7d4d73d2e37b8900ec4b48320999fc6412976a037947c531415dc7b4e27a8485d2d5ff26494202df24a935f64450dd809b72e0e09e5479028addea504b30f7e252564e143c0c9746cb945367c2a5e2a9b6fe1e95e8047ba8c166947360c285ff364180f568a6f9ed0667e81334674a3cb0730cf077af660b7134307e721f1af48b7ab82a6bb6b1cbde1b5600044ca8cf88911dd5c6c7efc416b319a3679b0ad554a5e9d144769f99709440025458195d9829a480875558bba2aaac895fe54cfa5a7886e04f58dc7d7704e07f195937e4842bcc5f18a946cf77e7d5a2c516f751afab56bffefdc4c24286e8f0f481eb1aab92962f048973bc71f8aaa373146dd1c2f61486cbe46414b48fbb8a68e28ba5e0168a9aace5eadca46fc0b5e41edfd6efa85b19a04c27f109d740d5bc1f2b9398961c409ab262978044762c1f95bfde12fa389123faa395c35c636078295c6d6100e0855981dfba7e0aae4f05eea8ab3660f188838d50b2f0e191f9ef49e6706e7e7b9189ace95f7c2fa5e3ac59fb811d21baf682e0aa36460626d5b5cfb1facb318ea331dc0e9abb0ad786b4d4686a18828bf77cb32ed64b80d50486c205358af03949f5cdea4b97a1cb65246611c3b529b836e55f0efbda38dda760257a75572d49b875e9a776b91796f527ea53768992585e5c810968d230df241c44eab2818b554381a312dbc620b1ce964b907392b63b22fcff0e5ab9283e2eaca746808cf37c5b2e2904aa25874c2fb05a66969f31237770607445eb4f0ace69ee20fa9aef2ecde465441851c249ced0098eb55b593e18e3878de083d380c6dd75d948940731f13c9a3b22d994ae2d7096374adcb935b2d610890a4ee4272cfde02b3769fc56262eea03d5d799313a2c7eb32de8909c42808197b683eb8aa8ba12df43b00ddcccb558ec0294a03eaa09225baf30107541231a558f73a7c83507467f5ac88199ac66222d8054aa4b91b58144f519723668698f3b146b9a1f0ee02c84ae18fda1e5eca7a92d16cc94aa3c24fd44f7e53ada60bae64aa9891b714a20165bf66a9f3f1145a2295a4284f02c11c151e1fa9b2d213b474e532d348312f86f615212ba657718d74de93277ce82e8fe59a67ca70950f7823347ed6b80cf2b8b2c622a267dd6034e8e41d8ccb65008ca06d18a0dc9505f80e531e89771392c77e097faf3d233f9d7d804eb45a0c74b32caa61b582d4540f5e8b83f6b5e3d8fe2700f874af8ce99789172d34a3136167c1079d34ad8c2b0fb62d6f329e57d1d0e655e569cea7ca12740b4fb9a1f04c6da28d38779585de734198715e8d62a9350650e993882b143260db33d82a1e141140884bd6f9d25fd05ea85d08f8605543fa56e5759c3c8ccb5181980f804720c5f9c58f64a168a08750c1afe38cf061b9c90ab52c01f0dbecff02fcfaaac58ab680ca6ceef41cb64310ba54b9cc201cda1bcd50eab08f46747eeae58f99f821532ff8b7c678df0fb1784af81e64d788052c9818c41758036b26879c0aed7323c86bde4ff14d23984d0a2b6847edeec80f06f475ca121f09fd10c063d29a256ede611f3eaf85ac18375f50d470676fef9b9b02bf657293e76a65f469b2d36faf49a240a5f62ec3591c7e0a687c27f61fa34daf86cad554540054504ca2a5d5c68f6c660b46ce0da5f7b526f64f855297002b40355428087313a4bd366278cb16898f06c7880bc0dac4823d3d33f27e6813cb888abaa72ff86408a952413883e4815e7dda57e8fb1ac3b7570309294cd3c6e8c0c7657bc8ef124b70a87bfd1fb5ca67857b360ea0775cc72dcf43ca9febeddf2c2e11ba3d7d482fcef564d919f31a02421085f32c5469c3f3a7fc95351165f6650b9ee9470664d683de8c880db51480c51affdcdfa3e6891a3a92a202e5e1032b59b8c173d1309e93e7e3c5618417ffc3a20808a20de0f0fa1104c47edb0dd3f21a38431a4ae0957b0ee9cc71dd8b57528706813e67c9f7a5bd26e76ac231c83a00e65f327cfef090ef9520bc7f6f48f08f0483da1d628315be0d9fe66fcbd45530e8ce8c3494132648d0b5319cda811776604ca9277a378fdc85c2a89b2a90cc9afcc956e5cee4f7adecb874211a168e329b6465c9bfe1530148801c55db4cfeae7b17a40f53c543d31d71d317e78247f4ada8ff1d0cc276b2434edee0d89044bff4307ec92a8faf1bc35bf540de6c9e5ce7655c29ba49efcb26f38c0b39e8487b85f72e75d9d21ef9684c098250231c47670278e2ade25afd26c1ccc8f596d50fe8467a33122518417d015c8a0a33b361ceaf081851ed7b96de2aae145c1051e9d24f535693b9252a7d654c9fd9e4b0454205bfaa08f84b2c5d844a0b3cb085e891e8b2c8521514ff0bb447b41901d82001a4c00c03eeb64a36db745e409b878a91e44cc905e546a1ce3fbe74402610cdae2232ed6f2add607108536f599f81246064f6b5e1c2064349bd69c3a1145e4d94090d6ec8d496446020de4a96080f30970957d95b7ca0500f5fa0b75ca9593e52aa2b7cc2a0f79d6de7498c7eb0711720c4829b1e661153fdfc7d888e7802c968b56983aa0c4c5f64985ff687f924c16c27f5c3ce8482431bbb714d6c07953408a1c3d2dcdb1ee0242f058b9d092c94576b0ae02a471f84610ea889538c5fd1efd07bf1e9b43415fec21e4068032e53622f1420950e8e75d9126b9d1ab90530bd8749a2e34951bc7abd90f8eec869f54bfc380ed1ca4508b2e0c882446e5218dba8d24b6183ae9ac74cfb4b4830da7c53a5f6f67659a53ff62fc98e2b700dbed53307b9008826a85e03d681d026a3bb1d8f016837e468428378dbefeb7f3311b97ae4ec0f1e059131f8941ff98166cc799d8fe94f85e7cfffb477820ff9369e28fcb3bb7b858966cf28f2cf280c43d69fac400124f7cca66c7891e11a4d9f3bb24390169269ed7461ffb9513989900e6631c3707704bd334e81bf9ebd2f72b5a346089c6273f6f29f1aa8dd8cfb224ba4fef4eaf2896a6b93dd5eca53855cb34ea64ea94f901b6b38eec34136c0f8313bb37d5d086d8974e0b4c969237c54d73c2db54112cc9e692c16eca182650e6d751a02102cd35cae86a05a8d0d8c08fb8e0e919ba7833b61ab039bb95c2bfa454b96edfde3ebd42b1ae986b400ccc4a9838c01bdcece9ed11d1a8a2afb2e2dd6c85bc61f24ec70ce70251b5b9a5910aed0f068bace6ff77c4b6aed7d90b73b8155d9552a4da6b54817d16e681fe01778cce816892be8114ed2e0af2184dab3d9ec3b76f648b2c4f9f32e4650c2c4555acec1dba519787810a129b5c29ecca1605462371ceb590453af84a5ccc870a8344e00ae4f8dc8e203f43a0d819728a720786347e21fe706f9976f83562e1da475811632a687f8d31432c75f6d583a919ab571ec28e165249f80bacb160b9b3671acc3a0a654b56bbc060da5342a05aedd0e5eed7b76cc1509abff383ac307fde5a1000c02774b57e60ac91a3229c3ee58e9b18190862d064f36f5d58dfe936ca56d4399abe32f74561026de2a99c6d7bcb73338ab78a8d6aa66854d5b821eee069395ec9fda359a0bf609aab00e7820808443488d303e8feefebc36b6988868c819aa5dda0f4ea6631df1e9fa8640c284f86e5606dc7b2d8cb9dbf1f5ff44950e009a522e667c7a87a05a07a074ea1d00753f5b58de9d6af72db731fb0aa30322e05383b02bc4f73cce32eeaae6b2d78e08ed95ded3eb2a47219f72b11a6d49845fb20b751dbdb33f137f1cb36a4d82bcd390350c70e6629b0d949a3f9e0e6fe04a04d4aa9f4d526c10ffdf4866f6af7d09171de9ec67616b0da6d931fe76b644f10d9dc31632d43612fa68caad0e67735f9206cbdee136071023a94ad1ee87b285e8d4d5c18eb064ff604d5986fab0c274331ed8644f76028040c92cb4ffb13642f8f68337fb40727bff0e81e0a249679256170576b28d36b3c218734304f60007526d5a36661523ecefb48550ae1d4420679e930bc298d25f987487f9e6c1922ece20620171674a9b23a9bf16ae9f9869c5fa296630d3207d771374d9af1a0e526d93a97c0732028464753ef010340033c4ed4184d20a29b4e30b78d1e7cdcb383d84c42b041212acb10bef3106f46449708b74484254624c623a43149ec844a302998a8cc267cfefe8c2814abb07324beb43453e0b540bd2586acfb7a041b464529c4db973780da50a3b05e02e6eac8c2d8dc1060409c280cddc84f66f64814bac012a44ef040009143d882f453487e1e099e2da4c2a0bbab3594e9b32125a34c0f283023b9432f7c27a4d12b411489f8a7c8797a459ea7a984d6a514cbbe080a16ddc6a8ef857bcc482603dd355a5563b4377a8e0b2203b12ed78fb3dcf771be45f0d38d07eebcd0d1b45ca5ea7c46dd2e51432172368f0420f784e35a2aac296ac1090503a60937ccc6cf555f1daba135c1145aab92ece1ab23cf416f642c22fae08cadb8e9618c0eb8fd96401257fc2ad3f6eeed8e6ee1d073a8d102c01944d4b7ed4017eba2a2cb47d2ffdb0a200112d67aaa6e01028379e4e596062afae3ca5a4595ecd8bfbad63da926a825135cdf9ea56d6f44b7e950e0138fe8adb424d79018f830b8c3e80a400cfcb642e8fcf69edccb3bc450d40f39c181c065867fb1d5c7d293a84f2b4206a414bd22234f31e41f2b3295068827620f82dd3bd4e2a3612fe406f5c319985a32c29e8a771df1e36c3090c5021eea8a15f3a38d061b2ecd30a13dd95e22268939a8658e35f4264266b59be6f0184beb85ef08bbce3b4e1691166956815648a3c2a16dcee218cef0efacce36017f03da843882893883a4606c1f1d2606998f43908a4de3a8bcd05a69cd331645095bcff506c2691814f9ef1c9c2d075cf00707ccbd635bd9a8f0de4466f400ef4b5a4fa5a5a94c3a0ae99852085f1492d6f9f7166fcb7ec0805be49a0c50f8f2c2081a9c13b250c0da963e66b975282645414bcdcfddce5e0e30c96e9c8d3a340d41abca7ecf8bd76ab8a8ae0f0100f503c4bbc7b35b0e6e905319af06d9977731234ba83e4c2d0f25494f6854b1d56c06dde58695bab23d4027afc54fa579859eaa9a60457b4e73af0af81f5b81de624fc1a3b7f5d2b304a860d7a37e98d0e6929bdd7b5ac9f054c1e4ad32cf37c5d527956cbff625b9d1679c82d71993c2e406a18176f9cd4405ad88293fcd0273e0d807da2a1d064cc6702f4c3f9cb206ef0ced9d47ca10f7216a803f3a3c8401e559132120248308e1e7adad9164996084fe0218df4cb9d3496e2167642aa1177b1e5cca5c9fd14d6adcae4659ad5e7adbd43f5902f42db4ddf27965d1739d206ad45c4e3f64267b9e9f1fc278657316b0e6c119524f820d9581fed39f16385c780067df14f0b5df187006f1766ceab73e16598674ad43aaabbbcbea54787b3b24c53e691589ff38e38fab0fc5828d5e8b3239c663f4e735065538d43af946e65baa604a54ee617b1306440aeb25f9ed67cad540252b4201a62d2ea4584e81d0ee67fcf695798c26a55c0e1ef5bc3e29dc41a6bf181223ccdb7a14c33c5f5b892e8479efd7a9aff01b596c35db230567a36a159ee14599be64b6b592638850f357f806cc0cf7b13f3dd899535b0c7688625147f9eca372d862a315d58fc017661f4e2336e2ef612be766be8a0b674a53e3ba5027b95de57700067d851bb1333d8270569871a9cf5018be4aac5e79f9721082bfc28c28723d82f0b6ce787e48aa85809c3b44fe21679af164ee7828cdb02dde0ffff73e61480a3ea9dab98a5014923f19d1cd27e70c1c4419acda8b0fcd4d3db258208df593514ce603de71d5204e584985d50f063ce6643e7282cc358e94d888365157a7d0b6bfb3d84083e9075238e662de9b05e9c76c16ae2436e7fef28c0c5e48ba1eb8cffa30836d6a048a0acea70276a3848f1e013957733f555fe4a47f14c276497f7c09f5a1aa395945f44ccd7d5449919f906d3bb1679ec42032f253c2373080cfef690d88ac2570a918e4d185be127f10ab7c870e8f8735b0288b0837f74067dcf90cea5334ecf62877af85333755a2758fe31fa9d38b1fe2b9af0eebd62a030a58ed9f30758e42babe9db29401240131f5d659b13bad1b65eeecf374dd26c50dd44a51c43406e319883ee2b66fe89ccba4244ab34bbf2228715206ead3122da243118dc69e10ee5c9ee3abb0294cc3633494b27cedb72c390ad38f118f394fce0bbb4b356334a7ddeeca27a96b118f2b5f2500c1f508c9156a9b761772f282361c4a13eb5c0509aa68293ec745535bbb9b1c179446380f9b075277f322aedb020c61c66c97abb459fcebfbb1c615f663668bbed538bc49987c988ec54ff42f255be0c37984b35602cb6e6532e17e98465e3c86274852974d3a99743a8c16b2b8479c86ce7e694f743368d2e9d580cd2faaced782c77c2f555823e188a86a9c5b2ca7f56313e6ace8f8e12ca122c52709ed6461ba064ba46016bb4f3e6682e59c59e7a0638964779cc27dd572606479c8fd75f7bc262bd1b1655d6c2b84c5c05a2adf514ee10ebd50bbfc0f56e6258411139c58a09b3aa80d7b5f313929e5d272705c765367ebeaa5a7e6a882c7b2f1fabc93eda7c0cdddccb8fce8b15479c123a76953e75cbb5c9ecaecaeff30e9dff554a7481510eb8f978ec3fb18ee17de99507baa9de009dcad29474f088fc87c4ba750018801e7898368009e4be76cf0dcc644a45131a4114617e5ea8afaa958d9ef0c5b44ce7bde1f8affba51b55456a5c69d526b9f41148b8900fcca3ac490f02f5cf19a2d79d705dd6cb353635630df4119993c84d74354302e404d90b8ba8e8f60b132ba6c9555481bac4f1b261d1b120f4256ac388e0627a06e2a0adc6653a86c67eab2e071b4980529d145e0c94aa360b858ca619e2f37b793352ae42552328111885e9b5b30fe6162d281f964dccb1fa766c258422998c907fe41754f6fa1c3235301b3daeea39cc592268cd75529cd0d5dec534a13cdb8affa59006b5cd57aaf7fb2358c9cec7274cb3ccc952439f7f5ea9a6a62c9cbd12a6a38e13214c81e1ed23a9c6f32ad6e395344eb8260fa369f716b7f0f48f65d1ec10fb0558c3b2daf9b5635cf66ef1a3e00012d476d166556bb88239cdb987e27ed5ad4448db180400b5850987c209427d7b938fec33d19797616843c6ebf1a1865b058eae3e9454bc6a0d2dce79817b363b2f9b6621704b19c7c9858cf0d52874f8cc9953bc9503731bef18553dcf63817528ba2b01e95cd6b48b0a38205270518fb0485c1e8c73ecf25e9c2841f1ec26b3a8b0c13a32ef705a114736ddaa2983c96eb70b22cfa3ba200d4cd36d91cc226b04d683d0f7b13d4f6e8ae12b8e0b8922f13ce54c4191aeb53665a80eb86b5f3ed2f54ce4cc3f53896d4a5fd79a2a55c807235b61f1766416468c51820ba0946aa709bfd657252fe1ddcda50894b6df13a1000e25ec462742edc63452639c5d6d4ec54c7a840a2bdf5bda281d7ebe816f784003b51bc04b707627ce84d407ef7e7203e1c3c4e81690d79e86d80cd8b8ec45470db0264cce02cae24fc417be43e28ea6874acd67702b9c863b76ac567a8b06b350138b2b49c1c358744a47eec5f657409b20703143a1171dac71c34d3e3f6bfe0b3ef0c76c8cc68f44bd9121842197abe63904ba6d20aab952d7f3748332e0bf9c6071133f498e0989681e8d4eab01d407b7be00b315cc19ac3e908a812b7a53ab3a361e5888130e440d3a854dff9279e210111e9498a7eaa0201377112afd35c0acd840f2af7065b75c3179391225de81df1ba047c8fe6e1dc7b9c20ba5185bcdcc739d23f33413bf0eb44435e140138047886ca3bf860a31eea734103737090150c9ab3a201488ba54cbc26a8a0e9b70cc0a3894700453683b91e88385c9fdf8916658c9deb8e7c18195fafbcebe8a3eeb27ec4b71b4f03f681df55b7995eeec1b6f31ffd21723cd78d8f02a7cba1311ecbb7f42cec8e009696ccecb6f87c97d79bf99005d9993d76f9163b08e4396d623b105326c8d50c37517531ed7f66a5cfcc913597801a6bea27360d3111b73ff4eb78174bb33060f87c6aa586db30a28e8abd8dbb876290fe66410121187e6896970e20012791ec096fd6e239f8c92d70db9fd47750375f5bc5cf6bf52d79777788be465197b7e27bea05c6b659876a23e66df65ab11ee9cbc897bb2665f0875930f54229e0f26c56cc10a8ef099262ce5e54efb8f19100722edb90742ded4002983f56b0a7cdd8e4b83a886b3396236f957512f16de3caaafa15a919eea092cf89665367ad8e102c97d4ce5b168634b87d3fe86a0459f56f643a0a59de3ca98eb62aa05fee981a8207a2943409104f3072b1823382165b97675e3de53e1c856e589f03dc9af8256b6b314c849021a4e027d8169c39fe75994b06a189209e23b1789e349afa88782008de4ab5ccdaa705d1f6d9d10d4342860e226ec6ae9d4f25651dd717ac865eb829ec9a8d8e532c2de8568e2d0d335be60a04a5fc8c5eefd0f4e86c7e406f1828f32316056164efc7579c622eb31aca2d08b1f62eca06e8e15b9dd87f1a014e633113f00aebf76d2a1d425a69193ec0aad550c3d057c151e4e0ed4fcd71a714ae9d4db71e949b0231a283fd417bbbf48c9709f14e1b63a70b1a9b8cf91a6fa67d819678f1c71d142693b8fd20f49a07a223bfd18ce26f7e70986c6a1be085460c1ea5f62f73ba4912c3f145dacde9be4989d4cba2b58614512bace2ecaec6989fcdcfbb596a57732c9cfad6f7c62f9200a03f88c6db8d3fb276a11bf15656968c2227707f02e8aecdc772f88f7000de5219c1dfce600eeb145d297b5a6db007445395b82aa6fb47bafb7e848e7cd1d96fd245be866eae05bf319c50d5584c04aa4547ee421f833141a7bdce16200ee5829a1bfb44efb519642eab81b80ecf5386b07dde7d89e36e856355b095dcc8a5c4c945277b3fc90f12ee8376865a0ca02f15f0d89129e0d0868072f764aedc878b07548a7ba890bed32f967e483ec6c34eb71c0d82a9bd3558ee315386a543d603a0a4ccc02196af1836bbdfd09460b226064ae4e5958a7d12d9bf59764ce12a68bee8c01383b2e2b17087b018e83f2246e422294f035331007e680c3d9ed68fd67bd813fea82b33aca47568de634551f7043619c924b39e53cdc72d2a0a10d621c632a0d38f6a8d2821bfedf3b8e01c0b073624892f45ad2631056ec1f18a048616527f0c63a494ded14b1eebdcdde06121f078c22421cdb8060fb9fa46d12998c1f8178b85369d6ecf61118665b94f49abe93e95fedcd29f0efc372351a086d853f27d836bc4ffe329fc445d1b220799d5959cb0c16ff1dc50f310af5d75ecef2db7ede1fad50e76d4f77098faa45add0f296cdfc231c40b6e7fdeef953afd5c0c0cf6d5c73c16af0daf20dd461b2c05468fd33f04a07e2f253de8090353a7b11f07c92a20fd269a9f557f12e1780f6c6196dad342ab87e6f443e2f4455b118efe6791a26530e7255861c7eb4586d85fe1c12e46834f0b695e8f974e39e7c6ae203247feb8b86e4c9c28e46d85008c07d87e8558da4c2793a64e9c1897fea261bc6e24a71ba844cf42631c3652670c7d9a75a74b4817e4d3a55c217eb471014108df078d5c96d13513eab24aa653fb3fb5a0cedb192f34098d7b1159ec8c057df46e91186ceca919209090652835536d0c22ba17039bf10a5712c982f60e9848c09d7b70b88f87fbaa9c3bf0181fc65a5a96485d2381933b0f3f7e7e5be84d138f296b31b0156266957956455386472d4a1a43a0110f71db5efeaf0504e52a7bcc91505153c80341b23887c1be995210f8e5b0e5b645e0a98607125ba8f5fb0fcc558de12fc2780ca3a63f51208804ec0c8bce4c112ebea1d1132207ca910559c4c507fb111ab71e1df8ff10aefb45ac2cb3eeb1914f17d1fac843599fe39c644f229b383cddfe1044d0be395762eeeaddcc0ea69be809c88f1b072476880db27f4cb7ce5939fec3109bb3ea30b737325e349cc9ea224b5b50739a0a991f2bc09088da7179a814f0f15ca465595b656126e6eb3a4f99d5d473a478f75412491344209a05e5ca068495443b22b048671b173c4b759d58a57700b12fdc351e04770287be3ffc4f3b6667cb4fff3f55d4992b791988960181274fb7a7e9cba37d708c5367bba01d960f8f733165fffce00167186f379953597409c70e6253e73d2b6e4a002aeaa7226026a61772dd0ad3e97ec81d2bef243cf02567847053954a62c77ebdc655e407a6c9a3c426b107749be3a5ff98a364d9326a0027de1c7c1dd4f70fe3a88430aa89293fc1532d07296ddc08b9a4575de77c501d8771933b7b56cd6d4a02468839824e954e3657724d3e295e95e79165c312f4106094adf45fb4e507d23340fef52f27937026417d1a2f403d379352f6e7bd652f96b24a12c40df5a1dfb654053724c146d970b9a9edb13b53bd717acb959431e0285ad03043648b06359db00546fc6d13ebdbcdc26bd95e41572ce9ff9f2e9d0414d652d36d931bfbee41e1aca2b990ca44520b94952f9cb6817f174c4dc606ac1acb03dbe172584dbccc9766ea3c5897eb6e01fc8b3f40e1c5579edfd90b95a5f4730b4ce3963cb8e839883108cacd14f8d0e3d0526589910d5dc63616032ee9d21d4b01deaf9085295ff2693847eaaa0284c0375dbd207bf09baa1bfbe3979c9832dbe5581ccab550813650a3c90904b9493e28a533150c1c0a92f312ecd58484a4c1a8556502d46402987cb1cff30281972896c8e16be60b07a48a85d0a28c9685636440abdf67d38fcff32b3c396b5094f047f09b596c391cd6e1fbb6c04513c2fff49165788e0dd5aaabe9b99977a55a393c5bdb42f632cb3103ffe29e8a0a29935baa33ce739354f1f7f1ea09cab8c44fa3d66ead4c4d39a2aa3113abaced2d346308d0c5ef2f8270425b5ca0dd2394f67f989cc747b2e301c3830fcbbca9c5b1264d00bbbb4cceb949df8f9915368c9667231503b04fa4e6fdb9c97c5c74306c3fd9a3987d854c721b865b17493921b40c1ba875d3a87b9e6d933bf4a57011aeb31d609088d3b33fc0763b0c725b576642ddc00de50ccf4c7f3015b5eb1292d704a7c1b3e8b109023b1ba9fca1dd5652df0115f1fb69ab2ae03623d578929b187bd67322773474b051060def029e4c9554a11f9636509c8e97eca823b51d2932bad805991f9dea178a890e754e5e340adc9d59a1725d40981942e654a1802a3f2c4320b87120469e4c45e51ad8379a2bc29b2fe502f336c222b75799254103bd6fdc0fe5769cfcbb95ad1f9b4557731fbe03c50f53d249d37bf897a1a696b2f6730f66c6fdb3b48a7570072335806d396d392e5ce2647612763c36728b55bca81eb3613a133bc6cd0930c4659ef11acf77c632ce095ba0733854fb06905c39b76ea3ee1e9beedcb227ffe2c03ac6b6b1eeebcbc3e222bdff8f91be5624b13243c2c58fee0f45222675ffccabee12fe678a0c4c8c17bc30516067ec9ca33166604634138f791ee032be1a5ce703a09a137ee99e71337b80ae0a0ddb8b89c5c97294788dafcbe7964cf08067e37d9f4d2969786bc0e83a45b11ae4e13155f65ad988a6ec10a65c200ecc311b8c845c2ad3de9e031378eb86ab65c168fbaf6d4924a6246a6968edf8356bf35f870a7f1bb2834167260d13373bb64af550d13c8c5282b52034bf4f70670f0225cbcf26cc07b4b30947e55e8bdd537b5950ef158345345230ebe2561437733f70af2843900485f60e15a38599197199329612138d78e62c1390f790a1432bca322dc9cb275a1232c8ce0d89f2145ac425ea0cbfc2a6635c6498829d1d60449f133a4670d2847090030773e29d6610b1120f388ead3d648e373f2a6501b8e563b8063231034604aec3409c501d96ae3a63d7782476aeccf055891649383f009115b4495376a41f9009f217fe374150002858b5c89e62bd4d31a4aac55b42ed96da9834fb0577571174e7664718377e4ec614364534d05eae533079c3c40a8a25c3f6e8f977d7fcfe66dc6b8266db72a69bafb8bba85b010af596aefe538b98cb25a6c9cda8c90a71c830ffabceaf49798bb963df91b933b8e059dbb9e3bab69be2224c5ae2848e2c1882e6e310473bc97b68a2000419c379a582ec514ae4d91fe074eaaee195f54b717082d4537d04fb50485b85326611c8fc442e1426702832ae0cdd54dd048d8425f0446b4c7488763ae75c63e7e54dd04be1629a0f696c22145d57c111fa6583133851b159d0e1171acfea1a4b68441f96b6f7c6a28b004341d8e29626a0e2c90ad7f4c8f55cbfd442fa2adcf0753d171d389263e55a212556fdd4d87739ae8e86254b9b0639a54f9875d20c6e3c01c11bb73a3e1d912274e6870d79204561018b309cdb7b20ea4161012b7861327d7f65132dc067adc29bec37895558a95e0b3eafab9bc87d2caf5901d8881009ae09cea72bd00e956837c56ce44c2b5bdd38bb3e5fce31f6fd0a0c5b3b3f1a83d1dfb5ec8d36512c13468e2cfdd1783701cf4a9334cb97ef2e0660a9ed38c59ea445436d1e5f911881139dd1f9012fa595210b089053a84ab3fa54182c50a616ff9976a247e422980fc41636870c36ad2e0189dd7cd4300b17360879bc0a02596c9b1c694c466585c1f839ef142e81d70659331dd794f1405fbb4d5e3561d0ec3d58834746f136330338a6731695f2f167cf6245cb209ee586eb373539907d1e725f16cbcfdb261ea9a0c64b68023b235c075e4fbebbaa0c7f9bf7a0f9cad5fdc5e92a7b1de6ae0e66118c45b6b50123497eb372fcc9af808fa823cceef615f37352b44dac7d9f203ec5dcf89c715f6905f8b532ed583d6d27f6ca630a5e957e7d6eba5afa4a6026d9b03198f2452c5679cc5535b1d2bcd3e2d44ede01dcc034aa9173f708282171a0545ad94bdefe9e371cf5682b8a2a11df89edbf8b329dca7f71168ee7966900095400b711c3596c86271eff851ecab5abf227385e85b60202b998371e77acb0180963cd14dea8343c3d98ef6e92c7827092159618bd89669338be6fdb55968f43d2ac28dac56cb17c08fe137697d9f922179de1913079c7cc94480f97a2ab282ebac82cc4f62d22ab39b6b3d9b3c5ff996a5b923f1a1719aaf896b9e82c723bf63db22b692ee6a4adc3f0ebde4f283df20852745360131cc351ccf1cf93966e1f5b1878d142dc50bac18cb7e50c910d2966a01d10676e18f9cebb873048a09605cfe801cc4e537b192723417b09e2678d9ac19dab09b1581cf4a5bd61b545bf34e85df05cc2bc350c8e9843fdd222a9b1e26338390cc8d05132c22d0cbc2580cd95405b3d90de61c27b3d27be310b05e224ca92bd47d14bcf9f9ba8805b1daa5ae8a75313b4e8331e9072688acd6163a07e076ff371fa08d4d41f52db86d81abcaaa603255b3d3c46b1ed29a9a2a55c572cbeb2f39a0e91e2dae38b5b89dfaa6e9ddbe5469b487001697ae199d3ccc502934f37e482281bf89ed2bd9e7d235d4c7c8b5182e86efc30e2e6d4f7643ec3d3803ab14010725e97fcc98498cd72a2bdab4998cb9db585abf0ed1e761e816aeddb973d5618541566d7f4800883a6cbb7aa6d3a617dfb0366956fd971a6cc4108e52a212f8156e4d0bbb7425e0281bca981fd5332a7bdf08b862b21cbde357ec7e2fa51313e4125efe0b688170471a94985c0826551969c3082618b6a8f30456da69fe7576afa578c58b190befc3a3c37c19ea2dd49fc4b41e2f78722fedbc41d9708283b014b71841c105e040046a557c040d701c5a6ccf212075009164d32d9cd64cab5ee284f2f51f9c383b58a4c91cb31ab55b0d3483c905461df1a0faf4169a1508faf4829c3ba4aa81172fbb6ec925a926a676f8efb697efde46b323d59aabebe83e9df6b6cf6255a30145f71b407893e301f21522cb546aa174ec56d8a6cc701d4a8e780c809dd63973550eb6e70e57bb808f84467fdb036444027a2e07d048614221409579f7a1b0dd7d3575b6bd94ce2077abb345a8b98d44152c1cf0962463ddd3df13cdcb3c9864aca47b6862241f9e30e7d30fcbb57772510d43a16768fcd9fda3a6526f154a73cf8ea2cf87df20b73b197a17c461585b8901baaa133499924e6fa5e6fbfc940de00f0befcf28e9be893f7aaf1de69227a6987e178add681fdfc2f4c9a56cba8cbb08055cdcd841839cfa4488b8dd6db367dfc2af96500fe96872e2f93d2085691d7f5005ccc8a922202be68b32a01a148348eb6c12b65f0bb30f9cf0e1f2179b00b8a1f2e81c8edb47ab1b423d1127a6649b80302df7395ad7aa05009160ac96b4f7462f9e9bd8e3ba550025671598ebad36f8fb57d3fbf61429f5fb458d43d26f599978216f99f210aacd4a40b872264707fa613250e77003252954ebc03366001469771d7ffc72b66c1143265e812e7187828ea59bf0405590a70bb2341a7e34ad05d5080d39b00daf30fbe9d1728391df5b366db81436b562f716e187ab26bf8c63ebd026bb8b41f410c0f909b8710831370b0382e9e1384d3ae1c2cc4cd1d4e000a78e454502038815ed756c6830ee5dca46e570562b2655968c3b7313a6320fbee600c08b8c5b3d5004772fa8231296c2b2072b687b3f61b8e1706a06238ef309244babe581de6b9264e8863a6ed94dbb8b7412cac4252c698e0859f00968cdbc49ed5b06648185d58c55328f54816157b31fac4c43ca9b022b6f8cf184346fa4ef74b1b8b9df09583c6bdeeef53f1c61c033012a8c30df7efc8980b9f365826c2de8550e0204a738fe5e94b2ec16a1c0590237743b07807882f914c0a7640deee38da910823f96deccac0ccc6cb4de3fbf6dcea85f935bb5331fd7e8ae39740a0618296518bbff580cb1fc0b68386cb9e00b846905a5e28765a5f92bfd1f3bbaa4c77fe92ecf17a87a397f4d4d87c742116dd1548e55917283a70e8cabf2ef6c82bc933e7dd918b478eb97e206e40535b773081c865820fab0ac030455bbf6a02ca6c16c9bd6d48e83d731738e76016caf08bd6e70e4fe35c80b62fb7f166ee8a977779b1952f906fd806a5cb9e9ba32d5cee646f0e1246f93878ef4195dd2d46f1a205269404bd89a6872e000b18ba0f0a928243876f6e00e03f59202a77817d9161267ed0bee02990af48642587e5dca4a1e6421b72fbb4275384babb554cbedb731f14b1b0ac80f107d4c23795ae43611d42813e45f2e0140ba3404b64720192acf95ef823988c62b6ab455affc55fdc7db216022aef33dc67e86a7f32400314ccd0efdfce3f7861c028b1cf77beccec9ce0386f0a5ab7b42a6ef7b54c016d9030306fe7d769c85e9d74d206dd4136d5432d455faaa577d4dd00351ac7a24dff41e87d0fa415a7dbf8a84b958fb930303161b3cc140eae4e99d99cb63c926379504a93b95dade51139e483ccec316dbf4819ab9dfc0d24a4b8ce3bb7ea173bba5552fb1a39cc2ab402123d24860c07f793010f9c52019fb12935ab638c8cbf39974076649344252271595b46316318d04c46904776360d5e0a53a9335e5dc34f60ab73412f829b774abb020a5bbde8a3ae0b9fcdf4e678c6f5657e34d8b7e14801762c61513e8e8fd7a4efbd86a45afe52653e449c1205e08b94391c6d278f8b7b4dbdb2148bc668357d475f6cf44e18d0ddc7d4776d4e122a98ea218aaa48b7444df20457f7fb7ad837838b1705d23d5fbc7b12be3bd17834b652fe08133a4b6b7a410dde82fe5b6ebfa5ed92bf6d6e4e76d7248ab4c8716a9afc5f172b7452dd45defa46443d19c592edc550e04e87f2f4553c2ce209e74e4270f13d5f57f7ff0a227b0fef64da988d0791f1a269b979009e4435f8e1c093c80047e1abbd53e7b23756c031484d170ee278f2122b751762bddba3731cb81be46afd5651d0d0394da1efb9c971080a2f99a0a720ab2e78a35cfedc78166c61cf9adb14db3137456b7b361e21c4e0d4e4eb721468fd180dd043754e5d17a069bc9a2f859e782770dd449f8225f90259c630e18b7181bd3494bc95bc163577da7956a41228b378a69a392701f5ad202eadb92a415d9d9d92c89987ab6fa8e248b24a410dbd6f4e12e48ee695f921a5d5bf94e9e2f36fb04f3caad590782d860d7d930a4a44642298b60dda76d8c43ae1695fef4feb7e3795ade7026ba98fb3d8e217b5602225c952711326f407126f56a5e98069cbdb2ea214434a47480fdebe1080c65a63239d52fe35b77a4380b4d7123e564f09369eb2b76b40eb94fd42a6f515282829fc250d7d585ee3ee7568d662adbbdfc0a3ab9531008fd8d17326c39b66ffd93d9551d5cb1852fcf89a1df19424f3c07155e14e96dcc9fc879c0adba65b25dfe7d8178c22b8b134251ef390485081a4febaaf3a445b9e48caf3658c0895a674a0921644bf481ade3515cea3248d095040c70ac5e1244994831695ac8bf390180f133cb500da7fd61bc0862e6321eef935337d0235914b15a4aa029a511e765b501815511b899df767ef9f929eba51a56349b99a94a8b5b565e951aec15cad15907e989c75ea23a4988693f549eb21991501000000eccf898e1c4fdbac4101d4d7f91cc6b058a94354b2b802ffcbb7f67f12a32d0911a195dddd3b0a073507ad07a6afaf4954e9eb6f8922a1c0af1f9228d1d72749d468887e3fc57397832938b8c3bb3f8220102a527006dccfa1e0f3a2e0b29fc21191bc85dc850c063190410341cbf3f9b6c79bc694b41b6d745034fafaa068a4d2aae8412014350a799043802f8a4af1f4419889ad4a91824f10480ea1c921b490dea02e2ead9a1acd20201cf38bd08bd721147ad5d4288770cc070847cf00e10816201c1f877014fb187a1120f4aa118e2ba2999a025d6e10d920a2216ad514a80ac73c00018423287acd08c7ecad7c17bd56f02c24c5f3102ad25791c23517aedda022fd0070ed858af401c03514d760a8487fe45253608865e26b08473046387a2da1896709592a183a567c8a70f4521e4538822afe148e9fe2c3701447c296c8a8e552539f8bc965e44b2ea470043dd3eb70cca507c3d123bd281c410f1c85a337fa957004c1574d7933a3543882a8107c7daf8577345347332f462e6898a1054825c462d3af15e1e88da08a707cb1e34f118ea24ac78f221c55faa85f2b1dff291c57faa85f22ca89139e63340ba127fa263c2b4145fa1dae9570ed45a67c2e6138f2b9887c2e2fd3abf422bd5a0fb65ed4fa513882d79ba95af885631ebd8e5f8733bd8623d8b1a7712ea5a885b77e05a6093eaae81fcf26f9af07456d210f54c8d7fa70b4d156ddab35154242859084d4072ad29797fc406cf4fb1aa661541cf951fa487d33f544ab8ad145af3fc6e8f547d9fa58f5444511fda21f419f1f457afd4fec35fb1a8e3b481767b986e9d70d3cfb366820df4c4d8133955553606b247c91d0c4351794b8c60212d754c0731252a42fe2790b52a43fe2b90b52048314e97b78168314e97f3c93418af437d7402045fae00cf7f4c156a52fb77046fb1a2ec0cbc8e0492aeebd611b6823183518dc0742515cc88374e91745e5a7f8b355395cf16aaeb966e9bad24571501818fc248e13d179dfcbaf9dd692ba1b0465b16eedd8729ff1e7bb6bdcc77f4bf776ee0da90eba5ae1cb293679598e8b67e88c9d73ce8945b6ca7ef9071c1383bf64eaaeb5a659a788fcee9340c7b56a4fb8625bed0809a77d39f3ac6b74c39dabfa5aae6af7d28be71e2dd0ab96815eef94a2dd9ecbd766776ea19d759298d052b27cf66e2e62b470a48bfb38ed207e0304fa3cffe90ff11ba127c1cf08853b3e3eb9fc1cf7f73beee3777edc767cefbdf6e3f562bb9fd39f799ef37c5a6b1f9e0f07c7f39ffeef4b9e5052f1fbadf5f75bb57728d31f75e9fdf8b7cef6def6d9c61bde1e3f97abbd5ab6e12c6b9f6178f7f1ce6172e1bc7334674885c81cbda1227dfaf8b9cff8efe7d77877030f3f97b57b33e65b65a768df500387b4c7a52ddaca5ac61fc7ddc4732050fcd0583dd12135144661f5864bf5e1e505074c85a93fcc5d63284791c8a1391408ddf445395efba7bced4789532f9747172b28cf8f3152a11fa50bf4a3cc01e1936cf9bcfc149265c44d9e6bd63b8cb386e15d6c62abee05ed1b648d195a1fd8e2e0587c2d0e1818fb434c8ccd3163672ccbded4d8955df51e77dbd6f5016ffbf2627be5f646b6ad0bb5bc2a91771d82b5db657972da3d2e826c89259698e13d373a41a76f51d0e9ef1474fa7a059dfed7824edfc3a51447ed0531e8f43d7e8304de0c295b8c5a0d3a7d296918b59a4e6b0d3c49454e54bb28c4eb0b0453596dd7d49c9c2a64d718ad314de33909c9826a4172418af4bb2f8ca1d3cf962841a7ffe172b2d8bcdfeaeae335c70c7dcdab8e15fdcd6b102cfa1d5e5b1ca7a6dedcd46d5757e5b8961415f2bc64d95ab4979c0489fc8ae6420fafd2c369e7a6f6f0d93f2ea5a83ffdf5379752fc42494579dadfe152daaef704fafefa9bc6e50e67b786d737ad75caca8525f566cb6526a22e719f737299cb6feddf3ceda45b75a9d5b5da49ef9d3a739b9f9bda56d9fc9cb4977653d3e45669db6bf9f16bf9b7907bfcdae7979d7b94ade2c2152f73f9f70db2e7d0fec09a755957ce5f92dc966cd505f70db28716099b63ebae6133dce12fa934f0eafdb96da09d02f38456f92ee58e1df65fa35628f46ad5947e792dcc3dfedf2a6cfbe426c639888ed5cc6be519366ad59476c3358e706e9d41e6b45f6bc37b339f251867d504a49c4e1b539d909cd06662a8b81055bc09cdb00c2375f939084dd9988bee47159d1f4dbc1f453c50ef63867920d8f9ef4431b4311bcbe1cd13285a525409acc17b2153aa86e2ba1f45ba3c9129bbb1dc16fbf852db359e83bc18734c5581d878ed365653390979a2df854e3f8ba1d30781e51966374eefe539099942dff29c85c922488e757a1ab310253afd4e73e9f4b3f6d2e96758183cfc1bcffa4411b59c2df8479c99ba7c3b5be6e49506b13058a7b44f9339ad0fbc5a3f50770ddaf3a43df0ac7dd9179db276b88a272d294aa44b9c0c932934dc09053769cd616d0eaf3ed7426b0f34d265ee796ada67eef35b3ea5a8fdb66bd8be9fe3a4a5ddf63268c55d5294a5a81d8e363a2753b46dabb8dbf1152b8e64c15febb370752ec302f524a3a5b3f66ce5327ef92792654e6969c76d9f76abb64d6f5bbd733e97b1766dc55b96efaed37ea7cbdfb265bf9eaf31f7a34a7e12fc8c1dda8f2b9d970a7d62b36587a1d714b750ca943e414f4fa0b3eddf6d03ed9ae31e665e93851ad6b4f7ba36af7d7ce7738f399cf175c178dbcfacd6dcce9b8cc56265dce3adca8f35af7d26141313c373908cb5970e0e4742e8f473def6b56d0355d54060be4c97e9325db46dabec6fdb06aa6bb2c7bca67b8d73bce6e56774af5f356563b365d49a2ce8d331f472804b877aaaf166101b1bb5664b4e42b2b039d4824ca18fc391f671d4babd86d8d6eebb5903b91a061b6d0c8795075e85758ebb7a5619ab37dc21f3315b1c34108ae241c638296336367d4c1c1cfca8d10cd22508c60a2f5100b930e133c4882e7f1241a63eb13902c96249205bea9d3e4c981f7e9c39bafc3903c9b2bf657b94fe71aebe1fa78e2e5928cf14e2236f17bd7c4ec4679f397b1ef822fc2250f4a3e740a39f3b072c1a7d67ab46a3f9038b5c2e170d27bbbc9caead32cbbbe9f4b5970ce3c5f40ca320e87945e4234653e8b4ee606f9a8f7ad0ce7b3cfe190dc14742982ce85f3eea21a9f885e3084787e3c8c70ec7d18f514ea7af8da3d7ebf56ab57e34843cd11f15d1e98fa3233afd911346ad51ab4a2ae2b47f40209ccdc7f8d63ae7fc604c73b03ddf9c437cebe70aa22e3dd6472fdb08a033b230c782c8acada0fa30bc6badbd3cc3eecd1e0f047691fdb900410f13f850c10f1720a1c900c856655b6535c7796c98fddb06a8f7fea6750eb26ddc4ee9cebd7e8ed33c3cee65d04ffbfbfb0be5d6ae0dd96db77022a1cd9c99c36d2f83da9007adbfadd2e18a67b5c516eb4d6fe104f2e2fe7ab850becddfd9aa9cedbc302c6d0d8966c771959fe8ac5cac28b6f213b7f2136c92555e922b0f35bee9ca9fdb35bcca4df48c4b29e5dc35bc5e2727d95b573ed28974760ddb2b37ed1ab9d75979e9fb74e5244fe5e0a7f211a8725128a42b0f8944ba72d068a42bff80a0aedc4322e9cabf52e59ec9a42befec1ab657de919818d195efde713923e33bf273b30326760ddbb9e79e0b4974e5da84095d39f7af2bdf38d7956b61e5b9a4f2ccc444578e4f4e74e5f7c4093d516ce75074e5551475e5f474baf3a2b029449413272625213f75f86fb55534aa13ccd2a5815091ee205d9dfbba559c0d9674759cdff21da4ab5b7ba9900fe76b01e0e556a19e83e1a5bcdc2a19292b64ea65d009782bbef20bd8ae42050cdd2f0cafc67b3d37e220102a52217d7bbc55db077ca042fafcaa036fdeaf7cefa0d2a70e2a95efa0f219f289513104e4642508147993d8dd78abf4f71c96b02dfbc77750e975e7203678abf6470815a9e849fe3384a2ea53f15347ad5cbfeadfe127a6f96708cbd33f7e621f219f51aba6be4f38664f68e2bf5608083dd127e1e3ec243cf4da3a1c6d74fd21d8ec5446810909f8511aa1801f251116f0630d0cf8f145037e4cf96292054df1a3c442afdf002eeb69e419c017c0653d995e013c015cd613e9f3199732a55f27e28fb7e3ac3d50c404942c1facef1f3db77908167ae5c0db3f865e21202f83a2f891d38b846f2a913e9e0ff8f1ccc04f7c0b7ef220debd0a37f910ef3c0b5ef22eb8c84d9ded4fb6555ffd78ed54a361a3535edb7d259cc57778e84db8ca771cf427bcc59fe033bcc85d3c0aa7e13f9eafff7129533ea1dc2a4f9d92769ff7fcf735c5a3fab67e19d4ee0f01a1a8d08ba2464f3fb44f6cd568c4adc904d3301d4e21b4d64fd1db05858ad3872648b8ec29f8f879a1d357893e42284a873ca87c6214b59ffe6708c956edfdf9a8885444e154620eb95f8b7f3d6c20f9ff0f87a2b490d6fa2345a25220ac7a7af123cde9f5690e8a82f195ae56fc4859a91f69102a7ea437293f522164fc485b01f891f60000ea47eaa3d7a73768ea738dd48791e218e90fbdfecc4153df3875cc20c629c4387b8cd3471fe78f7122d15133fc38b1806af1e3d402e8c7c905951f67187a2af4e31c038b1fa9083a0d3f4e2bf4fa13886471314a25fa28853c80a63cac01d0948734ca1f48f4faf3866411bf05e5c7390296921f27109d1fe70b4c7e9c2de875a6e0e4c789827ee2c7598231c6e86254c1f2a308a86f2634f5e15448d7fe6b69fcc3c181a7fdf8b5be1ee1874345fa6109e023807ff1b96aead3c3d10bc311fc6235f5899d42145f6ce56bf96231be580d9f291c57e87b5835056289b04658207d8faba640a41074e970043db19a02c5b4c8131b4038821f989a0ac1d413fd1d8e1e4b38829f564d8558ae9a0ab5ea89e505d042c0bf08677c5c3a7c6235157ab16a4a34534fae9a12d5f81ac27185001f231c5570f89670140bf02b9f98011ec52776803f7d62397c18d2f89170046d789170f46e78134bf5a570cc037812c8258007c311a40f8ad59408a6a6462e95d5bf70f466bc06c56a88d1f25af87c9cfd53fcddaa1de4107df477ab462f778651d1069e2a85e8e7732938f8a2a00884a1c61a7afd173205ced41199cabe9ef4fa27891af9fa2912157efd161275025b75bf942c28befe942891af7f252a5a86dd30040d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d8d46a3d16834b8661ea86a1a61c7a1ac81371f7320db3941f444bdf766cad2fb3589992cc318639cdf568c71fe9a73027ce00c639b22b03823505862bc00c00a8c196840a556bcb54f5f24aac5dba73e501c12c5e26d765383f822225129312e4e2950a0a0a0a0ac6ec0c2c9810200667deda5a63a2ef5546b08b51731c673c13c54601e2a321e39e78f6bb422e715112b4d09cd260537e9a022cbb42a823767cc74838aa617ce4587d2901cab6e26c54d302f27fe84cb0a9f3360f04059e172068a8b0f4e6fadf50c0b37b99486c894facf473923d7e866c41aad66ea8974f227a4308413f211fa51f2897d9030f9b84c62f0e046319265c5d55af3d8bbeb745d27c4cdcdeeba8ed7e97466562c9c24069329264cbcf6a3c6c269995c86c460a72058ac540aa51be9a0228bc4f3bc551fe9a0e20c8a9b5c86c46032c5641221c5907e20e51819b5463a48483c1c5e0c154fa1f7717d7e988830753ceff38c727c738631585eb4843748f033585e049d96afafdd6025fa5163b56e5034f0520cf69229f535ce6804c2e0f881c4c24733f4c5e86694a3eb2cffe4fc48117e5c46b0f1604a3f7a301fd7c785a263b5f260781fcbc3ea75b4a2a2c7b34241d181c247396668e02697d290524ca678be7a3e241209341a0531cac14733a12ed4b97c5c2c9c9af260707af51e0637b94c3826563d49d48b139f3fd87cab2368fd7d7dfd7d9dc9a143c30922cb66e0d345032b3c2af884f1f04071d33b2b1d4178ae7a1222565d7afd4f112b14209b14209b13c8e614b24121b24921b239f105e8f0a5e035f751f057e137549e043f4325dc61df73a128925e1fe56709256cf11ca861782df0cf162fdaaa16e18a675bd81a365431dae2e52ba35da332da38d4eec2bae053a688cf812088624503278991ace0242f99929a010a39dc8ffa0583e307fd637733ca414fd5b4aaa73a6384191b92986441f9fa25d3eae39a19cda080e0e949299eb455294e28fe8462fcb85ebd7a302828618d8a56cf2df8c80c1fc941477450b14ed70c4e3d79305906a32234d122e60a4c22a17ca98492f228a514bc46c5a350f19d584d8d663c971b1485f2f5bd171e28dca4c394c24d41ccd414e19871549478984c22222b22561f14fc93730a3fae998f6b26074d99748cac88589188e168a3a3fc7cac4239c14753cc588b30e1a3187e5ca357490cbdbe899528c247fa629a21cdcc7c88ab7c4633a52ef4fa9f69a5d2194d2bd30aeca3693532433285157dc9562658990ddac3891ea60dca19600858855518b572ce1b4a6bb5f65e8ae7e30ec0a060637ae4bcc180932652d26a2fce34a759db9a1b37c315afc27a05661ff3aac5f51ae6d510e6ee381bce86b3e970de9c365e67d3d974369f27cb341c63da6c18e895ca937db97bd85b856d8ba2645e557be590bc6ab55a3b5a2aadfe498036c3b6680e5a16a7db160e3e9f0fc8d2bcaa27aaaa92a5e69a75d0939d35cf23140a8da808088a442270823c6f341a6d9595b2bebc97cb2b52b537aff22aafb090573a5654a4f4b98dd372765fb270fad64f0988e0f518c26b0540805c61ce6969b6535b5b29a594524ac79ae9cc35c4c430311d31215dbe8c75090381208e19a2c533571064acac547badb5a4202a52ac0626e9407ad5936ac274150e37949c18792b5d2b0b83525ff554ffeddb1999e22426de5625402722a98b0a5764c8b881a2b21c1c242a838214eb86525fa670f4ea7355895e3b12275c382512c77ad2ab04b3d9bf9c248664868a95140341b084839e44c2124c0d2e102772d2ee64da38e152a6a8b801b29e35f05cca53963b02e88c111a885e700f798d49a7848fc4609fcfbb7056a5995028f492a64a302f370dda492ec962fadabde8a5a64c3a9809b755d8d6fc6bbdbbbdf7150141bd77d7e9baae848fe4d453fd113ee29229f533286439df8fd9eb8645c24930982d66bb201d0cd47924319e0ed6c14c30bcae23f2a6ac5da703d3b1084727e1a4ce0bc90ff454454292182ad60ed66b07eb82d054094709a62bc190c4008124662447b298f697606aea763f7a707a7d8e248624c6c4711d189e088728e6935eed300c152b9d7352110e2a56910fa2172ad68c44cf3f723e8860442ff5347659aca648623c98aefdd8c14abc64829748626aaa6e6f49623a92b00433623391cc623b8a5e68d05e82297db9c36f32a9b2b17652388e14411a92457cac3efac8f9506295724692184bad91237afd8ee825f791244677b0d24dafbf95604a38221c2afa39c68a0cfeea61f6606d80274a705c47c254416c9855d209e22929c85a1024a2828ad24435a90b1195a7b456ca7750e9739a7874d25a5fba38c6a1f6d146b7d9184345649b92e6bc6dc8b20627c771d2536dba725eef54a6ac1408c0124b2cd16def74b237870841ed64210a5123f7b1873e432b53bc6b29b5f66ba574ee60124eea7d54409e0f88762953ae4c9181f7f180b64a24ffc00b4d49b52a14a2548b4494827404924aa64a4dd3a475a38d9eb58e1e46683beb104b597588b5d6f3807863eef4873766189ea594ae280d35958187cbe0d1505e53d68d36bac459d6364e8bb6a8138944a28e2712893ecfe75a9188ce914e52f14e1ea394523a87cc21d4924008807d7aa0e519b63d67670665b866525a2e7374d65a7be635dd5bba71a01dbfa7571ebafd644acd6887ebe46acef80d01bad5e9dbba5fdb34ee6b1ab769add332645c9634153afdababa0b1a0b5a0b9d0e993bed0e977c2d0290da35e6296e1d22ed23ea2cf5b053ea7c98d76a3dac170b4d13f3f7f249a372dd5a7a6b258d5070e8e1e42b21882d444e823e82534410a9385b669d89e853ca04ad0213674c80d171b171f5e5e6a0c0c8c8e555d6936ab1973a85097af4916ede56f535acd370749f1fb7ef31102dfcf70dca16f4f8adff71d2e25fd386db3599594c65c4913bc69d9cdd5e27eeb7715e875db30d02bc675ab36cc01d15a5e3be640463bbe5ae399a63f6f95f69c9c94767bbfdc2aa9fdfe19014dfbad95b4ab698f770d2db43aa86857abec6bf6b7bb8197fd735929cb4afb06d9b3cf768d2cb44158161529bd17d73b737671b5391e8b9593c3aa29eb79f3457dda568feb523be635f92f0f3d564d6924bc96fee1dd04d131ce18bc35e3f3e29993735a7a886ee9966ee9966ee91e349573b26ee9966ee9966ee956ceb1b19c636339e7d858cec13c724e4ecec9b95ca7e52de7d413fd6a2bc79372dd43e35c1bd49c5353ba889c233a7d9d7374cbdaab33ae750faed33ebafed1e9679dd3e9cacb3a9db9526a4373cedcaaa95b370ad94f243c2b44ebc6e646b7648a0e30c659966518675407decc54349c6d36f39cb52da35ae3590f356de372cd3620ded7366969c7bdc6695b956959ad3826ae566bcbb6adca64e06d33def69cd6f8f5bd4f8df0aedc1ab73de335f9b79cd958c6f664ab70cea145f0acb681ed4d634b81beba4d83ebba55b92cd31aaf2772d6b6ec84a66d5c964fecdd75b26d9b73ce79e79c77cefbf53e77ef5569bc267fe55cd61aa7fddabb6d8fb2555bb8e279bd5a21f4446d2ce76424684af7e088907aab6ea85b7bdbb6edb32ccb1e65ab323d65cab6bb296957b7eaa2745dc7dbbbc358cb426ce3b9244bf69885317eb1e674169f39a7080f549972bfa33b2e67e0785a7fb37e80769d0cffbc2195e89977efcdbe728cf3df7bf3cba07ce7607b9665d264ab708859de7cee242c91959a6c55f69c0a8925b8916c15c624293152b65fb155559bd9cf971b37b155189b58715764165b85438d73a03395add23814b5699c5b6bae1bd738bab5f5a0229d3b736e06dd62df9d7179b2557b9fc88cabec1af7398e6b61d282caa0ba0745f100ea96c6b13c3fcf610fa006764d2573dd8306ed38d42d8c8356a7b7a46406d00c9b5b13131a340d3be74be5e9be8b9bfdac27b60ae317bbc60ded0b1b3e3b0a5f29de47ed1ab667cfa5680f29f7536c5536dae8249f18ce13a7c5e12c0365928ec31a85ec6518bba0c70b1603eb01cb304e42661f507882e7841ca2289a50b18ab9ea1dd6fb2212f5e1bf1f922da011eaf3f7378902fdfd2a51a1bfdfc91630932d229345fd3bfa51eba14ca93f5b7eb2a862cfef51b109deec79ca53e741b34504678b8ac94264b6a88492052553668b8bc9a2bee83d50efc0defd281cad063a3f6f286aafbd480c8014eb83388d29d6ff700348b1be872f00a562fbfa2ab3454a16dcd777315be464a17f7b2f1c29f79d4aaff7573a3fdefe75ba70eca177dff915ef47dbbf70bc3fae78a10c471b5746ed64df7c9c7dcb214823c8237a7d4d513c88ddcbf4de1afc12873d883376dc9007b1dbf0f5652e32dfdcdcfc08c112b66ddb7bcfd48d2cc31eee743adfe9ecd8b1c3b385172c06f60386051813b0908575881560d85a89849aca9a96efb5299cc5b8b2ac6959cb2bd7a5691b8e796ec3356ae8a202d16d558d5793dd0c635ca50a1108ef737d1ee9f1aefee86ee7503f204021d1c8fb3af831dd58909191919191919191919191919191919191919191919191919191919191919191d96436994de6d69a3ce79cac4a2da519c6ba67e111d4626b81e8c2cddcaaad036fe462b55afb7d1b24954ca01b38a9f3e02813799eefb31f3fb7f1dea34e9771fbe1b8efcb3e3bfb641fcfe72941240a7533eb3400e2529e3add8ff8743c9717032400e1e28470433e2eb6b7e7f3f97c5ff649c2c7c348f07406227b2ecfe725c1fb90e7435be599d3fbf97dd9c7d50942c598ca4b8228fb4ef7f6b34e6727ed81dae8f08706461821030d844ca3dccfede79c3336da023963e3b946eec0e68c4dc40ce3d9ad080876d931ed615e7bad80b5d9b95a9337edb579f1168ef5460e77d408d4bf3fbfc4653b3bb677622e692ec2569962eb07a84cb1dc9496ce392711f729ae7805b11508a6a4a4a4a444ccb98853ce446846d06c36236c361cc7719a773adcfbf4a77994703e384e6fad7549498988c848e83f4462c2c48360462f18ec24eedd75baae13e2e666775dc7eb743a2525252653064152a9d4a24549d789959e9b9fe77925252520482a9588e81cc1f33ecff77d2525251e4f186ada07040a8944226e5472027bc16041623198c7535252d2e9789ffef486b13881bd60b0dd75f9f47a9d440f8fbd711bf729026403b201d9846c4436221b910dfe697fe2098a4e4e9c3861c594929f9f62f21c08829ab619c1a6e44d3010cceb550282449048a40c3b957ca95452522a41294181c14c4a4a421bf237413222622a91c0912804fa783eafd36dcd6d0199fda8a44a9bcaaa9c2a1a0100000000f316000020100c86c362519686713c7e140012668c54665c3817c89218865110044114648c31840082803186203443320a00a587044ceb69105cf22f5ab962ad4ffb059d455a5e97108ed417e29b5dad11b6ed0effd7a9a2a4f1b9ee9c308cfb474eac23332acdb7e148d395b77f0db6895293689355585972b0e1406e78a2f90d86184bcfc932386ff289638d01f88f077fbc5c40959b0f9eb4c940bc7592088652f57ce45ed1bc2dd4d8afcc03af34a7ecd4d33d8c31bc6bab3e3af20acbd0ef47f57c0d20b998ea39fd20056d888edc21ecbc136a5edb69f2be63f0f350f3a2cf62f5b82a85088a8455413eb18f2f19c8daf376def314add4a6c18cb6f2f9d4b2c2c2415596e021c8b534972777cf0d3c9909e53ddf8917fd1f9e3ec5234e0631e83ddf8bb918a0fdf9e562bf1eacf19ea8db32ec82cf5bb6c192a1ab5160dca8f19ec21c7468970d89015904a3e6efe6d8259f1f065ca7e5aa95d5d10c421b88f8de966b13eb4f6cb2c57ce4a11f150ac8fe6406cbd7027e4ee19622a3db173d88d02e94b2e0c78f01b6b47f9e9984da6ad37c265fe7210715626facc038c7fd0cbd5daf40710c6e16fda9fc18b79d2993900a215459fd0643b290b5ad509815015d130b52c92f24615493a130ce91f6bca04d073886482e575244a083b6b83350c5ed092c9f031f05f5dacb3174a001685732aa02ecc22da68fb8a7a6a09df05851831680737abf6063cb71b702f21b4b99e2f0df21b266858f248373e2687646e3db0b4d2429d488a2e7f82f1c4232a5a6fd15fdd352229fd5d80e3ce256f4e9549be97ec058b72e74d5e8ab64c4fc2b16d9401a7b5dabef4a64578d5eeacda98e1a886479d0eb68c46f340bb50f1efefd5f79f346ff7fcab3b04d0cd88f18c3ef59ff2865ca5fba786afe21f834419de4e22a852dc1dccd0ac127388d1edba565b3e9b130e32e87ffb57d0e01ecb36974346d2aea59951622a13e10365e45821952ca35637d345d080feca82937bef94d92fe8cfd18627f5b8ff7f9e5b08a09020fbf7e267dacef3fe82ed74e1076f7ccbb721f7f99bb0499496fcb920a1d4effe0b4770754c09b577ed2b481a4867dff876ee2eb287170cfe6c2b054ebc2a1992c25e3e91e0f38e1927aad83b3a504709d6ab8409ce1cd4baa155d4955a1740a41e0f788716af56aa3bf17e93d60358912f77ded64e007923516162a898a662d98ec06dd93c27d5fba814f730a11d57f318276144a32b25b0b224046bd711cc1f62efabbee52bd99d9dad484d285d0e045ff183889a174196557947fc5c4f7c6bfcf304a3e58af589c517ab9c2a4770e3db027cf2eb1bc038fde02e7f171bd1acfbff621944e94fade4c2f118c733a261a5d135146a5233788f5b97ae71cb3aa55d44697a915dac5d61120b27c99075ee9bf8862b67155d12bdd2e05253b01630fe6c95d3a073d04e3fb3f0b92913745f347de53c6bbf4a1b2183c43076f5986e9f9cb5b11d109bf1c029bf09c7ef12afc19f83c13706e98fe2e2d9f0e832bb2cda18b29f8de3a793fe9980e1cd1d1e2be5fad8ce0261f23866bcf0a22a3c075f5946b4a71ddac18044e18c8916f2f250edd94c2737ee1bdc6c273c876213659a699ac256c0a539e8fca77fff271f5ade1acb98b36293f19c5a2d6d912109765428a4b69364e070b9987b66653f9e92c3c2cdcc973373e2fc24aad0d2da97bbc2e7a1dce4c36c7b114e1400d1fc692bb6cfbc150c89f3132f41e9f34e069c7a93e1716d7869a6db69e259ded437ddfd438531a5a7d3eaf599f8922dfc54401eb7e306155dbffbe75c40c3eb3eb5222df8598dddf1962e808b47c99ea4ffea3fecd7e16d931c7ce773036ee8f47bf2ce0906f4bb13ffd313eedab4ec8f62162926907ba76ce2ac2b6251f938bd6a5dc53ca3539bbc218dcfe0d04108a6441648f40ecfa067c13c71cadf234e81ec1e85d0114dc658ed21f20688dfc8b70d560f0da76d44d7959446362aca78fbb098ecf8b1efc5d6612b88e03608840c863a2c882be33d79f8a9d5c5481cbb2160de69cff3ff1a950b639f93af5cc62ece0b784a79f6d3b67110e202209891ac00a4531d40bdf037664a808fdf10a8550bf2b112f365dffb5d323afb047c600016326363dbccea2c2ee8b785f81227e3081ca64a29f43cceb6609c050b4d4c784e70c87462c49633503ec7704a8ef4eede8656b1c11a90003c181d4d1cf2817faab2ad5228388c8c58cab24f3713cadbeda25df8602c24ff8b7b7abc8f0badb2564e5387a2a1d0b1ff2dd1b160dd22eec03c71ce0269e9e8480eafac1210ddec65783f79b1a97aba6253bd08b045be10d891ddb5bb7d848d62b5c2ae6914b11b33cabe8d942b1e5a81927b2c0b781c10f81e440351e3129cb4282ad3186904e0715eeddd57c3adc11f5c478181359d821731ea6fb05fa909e0ac13017c14f6229b977116c92aa6ae82a56230f1973b87c824f70f45bf68b2fcc09ef817a09adc24647b2ac969b584df11edc3530c393199a0253ac0972e702e4f30f533294ea663752aa4492d11f1ba99bafa2b0c62efe8b9f6168af73b2be60ddd44f25ab432d7ebc277b3b248777e9af33ebf5aa2339bcca73ea8ea3a91491c55ad2bec40ba0811e9525a7db0b8c87edb7484640d26fef8b803c51d91a20c1620441c10c5bad468e31282b0de1fc1f52218e70ef2bc5bd09d88645a93b7c20578050dc22fb30a42e21d24a45a18178c1f8fc262dfee9bdb58db834f14d7b1b88e3da5edeae597959c8ec9b8a2d21a459de7ef510adb4985564baeb48dbdb670c49fbe6a60fab97ac3a7eafad39ae11eb7512729d98d74cbf5bd14555e9cda0ba9a4e1452770d296b8c1f82a262604227dc887127a1f4de86952e8a861d8de846d16c9028f1b96919b099a06580eec0c4edbc6e9a1c1202db87509cb85029d117a9e55d80f5e74ac18a2aee8fe33de2a99a98483ea84dfc560da7a3bfb73c173b43fb8516d7da7786865b7c571ed3b4f91d4e007c87a8f77b3a21e9d28628be3ac214474f5d43d41951642ca3e2af1b157cfc8522647e3bb8998a4f26991bf041329b6e56514b047f591cce4782b63dcb0aa1e0d2472fb780080aa07f8dcfdf8843d815bedde7be15b4505f2f806522fea4bfd0a43efb9ebdd2356232abec7e738dc1b3152ad770290e4f81fe1911bb2556acea7a1a4c23d03f18684afa60b3a3c8e97a0d4b87b6b43af2a665807fea3e33f7aa56a5198490fce0862e247f509c8210cc7ea2236710185d3a7b1fc439d4a990369f1197c8d8fd092675cf8914a7fcb07a5814085acaaca483257ec4f4660db39f3052aa021d86374d324e97b9b25943b749c02ed9a5d7521f8f075c319706ec0b2bd9197ca03b54ffb951d1decb3af6b428311c54208a895c5d260549c7b25e706b154a02cc9123209cc9e7b94379433741f57b750f4a9617d2319f2c34e884024cd891b9d6d0a7502ed3cba51ce1e71ed43019c6832e8da4b2588d6ac9960ed0201e58ab9e61c8884db8233b895f72fd1720cb344c0ae55e947a66ed017720f3cb9c29e9dfcfb92ecd47d5d1ee9fbd9d7525f60a566cec1f4567a63d0bba33cf3e77e60b108a09ca7b8f18bad018163beaef65a24685ccb0c432c517a2e677b13662970931f183bfc3c105b56abe27097bd55e45ab5a1a0b1513039f4eebf783f4d816bb03b2c5ced5c87e90d6828adde398ccd18e390d9e94c581f5fcb98fc7340f757f0222db405471e893f0a531c7cb70dfff8b76352e547028ab4b97747bb9878000aedcedcf32f1768a3c85058c17c46c1018ebfc3efb65e2ac9a556ebac051c36fb7c9f3c6c7518907b5c63323920c0e2d373531946521296d942a2a83a52d48492a31ae7f09e79e585c1e676eac31622063040d082e949228db73dcdc58cc218ba9a076d0b92cbb690cda0cd6fcacc440a389f97a2c10066347004d829dc196857a446709038a49e7cf3a3fcca271b3687be3d2a266d0a6f895c1585ae4c001c856c414b7c17e2bc56074c5774a26c52a2091f98d6e045cba3d425aceca3d5a8c1b76b94778abe326ece9a00dae07ebd51c9ff18d804bb797905eb4f2e27c046e745d847d227a41e533724fe816eeb50b7ec25b20bbf5e4dfcae86c6fefb5b0a307166f63382ba70721e3b221ffde620fe48e125cafaf08851e07101c23ac6803e78428d0599d60f246a6f251bffd0d07270602f7cdfa31d4c68a37e59412d44afcdd9c0fda6f752d189282ae62ae8a653aa3a57ee3740fb6c1f2d49b7ee77bc9243d0643b6c8f90d5807b71e05ce5978a02027130a630a0c99ad097cc4f0eb9af604fb1eaf6bbaca409f3e29effb0e65e22a78e4a00d1e2ab6154c1c1ea2e0798401e444191ff1517ddffc0736fffb342e59f42cff6c6d3b5f20d71143ac1ec0e5edfb7e93af66b6a1045f40e57caf959493793cb125d25305ad789d3ebe9aab0b3691da524e059a52482f850ef4e3f50def4713f79ce49e6acf0603b5efca5657c039be5b5cacafff3ebaa5996c701b8d7e93908db564caca139b62179924db63d9be4b8bfccfe9e6847c000186c2a31d99b208ce7c495265ede632b72acc1b83479928d1d6dcbce1f4aa8c9c3bb6ef612e6fd9e1a222d977cfd12c3f4f36db373fecc3d61f69715540f9ae1f6bd3b1ef076ef2bb3b39afbad8c87e4259d000ea1bc7cbab12b8b78243dfb55e12607f37b16b39db8343a133cb9972e110d16c4726ae66ed618d790ec7d7fdd9a267b59ca030bb8fb25a167d4d0cfc74a2bab95bf7da67ce9eaac38ab05cd1e745d843bc5f914fc19289c97056d061f3a0a0740a092a0d02f667f72edc956e37f001e0c4c0f3f9fb61f1de0f285f78c5e2c8705a9c93306d35d5187e6af05e19735f3f15c51ad5c028398728d0530e67f2fefba16b811883ecb2d153bc371e4e1ef33e9ccf7ba4e23589ed5b903f3a5094dacce2dbdbfe86bade13c3dee7ecd1868a820024b00e385dbef781c77ff3e2171aed4a56601b630efc475e721f3dfc2359a159551ed3f7c06b1601908e9ebe9f720c81a49afe8762220735c80070974d50894308d3f73d84006d3a60fa2c2848f748e6a82ee404e7db4698ce82f264b1ab767f6c9ec3fbf191b4b5610faef3370f3021dd1e92ecf5ef43581b5fefb4366e7ffe7da3cd17fc538ad863a506860f1240a25f47822be6d6d2688042b3812194d95d09b3c6a18bcf60a96c214b96c3e852f964b48fb14ec27e0eda24ddb981e38c5023fc1983a8bbfe059f4fc2dd6baad9a4152b8b69b3c1c808baae488db4c94161871a01ae69d2ca786dbfb120e593cd91349980870933da6c56a2ea948e85a9b0b963bae10a8899d823c5b6737037020201266ec185be902386747a8ccd46deba335161231345cc34c96067538206c1d175649cb3e9d90028f080b6aa1457e41d30c3a98ac2533f7051674c5170314fad5644a1e20865ac48db2bde9b0ecbc9c8b1a21b855b7ced1bb8285524ad401fe07a7061c275a5f6518f1413407fbba49332b6cc6703c9c727c8682ef952c08b9e71a4d72306a17c9f7c09f4d962a87616b107fa40570712751c4bc1c9c16ecdd81aebcf86c2000c2064320e612ca10a24a4c59905512c2a9803f76c3089c2b223f87e91d897d7cd28bc4baf31daf6df00b6e3019de05b9c545b0182e47c0a26a64497b530afcfc670d957c1837f36e6806c0cd62d424930e6369e66127b290b4ab8d86131d146357d1e02e468162c1a95e3c9a4adbbebe4be0b1ac6a8ef5e4e608ed1c632e429a88106a9996c01c7f5b8d607f4d90523865a8e4668bf9fc7e42e1542f8be0a076563839d871be8897887891be868b3161017e2bab0e7f18f5290116f2d9a38ed1c6ba7e4f6f4e7c877c16f60f359206d6a642aef1f219556a1a610b559a783986f7447e8d6e913d07256eea1c7dea8cb7d821b5d17819e2e6d701da417e6f98ddc08ddbabd04b4e29514c34778afeb22e811d3f3093ee35b42b750af5cf211b801ce4d475a5f46237a7bdc859d0dd8a6deb3d0a32a0064aa7ae6b85680d2900598db7324a0c9b2b2965d01525d18111113eb9496eb9b1845187ad1913d1a22a6221a824af82114e296e50b332fc0126ac6126858d85a60407220007500e24f1566d23eccdd4fe2e586295f082ab2b57ecef9cc9f2e30003360020cc8befcde7cc1802e8632395d2ee932f7df35b0d3a4654e1a1e152f20c29532b42d01db4a99670001e8f599932dd592a0984c57c2020abac9fec1027b0b0bfcdf1b0b184b62325a394506260b5c83c833295316a474e3cc027a06a360011af88f9805855de59ba5a9485316489e59009ccac1b197bae7a8398c18e6688039a9055c800c35d25f6a455afc1f0bc451dd6ff17003b6d7be79b220e25bf9c7669ca4b382921cbf23fa225ce48e37315b08c802b7aa2569b9c947f3f19b34ae60c00255d7c477ab6a83baccf6fdb02ca1a5a3257f812938cc09799cc5f84b06a0928d0d0bbc1571c215d9ee5f944a28c159042973167f52fa3f63c536686130aadc40d9c0f26d961f96c4c150e2d779432b984a915804adb09b81815e34cc2a444f9f4c143359d2f09fa4b73a8979d25b145a011774eadd5357838156b0761c69c2e3252a6919ab2589b37bcbc2ab0111fe188133420cb78508a0a6a4141faa005d31c2d5879e0959da81e44c159844c724fbaabdb5fd5d59c23cde4517446cd01ec21d3455108ffe83998c58fe2d83c5365fa3fc3c377fd08462e647396e68bfa628f0281749d830e047cad1d02032539a38b28ba109cd9aca8a2f647aa7e0894f08a099ae9001f1ad4f15da713328b22182b63250e4fa1130a35badbc4cf129d0ba0dc03ebb2a8fbfb53d34820ac665641fc808037a4e072e6c7fd5a1283233cf60a62082ce42235c86854538590bd1d008301cab0d2352e65b8113d4204eb6db30d194672f1cb5ffa4f470974a57a67b7a2c4133b5ed7a3cf0e400383eb0c8c11c686a3ca08bc039954a1a6683a3ce18ccc7a2b2629402003391655552a0fb8bea59dfb5b609fe8a780ac9252c48d7f6b23e2be9778f548796edca19ed2ee636fdcd6332601a38d95674b6bed2a35b78dcd1d9c4a7da22a041cae9e92e130af07c4ca872075c5efa447b9929ca75d3c6ed3f14088e44993186ea8560d3d448c1ba7da99dd434d0ff26985aeade410ceb7dc4e6e022d358bcecc981ec96a1c8e340bda3ee453d73e3b46a739a64cbe7e38c3c4acfab327e44c11df03b8e5c35f75147fd33b4127705065ed0ea6335818a7b6e1b280aa2ef9500fa6509d8b1b576aac0364b71bce85014a4911e9393f1b6510a1b1d009951a00ddd21e8c54d9ad9477e4f18817d0ec4f955657e82daece6f318e9cd750d824ecd8340ab2f038979fabeb42a0ae14284a960b3bd1e4dfc13b466d96198e19f805b09fed1f00b4000543a944ac8ffdc1c4b0af022367ab724706c588077480d50d45d42a4242ca26138be004058897820cce152e560e1128860a253ce3a0eb1339917d01a071b82718295838b692fc001269ad6515d301820ef27a333faff60fefc6a02ee1de5c04909ac5c8483bf1a770953c9091a0a7900acdbc11adb61b4bb4cb03a109070768be6bdf2300d9bbe92cf04ba1ba1ea67c696744fd5a38b51dfc85687cc4c4d10453bd52a5777b7563bbd6e992350bad424b94d2db9d3b0a918976c8bd47194d49b91b40c9af4d3e02226e1043581623a7a8007021f3b849f255113508b7b4543c0ed54650f0113d97fd8042a0b5d5480754d300a4ca0c2fc9edd0a71fc1e133f00566082881a868bcc1edf0fd48e0fc3c15dbf2d88c1a128bf860950c37f9289deba3dde4bb670c37903b2cf25288ad414dd154317cb7144d6f2b68d29c17a3b1c1047511e36aaca01967c1587eba725a4fc980d3cfa0365bea9b470b8f7ca52054a03d977044a7b01202425a8de6870cc262510cce4ba605efa6ade9a02a74e98b014c3a056048e60a6a21280d684a2ef4077250e21372fffc83507d2020ba9ecb9962f94a81d9f57ddc3baa3126c332b28428f4feb137c454aed09c96970e0292a81a246f7e3f49a1908a6b35f82315624b06e48c9930440a7696f32882a2f254724da0a248a49506a6a12cc984ab0729340a86e461e4d022fbfe4de3d4a608449e01a7014da4a25a07ceff98f25e0bc520237f7ce7110286a997aecfd64dfff76f951dee7c08d201e79ffe1e273d8bff1bdc7b430240df0de5157260164c0fb8f632f26090cee13e35b9704b4ecca7bf6d9e16e06531d007cd4d0c555b13eb9d55e3109276f3afa11732c57dc298b98cdf7a2ef718da23dce120f656f89bb206dfc99642c64f8bbca94cb2ed34ac41d4412fb7dab30f9e32a2cf55a74813e9544bf15a9c8ef8d9b0d4636b708fd1f67bf005491265a7db9cd39d07308343f6f25d0b1ab30c3421372b5ff684a163819ab8633edc9a7d41ec502cd2583092c25528ea2bef535d87b8b67a5b01c9148952260b59198f3d0c47e2d825b95c1a77ba7df2356c9f41ab5d5071ffe3bd800c8264ba6802d2ef197009b050cbdb17cf05e91fd8bb96b4b616ff4934ea62ef9d40302aca455eadb7266cb3bae042b882a19729c0246da2a216c9c104be80c99562a272cecb221e1f8c33802ce991cb7498eb22cf2c437cf32640759e11dd295180b85ffce726a2b232c256117254fa379ff34324973b5e61d5e5fb9bcd4bec27b0cb8add04ec81e368525de9afab09ca270533fb3fbfd2efdb8869a66439e8ce602b22c9c3bed55711950979f266761a7b7c80d56a7221e6b5ddb9d15e6d5f0b736089a9b249d1acf7acbf0e23bc2be69f7c57a5f5033e91be17e2a9f7875c09babc794cbc4f5e295a40fcf8616866394b82eca96c82982a47fabe47bd284c7590e799978cffdcdf4ac5a9f0ed5759c28b28d72a66feb8458439ee1fba538f61cfce4cc37c141e87da7d8d519060c6a76372ecebcf37742cd24e24272208bb40d0ce0e6a469cf1b2436113575082d8b49f79b23e1321ca440bc0192fb8f13d6d1527dc2b299e2f5a8d50d57f912d7024317bbee4995aa4c37d06c9f347a5912a041fcab76decc566afa70fa49a9e28ed0d90b91ffe14b942f7ed3019d9937ec900c1bc9c0390bfd0e47866b86345b8a5d51ed84107658e6a8a13b9c5bb38148ec8cc8b5a17b71ee477aefc1f5bfa267b1e43d60a6488d529e5be5cdfd286103f775e6ae3616be1436bae49adff489ca9186ca5f7cc804aa7905f67266f433a4c67a7c7debd06e618b96f80676a4d033748c3a09705bd1311c28849ab0263284ec17c60143972881c48487dd84972b76b24525eb22b35e2eed9ece87130c632fb7d87cb9044736ed71c1a311e92849e4be679c53dc7f04e9a86950a5af34a07abb8c7a4bc8c0d76a0508b7fc71f7aa8430eaa6e0f652c767b02021450517a7155c511a01165cc6105c8f232bd0f4ec34099dca263d70c3ac41b8b00a9370a7979435deaf644760068f0043c47549c46d5511b7c67a848811179ae3a5cb0cafded946129e4e44622767e729b968aa56ee28756d59c442773afdd4151f796e4bceeec305f5292a140a1768d43659188bb088c715dc76ca5cc92f40afb941f2e48095f5af5589f0be3460a2681b68b0342489ba22490c124928d865f53ae73018fd1b59a48b0f4e658748106db49acb19633e4936991952637a44844632d77c4378a12bea8c76b75369516abbe43e89bcb91c34cb20775eaf0362af28f59fa4f5e89ccce09b1cb22939b69dc46eea51933ef4b7496dbc33732d4cd3040b6f492444f7e7f22780c814a222b6f1e42dff23d0f43092a08742ec793dd744588e761d5452d6debbeec53cce481c6a5ca718dab8db08167a78b6560ae1c20c7494f09db9b2ca04454a0000b5e8ddd4c33a3534a7d9ca4a1581da83e925f89f6e1fb403752f4007dc27966e8453cb90ea883c31622c0f542ae11336d027a1af641edce918b80502d04b7475ee366a3753402c797dce37d5e1f2f701f25c6381a9552ceac229d0a815d5f1ce82006e65854cf9a63749a650a63858b42766e4d87cafa6859c1ec3b26fb5699c7201219e966bf41e200cebe145b25af2e165aa47412192b89118d843d450060eb84000be019a9c3dc63ef91d4ffb0cee7e3fa1b788b7c940c0a3cd7d9b10373fae0ca0c74703ed3422c14a6a0a076afbe430d1ab571842c89ca45d038425c01d1a661dd504cd4078554878b95dc233715f19b81ad42ccc144c886f5592203f6155d4a40b8a4004f2361004275981b0bb146db063a5603a90fd812822f72ddf38014f96dc08dc3bc3ef735a8b67168516212a1c95d05d2b79f2d96f65a493be88d931a9e8c3b960142def9096857335b21e2d93b0b48cd26919de4de05560f9a22e098414b52c70ba713a9cd432df86909709eb9f97808cb6fcb6d47205f912b8c13290ea99628056b42e209da0f6d67238022188127d722249a66473a66d86410959cba63b44e4a76ecc0ead14b4c59a3143b6fb145a14bc91c7cec276fe439d4d9c46d724b2016dd81068b82aa20d9683f693908089a490e5bff7619e2e3e8afbd813ee72169d17624df5fae611ecfb04b9aa1b5a0e3d78d4f4444a2839587495d679b54d21e760c9eb71e156526d2effdcf52999f5b6e6c2fb2f3faee0904095860f260234d55999e5291cc3ee19e25bb9110f0be222c41c35d19b33a56add543ea2f64530766e40c588eae6deb02fed2ed3b4ef46afe3af6c42c855db504b443459432802bb24b58d93658a2a150d4c4547f4c77f48e87b08be71cbdd9c2164df19cf8133f11019e8d3543bc684819fcb056fcb48e69814a36b1f5f09db75bf9ebcfbd316cb54e6f3f089f39ba1f659f463800796686ba9ae5a78c54c3a576d8d67620c475df97cb64a759efa74ee41deddbb0421ff5257b8b863576c41991f561e36da2dfa64cbfe17c54a2153c72821d40e840215f036cab624f8ce7a83943c203f55f97f6e19579ebf1cba37ed211921741e0311a9ab87991e22b0c6627ac22d2e1a080805df8a332109150d00861f2d554154e76be3ce7ce843a9a71919dc2b2c17d483f8044778e313eb218b8efbe0274c2665c49dcfe588a58c421139bf0cf70e7d2cb560c039bec0b5644cf35ab0e8376f6b25ee8b227f8baa40063499e8a5a60ae6014542216f9e45237c850b657c4f16f140fbea08631aa9231f53fdb724f2475d9c789a43986a81820d64cbee31cbd880bb917639560d4989644e836c75216ff402e208a4904ec66a9598bfe0c9c8dfa14a5e6b2bed189c970239c0d63fdf60b522e966127859a67e6fc4a3c9a039c300d30880d979e75ab0f6df7ca18a59e0d58ba6978e77c248a325f7dd510a372924413c3d278b663e8eafe3313a99c01684b0ac0553bc731d4c7601f6def54cdbbff423aaf7b8ede9995bdebe56331a4ba5290a6156d03b5c085a453f88a141c118901676d7a15b7fd0a7fe61cfc084052db0ec78adc1bf89bbc5a4bebda798419719b44cec7e64e9a517fc73e580383e8cf6380e08ed0e48e12f04940eda633ace1f6fdd3fae6e76f64b248f2ad832f867a7c262cb3bf62fabd436541a1c242ff0cdc529a32ad63f6cefcb097f5149cf829801b483c8adb5044fb6fff78e6c9516b6ba1ac4895ebb799d4179557b8b8c7bbf2214ba1254c012d5150da5fc75e1180b94568407090aae19b40084809af2e18f7d16527088f7ae76ef6376adbb253b102416c8947f67176a69874e1517dd6a5b1bd5e9719d30c17aabda0b144d93d5c40a6b177404e611a60a6007764a594b5dbd0cef6900cb79c80e9fccd980da174a9a5bf0384997c9b800ccd4c81115772da48d45934e16b4047eeb57ca4d44065735882bb844ee70bbbfdb3f2dda2d4477ce569baf208e30048303f5ab3a71294cdfbffc8f790b0ea23e0d4887b8dd1f9c78cff03c8efe786382f2c0c438a9c71beaf24e37c8a182b8c1050e993eaa6efe006d3cff70bd23e2320b016366a5b03b8a79539cdb1ede55ae736d56a42392324ac9dafa4a579057b0c28a3bc7ce84f82c54975d1ad2d0eb904034d82fb50ef7d0ad83b6fcbe1b64243eb0a82eefb5f693b5ddb28bb282c62cd9dc4cec8bb20b17e18ad35d685e519777f2d3014b6433c7ca3c26c66b2742f2d5ad03bf205f439fc62e59aa65954d376cccbe73c4aefd71200b3c4cba79bdb125f2d8b5d512c78be7e0e35744c1040c977a67d68bd0c11ef4127138de9e05f0afd843258b2f0643f2984da541c4a55e8b7e1630e97a07c5379297d459b2e712abb093f64df43475a2f3654227ec321b01e96e65bb00905610870abea817f7c435ea6365af10166aa6f9eb9d57699871a968e4a596390679f4972fa32206e94567466c2155308ebaee16438b892a078d5e25d5c24f34aba4cd2e36a735854eb5dc4cec2a066405c70b857e7206d39392058d33c8ca4610414370e3931b0915a23966919d4e15769e655e5f41890e65ee47e187d5817aaf34507dce3795712165a27a59f89978a18af95aeef45054b54cfada36e97d97ea7ae191dfdcad4f799388e4f4002e3ca9941120117f17559fe9ca4c7beb66b9a7d82ab8dfb8b8e9b286020057361d7a1da4db95c95763d272b5054a1726576900c78485eb453ba4e234d244e6e51b6f2dc89b02d079ad8a048e891ffabeb5a4c94f46ab4c70e6c390276d91a052ee62dcbc35a672ac5075ef023838dff231b568168ba332a23e3a3160d20b25c53fe3900928979df6882a6a7b488df987119f631510d23cad53d0b8deabb77272bc42f58afac29d629e6af2a061f2e6595194c50fc939609bac6b88a2099e4642429eb0700a4059a9f31d7e482005dd6538ad891d2ea90d86ef5caf3f046c2a82e8aa968ab4e3aac93be145405905aa0aee1710e45311bd2a7e22523d2c122279079338f3b8e735e058f40f175e79845ac916d38bcb0fbfb7e671996d111cdad9556a0a1522f629b3dc08b35cab31ccdab826b68a2412a85a4ec93aa5d1b9aac004210ae7eba446c7cdb402020b940199479d0dc93b62218edfc779b41b7d32f08633b6d9500129dbf0487dc16d2a40f5f2d3b8daac298a0b85606f85fb036eadc9b4a2f8dd121cd780b051169b7db9d9472d98ff03cbed283acc96e8a8a169cc17add4e70520d787214b394a0084e81780e69b0498bd4029b0debff994bd80a971eb6127a438903edf7454d1cd0a299e659116af90c197ddfa162ca410f6cbff79b41c213e913ed14918e5747d97d07fa4e0d760559c4bb5b3dc56a9c2cfaa6a494095ab6d080ad01a7b8cd69ae5f5dde172a4279b4a0f144a4e2c1db7f0522a110c9fe9c1d069091d9a38b10a5d4f60e479e261c1dc03b5699f609653408c3b22655cd36ba5b873cabb9f265cb315b7eca021057b2ac43ea8d086030e2f9a66492bc24f89a0682f583591fc8aa6ba9462f63187b68e9a3830068d804b3e7c96d60e0436309aef1f7188994f8ca9f14190e23a14a35510467e6168a31a1b02909b185ba5803682f33f441042c4a789f395ab9a043c7fa819d32c43e78a7ffb044b9a0ca34fdc5ee469d70890f4c4d3c5a5e2ba85f152d75591097c6d813c1faa0ee71c00204c19eafb04c45068fb82d6b83e70cd520a54f72b076afd12ff3ab8c8307a1782c9aa5404ab4c212821985a23b7c0a7adeb5a6e41f03240eb2a06b27fe94223043afb16c1829bd96863ccaec54b4d4325ce9b9a2a9ca6552f8e4937a3a07c5c73a47dd30b27230bfb4186d1cf109435fda95ecaf8623b97376cbd54c548483580c4ba159ee270deccdcb6524a461ea6fe4637d937c64a7be362baf667ee0d3e16e4b842482e5ad851933481ea7ec34c69f64fa6e82f16294aa7ec5fc7729405a8cfc4756240acfd0a5044e954af68869ba3926222531a3c4c423a86e83d5fc7675033a2fe4b2c9bbbe833dc40a375a790155215ff48bb957781d91022766c1be019bc796fc9f32d0d4d2b8adfef8aa27177902e7ac4a96f7734079c1a1d04bd57269b405fd98c044c143ff09b1946463aece034c53b318b67bd22800711d1fa5345f1c9d6a010c5ba7be746fc1650f66bd7f05546630e6c9a3da561e6a2e55551e3670de315adbcf6d52bccb6b88eeada93c26b54a008a59d504ef7955317973bbabe2f5f832dede16fbbaaca998ce378095e15c20d4b8c89ebed0f1719435cc1ad19f9bacff05616eca98338d6a79360d8d180c76382e7eaa61b63ea0503d4a3bc83caeb3ae5eaee884a8b1e1898a0a9427fa766e577dde550f7957264dbff306ce3af5f0b3b5a39a4bb67a3d620579e99b858ae6e150df7b763ab56718d3802883ebdeb4317370432eddcc744264e1e697d563d13e0c697ccde3688ea9868eb56f72d7a9b77dc4b7b51fb6919e75bc8e51ef5ae23b7ababab13526a0da4636bd753916d2af606d00384a4c5cc4cf755a90ca69c415de57259ca364a8f3b92ca630cb28c0a835cb6bbeb654751f02f420122a085e80e6f84fb2899de58378cc6b09a6dfaaae96f3e34db128406f542f7efea6a86495136d8fb152e3b41ffe2bb40f50c9cdb591d0990825b964a7a00105715aaca5c1727ac8fd1c13d983cd20d4607d8a401f7f0783109324accfe5a56f38155051c6b721712db2168e858636ba8857be9fe004a5b2d50866c3e5ba1d0744f755c43cf812a054e870f08713005e42a9c310c55576f47ec386d9143bb2fe5a8b836a61bf6577f6866a17ca63866f38918ba3cafa66f3b310a2a41bb777f4f4bd9817457541d7972e67e35284b4c89aabc130a996d9e7a3edcbb9e7c4d872338d1e030724bd3da9a4c0e6409429f5b1cb7034f207ed13b1ea60f27db29093966ae56a0b681ac3a3496e04cacc6f63f453319c5fad1c4055de51c43ea990d249642d30fbdd4effee457ed2a2578bbd9b53a9773d1ce987debd78b4578f6d6edc25cd8e056c5fa7869e9fdda24844a28e0a5a3e6668d83dcfe958a1bb0ac8a2955036c7eae42e9270c341c855852aab127b2418e81e3cb5f417a37d571eefb38d5e0b0cecd0c44074e170412be99cbc7f1106f709d3706552ce49ff154048c4785460a2807cdf1a0d5aa9486813ceeee2c2ec94b0be9072b342de442ba8bfdb9dab2071e872f0faf2924a5c766e46b31db8be9155635c583632150c2572bf33386c47b2bc3c209f1ed57e60307d93fc2e2fc79d7b052cdf8f059d0d6cb8979b2f66eee525988fee91edbad91ede15a0f2df5063734528e4d58e2fd161d7a6320b391a2f04a9d05faea40ccda56f9a138ce88fc01c0f30ec8c084e2fd02ab47d68fdc979de721a831396818c7f4ba215d2307f8783d2215880713fb23fff1382a8682b04ad93f2c46665b84605b4b8b3a4e17f6280ed121888875ff4f2669b487339c7f4f234a730c72a9c83319a8576250bfe271e58688eab9748331c4b2462786351b4f5ddea429b1835faee936e006c6a77b7acf84e87891b97d7cca62fb125c6c367ccb7e9965e2b123bcbf9501cc29c24869c8dcf01eeb06d3a62d5f76c45712ccaeaf48d12278e382290dfb2e60a0565929362f79132ea522e2715c54f78a073fb1d5c5b007c14a951e0a7ea8a79bb2997af9bcd6f284f08a4461b5cce291a45b72663eb997fc3bf931262313483c21553626efc5f279f2f96083fc0cb6729be28fd386bb614f8d0802d2380c46ca75ed0799a19cf6d52ff90bbb0d5248035cc1bfbec415e744ec4c7f992556c569a5eb402c416256d53cf3b902f50695a3dcdda864b6401d0145235ed229537ec4b27b67ef5788ba965a084b0be3deb380185881db7b693a1aa57b3e0017d5d7cbbbd3708f759156fcd7c85cb64546cf4c27bd9b357ea4b4050dc63a6559a5bc9073f0685c1270bbde5d9dc7c2e4235034b7790d865cbdd1100453b2b7a69b2d5b024beaafbe39d81fafc92e32cea4ca6cd9adc70af9c065856bc9dccdfd586ee6e87ccf3f515b088b7112547399d36e2e903f9db079a5a089da050f3e12ca6697963e863ea8ffbbd56859f45c17e8662b6d0dd45ca3a7cbc7bcf3e349e429da11cd224d91e629e33352812edbc7bcc7d0b158445b932fac8cf88ca0184d52ccc842512675c646e41c8de1fd0136beffb0b1f573e8fbba2f8999d03c65db88c37f869ab0f16c5ea0b337c9c4ce2d240a60da8d55157284d389708e3660d2c9f435804b8ccdd5e3d165e3eefa6d3048df078c84c505c3c83c8b8ed85047c8afca267ce46eac023c27c926dfccf43823c70aee9fed942cccb237c2f7648986609722818116bdd32b171da41964aca550cc1f3533d8d69105f074f8e32caac5c89f65c1fe39d0719afb4c3eedc9fe3ff195895a16c186b865f128a515afcafb04d45503522c01c55570f14dc4d5913ecd66fa8d6cda37ed2441bb6171992172cd9b453c86e4281d7a2af42b022982fe3a1ab8fb9a2c054f3b6f48f2ce39c6598b6a91d4d546a692d01745c5344f268c8b869f3c6b8a66b30f2dcac03f2629286050fb1e4ee96a0484783cf003dc504bfc36776cca4cbbdd865758ccdc693f2260211587334bb98749fef746184809d82ffa02910470a4ff6e86d34b08fffc29a46abad4908db3ae2247e6880143d4c7dc9c75161b47cd76dd1c438364563958425d54f6509fd10805e990742b56e3f0b3484dc823e2c000b22ca314ed2db40dff81937e612c41e091f04c615574a519c8d6a5e4392031b65b623afbbef204edde94812d00baec24b3bdc1e9ed8da920af7ab86ddee7a3424f605be3da5699f1b9ba427046426966a379bfb2668679aefc2d4f3b41e3896390150e3d0082cf25f6b6cd5484c32918654ddc2474af097e23c5d6541da24d463ac2324e12198ae7e70f355702d10fe32c48c262f89597d9a03daacf69dc7b017a47c940e3cad7008a3730bdfb8193a6cb72022e26ca5faae21edb5db5a840bcf6e9420e7489aefb4b3e1ea7813d8c12ef23a985222ebb93f8effdc345dd3e54e459d37a122f6a74e95952684a3ccf3a3b458cc979fb3244067704b90940bf31324fe9e4ab58a3b35c7c0f3b8875a7b18d44c2fc218e9ca8c77de50d298fa4faf80fa3f98baec92738d1770f5ef7ad397570cc9c8b7bca70e061366635b9a6a72257b1eeb657953bf98e6ade366276384872cd0b36322d85e3c3d96892d9893f419f07f2cc2c38ac2076885931fb2257c4ecfdc936b26edc2f3b6c88e9febb084cd8246cf6c86892278341bfcb4335c84452379f2782e145f26ed2f96c150542444577c01aecd46e42d2c1b950e0267ea261f9fe31e17dd856cf98c5878b9a983c4b13e83aed2c2b7a87d0be8ef8cf0b24c565a6bb9509e07735043452788f0ec4c1c3989c772a80168aa48c850b98eee7e1f9559fdb35421f2c1a567fdc9aa33fe4836d40467a990141e0ba589d13586ecacb6261e5abd8fc454acd3f28cf4f1ad9de27c3892aaea7ca9bac0e0b9b90f5f3e3e695b20d701dfc7f39af76f25e2479612037251bc1d2480a29462f7925c4843a15529fe732bb7b4b09b5d854bb3bb7f979b1f4956529e4d1124df1f3bee4186168d8fc58462ca0449f26a9c59db6cf8c1d1a3316c2c087f1ce8bd51b3f35316162774fe5db776ba332ab9af0c4fcb5d552820338c9b5e1b2f3cda6c85cef5a256311c2ba5e4ca502db609e347d2d57f8873f48a906ef87fc31a8db1e3315655ad8c18c160498a73ec2f3024a98a442ff9099df7b07d552aa625b9d2707971095b1f1857a22f01a815144c30b849cc586bce4e64309c3fe9ed69ba8c1b2b1139e2a92e829a76888db8615347b51ea15b7074ac1224e3118d633d6bb64a3d76507a5dba84bb3549103cbca59f1c4617bb7c191484da6a2b12cdb8d7d35b723206c29e10ea0b2f68d53ef4c918e23feeb1c531531f742201aefdb7a65c840d007a351e60ab45736870a6d62643de79b3c65480f1be6d8ee55416c7c7fd69cd849a47fdd6c1769b902a04f7e38b3aef8329fec185cffda7550b21caf960fc1449a085cc82fcb36c6ad3c0e020ee8b9c9509fe62eef6e37d46f8b84f8f2819f4d9fa5a363d7df23d20c7f7aa63cf1cb8256d580266bbcdc086c06676376d6d19690c83183b39935ade4470f9e5c9274f60f6625f8440df7d4bee459a2c6b6a3bcfb9e60d931e40f18d4e42bc25d4204192260190c4eed81f28606e3f81b0e84b011e7a501cb29975fd610b39c9e7f7bab218fcbf456171dbf00f9187539ebea50142f67c8b1270a77c0881f9d272650214e4d352533b480e5045e4974e1306b8d7292f7db127c72b911ccbec76215b4b0393a8940c8ac957889fa78f03d98c4eccb443de0e800e88bf61d47157f50e792f10f407872c249fcbb0d63a74c1789b42c33a46d5a0c3f68b2a67f0d095b99aea1502d5b6ba251d3d7d2dd5080aa8984d3c2a897a1b9c5eeecd57629e20c58b9d7c69b89a9b2c4a2ec5bf1474665b32e46413059829e480d9c6c7bb812536965aa2e548c6860108a8e3307453f7cf44ee1b4ea805e813fca94dde041fc042872d0be839d405a18c3f6846f992fdc9ada72fcfdf32b4fcbde7f2ee5623a8d7a6483301e6a9723777d6a9f5b4482d074f3c79c639b9b5ce359c36fb6c9f1e71592f30401af002665f8318f8a2a6bd2c8c1ff218bc1b8435906a11909ff6ac96ca7f16eceb90a92eae57b5f7781db5f2987ed63b34dbbc77f1a6fa005d8498e1b42f8882c9d64964f8a7bd1b15321952f29ed833837776b7b0c3e5312854ae4ae231116b36579459307c6a2e9d12623d0181846277b4c21875d2f052c9e65dbbc784002b200d099586ceddb33df433878889dfdf6e34c1cf609edc500e839ddd6ab85d10af95a1161bcbf24bec6171e3b3a35e84d01cb9018e11af3cafa193409bb98c961b485d6c36f9637213dcb425802110c624e23f78d1ff8115cb35844648234eda5001d589457c0ca0dd5a2acbe3d95d3199454e52adf5c24fb72549d40bd06d18a1acfafcbb72d05f16688aa6664cbb26e6d457b578bfd527ec22deac140a2879003f4c32b34a251faad9b9119ae4d918e810726e42283fc2c3f807fa112932aa6db8d215e11c112ccd11d31c2748b7a72804aa60cd407934502f58410b9744cf8183fde9edcf4060ce1e8c9f24f553edf63359d1e4e0287839d41e207b98ff1e5e93108b385e7aa5ac549ca7ee03396c732b279631fa85d1662d4b807b51d945973b9d564251d1fc1e1412d6eef56d755010bd3cbd1a1852f0e935769f6e9d9b523416e61248d957fff34fd9b3b0a082193f9e5bb95af6bcdb5c446359ad79edbdf7b37c463bb73bc6f60ed2e22f3e11fecd119797bd19d2002a4bec4e68c777e7ddbc91413bf6dc85af98e6bcded1817b66ad36d45c5513c52b8b200e593b3f0a8de2162c0bea62a4b8cb59e300354b816329ef48c0d2bd0e546daaf69214abb2387ade4e08b1bca89c45755afe686af1e9c477a80bfcc899ac09bf0dccd0ae28ab4ad9f008725657c06ebcd79966d1d1625ea3e4c402f4c0d09ec22832689d8ad0892bcbf6f1cd712edb7594a59bd08158e0d1900cf0afe577a3eb3a4b77e4fe8d28c6114e11383c7b74d0bde409fe3588e787295b0c8ee3c6dc607450d6d08a2e408116b1cad6a75de3b0759a737dd12087eb35fb5f4e6f0d5e65fd29fd400efe2e94de3cb493c6683dc17fffe4fa1694e36e087de00600279eba909b4183af15690684a7e8a102b3640b17e23da7fa1b68d7e441330a07564d921ca644626778e7f9095e73adcd55f0c6f5e261c8294c7f6fa84dd72149122533d8bf39259719a88b446fe193930fd75aff4aa92aaa8f8b79b17dc90a806eb486498a6c407734f5edf3234547edd67c71ee47c746a8efd169044b2320ab59aa0ecc4db9faf009965eb5c7caf901ea4e811b943a5ebed40c68f84601b01781ef721c929dde7f6eb6fc273058819005e0df44f17ff50a070bd9d3dbbfd84f0776d2955e240a6a6fc7230d875bd1b438b95efe2a16bf41a89ba2f31f3911a5f7e78ecc51ab028a97c22e33f2f556202642283ba7f5ce00b626866eefec2f2b6995d23089bf015e368af9e2e10c24d834caf7bf8cbbe0f47100dd490b06d2658cc01844e029a93bd4b58509cd5a4034b4122a323ce18b26a0c021e4c4fd459d8e64b669c12b36a096f4165484869be994c05fa633d8c02840200485d15cd31018be043e50f3e78ed8c32a8f6f7a6b53523468c584208d9846cb9f79632c994524a01c504df04ac049eabc3b162454a225202e5250aaaaaa9aaa9cacc10461145db58d146398b44ae608565591eebf3b9ae0b6485ac93c75c1ca1da86ab50554d554d556666ca8a899ab2e62ad4c10f74aa55b446a1aa9aaa9aaabce448159cafaaaaa9aaa9ca4b8e54e1aceb885531c34d186e6e10861b223738b8494bf32bdcdcdcdc8046cea53553b1bbd1bfe866e6023a9f7b6a848a2d256118255131d6fc074a3d0ac2282efdf57e5027cab9e73abe5a9d32f1db9a714568566cab9f3acafbf17376ce509feb89aa3a8bb6d1cea26f2e7619853d01b3cc89ea9e287e77fba8a66698f03f68c4889137517d6383644b302ee9ec65970ed8c1891d853d01bfb127385f61938d8deeb88c288dfdd7369001ce8c4377c4299206954523bccb88cb1cc713735d7fe5ba8973df59932dddb8dffaa6bf7054dff4175bdae7ce39cd9efb767db3a52c52b125f7c117be37ba15be4277643f2007fbc6fbf5bdb6b77bab0584679a851ee1420b429583b0ec8fa173eebacebaaace514d65c90b68adb91faf4b71c5e89eafbadf2351a1d1cabf94ac68c2142217b10b510cd10c710a77cef3eebd55436f42680e66a9a1eb2cf55475ce78bef254d583efde7bbe7a584cb22524cf9aac2ce1e4a6a7ac9969a2d602c265ba451fa93c9b40f43c6bc6e3792f56515bc21f8e5f396b2646d747a87608436d8967b48c182f0f06cc266c8a8d7de5a24de0b5588db170563a9cd8980a75c5c6481e4f6c2ce5f3898d8d40a0d8184a28141b139d9cc4c64e44a2d85808052536061a8d62639f9494d89887448a8d5d2a2ab1b1ceca4a6c8cd3e2c2c2121bb32006457fc5d4fb9696d8587471898d55ffb1310ac362635396c5c6200c182f1610ad61aef5de881143868c198d71a90403131b531b4428a39694b84122de834b7d534811b2e6b46dcbda123cb656887bb735f3f87d1125aa9fc7bea7debfa7de730f88976d9023ce4dea8e35e35cc7a1e169932d6d1307a9a6f862bdfc8b5e6fa7c26915073914f5a8f4bcadfa559473b7eecea1a8f7aa0ac62bb4f2a5980e924c924a3e2920cc69db9e25f7ec9e51208ca976d60c28c87591be8305e97c12dfa39341e1de635d9f820d01b5e94f563e89ab479024be87ca9f7ce84aa2d4a343fa136b86443a71a289263e9f0f59339f4fc8e1608b14d1f6459bf67035e73e9acb36ff09402d12884bdb8cd038f3e1cfd3952199b04845ee0e2bd816dabe0a17dafe4915b495f16c5bcd9d667dee8daa352bdbfc6ff8bb77ab00fef179b06f46b83573820581d0f3212c08849e1759331e0fa61a08534db44ab857d6c90b768925287f0ec25ca31cbf86d426e13cb148760b1b9bed62c9122f987cb13747f686da1d1831b24190a2620a636dabaf9c2748b994d71fd2e7579c052b99a2084a23495529d65bb0c536364e738c972c71c75e3061265fdcdca0819b341142e408d74bf44bb1669853da89d704d42292d5a8aa83c13024cc7ec46016b2a445c22b70212f230c73033f45e5197b42c8a847079ac145dbe010234d9f840d71699fe7604184e4e8d1e17c12a51ef02119f2466a698b6ad0f6d76ad1962c8eeb3f371c0e95dfbf8c640f4272f480bf7f1d491dfcfb970e74c70e52c7fbfd8b07d937a983fafd1643e2e80460e57bc8cc618b691843ac2261f6292c222152a134f657cea0edab8bb6c5166d8bacc5133261dce7fa82b63b6c110b6d3f22592aa5d4e192a00189a6a2651234d4685596c232e2df449f9047696c9dcada2a6d5b69ec27df90aba58d73a2b9685b8ab6bfdafafb2ecacd2d2c2bae42f294118ae82404721fe7717e753856aca8093e77cdabaff55b339df1bb6e294295a943779094c6bedf282d594b91565a7ebe4e96f6390ba2b58d3b29d3bfa968dbe9902cc0e1705282b02c6b748118238a10555589304051d4c910d334853200210469ab81d7ffb48fb61b708fb6ed2ecd11d19d2e8239dc81b53ca60ef7fb3efe7dc0002e8796909afee9d5498671d9e6fe69fb73a7ad3934651ad853abb6aab610ac555418ac604338c2b6150d8622a0bd576c7b4d5dddb3cdbfd34a808be6033e4c08a7b97b0699c9e708adb3ac1cb65dda7bf7307154efb2edfda5bd0374341f2f62c93058324cb636ed343d7c1445bd36fdc4d3f49eed7ba84724ebea7203b4477f1bb140a66528ec3672d996ef5f65a6bb6c83b99c6d236d3509902068ac9fd8965468db6bce9f6f23ff976dcea973ff9ccb9e73cf73c3c470ed3b7fcdf7d553f7b274cc7fb3537f24152ec86cb3a1b0154e5f4d30e635f80ae1756d23edbd6c833f4185b0b16dd2ee75ad9d0fdfcb7ed8e82c2a86ffbea106ff693ee0276c081fc26cd37f993b1eab3f8c5020be5a86ea011a27b6c568f99553f72d5d501f66eb0217e6ebf7367dcfd2f96abd3f62da08a9999999a99aa9baca9a9aa9fa3eb12234986d9d3e121362bdb8328baf98eae776f5b2c38400f2749130b284222025efbdf7201390899889098aa266800345c1a0f2425513bd106b2ccbb23a3340a019a1135147d461a264d580a2aa58ed2e866524193248305e62c46082a2c18394a03451a4080e319dcee5b9ae2b085248d1a1c175b9787697fa6d32920449911b26bdb2d22c2d2e2e303bb868e0f1b87c76776585a5c5c505061e1a7c3ea0100804aa2a94d12885d4e994382a2598d0ee8240a1135147d4f114d901a606a452247e3e138543134de0101362e2f2581c8b733203518da84654835233aa19d58c6ade7fa994430e7d9243773f77366c34895455d12a715ea548e7379092269a28914830505151796fa28ae0b0f2deca2b31f14a458a1429522acd9011e3054686bd4b0bcb8a0a296584223a09813e9eabc3b162454d459e02acd00525555575aa4bf5e270389eea03e19640592755d5e6b52c1b1b9b2f54a9036f42ace6dc072e67812df13fa742ace6d910cbba5068f18a700466666566654ef769628289dec20c628c1eebc3fce9743a20f67e6d4f7b863084213c2193995b0baca4a6a6a6a6a6a66683d333e70697fe94e5bbaa6aa71d33a14689e3c60204626ec74a1c37168e993839118998db31136a1c3716ed1c33733b66428de3c6a27a42557531c51453c4346421c6e8b13e9f4ea703721e8fc7e3e1820b2eaed045166e563005163247eaaaeaaeaa2a298bb122a3c585c5bda83c462291483262642b2923caa585c54d8fb160294c526e5050504442b6a4c4cea864242256f0232f986a154c5dce4bbf6057caf4bb357355c0058309d3ef56029e0635a065c2640d953061d8133038d9cae7037269712ca150289e9c5c4112c1e0c0c84844483f4d51505415abaa5a198da8aa8a568c7137c3586c563016259dce25859114261cec55b838428a1e0ea9ba22468b6359d62e0b077b952ae215918b23a46845528cd6159cfd4e67f7616f419716374d164b4622d22b5893be49d956844a2be78a0ec9499e3242119d84409f3c64e2876d31a11da22e4723087ddd3535652a1b312b251b0cc50868d33b6c7bcd5d1784f12b8feff19b4027a90bc3ad083e46e252cd11af66bb9c4ca1cbb94fd01d9be0d26fc8d017ea274c6f718f287164a3c6346539903884a3d17bfc5ee672359905c53956a7e348978a4a7f96fb46f386d6fde6eeceb9abbb98f79c4fee8e007da4b729efbda7f2de7b59cc96329fc39545e91bcda251f45f751ab1edda42a3d79287f0906b355925c59162ab5c5be2b82c3de4d0f26b5cee99015289f626bd623a2791dc350be496d5ef29a6bb8772c1071946f442dd02d9e5f9f37da83039040eeb7c55a515b30dc8125a7c777777f7876dc9447b558cc927c72f9577c570e9abd3de5b3f4dde9a9565cafc48269ad3e975b0ad86e6a6a9e2e18abf8d3abfc1f73a56b65d31bb1e64cd788d9715ce77dec23acf25b8f4bdd0ac5f265bb23ebecbb69c42733ce40083a58c3c709a7c98de733cf861718a8eb55d6cc9da624bd633092e7d8b83b9b79c4b259afb2a892712cfe135bc347ae8437c138fe0d2771bfc914a3c2ea59f81c9c862c078798111239381cdf8920bccd5a15a6c60b96125464506c247c22185c6a8064a0e221d4e0010b201dae173c383e3cad1e1217274ecb07668c61eaa005002987c803c9ee63ddc009a003cb30570fe431a80935a43d392e6fe3555d56cf34f249a27121fde8bf1d73c7976563df714bec5d461dbcae88a22b8f4e10b954585a14c84bc68ee54bd44221b87e0d2ff01c3fd253abf3a580d1743754c29932d8367ac4de94dbac51a8984936010640def182d233e2c65fc5ff61e4fd3347133cfd852694bafbd9f9cf3e9bdf7298371f79a57b3ad39c8a5ef504b75ff29938d18063af7b6a430aeab95eb0397a60dabc95a9a60e00d1e6d78554c74766cfb31bac19af15f2f2ef798c81eb8f4dd55328d03d388eeeed55d0cb33562293587f8d4d5331d36209aa65dc1a8c0c48a828169e1f4ba8d81131f16eab7518ba6df3c10fe46e5501afb1b6cbd61f5f3b25a0e5d961c3bb2b41f75474869ace81d4389a1b568fb3b627268f659d2dfeb7bd0d486a61ff3a2e93315cceccecce10eac95ae5f3f7397a89c06b56339f410eca0e5c683969f9b0e3ee080c30d323366bce4a0ed6f32fe596cd0f6371718a3146d832b1bfc9c6c10569153619d8440c2ec4f980344da3e64d9f71bb47da783b6cf3c68fb10482a18c03b687035769a1ba1b9073776e805e0ef7643de7b2f9fb723a29fbb76cb55a88240919f04ec01457fbe54a9f5132e830c933a98933a963ba0eda7953a34f733a68efc4fc838bac70a791cfea185496b01507bc29fc75e8cc3b384f055da6ac0a90dac9bb4e540ca38225eeae02ec253c772075cead04e1df942d8017feb6c1e96a4b1a1d00f97815cb405815a24f0f97c5826e0f178562870a954a0d3e9c04c03efbdcf06dcddc301e788e84e7711cc61a830f3f11314292cfd9b484b8fffd6a172e34ff5385acabfa161b8641316446bdb82b1fc8a8b4a0b89256565a4e29c43213907dd3f518a0f08dfc97b2f84f2de0389de7b9f93f79e27f4debb40efbdce87e3b1aed8a938ee4e59ee3e4577879c6dd5a37c3fdfbeef3bc7d90fa9f5bb4e1da594f1e1be943ad2653f64e9455a54f9d2eedcb9f31eaeb40289205a26e94288768396564061092dbebdd699ed2ef3ab55d7fd3c7633e6ce32651c898abf525555e520aaaa1a248547aaaaeadcdd9d57e0eeee2fc441748929559b08c3a4001484aaaacf929784f2f4842465f45d4ddc2f2dc63174ae0b52fbf62581d3e350d8d647c02745ca681cc3b50f2dbe719f9e722a6e172f71275235a5fa99b4d00e792f6a40aefd25222488a68cfa134506c3b5ff9849caa86b2672edfbb34dcae8fb7befbd6e0ee24e5cfbef39c8b50f5555554929ab42d26a25a6a5ca29b8f65dc59ad15f2f2ecd7c77b7d20c762a90495d8454ecdc797272e4bed10cbbd5b9f6eef6cccc20999944dc7b53e7a66632c3a676473be760376ba629e35312a0739d9969a3a573ce39d71dee2c6675c1e42a566b45e52475c5a5dff91633a7e0d26fe6eeeeb522a7bf6310a1aa3226d694ab261e027b93333912b9c1ccccccdccccddc4e49777777bbee135c55bb97ceec989bb9df4e90b9999b8a696536e1d2e71fbdc44cfe7a7125f7c628b8f4b99b999999e2cc0805d2cbc94166bace4cb66118e7dab9fe5c3e42571a4fc014730b2e7d377112ccdccc7df53b013bb36b20cddccc0d79cacc8caccc91932b2a422054150d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d4d3b7f70a220d5ce1f9cdee4fc41874cb6097f9b994dd40813e7ed5106cbbb3091348932d88e32b8f4797779775aa2aa180ccccbbcec857e8199734d50f5baceb839eb1bcdcbbfedeeeee6a70d7c55559fdf873b77bbfecedd6dab3e10a75b866e9bbed19c8596af44cb245a7e05840aed6cac7219bf27444bd1dddf9de1404b27b694cfc3e5ba95d0ae7d810be25c17dbed8406e96233f8d2379a272caacfdccfcdb61f52db2cf0b47d7e1ff99ecdb93b3208d5720d6bd036ff65e999aeed10ac6d06c49593a8da39e74a25cdd5a8a1b91c3934e7b23e800f402412cd477756c496babbbbbbb38d7d686e6676ccceccfb3a318863e103e28cd08d28a89240255ada605abf2259ec351fadbdcc0ea1d323b2de7dcccccfeeeed9d6efb2f70277c2eab359c284013c5cbb5d7039cb77a8edd53578c87befbdf7465fbab67851a8321402350369eee6ceceecef66765d3c2970082edddd5fb7bc9cf98d77eff3d8d4dd05e2ba3ea8f2a51ad2f15de4181359a03cd63923809d732fc6dd1d4ece3497fe9b9c738e9d73ce3976399e0d7e6ae34d35b694dc379adfaa73fa6a4cbf558c896c715ec73b97bb587564d3cbe296da03e1ab780597fe2aa12ab8f4d3f9b320ae2a229ab49014a4aea3c05fdddd0b6d292777773ea97399862e2297be2b717a824bff25cce7aea17359c8a869fedef34cc263ab18e3f4a66a9aac0b7a9efb8a6104fd39774c735fb97be421d7904c797afdd8859e7bab34dc73e6eece2277eeee5e626ecedcfd15c0ffbdfb81352c655c15a7699a2c6c2b6919abcc5d74774f71d742dbdcdd9de7d2f4c95d69e8031921449b20e1ff012da895463e15fc334d0ed427a1c8ef8269ce2b7a6f7a4d70e715e84ddd554c8e109632d5079ab0a8748c5fc5d4a9010080000a93170000000c0c8784c2300ba324c83e14800f53724c6a5a36180883b1408ca4200ac22886612800411888206620438ab91a0500519624f8d2bf116cf0b81a9eb5d0d1fc78cc70da524c54623d5d3f62e2443e27119c62ba5af066e44e8337b29396354832374d901d857c529665c67c255acd5401da5584902bedbcf729a7f446d30866cc882e561291c2e92acfb4ccd077053ec190e033d492b3af73b2ff8064a0be828d9447a53364bdbcf01499273a393a31d303af4685af8e5c613ed87560332b4d9764393f070b1dda0a22c3ae53524e7d6055c469543c625f34e5355b154e4192990479b1c3a720b71d5623172ac84c94992ce80fc8b18c3b67a193849f4bdace317ab4fe65eb8d4ca5292aa5888eeced434bf4f0e363633a2522bd098c75784893e9caf868dde79bbb67a2c1c0900a31d40d7717ebd8d8c9ad468ec3053e0394f632cb7177536416b35615cc41cc72bc99c8d76563a41b2f36f914d3f54bd65e695abf444a9a7c579b3bf397ddbcdcc38d75b82d3e9cf7e3d35a12a872403d11e1d040290f3142266ff8a1a623b942f53cd6a5d13aa56b510c1eb0c64dcf67fa614cd2415c2a4237c72eb31797e4b3ecf5a4e544c20b28986aa628d4a6bb54b40f764c805d1b3a9a6c144d71d3f4554188a2c7aa1ff819a37f0f32a5f3fd4dc0d6307672418b32ca18324306c79ac7ab2734901b101dd6f3680b4419910890525838a5245ea2ca706dff3a11d64954a177849bae5b83d4a869322864772eec4e1cd8772b9b5806223a6acc05ea82db4779f2b2790f1a19b765459f1bfbea616b585ef7a653481ee47d177d3ba2343d9293f2ce5299808e476a61a205a1f7b50f511aaf996f934aae60775bb13577c3ceee6e8a0d79b93d65deab1d531610faf74bffaf5420ee9607076ca0a95465d90df02ddc6d83ef824131d5acedc224ad2d2dbd32212d3ac8a44792a7b0356f705f4032117a3d8eacd19f8197459cf9b6f31ec67efec3c2d96f97700ce0190f439f2d465600a183382d2b5ef5d1087533456d0a7b9af563c3a0e746581801c80a2200e0ada91a870a5552321ceadc88308ed086517469dfa451deae393081b83f078d4b2a580549a65beb0183e88c51578f8a11e3f775bc41842a89bed1bfb18b3c507566755eeb936ce542bc14a198c2cfee4e461eb899201f631c81ab53e11a539559b64c5dbde873d4d9f10bbcb3c1728c18d0f940f4e3e3de5a5ddd55dcd019d14773777a69a30dc72313c7e550a45620e9f58a4b6602980aab3f9be5af0291cfe8a857ea936e2edae4ba088aa883f21061d3b732dc2bb0040995b8e2ed236acf4d24bbfcc825a345c063aeacba9c8b8f2dfcdd24c6d921425abe57603d66229b988a0104903d6d0f3216fb422e44968b53b72f78b547b9aee93da100b2015f62fbe2ffecfbc3dacf607ed37d44c7f95b28de0f1aad5ff28535c6c3700e67842dcdcb57d28f4fcb55a881be50bed350209593671990390e2f70acbba41093b51e5b022498a852875c07677a31b75a565c23b6892b2bd84ae8efb808e63fd7a37a3b17a582c6c053badd2f1ea844a38e760509ed92213f251daa7c0332dc347658879bde588c57e0b0323984fa8db1d67f72a700ab2c7375610fdaee11dc9e6064ace696e2b8b4cf05f61912f30562c511d0e357497818af2b7094ef412eddc37de1ee3970b39bf9eaeda2ad4a2a17548b6537a04851f8b36bff21be05007c4f4baced895d9065b5b7a2cd70f4a35633e6d98b750f7ae1387c4e39e44146cecf32cf2778c8bd51a0ca9b99905fc84650a73b594e5354470192ba408392281dbee9db4d3d4f134da4b703db14f6dde63229d5a42486a03fb06d20a47f302f5e1fd250707831c56228b0af94ad53108790f8ff78f0c138cec07a6c00f454d90649fe5b35829be5eea77e859564085ff241280123e589700984131f5c42cca91e457c61195f54d4458eea7c76fa7299646e5666530fc78c11dcdf9605b28796ecd5e76d8f5678a9c71402f4db818826a704e034796844a03d0f8f6542ea0fbafaf3b91a2c09c731c8399ab2b0f608d206000cc3b889bfbd6d2cf272ed83132e6a3653355cbd748864c366b454aec3d20957a96e1b9fad340a017c565df884c093fab7c50b76d20cd02bdf1a4d7a954ac9b298ce10d295cc0e24a35c13b30818e216bc510d20376175d99c6d591478491eb283a96337f5ba9d8ee6e5c31fe1307925d1c8615e1f6c5a2b8cad560ec453f04614b8974b67a3c89d192106123b626f8fdcf4f9dbe3a857f94ac261a6d9edac2e38cdb23bda0a963717c5da9759477548a3225c1e8a5d69a3f79e6e158652eb4c1b369252f815c4485528248082d957b36564c2ac7285e341205d78448663a22314ebb9781fcf6e2adb7784b6bd5978af2098df0d7572d0f7ac36658e24cd884da398c8f76e9746959bf0748534c37d8eb05dd438df61d771a774671b17464de1b66ad7c16ad0e93a11ae471a7495b1c20f606d4a4a74f2e5b5d64c62fb2023612ea6e3a92808bad8bad610314bdd04ec913df52828c8b8d60c30a910846cb267fd4f4733027ed98b20f42dbaa8e228c313838a81c52521e062352d4834adb5e8f0e46ff0670354b1a1410641eb96321c6fa309e00aa549198a15d61a56b59ff9ce17605e8f4af11b35228f8b99acd62efefd6f82028745d6da5ce20d4a2f6122185c7fec617441b56db5940a33485ead0d2fae27fe865f344b2eb6a5770aa5cc6b5bda85408307d8e226f7179c425de94328d527a47337bc649ff4ba5422c29b9ee96e8b99218087aaefef9380673aca895ea0d21accd9a6465c176a944627cd598e8ff91db411c57a4f63b72a539fd27cd2ac040f40dd27606a09b4112b93a4b4c5a1ac8c3b627d8e945e493367e044854d468647e9ba6895132a7a4ed6d48502863419000044686d26c3cd862aac29394375879774921fb211699398a10c379b3f36d42cdece25c73b6e4f705be39bd451d7a4379c4a011be043b49ca71389d58a77f1b802d73f2d6eed188bbe3cc918ad5667d03f48fb358e9e82717686758f7a5e1d95a2c432a5a938a745d89b38286527fbeb6cedbdfa7fac146a56aac4e804a9349d5291916e772f872248ccbe575d81e8e58510e15b98d48e3305c5f21b8468476a0dd16134b0f8d1bf913ed8363ae080a56a9cee753a47bae53e06f10db77c51f1631ba6fc1a9e4baf160fc80b8f5e045d6284c555206dabae97e9231a95289bdd3ac99345e69eabf20d924459c57aeb2d05bcda12781140ab2a2d3645cecbf2a15b90e17509650d9abe6e9f38c6a393b27f1bd5b74b9d515f349b584828c9fbfe01a0d73aa3964126afe7bc07452877d3dc641685dacbba33160cac09eb848fe2fa6ae71eb9cfaed8b7634d25e4ce4051ddecc08c6b3afafa89d22871dce05540ccb6062b84ebd38f573d2e894b2a0839113bd726f96bec0854646b329cebf261b621b73d234dfb1d4b6ce8e69714553c3ee48a7f0f9aa0dc1e9d1e1db6a4eed3e44c03d8378daff9094f16a91d1fc73fa093d5b9d39e3491fed312a8c11b92cb78b2674baa92684aa404484451eaada4a434d62208902c64776150dc66e912def60c6c790533a7aed59065e5857d1fd0aca63b27e059fbcb7a58260a9f788c1b9d4ea1ecce1b66333dc0588e8fa1d7a60adf3356ece14d77a408871699fc4a5fcc19a085701741ee0d6656f0315a049e5e0357c62d2c2e0b7aa4535295e600a1f2e26317853f9b9603e3ee198bc7c65a69da19827a6227fc6349cf3b90ca27f5bb1dc8e56b1997842a05ddce4e4da6590e1061819e0ca83a1a56bbe5d64300d0d81830655dbe6d51f6875e2c63ebebc4da0d75ec65ea090aa7a0714c476f989488c1ae9fe840cd1cea47c66b2d8fd6b6171ae8c7a7b831dc8d45612781e83bd9017880d91ed5fb0c8260e3307973c740382a5f490388e2958c86fcce4c176c711c320273f3690be648b502e2af259fa94fbf4096a103f69b1ad64d9105299df2ae41a65dd2c0ef05c4b8afa97e774193a8b4e3934c9545c947c2d1659b8cedd295423d64612acd9fd3f4daf898b45789134d47ee82c1ed1e8163fb4d4ba5981a813751cfa0fb78e0d229c77351b3ea5a72f3cea6e6d0f52ad44a411351a7d27ab0245025f3aabac9a9efbd2d650efabae48ea969cbe086cded0bdc03d7705f248f90adda1dfd9c4a445d885d1755053d98b53bdc0e61d547a79087ba1d9bee5a9e5d375eb508f334010a29465bc56f3c8321b5f2518d1a85531d0ff2dade0c7777a0982b25cb4ede0fddeb56730431aa5250ec06123266110393364020cc03d56da508090c3991a64f0ad3258abb208d73976aa20e583a2c4996f1feafe2d0908a39ff0d150449822e15d21cc712e2bb139a4204d8923974779b8fa2df994d8af5bc330ae32b43221ad56b462a38a8798580841d303496321b6c5a5bcdbdbb23dafd230861a37c192698dae258eab1690271805add4c3903a817e77c1e8d7ff64e04a9304919e8b4c29cd79770c62833d815c4519c245be85be324ee7d9756f2539e3a559ac1647251e7f15c9c95fd73e82bc135f204c4afbe2152398cd43bca2c32cea07cfc1bbbf8c858aa1f749d5b49f9b607ee1b47f4ab5bd2c167088ce9947e91889589b81b9def9adae4f595439d06f4359419ab71573fe285db640adabfe7735d8e6cc6a00a0c12a12a20b99391176f49461a965d9a43923470332990fd43a0520b7ce2cd636aea5029306d3d646647c4c9dd9b73c7a3253401218e1e890a036fb6ae642d8dd3a8b49e8c6aa9ede826bba2884cbb915067e63963f4466baa7b8375172a594f5afbc8ce39c4b67f9e212daee200dc0620510442c4439db54b3de342beb86df9b9ea7a7066fdf60b0d79e080261e5593cca0ce7094e9ce453bfa0ce7c91926089f43f83d6b2bfec3dd59710355b78e8a9cf9d37c3f5c78b542ed403a22a557b572fe270b43d03b9488a36817065d48b7841be390db8b0a78adeb1ec626e82e59ac4d1939c94d18e50f78f3ad929f43c85484527e72845e2f4ef7183fbb9546da73b33de516b84101669de14c732ec3708c54c0d11b3ca29fe6424a9c5ca535ce16e14670ab3fddf2d0e1ce54aec729b71f9696e12dfe008400555e12d84f179bfeb2a18c57708484c64962c5f8f83a62b58ff5571ac9d0e5328f8f9ea49260c763afe7743c67796a6078b937be447c3c52910602053c8d5fc4dc903c86d0a4045164c8586aebc0db53fbb3b218ecf4b34cad5b1e54139b0d5ff2986d8bf6bd54049e45d488fcd54e8d97710c1b384dfd8447da51db6f0927de8565eda020703253eadcb81318616944b5a14895b88c7558e0ec0c57d712777416748e18994d14ac99d80035161cfb60f557aff5d0c080365d19c9f808c584d1ea6aa656cae40aebad0861ba334d0d159820e4a8d9c87ac4e6d4dc34aee61cb597994eb97ccf5a3a61270e8a4f3fde4ac6c3b9431ab7c0958fb4db9b24c3a43660799b5d220e5c90b7b03164641579949803659a1483118c84469840624b937ffeec16a03ca84b892d64b03ed106f6950af00841e75fbc5d8f4d9ee24e9a31f8c3de1051d696fa65c170d6c35d65f47065609f198957ae0499d6cc166101f3e2f2e71fc6f00b69f401b6a294f3bf64f040378093a4bab4e49d0d1ca244e9671ed8b5f1c093e716a679ee3cc90064ee7992453fc6524e3130a8810b07cb3c2e423396dccc6feae73963706cc368861f62a2154af9232c01391d499dd4616a29c4c50ef8971eb847bd04998afb7d18891f1b5d06c9094b093c74730ba3e4c3cebe1533a52ba46a25a0fccc0d97ee2e584e15995acda5701590e905328ea8d37cbf45896f96e29dc8fb0a272300c082d6c079782ade64ce94a12cd6794fd2e41b91065d9b8b553d0eee51ae8ec56584acdd284ed1ba5549227a6ad49255a534da6d69d708207080695aa6376732464830956a69c0b22121e3c783e38411bfbebe1384ff9236abe46dd058b32e03c05573051f284d45ddc8052889db48b2905df234d078869b9cbd79e6188d33c7f228c09b677c16a467bb873bd5f537ec8395ec6561c96849d9e6f1c152e1c04fd719ddb8f32fa8a94921cf8ae6c1c55e52a9f6ba7cb56cb87a1654c472064fbe30ce9cc8699ef4c588a9c2a067df6925b2585223053caf511949f32d59d8166a2b6fd0a53a6b4b8313d24d0e444b6f356932e2c90a55d49a57800585097a32e105eb95c6500e868a156e61ca955f8548b9b7c3e09e6b2d45f10080b319ef6db3832e0204522f95ccf4055f336dacd1e3e3492dffe30c2595945119e0b6ca17551135d3cfaa5caa8d9cb4365040981c96156474a1c456afb67d8d639b47a17dc17d909230f1aafcb2543fb962b78d385e99d11420b397853371c3926af424b948df9e6f13341fa99b6b0c3d016bed027023914a26486f270e0034d02269498b52e85060281121c82e8037c24f499c280855bf91749324c6e82ddc925017b296f53a3b6acb93b4a9092d539890b214255b24d514bbf3428fd4866016528922629c3954e1ed254fdae4ef6b0ddc42e764d54f0b71bb4ae96c5049ba7bc9fc22a192fa7b06829a29979b322f0a839884ae89d04161df49540cb7f364f1a1d9568aad178ae6809395826b20d271a853fff079f2cb313db4d51c015bae455fbed13084a15e77ecc19fd54e4a43f099fd4e682eb07cd5ff5eabfb2464aad20be1d08ccc09257cb7a8cc552751982da9a9540ebb68d21080562280d2273c95d99086ebb5f18cd0436a5ec9ef1ddf7da8f259d4798f7a0979ffdc1312dbba537e42e10add8e2e0f75b183056dbc8839a0c285fc2a6d889c41bac572de6b22225d7878527ab57e6df57f5f55364ba9e31843466ed5b3fbed7a8955f60ae95c37819327a2b7757a19d1ff7d528c9910e26e67c5938a439a0029e6f394c28230b4775f64148ca7f5705eb31c4c5cf68135aa063f0652a71ec7b4df14ea58841218a5e62b08b5acde8aa978a7889840d8c812dba1790fe69494bd82da6470348526aa18774197172fb5315aba308b72bada652dabd943e6efe5cb7c0f0276bfaed6d6c4e68f1f52220e8e3753764b667ec6277b219112642dd2e8c11b802c8082e12e59dbdbf5af9781d6011354fe79c78675178b3520ad60a58824a1f04c7999163d33029e4c0974728af093c6b8b04aea20b66b0a3ea1299cf0eb3b421a6fe2a7212795c00ecd09c46abdc957a8c8580059930f04c8b4f9a59ffa9bced55fe97b341b38251acb8555a6253dd688e7e59a1119c5c21ca2c4a5b8cea2bc33e65ed7d79b8f42d9dd51e0ba02d536bc6a56196f1b8cdacb77b126907dbc79c2e0def104bad21d5b74302fbdf32f720033a77c2d982de079cb3102753dbfd38cea6b545954dc9791760e27104d52f5cbf9673780b68291259bda246f23061951d8e25c3481336fb79dd4dd0570c4efccf5a96ff619295b590cf71c1a3ab53d4933022ce4e0b20a0dc570c394f69d27d2668d090b97713ec5bfaa71a6d68df14a6c0d9b035efa84aceca9a30b0be152b8e883a38a956a7c87bc29c8ec716517d393c964ccb4ff3c946849ceab152480e72bd9bbb2842aacb71b2470182fe5dd7c89de101022aada0b5e358f57d624c8d9e749e3a033ce502dc02dc90e741a4c2ee58c924ea8b6f0adc37bff8908902606b371123b598e5219ba761a1bfb9796a1d45c6119defd0d94880ff4ebadc7c2702a33a104bd676cdf41e221422a97acec622b4108299e55ed58920a30872db76667c36aada07977b6351583ecdd305167bd795a11dbeec0c90963da8c64ffee8c14088f515cf50662e795aa59bde210756f31a31f395192ce89110f5611e4f0749c5cee8033fde3332bf56dae8236d2d420dd33d8d0c7825c2a89949d6d1af4653e30bb2f535fe32793eda8bdd3851e5eb62abcebe20f2de75caf97f074319bc6da0f1ef4e9f72a0fdc91fb34a9eaa968fde8b6b71890d542f7ba667f80f4c91f8be90749509d618e5acfda3071b2c71acd13bd1fddd2590769df45f18e297cf388c9f41b192ff63721f7e3745e61d8922a86bc2140a1351a65b493192dc195804f0534db8a184a188d501ac1e85f5795aad6e3f32c445bd40c13e5ddf019b3e4a3710c23d86d25715e3f0c22dadb95ba0053b031f0aac74023b9e42c8d4a08b5101dfa08f86498420590d8cec2c2a9e32092c8491c567f2e05f1eae80f0e8d294882463a7f288a8fa8c70541c40bde13517f13747c14ef3bb01ecd8e685d949c0ea110ad3660498cbc9b0cc47cad2a66266d2063e276a94527debce328a531445f4db43bcef2a4d9440d9b721ce53486e8bbda5988358f1c01c3850b9c8df4e742e5ec2dc6ed2b6c1558d4a07a326d69ac469868afb39d526af266a0a3f33f49e529878638d1e2304a690e51d7033dc7514a7388bf1ee83bccd235a6f8ab893e386f0135cc29a0643487b7dc2b57522063001545cb81daef08dab786ce891a1bc2786db6c29cb517b7bab77da7ab8196c328af31c45f4db43bcef21a53fc9589bee32ca739445d0db4bfc305ea728fe0ae3b891a43d2383a627328954a93707a683940dc099b869095fdc95819575ed808defd8e91c2c98f719f60bbdf6436d2ed61483d76690e499656242979dc380a59668a19c785890f73409224504ad3347c68d56d7ce22a503b28a41f507a0f97ffe5942ba0a1b4341d58c7e7df94fd0078b6a4c3565dd8c0ad1bbb7b837a82cc264359548554e0271dbafa318a110c4c9e2b7c709b5f52e055946180af1e01bf19997bd70f96b2b5d0a6406d2da3927080160a5a5215b9619fe66b1f32b81ae4c9aaf3a642e7d2f482c1d9a80d0dad7bf7ce936c567c28b48449ad05852683f65c4e10274b8f6e8dc459978e5ad3407c63c6f132aec01f9e8ec520bc3cbabae97ced0b6b0000153b6e0464b218b3d273e4e8ea95242a97c8fe322cd1f308a0b48e5241a6fddbf95762a08a218273f1464def62fd4d60b88f7cdf20678165a89fe0ca1a70e27fb1502fae8cb6fb4353f212c715452c4361c1c31087a1e2e673dcfa150440e84fe5f9b088ee655400dfb912e2dca712d9867ccefb8f5476375d150f5ae58b58e831effc6690d03dc8f031e4c9f553ff7b527a2e21fa7ef275a686bc66979230c91877aaebf38b624ff37091622758f888c7edd4a9a17cc8b82a7d73d94d4189144424670243388248ba4048842da4dfc19c2b73afdaaaae32408341b854f2fe70291c418190bc2c05c5dfd006f223f01ddfb6a7bfe32f36a454d8150d38b1cb26ccbd4518ee01f6ecf5433eb2b77a6773584487919c78621fc641d7736edbb1c7b75c9dd31f447bc5dd38baec0dac5211125558a3ac1aaf9d9445eb34b53b42bfb7d25409be45c142af340007d5502df760c661cfdacaa35411627884ee66a3f54bd22b208b8c49d6672a641f00b52217412784ac202db4025e1d03eb7aa85c28b7ddfe1cbe299b3ea6e1b63036814d53baf330dd5dfc6d4bdd5d313bde81de46c51310e1164ebb870e0e55353a8b2b2336d5b764557b5119ff57c31eda952c24eba3b0b479f2390aadd25f1d33d6ceb86fa1941a54d2b09810efceef82519b1bc62774b4194367f4966b4981a58cf383b277ef638655c309b69610367d496f88d75e7e4e87268d401f54adee622c2980f05f39027a3042c1de28aa3af1b5e92baf6461d81423aec1acff02b9210235ea770ce3760a670ab6cf8d0e831147a335cd5a001ec518fc42b2807745c2ff8442e23927bb4425c25bf48ede99df54279ff44e7b2ed5e35788da8da450705f315f9feef8f0fd009eaafb2580fb62c1864b91f6a526c376425d1fc0bba3aa717fabd0daea6a3853cea8da94dfc2bb5356dfcd7aecda3c44a3086aacdfda7e10995f82b0eb71692797a3ab20065349c9a228c4c7fe075d2294016db052bdf65075d720a4b16e868a217c2d82a20c4cabb8887817ac15fc6b9abdd7560141a5c94908114a75f20d6139b48dcfb9e5c02c8a08b959614eaf4f3e9fef15c68c2dab736a25eead077c39397bdaf399c1d7c724fc187f10df99b50b47687973d2606c6c14e0792e1051f07c8c0db600b7fa41029a7f56572facab0003ba4504a41ab8a512d04c04609febeb70a257fa4dde9ada4cf88d9236e29d21d7b5f5458694256cbc2c6ca4ac927146a6ba889ee80c4bc88089958624f5d3d91f2e5da5260b8575737ddcd4b90e02f7b394182cd845f55636f5fe667295d572a57ac12d7fe5ee31fc59f609119e25e5580f0008dfa4ad9bd5b12a5dada63ab7e93455696d1b5aaaa8c639fa626d1c8022c3fe47d6135fffbb2e11ab60484ef5d5eaf8812a07af6aa8ba554544ab8bd833a04141bcf670f5ebd096526e06781a892cf27feb81806bfb3aedfe7e7f8b2f05f35da0e25bdd3e29b7755b561a4ba7f836e129b395ac00acde55ad2bca057297a069ab7c1a52ecaa998c16a7be5bc657d4665d8fce52be649d9d66438edfb9d6775a0a1495cd1e174eb036df8f52777b9fa69c4d1b88bb4d0565ddf5f6bd394cc62ca3dd060c5c1262e955b7c7b7310f9258ca98ec30477090bc0119d4713a76b687cc80c1023a8a53f9f56a417031d05a195a9880da9b62bb54d211463cae3a684103075259626456579f1551a34c8de9968c84598ef679ff778eb30a20a782f66e54bcd3bf09d6a5ced7b2ed48bff7b81ba8e585cf8294b0a88da052b1697e8c82d2245d22313643bdd1abacf38646d3d7d6688c7f4a1391869b761fae74f6c510a1c531d6093bb327ab7ea6728862b044d69851283630243890f43dd38bc3d7a345899c7a699747d37f04d005065c6244927065e7e751078461555815e5dfd5e40b062fcedd9162609fbbe588920c383a76e2fc2b30371db91bfbc48834c3f2a52347404d9dc588d210d8a957eb4a2baf405e7adab2f625528e7422b7eb4ff238e356b2761ae635d778b583d20cecd550732e7e04a0aa6d778388fb8740e97a41cf7c4916202a487d2280056339f542f3fd4ed285b09f068be12481dca24d169799bc937e55a670f29b6f08cf2b5c2f019d07410ccf6aa4433ddaef9aaad8e8294b2ecc19e93ecb62acfc24307b47915312b6a3c82b0bfb51e62bcbb02c07b90e2c72ad52628c48a6848453252a99b070b29438347b8037993e56b27ca29d461923e5a48eb9fe1b25281b17c39f7f179644b29cf4dd5b098159b810fafc3ba5bc7f6b8eaa49db516495a4f5286f96aa6db9b2f030ecfceb12fc0b04198ef801e627b80d621f4b95d2b9e0bd71d9a6ca46fbf79bc56e01aedac6746c63850ad7fa692cd5fe04072b40fb89aa2d8c8d8c9d6ed32d715719e46721743811d808c0c65822a47943e0152423cb433e1123bb2014d729a2d4d1ef42092348bfa028fefc91a4ecc04d6cb639a66f8d3010d939d9eee7f658f107b5f4c08dc3c10a8de1cadf13b8180b95d2c3cf6d19b3d39617a02322db07daea1d9239bd4c2ea35267e02592cb1b97541bcb8620ec67ff640026d604c4a367e5c1bc81634e58e745762601235516ac94bbc93e5071aa04490dc9846e26f71fee9f732a90e963e76e8b02edfb027045172998be093741276b9a4cf9a8ad9b2d8a2f5854ff26dc7f29e4c9e493b8093a59d364fa266e824a963499bf89933ff442c1a37855f5366400c6c2c2c634ef3aa1fa6301c08721c1a025adeb7a211d9f708ec4d8067501164b1543c4269a58236cd4e2a6fd01c41de75b515bbd0b080bcf6b8e79d2e60f66bcd5068afb0a051588f954460500dfb97fe71d4145f8ca4bf7e32b8ade5660d46cd5506b1babfbcee17032a0a1f8c24aac252e656bf21c415927665a53b73244ab6add67b4a51c2dcdb410adaa7d25d78eb6841b74a56c9a1df08212bbd1741b4a705149d8f156bf26af5572e37571714c0cd82fd15c2d1bfb44a6142586481266c518efc728d6093160a3fa490d9717bf2d2355a334d39a757185f7bb918cc22b6b999670243e45c5074e6a358f710eb776937f941b443cf027e31adce80ed7378bad18138aef822680a28b5d92b5a48559b8088b79308394e49dab642e15fd0ff892508269adf88bb964c32389a01075571c9614487e1c463741afb8c49a91727edd562b1d49ff82bc67a5f9a3d416f9d17984d7a564c62820deec0b7fe3b42642dea6a70422cd3ec19fe7f9cd23e3ce06266b0902d9d73bd2c0ab562c41362e601dec1a86e1d882a8f794f7881577c48905a3e63ce245e35771f07cc4ea974afd66c176aa582cbc1af4702bf57a3e11b1ccefd3567a9fc4682e26f13742ed5429102ecc6e6943cc13ed80b85e57421827e25ff323b3382a2954791510f72d1afdaea2c7f3f145c142e2029e21a8c7c014f424187863f86ee8091391c62a66cae5250de910ba05d8ff184cb4e53b829900e07309913704be2d722033594b0fc0b620ed39960d2427deaf473968c86069a9c735597af3a0b3a5ec33caeac72dbd6c388b5ce34b5ab0a8f6d41d21d3502b28533c93827e5800ba977e5f8e30940cc48dd00b52006ece212cb37fd919125f614e5330c2f413ae4b1a40f5e2281b633adef9d18ed57e58039eccb9fad66aa38214fcdfd2ac0d206145a355eadfb212aaf64c7220febf7dbf6cb425f27cd9bab2d8376ee93683e0325543d6e97f9806edc08335e0b244c3333ca0948f12ef01e1c7c0a7843b1d10c6d00d3c12c34c6d4e4a1067b60ba7908500322a0c5c5727a795ec2ed3d879b1f23dbe566d4814894e862394052cbb1e83e43d6f102e97adb0363b48ad461eb6d6c23331b23eb64dcb3b6c0a2354d9578316a99a9fb0a6284ae11b3645caf44c9ffcf28d1e448e319a7bae26e499c4f3daa97243e2fe6b80d7cb3a20bf90d626b731c9c7fd06bcdde0a5bd54bb9f4625c93ca20c402d9219a510bc0e9c56f9af961d542266633159f6873ee10990d7c9295266d103b9249856973ade1247b655dd5682406e6889dda57e34760de4689bc28076600deb655a33b9595c905eacba0ca11d962e1d084797da62e8e22f8ba3cb1588a7f180796779a5cf3d8987d6d8af3076003b74d00aa824c3cf05867d9c6b5961e03d8d1b0eefccea109b227a9226b86a174107a4933269314c505420983a8c642e022a8209e82f488af2fe71516e0cb9ccbc393eead6126f706034cca3c5c05ae22eb1de9c741806184abf1892055fde12b7e79338e4818a3dfcaaa801bbd9f9d3d681d18bd75980b94ada20b9124d5c66c31938c5c4a834e4bc3178a44d69641c6c4c6f9dbbb65d97d4dfab2f6f7682018b3485eab3c795a7955152e318d39f5bac6d82ed0541ed9f2008885d116efcaed9eb5a7552d32fb9c96c37d5ccc0e82f1c4bd38ab626e7870bac514762919df86be5bd368ee619d71c2e496e528a396e420e2a536e4fcadad09a5da975d240da7990052fb2e1792f3d8329a3248113026f3b228f177c69bde82773ea2944fc2f4d369f0f21ff9721caa99b7cd62db1acd501193a0c076d50320312f4aaf66b808594d00e51b03b9157394abd8dd14c440131d5dbf3387b0c6cd65f1e43e03beec94aedeeceffffa9c26c9526bf6c91cf766792847a18cc04db37a61dd7d9be762385f04420bb36add308e6d76afc8ee61a1bfe7da85224f306301c7891b8d54cce8581b109343b14997c9ef95045d6737ddb7fe866be64f55fb9776d9506393e4b47dd7b93042093efc65f6133ea2ef9ac17799edde3796ffdee7dfcb77dcf3533c18438ed93917b19b2db248798bc982a068bf7a82185343a6fb425df774feff591e3590ff7ffba9203717971ca8577dedeb0b7bf346cbecec2024ee7910dbd6f7571cd29952f2df981f628f7eaa50ac788c59a2dd31cd36d776fb457d0db0dbf97bfca8914144b4ca35b3c94a7fbf457835dee5114523d39f7d37a5dfbf3b6a5cd7952c9eb2f9bef7ad96e3d7d4cd1dfb79ad724bc6e26d97d5ee9804289f4f51edbb9efd7ac6b9ca897b321257ffcfbd16bba27dfa3ec607c924b1b1c840b64c2d4e2ab1c63fc7c60ad92874fe0f127589ad039a035f7183cbace5b6d864f524a19a33329bb8131606c7b65f918c484894d54f21492258f76b3e94e1e18c6a02404d90bb57b9d6f722fd86b8e928b0672cfb6c11cfecf631af7f1b04133bcbc897d31f1cffcbb9ecfe491fcdb8bfef20bc1687883fb2dcf414288a70219430090ba4169fe9c8ae4b053fd5adc1bbd0547c8670c9552c79d97db8701013a8bf0b7c847b092867c7dfcf5ee250ac91959aa1b51b2942aec3f83b77489bbfec5ab2e264ef8d5e58ce9f65117936a163edff67aed2b0c46e3aee03a48e7fffa1f2e8de42d61754a90bc332095b6bf2b38d7e98903a4b3c62454faf18717397589b22b7a7f1e1ca1a80049d807e9826d62fdaaf61c36f181dcfdda75fdc7e5c433bdb4c0290ee7abd07b519df5fb0bd0c8af66e34be7196ae299a945fb1c3ef309947fb81bb8a5cfd851112a548ad08fd12eaae3374dfb89d9116109530671da8f6c7174a5b8769d75d496032403a10b52198b3748571d6b079c43013804040373278fe9a25a72224b6076776b2c2d5e4dacc1089c17d5fa0a14e6266b8e6ea9cf0a221451ea8593875967130607bdf49ea2063e32025dd474e46137e9af7a594be8a2feac04ad1275300ee1533ef90c43bd4f56dd138c5301b269a696f0b6f10f88dc48ddb134c2e415d08e37f47fa57551420111688940de7dfdba56d80f56660bd323e52f4bef68ce23678f3f94d414f1787376b6977db080aeccb3da31c5d866596c7f847a21bcbd40907adc261bcaeca724cead52ea75c66cba3bbf4544f1231168c6c8228d8190fe0a1c6f6ec632e585d3c4519ee3624ad254a6e4023176116d986d7f310d73dfcd30e6247d9e1ecc6b391a15b7bc8d5c2e06c1316c2718601ad2ffc8e079e5822463de562422c9602f3d072f08fc992422d6a16000a7bac1cb47baf8e3feb9b2d708f74b499d18c2a68c4cca77a41863778f5c098379ae1871bfe945ba431b63bc72b7950b52684066f7ebbb636bb64d3341bfc742f5f3dcf1ef9e33d0f2c26784dcbc5b44761f3ec6f09c55b9f58ccc588c79591fcfc518e592db5bfd538c1dde58bc8e94d5b8d4c3394e5b03d3b4d7ff0dbd6e64eff6ccbf5748bf65426c2986b288bdacefbd59a1d604a26c3915c43e5d5dd6add0cabaafde965114c235c02597fe08f742b897043d46fa73fb6c11e5ae101d2477703f03f57fb65b02fce27465076c66bb987bbaeba7976aab186e3665f0829cd4f84756021150325dc9adee12136586f37c01d150ac58bdb1a9f924a018bef9f37fcf314651da38e082eec7c18f6ff87eb1db146aea661c293102f7c92334f09ce581934bdd599ba5063adb38f9b427867885b55e24a25ab80ea4130ebeadc8f685c2ad2024ae73824f32ce09b4efd7529c1228c75abac3ddf1b5e57b383061cad57d426a865d8601e58652b9ba878d23ede5166487c84362fef5eeafb3bd658f323d7d7593b9d28bbe19d26d0ce3dfcddae1c6a1bc04918dcbba6f1afa8d47d9b5df447a6d62c0cd2ed8371150342b530bcd4cebda39040a168048690e3d3d8c6661a59640a815887a712c587184a5dbfbd2709afd9ed65d4c11d8baa12d9cae8351a89d4960d97c5cd575c9cf195c696f5d3585b9e0aab21a01642f5a72abb6554ae3ada7edc30c6e5d8964aeda4cb07bf8cdb88787579417300858594957aacaf27853c2823c2b144cd7ad500c7bcd5d37cef553dd97714c7fe7f52a38dd6bbc8f63f6510840395adb35ab79ddf57bf4cdee8a561304d6ecf6758b79512613cd258375037bb19b12968cf5bf3c42c447b8845fe1e2198ed53a49754e342e6b779901fd6265b1e4c4b684439d2234021bf785465e46485ee4a2c08c52bac297d5f41854ee6d1af8e9eebe7e5dff6fab9a33b71349e07753bab148e02e13cef8702f98bd3855866b89d307a037422059d02df8d7fbbe8b34bc10b330e76056dddeae34b430c676c0d105c7cbbfe4c03b8419eedfb3af324e2a8b269d60f7dbdde0d6a416c2ccb43f9a08eebe4888ed028bfe0c594821cc6adea3cbb88843a87781f5c975b5fcc7abbf282718c021f0685cdb124739f67b59acc13d2efbdb80c2412208ab9763bd97146bc22c3c3f91adab3abcfe1a4502bd3456a0000a3bc810e1ff13366d727859c38819b1616adc0355012331eb301a73ca47fdff44ca0142e21a8d15edd672b56074b02d9b18e0d829a657cb4c0d92e58511074ee559d21b1722f1b21a4fd51427f6685659e312969732562f2896a95f8b7e4cf0675f7ae0f478903eb1834e7ba5df34b5b43fc9f64df7a910253a8dcddc71171ae7409efaa55880f7b4c90f8a0453009f6e91f76f0d7b6ef78f8cc45d9e5ed7ca1067132d83efa663953c067ca4db8deb4dc5ca261dadfdaba886bcf4866f0e1086b385de99661bbe9adabfa14b8e98ea64c5b3580f6179557ca7a1162f592404f9d24b8a83cb01227772926bf1cd836ea470ab1ce4d5952105ca4b254b8249569b72165c36cf7e1232be88a36957d83af6276d27d8d6391691f6be4cd6fd6e31b0d4927dede11e2dc8beeb284ba6c2e1bbe2a0944f0ff2bd3803b6e3679a33c39c8ab82af38eb1f08141bef601e5a952791a0d56f88b008c7c297343ec1ee72e95b7dd24fd2827642fe5ba460eb4ea595038b865d6e12d311d7b81b401df7efdcd2c3140433e967c8fbb255fed9591adeb977c9de7c2320ece483de61cbe4c5c815fa96f967c01549cb4dc7b2bad64685aaa537c7841e432e88227fd0697c12d857976c9f7f6b61610de408c883a095c37e0fecff2222b065a38a7a5c2922f0825783b5da5780b80e215b5e305b8b634d8d780311067855e0e36f492ef68b54506bcc8e31866cc4ca08a4e39dc0b58f2d56cee9d99b2c43d118140856c2072af5d81fe879362b20889ccfe81ce78c9173fcb2592c6c80c719d4c03160f240f4ca392840db0fe28c57c629dab28e3312fc2f644351d9cb7bce4fba35be2fd86e8530040b18fad71053c678ae6408f63239af60872a0ace32ffe677188000bed6f0c972ea00c30ebd536a0af9617a37699b2fb6fe70321db51fd8c3607e8a36f9f07e8bb3b1d52422f5a276f574a099d2d2cca5cd499bbf3e69eb15d4e76547a962541998b72bb27805afccfc78258386721515651292e0a9d244350f8034a2ea7af151db41a31efd71e0868d09cafa26944fb4382709ce45ce9ccc8020724a14898252978a186f70fbe4fefe7eb3eb2846911e8fba7a9f13850c0b654bc0cae468a1e30f4d55eaacdfd7e176f49e234cafc08d61879df83a55e9f803fcfdbd1fb7c5c21c4cce20642ba34be1e0258b16119046b96ee25ed0b622786f4c35b54adf412369adc6376f461e18d1f74ee0365519418483b88e9e1ac83da96ecb6e29cfdc38e063f195759af106b936a8dee452718345f337fa41cb986558202cdde7bca227824f499408c4fcbca51e774097e2a436a16eddf66014d1e5c0b1ea6a32570ba1b3aca504f3a4898f93b8af9bf546c1031cbd5c56deb6c771f1897a7f2ad06565a7d7fea19c065516ba37848c9019a404b747c429c1cad86d091fe40d41ddcd40ebaea2ae1f2a3f6ca6b6aec0155add1020561d173a3f8bb7e98b80f270917be452f626dfa1048bc072d1f3bde22176030c5e22817194e80e1ea9102d93afad305963612737b3397819b5422a78f629f53f1034f39283815ff50cf78bdf3e2579069ce0ad35d9a577f08c056593b15177fb008abc8c71327e48eaf1281177a10f9b18acbf9a453abae6ea5b70cfbf28687255aac9a7277f0c6cf552386fe8ac1db924d61cf72929c4227eba225b405abf9b110b91b8b61de2459cc7a857ac93a1c0f8ec5a14a812aaec5e5ecca2e4b3318776f9e74da5a565b4235106f15293c1638667f66ce33ccfae40e484e18fef1224f541dbd0c7925e9ad1843bc91986f3749fb4412c5e20534705516f005251973d24121c32bf22b39b866ca826a0a4f24176a7606b3c2a4d8171a23fb599ee2b679e6df26f8ed84ff4ce04f04cecfa1087f8bc0b711fa13813f13989f8b268e1302f7b357b1ffb0fdaa714046c4e8973a46a7b624a71b47518082cfde89747cccb19d99fc89809f23f42d02d167cbd73ea4ac7ec49ae12a92daaaa5f43ee2af8fa887a2d842403feefc27b651360b149cb334f3140fb02a90416566ff9bfe787ed534690d43345717326a18188341f1d5d1a826642b38ff5d2e280efbe83d925884567dc2ff02fb33cf81988beab3ca96ba9f917a5855d907486bef852a236eb9c6a9200e586058b272c521d87e5991f624fff90c94aa10826af46a3a9ff61cffbf6c9e93641a0e3b46376d3ed26111975c096148a5b044fa452234928cb4c9f6bce1c6e8b8ee40ee9cb1ca73ec216d9e66dcd85928af7384019cc2ddda55271427736ca2c5194606f9732a061a3ee9d89db371915e7caea42997d1c6707026d96ea54317d87846c9a77048c2d7535718eb16cc7a7cd07c99b2fb4d0980e948c9cc7d4bf5e1b4c95c855e9424a69a04cb74ce43edd012e8341a65f5215ec1852e31e495ad549db47810c1081d46827b054af9e62c48618c07707b61a97a3631441355ca033ad6317ef39509b8f7a30f6c4143da1902be9fee8224f464d0d4930251e3562908e1634ad59169fa9ce3d9d91cd87b17d6a0552fda76aafe20c7ca68c86bf38d8d54b0f94b0d3ef8c66725a854d5ccd9811f6dfefdc157d34a82a94b6897d12080e05c45bb327396d40c0525e5eafbbba80fda053e8a6ecb567f3085cd78a92e6a941604e6cf60f7f308cfd703564ec0622e001599fdf5e22c2c9942861395d9d6a992c16fc60f187e2f7b0e794e1127e46a832f625700758fa99c5775d6524f6164e1a9b1ce60b8f990e4100f34295c8c5931b9971571aab6c204644de027bcb1b33c1d9c87dadc277d0b2152d1a2282c0bc11f5649ad8e8d93e5e57db757d51845664ca3f2fe2291cfa51ddcb9cff1e13a9757ae829a971fdfd2f79e6292c997b7e52248e0d2e7fb58870288656aaae1ac30ce3e222b7c9dba47a04b88f3bd071be401f43c51485d217000b07cdee35817e9e879471f3372349f088c4a41a116e97cc5cc708502977def1f30424bd506356a503745391a245bffdc9767a3aa4ec52f19e5c502c83a7b35e65d2a70a44f9d52c93fd3f4e805d657a2d71346805fb3d4f722c5f8314de1f24e5b841dffe63eaa47b314020ddde6e74fe29404701f75c2241a8920a57ccc130244c48019565733697b34cefa5822c86b527c38fdecbc72fb08dd03415e83a9ff6d1ce82c1f12ec1e523b41f778d7eb1791e6b1e34802be6a0545598431c171cea7984f81ab61075a7c25dcd913bcff27770a62af3eb853201541601bf64ad1d5f7df19fb68ddeba27ae1ffa2e51249a718d22766741ea812560ae299e94192f71cd268638f602072786667db384b5c4fd01150d081f1c947123932e06559f02c06a4784decee5ced8273ce7c1b8a46a3bcbcc6909c0c90d702dc2a369f6092b54dae20d55a6bff02688045f597ba14cd58e6447faaf1ab6f89d55b9fdceff39243afe1588236751882b7d97968211895b554b1facf95b07f778352f77c8c48f70fec4ecf06cea485a724faf7f7edeb8de47f4d6dc29308527ec541c9cf6768c11e57ebf0182b541746af85b70ad3fa55ba8a3bc74ab7b8353be8480cc4d660675403f4c190653c60fc7203ca036f9e562096aa5107cf01bc3ef1934e3d3334bc8fe4b31c42f209d60dbb6e1b3d82b6461bfcbc93135bdbd79b240f4d982ae18ff303c71ecba82c30b48bbe3fcba57f6d1601ffbea59f72918236d28bc8964df6de5b4a99920c8109d90999094d069629103f770b8ea000cb7e21210196b9c748e20ac0e70641105900f0b9c320c2058c850306d0c8428755cc0a03b4949e52f3849a9f19963003136e683772d8e0860d44f81ebc4f4c0e62d438c54e3400d23440ce086dc21b120d4988e9647ae1c7cd2eb8a45d14d25003cb660367596b379a483398b4e0c886a48710f1750dec9fa4872c0980983d0800886d4c4ed6b61817c4dbc95a96b5ba6ddc56378e080e3a18c0060fd3020b3f6a66b8b1c1061f2bf430f1f81ea224868bc1fe272040b68e7ba125d28e6deee00d00788a4ca214a9cfc4b91c0577b5e27ac31ea28464faf183b617b209e932b767e236db46b98e764cdc86869ec824e2f386442426963d4409ed21442c691a4fa269fc959033fe4abaab10d152607fa722e1682f6e13b2a7a802f65fd243a4a084c46122891ef2a469bcc85d0515b0a4cd67d23d93ee16001aa6092b9865cc3254305320861862bcca28a38c32ca28a38c32e60aa60a6a3597356f5cb7bad51e640e7a90382e3c4c0f2fcc2297d1d7a61f2dd80fdf1f3404fb7b32f2e4cf05a101db70061e99be058913003913d3343360ff39d3b5bfe9846981851f3e56e861e2f15222edd846a2d02504da0fb479b5761bb7553a5dfc8ba9f8e2f770f11467bfdbc4c82e0f3e1993b79eae85ef661dadab753fa7896a75aeb0c7f47ad83c756c9e643e4bc649eb158d25a7704347cd1c2738be0dd31aa10d566898668859fdf054c7c2996ae176777777f76ce14a5537534d1b75a22efc6cc2a799727b029dbc13773a9d96cc94c75c68ab99729a8fd50aab1eab553ee1dcab5ee17c8373c7666ac6624d9ba9e943ccdd0a620e69341eb4175ac93553b4f42431773b260b33365334f643cc9de97b88f94f26319f6a78c46e5ee66aa66a5712734712577887489b29da75a2a6618ff9ca6402634cc05ea3805d8aafb2af4e38fb6ad5beb29f05bd27d6e7c4fa54f4ba9aa9ea9aa8d55cadf01703c5bc5815b42c6a577eb62c5eab6ba66a6ca2fc4d265a5d3117f64a633355e3a8b11aab31ea9aa91a47650275d52850d72685ba2aadd2b073b36e75eb29ed7494de64b2586b9de63635b7e9bf4ef393f436fc247d660318962ce8f19334019310fbcbdd658940bb69d3eebede6f1b751be9a5baa7cd7e7c4cb130e5234d374e4c54929a9b89f2c6e228cfbbcdaadd729bad5b2499ea3ced9051289544ccb7dd6e35cb4fdeacc642658b4bfdd075d2a4ebc0e13fe9f08e6fd74cf5ebbabcbd1583eff2a2a72e6f9fbabc2894d8e56ae95e745bd66b38ca7f749d3c0971d7200d49e3bfe332d1e1506c1bb440f66ba6fc3d8a45b76dd0b250ec98e8adcbd317591058c465b6fdbc2f06fc8f4ed082ec0feb72ebdbeb7874b5ac3ad514983aeaa8a30aa3aafb700a4cedadcbd37f2b12b95c102c2212e9b043154922d8a4b1964ef43a4219aa600f2e6fffb3d7e5250e3f041609c59bd02574795007895d3e04eee022da908b4b75915e28f4f66e18a41f022ddd2a0689b9dbc0de5858ddf2c49b907a74d219c3c5706138f1f393a4d5e89a0d9f76a3676835606cc4dc90c5a0f0ed74946d8a64403d0492266992e674381d4e87198d939066985133eda49ff732c64fee791e13dcdf751d7d42bbdb3c536b59bd2af4f9c3cf312720351df8ddc936c8c3c42e9d4bf7a297dcbb84d7c5fe37adfdc959eee5a47db5849eb3df81dffd8364833d700ffe077a6091ef9b12dc8113ad485b4e0f811283453ed16d3ee6e436a0532ae481ef89f9093dbd0742d0e78ff1dee53b0f74013f74a98442e216ef3febfdd7814540d03f70074f2489b4b31fb803c51ee7ddff9813e8db4020f109c59ec804c5d44f1d27525c4193294603767e20903229732983810b6a98064b18b4608667108316a6c17206685ce1292a5b9e4c3cfb6593ae62a6c0ecef9abb5ce57eeb70632626a6e256c11d5ab4dd9ce29331157b12246deccb04a1c1062c9b86d6b0e3f3902e86d1e7192c0ca2cf33610c960120350d4cc804fee88f09804b24501bbaa6c108d87f0795b6c326b5a9c70f915503fb87210db0bf0be90cec3638b697469ee411b03fc706f6f7a40eb03f48d6e0061becffa700489c201f4303f6efc7fe33076906764fccf4f3893ef727ee6953c1f344a21ef984f3299fb0e7530a255154e8ad4e2c637cd4201c7c32c613f5b852a6d12e670a2551fe42ba1aa419d8ffe4137f4e69a5f3522ca352b670ff7d0e3d4ef5b9fda6fd44295133a41e9d3dbf6a3f24741cc751e5511f39f6bf4f62c5ef93c889f2f73e4402249e4cdcbda4e128aa282affaf49d7812f15efc34be57b3951a01008c226f2073f99b886340a9e2a2f9b709d77bb15e4418603d08937eb555abd5ae79c140c7522138e6b7de7685de3fb5cbadde7a4b4d6ad3b9c935443c843633b3d10860e4552a794883b0d411e1a8b46a31d3b9c542a629a6e6a9367c508c1304030660ae64b0c2763eb51bd1da01ddf8e1d3b765870c78e1da11da20fbca6a8709c4f2a124521947e9a95d6596bdd9aab9decbaceeb68adf487ca68f549eb963dbb8f8fb3e13353e0e71a5aed4749cc83b766a24e271b6e6eaa8fcf47a7acc91f2513e5b23d349f88ff28429bf3f1b174ce59ddea46f230c4124e3a420dfaf8483014c6541bee33909a1546292213e56d3ba56476a29cc194cc94b32151fe71d430137cbcceeb66d8dbf0719fba7d0eca3e19d36400966eb54ed4930af33a0edfdcd41bec3cd45a311599a898fa89ca191d9f8cc9b47dd22ab9ce0c8946aea146c834f508db7d4eea3535ee69b81ace4607f2405f27fb384f3451580ac1b2867cb13c923de9b3895934c3d96358d2ecd643bacf2295db0ecdb68363ca715c75dfa1a1be1d60621edc038b488943a7b5d6de98233ede8cb6d1c6f5b7ba858ecc427d63a29b54cd44391d74861e0b7b98b89b22d98e67cd4c791a12e5af061bd8dd0deca1c7402085f180c2cc2286678618627c9e194e8693315b647c33ecdf6e3b39c2f64947d76a2008e61c387774e46ab538b8da9c5151e394b6dc40d81ff6171fe3455cfc1c84f2f3d75ce09385b3e70f0787a35ae4665842eba7fe2e8c90e6a011d008336e36513d9333fd5e8450f67f322c5df028cc973139c483fbbf29ebd9dc8a03c3e9bb54c970bf836213d5efb2507e06c570bb2879c034c4c3b917e19331b96bd64ad92d5bca292ffd695f3e47ebd3baf1a748cf30e7ab7905153fcd31ea565b8a44f957d16581bdaf8c0e8516c12763f293fce44fb2c5957edf242ced29e6281e68f39efbcfbba65004616312ed9e3ee81341bf5d2adb53f1aa4ddc52415d0702b9c41593dc46098beb73dfd1ee6d523f55aa8612a6244c6e7299559e66cf2ae9bb80de677c666033b0fc5c2b0c23517d8ad56b75daeeee3f3771faac35f8be7cffbe77201d61ee401d57d15612c2dc610efb7b98939038158b1fff238d19b00077df3d28eb11b2763651be759e34024c9f2a738dd99da78bc8e7d93380cff33561b8f38c75f69affd4d09d274f677fcdd01e93d57cee1f9aef6e6fe586754ca6db67d62b173a37eb7ee7eee9babbbb7b522a5b5c9e7eee7cfc369b29501171abcd148886c35623c056c3fedcca6db82ce4c9df9fab22fdbf71a6b82e341111b3e90720e61780984f37885c678398bb70889843d3d720e63fdd88f99412734db7b2ae99ea6013e5dfd988b90b691073689a41cca69741cc7f8a41cc2721625723e62ea41173680a2266d3cf88f94f40c47c8241fc9928f76a4e28319ffe24e63799c20088390480d8c588b90b5d107368ba22e88930a2479bac9902b53c5acdbfc914865ed785a1e9ff74ca74854115a806f207cde1364e404888430ef9de1fe43353d645933813e44302d1785cd0cfbbe10df4fd1ec8036df523821b3f749c03f7936a2fa08f086ebc4c0cba52ce6c2f5762c71e1cb8ff23821bb8bb8527d540a29616448e0b6dff723771d69674a50a449b2950cd1fbc54bc6a8bcb6f601191048bb83c111735a61c6ba6be71648dac9135b246d6c8c2fe9c6ca6bed78b93bd38d98b93bd38d98b93bd38d96aa6bedaeaabadbedaeaabadbedaeaabc166caba3a98757530ebea60d6d5c1acab835957f7335376e6f5745d189a4cffa7d30ff61ed0eb01bd1ed0eb01bd1ed0a3cd9404b56a6a4ea77f93290c3d5ad785a1c9f47f3a815a2908c76eb2f2f7c2de2f0ebb0bf7fb57db700df767ebc23e5db546ed8cbe443783ac89a5bfcb75dce07729087398270be3be39e45c442e0cadf04466e8fe78f0862cdccc59a12bbc828f1fa2127485579860111fe24db80211f7713b1c5eba82a8857ed31ea0686f9e3fd8f6f792753e73c6aa850fb2262a74b1f8b9ff42f7c39608128789d0ba218784beff7bcd94754d547fbf9d499cd2f7e84d3bfe85c777bf70b7b8e3f2f8d2ddb089c7f78ffee5bf9b90c788870e12f3104bb79a466b58575b57e952cce3b631672f3b7c4a779a46a2f493c9f1cb1a3b986a946e63d39598c7cb0e510b497c31dd1751ca99d295387441f8fb2d6da648df2295e1f630d89a292a5b4a2f7a797f108bdbf0f81def0f7a117a7ff08a1c12fac99a289738a3bf2f3fba1bde110a41f8f2fd3c5e788837e10b8f9726bd88a35b77f0204d8a5f2efd59e2214a3fd1d1752cba12f3b84e9e843b68b268c795f88524ba4d76465c12b590c46fe342229128e5cce8ca9017e26687415608b6fc43a050c7b14277c37e025933e561f88119087387b70a7e56745d3e74295ea13ffcafeb3a1b0a89bf7d83462c78bbb7a0c9c235f807574e89f993add3772aeecc1fd59609caec74146fa7a3b8ec7414e76e2841376162c081252c0c2b332c616250c1fe23711ac7e45ac35e05dc2f41effd11cffbef3f310ad07b9ff7d6b68f27ca405deb9f9ee1feaf6920b16313c5e32b574fbf5a23eeef8a3869f2c3f7a03f027a09fee0e307d0dbb76214df83441ffea08fa2922a1f47ec832f55126c72041463b85f47aaac0822f9dec79119ee87124545c3fd3b2a0922f1e1e21119ee07f960092681f2f90bf777627b6213f14c5f35d65d1f3f78df7df7c2fd9ef79e8f27eb15cef455579567c4955557b299ea1ef499fad04ef4f143f7a0078951501aee972aa9fada76458ecca80c37941dfac69651c2a1f2442976e81b5b4695f714e653659ef7b5f543f7de4ba7554f6113d5bf428b331c0dd0c0051bfbd5af900c7440039eb19ff6b88d846107501042cfa8da5e36e5c1ddddef3f3335927501c7a8ea9fe35cf5d3573ff7b3fdcc9e176cc666b42c6b38bbfcc1d97ff2fca1631533f5a1e214338db99829ac6e5138b7717c3226773c58e2cc9f50a6b840d9f2432be10434185552bc8f1f86dc808c175071478aa73fe40664bca08e9d71b681042ba36a13894c1a84b656cfcb9c0c875d3776a373328923c2fddc1a92f391dccc6d1af77334b7f1fe15be18eed389bab4b0ac21fc40b55610e7a33e141a1fc060ac21ecf71b84d7240b3375b128cbb13875fdc0dd5900fbcb54374a943fa95f04d8bf9b5205fb4dc8c9f0f65ae8eb305154ecc671d24f7ef4ebc6dc8ddd58415ef53c90573d0eccf1543a445135e88937d415ab21ecffea67eaca41986f5cb5de4c1c84ddf7943b7c83f0241d7433156d10822ae892baaeebb8965db7f51b322e6a318e67cb4bd559742165547507e458c24af581c260828f4a0e8135464cf5d92c5bb8543978029699ea0badf1043a62271709ca01117830e3ac0f2da682d86ba3dd1923a875459a8ac04f5e2fe8e68e09e8e90da9e00c960a0afd9d89050d1fd516eea3a8be4f82dff7f5febb3df47b62ee4b64f645c2fb5bf3515444665f249a741d7548dc430d9e4d266682e2296626f8494b10e47d8773de80bebe77ff3fd0a53d4e670d42ee3375712f02b799221314bb680f0716e9c42714771ddec01c384e94930712dc18bd191498410b3fd0952654a1a976040053919c06ef157cf123a322149f82e5062cd58e8d4f8db5373eb690a3a5dae1f152d18fa28262b3030eccd15241d9d9809083964a3a0d3b5e1cb419a68768cb8d085508c347356f6f58b454437030ca6aec252267fc250e7854548ca29a6984f926d4927234190281425fc552cea886dc800c98ca0712fadb6f22941ba8c054548ca29250241434508451b5b361d132d10ba5ab3801083015941d520a582ae934ec7445184fa41f251bd4400630f922e4023980f930e26bf0c0ca8fca35708616349554a501041a7e325bdee00431a8a9da8a12a88047257180c6d8523516b30cf0a8be1f3594a3e0e00226a8f580e23d2b70c20746d50ec8072cd5161f3c483870bf8403b7f8491f2de7bc12efb8c8a04cd91c234d11582a2a6ef1b1437ffd2850464668a9a0ecd0f80006a38afe8e8801968a8a3b3555c218a5128c200499ea8321428330df6087e202951ed50e475349a7e16341942cd4d0000a2fd5fc3a04dad02741214f4a97ee87770b21698316b8c04735afe38e27868dc6927e8ef3f93bc96162da34fd39f890b2bbb368fcb9f883f23f17239ebbec40f14765d31992537a37179f3f38e735e24d30871f98ee40f15765d7893fe9d2bb6b28ef602a677e90fc347194d9fdf37d3584d28aa49f6c4bb15b094f0c0a359e4a86101c9000043b68430822f0400eacf0c0ca0f76bc60c6ca142b5cb8b020c816af2d66b0d18d67dbb66d0cbd6e68c20cb618bd1304b9a28c1e54594d51071d38d0c2042dd8e8c6b36ddb36d2314460051598d0c61816c880ca6f50c70cb498c299a0471668cc208b1ac0740005fc6109d3c11c9f103e13c751aeb35d487be0607f900c305d00669c260f1985a61789d3829cf901c402e04d26ca82aedf08fcdc8385d0e798cf30849f63a8e10689c68ecfb206a4cf52072f9f251ba5cf32082b7c9670f0f82c9160fa2c9b10851e9f2515603e37951f9fbb0a0b9f5b8bffdc575af8dc5fb8f0b9c5e810dccf01aa8f5ad2adf8ab967429fe369be44e81a923c9fb19a43bb1c3dc26cf31703fe936769874711896a210c8d49cf265916babb2f34021fba42bf11c676a8e2151fd3305d905e739f2c8997e9d3bb3985a348d1596ab87e58dd65a6bade5388ee338aed65a6bada552a9542a95482412894422bdbcbcbcbcbcbc7ced85255d27140b16ecdf5f803990feeb2f36b001972706072ce9666f05e6d0d8a3223b0bed2c9d657a7796cee28592fc385349c4ae1b3d49f4c691378ebc71f49d9de9e87cd6b1331d3bd3b1331d9d9ff9dbfab2f6730dccb910c68530eeb91046ab95566995566995565b5d57a2ad126d9568ab445b331269469a9166a4196936f32e34bdfc1c5f7e8e2f9f6b463a96933325296748ff7273f7227672a6bff67357e766f7c993677ed20b75dd0fcc67ba66cf7ccdd67ccd9ee9ea5e73357926ab54299dacc9335793e534aff94f2d954a62f699ff78cd6955e47e3ce632f7a9b5567777cedd3dcff3dcdd5b2f5f398fb37c7496f3f88a63d16a3fb39f1a6df61393f9c07c64b1cda75dddd32f5be2b6574fbbb657af9aa759f64b9c8e15738fcd6a1e4eccbdc2fd493616adf6634bdceb5c913fb52a49eacf4c25c9f595eb8bd49574beafdc66dd9ba4facc544b49f2637dd9d295d791f25d8f27dca337a2063749cc3ffac63212f38d8e984d574c2531874d2289b9ab5d124122843adf9f7373639dff409fd32a6f7c23cc212ce7fd4333248e03de3f84410f51c0fb8768b88d0fef1ffacc14952d4200f1fee16ca6a84ce93a545b1af05474aa1f686e9380396a6e83e4fdc3d84c05b10006ec2489028e33d553803070161a43ad102c3473195d5a33e5c4fbbbc066ea89f77799cd1414ef1f8ed9944fb926df18f159c6b29465e993252dcb5a963fb9574b3e374fb372bb72f7e47ee58ee596e5f6c94deb5aee9fecabec3cd959d95dd97ba07cf657149f3d965d96dd273b2d7b2dfb4f9eab3c79f264e5e9aac0e7d9f382e2764fdcce89cbfd6ce0723edc8b636d9b8f1577abe26e2c2a6efd9982caadb15b776e5781fea2b7682d3a8be6690cf4aa2dd053a280a2c24484c42043111c0820812490c8472ce90b34165748216534024b5f695657b94972be73a8751f708246364b41238d43383e3087c661ceb5ffc94e76db170a7dc7d3b1b67cee44f0390cc16713083e3f267de0f309935c9f6b3029fca15a3e77987aa00333bc9c29269e86b779eec5f96c3f1c2b8ccf211e89f1b9c3a311189f3b2c922106212f89bcc42f553534417eeb59f2fedbabfad49f2cdbd6fa1ce2e600f780979733a5c4cfbc9c29093c10185e409d5e1ae0e5015e22e09d8c90765d681f5b9a15f550459efc8f7c089338256f9ca8de22e62e148198435308c46c7a1088f94f1f10f36914c39f999ab1d622fe6051e7013177dd0131872d86983b0c3187b5d56088b913b94459c4dc1d9928ffb0d51c1073b77a80d8ca11975c4e55ba5aa04491012b507c0e9f70e263627ec9dd54a5ab2549c33ae6820bef2fe2d9a209269e27e4799825b7b29ed2fc4555fc4dce13faaaf3f11f03e0975c3a858516de5bd0e259f8dc3d99c08b4e5a73c99d16784aab3c33d5573a8b6ff23964f2302f676a89175f54e587c825722db9ae2a5d2d5d658ab48972511509f850e2fd8f34cffbc348996cc96d1596157af8f7aac7e7b0878cabeb8169fdc7d9d2d5d25fbca88a3fa5f98b5633d518f8233e9f282dbff872a69078182fa4c58827e220ccc557e0fd5b365350debf7d662a8af7f771a6ba8b9df7779e998af249dedf6133d5aceff15bcafbbbcf4cb514ef7de5fde76aa67acafb4f9e996a2a3dc57b6be0fd276da69a8af79fb5996a0bbcfffc99a95ebd3f6dcd547bf15dc54cb515ef55de1bcb7b5ff1feb636538dc5fbdb9f99ea0bbcbf37ce9411effdc5fb7b3c33d51b787f8fb5815b635fdc0ac372eb8f17776369e06e3e572ec7625dcea78bcbfd7071bb57066ef763e5763e5bdc8ea5c5e55e59dced87e76e2f0cdcea73812b270a01df58dcbee2ca8932c07795db565c395105f8aee2ca89dae17b75e544e9f06d812b272a876f2aae9c2823df53dca672e544e1f03de5b614b7a5dc1e6f921be5eedc282e945b810bc57de23a719bb84c5c0adc277702d7c96d7299dc25ae12570237898bc4bd475c3951a72557aa8cb8f535515ebaa41ddee83f6a4b571476ff719f17aa2e9f93733dcc804bf253e91770b714f142dcd203118122fef3e13a8ec0edda16f1391f81ff28582402e24d5844114fc423408bf8a473a16a732e878328bd0f3e8837618e0f3933a7f4df6673ee863fcee6dc8abfce027121a085880fe2763e5c8a1710ae3a1511cf80eba4f44d7646cc80ff88b854923c15af4a226ec9c9f9073c04fee3c02210106fc29c9760919c27e210b88d85b88d1f704bcf813a482c8468f25329e74ebc80bb45491097ca962194fcb7422804a192cff92186106f42252fc1224a9e880fd138e7767e2a2911433f95de075188ab25c93be0b69c297d03eecb99d20771bb892a3d031620029144344d54e9157065d364c7a5cfb9fec3a5b225e77ff82fe79adae6dc701c47fcb9cdb9dd388e483ee713f0df071649807813224900929c7bf253098958e3a7120de594dee6dcc63e94fe939ccdf92239a29433a5d7b9394f64e6dcc6476e9eb807d14923e066e973809ba5cc0037cb180f37cb9f02dc2c6b3bdc2c693adcdcaf1c6eee1e2337b7abc8cdfd83c3cd5d23c0cd4d53ddec2f7cb3f710b9d95d03b8d97d0470b3cb6eb8d96336dc3c59436e9e3c3837cf550d374fd7cdcdb32775f37cd9dcec341a6ef65af61f196ef6550c373b8f909b9d557373c7686e6e59909bdb67e6e65e01b9b961b8b9592fdc7c42d557be91b94e9c8400b84e9c885cb84e7a60f1e6bf0e73d261989b4db885c9c2bc4e4438cf99931e78053b73e2c4c3d91b9d84387be32b7779f264f7c94d13e5faaab90bc17ee01cde7cc2398461f7969ce56ee59aeb0bfbd7d74c495513251809114c942e4471d9b9e190805f1b24f8644c9e30959c29f99a75b4b0367f3cad6435b0d3cd5c9d3a13ddde08db7fde4e75c3a9dc95656d53d566bb6aad5ff455592a19cb2e53f5ddde0873886dbd79aeb04ad54dd66c4dd7ec79c1623e2b1e56eb058bc97c66b4150fabe5eaf9a9d166f3469afe54733359ae1be7e66af2b85c2e97cbe5627263fa53cdcdcc75333795abe7058bc97c582c168bc562b95c2e97cbe562226b3577b9648d5696b7582c168bc562b95c2e97cbe5aab15cf5058bc97c6634168bc562b1583debd9ecb575218f89f5ad93aba647c562b1582c16ab472b3e5d55f373aa3dcd340b7d3a97b94cc65caaa4e94f3537212b610ef1bc52f5c92ee438657c728459c6743080a7b6f76ff716b56cff514aeb568493331ee3287f908e30d760ef8f82fbe90a774e4dcd4c757de90aab0237367553430d360707c70e017390360cb1c1069f6d032d0e39e680a1d168341a8da6330316d1f96c10626b84c410830c32d819689881061a7c360d55c4d36ab55aad56cbc6d260934adddcd81a706ac0c1f1d9385dc8d65a6bada931d49a53ce46b71c991886589c2136d870c30d56000310c00006e0b307d08548b5d2f1ca388e56a61e190011ac525902e040001c7098de3874a1b6d65a4b2d0e458ce49083d561071d76d8617aefc0830c478b438e39288d46a3d168b4d64b8f743812574b321645f249eb367a6badb5d6721cc7711c576badb5d652a9542a954a2412894422916e008b8cbe1e386c898046b04a65390210c0e2409fbb34fc278be050a488cf2ec24dd84c01963fc790a91993ddcc42e2e4bcfca9851c227af9d38ab47961ba266bb67c66b4dacf3857ad56abd56ab5e66c565b33c619b145402346ac901c72b04274d0c1ee20a4003b14a0003ebb005da8398ee3b818de9f8b819b41c413c3f8c29d54a61453ca365e19c73147447f06b1555bac8d86120fb600a0111e6c100318c00639c0012c0282dc9aff640f08e8a1079fdd4317b2350caeb6b8da126d21e21122e2a1a29cad292743f760811cc9b14740233916888e8ef50108121f902099de48babb7beb20db388e23153f4921851baf8ce368595c8d45625109f8c1260034f28345a1eeccf406a20bb5b5d65a6a3720941bbd5ca12101616516c0002b134410b601320e6880031c30bd1dd0852c894422914894b4a1a81555acaeac56ab1ebd709bce4c2b018d0c61616e9e0f7880858100150858224effc9228828a2089f5dc42643a54ccaa4ec08129d1c1d961dd58d83410666ce4c2693e9c70a3d3893c934dd90386ff4905a923989a4212ca926c022018d24c0d61f7eb055014964be5e19fe9340240102089f0d44558075294b320710481660e9c0fe1f03acdf2c7d901c99ab2905cbf728c8546d6743e2fc400ec979f9de86b439d5fc674673f5bc603119add56ab55aad566dd55665805d00688401962688202c4d031a601d402384038410c2670bd1856cadb5d69af7af35350653cd2967a35b8e4c0c228f8887ca50526285008d28b1408618c20279c0032c0480dc20ff4922204004113e9b882e44126d51453c55c4e3c344739dd0fa2293b351fb2233329958558825c2be5044046c11a09108d8178c30c22ee1fe8523961c71c4f43ec25a6bada51608751854d2951a8474841565246c068d206145494840a484049450627a2bd1852c89442291644854661cc7918a1452ea78651cc71ebd7094a533d34cec12a0112616e666ca02ecdfa48985b94ed0c0fe9f133b0198271378f2c4673f91695a82c160dd30681a3374602c180c664795cac0b47ad5ab5ef5156d4557b16a6501430c9956abd56ab55ad20dce0e21e39035225885831239d3a3d168a4a3a3a3a3a3a363adb5d65a8ee3388ee36aadb5d65a2a954aa55269d2ba718dc2ddc405bf7cdf78f582ec4f54bf3d85a3d168341a8d74747474747474acb5d65acb711cc7715cadb5d65a8f4899944999c96432994c5f9392113602a01123962c39220bf94f22919140c267237144e746a291e8243a8996404ba095e825e8124b4cef2596f0422d4b03cb7733644ac4e39b6771305c0c692382790f2d84511a4dc433532693888753c24a0034a2849d5962093bc384896d32e3a48913273edb491722f908620a62aa3912e4450c30b2b4aeb45aad1a31bbd4984c2c21a5095827a09109d8179e3cb12f5080029689172e90ff64134c34d184cf6ea20bb50f93c964f241ca668eccd98463be31dd201db942436ac29e9c78c23a011a79c29ea0a8c0094a05a04099de50ba9025914824124986f4824c6904f3c28de3d8a3171d0e48474125e7e6ca8392020323030383c11c064d63068c0583c1ec48868321c7471f7d9433545c0a97c2f9388e340e2a079dc36d4ab42b57b2b89c78020a283d364fb356ad5a6badb5ae56abd5eaa5573b4c580a804698b05c134d58ce8927c01c1ac33c7769fe93503c0105143e1b8a2e54e29cb0a427dac0fe504051810a58923f1438b0ff07c5926e148ec60eddd999de3b3b5ec861cef22cb07caf42a64c2ad971481cfaf25b8e9e43dae4f8aaf6f382c5643eb310669aa9232613178585021a89c2c2b0b363618812c5f608c39d91d2634b692952ba50731cc77140de9f03c205a9b25a0179c9d9a84c896e301f443c724586a674ba72d2f9d37d810ace07eef111ee4895d50b0c2baec4fd0b0c18f4d22c32ad2bad56ab5f6046dcaab45ab1b8996e2a40236d813656ab9056450807762b441755a5ade82a5da58a8c4ce924339bcd999c81c3e71b2f77bac1cd58b3d9cc72239d2b2f586badb5766645739ce31c75eea432a5e0ee94521a274987abad46abd1b39e31c830819f3a865bf6a2348ee3388ee3c6711cc7716c58c31ad6b0554b018db414b634658a2d51e929465fba3050d15334154d05155da84b54a69853a0820a0b5880ae5694ca6ad2aa98705841db8ab6c28ab6c20bcd59ab215347688f2171605e7e932187c8bcfc3681b4a12d7bc17eba2e0c4da6ffd3a9a657ab9594957a051ae92aacc80a2baca84a15db57702fba282cfa8ac6a2b1c0a20bd952a9542a9ddebf742abd2071c34e214c87cac0bc348ccce885d56ac57a81010bd0c876735d03031b4f6701e6d0395a7416ad456ba14595d2aab45af5190dd379271456a2955ee7529a9c9943e65239602e8de385c6a2d1ec88fb925842bdbc78dee6bdd0166d792e97b6e48c184ec1d0b9344ba9d5c221e1e8f410ce6deaa36e8e6889606755d8999d559105ab691d47cbd1343d879f7c9c285fc1acb5d65a3b8e3efae8a38f3c5540237d856d2caefcd758d8be406300cca1453c8d81e6691e9e2e64fb029486814a8587278b2c78b4b8420b5adb82ce6185b695b662a5ad78214a6b97cc82e5f71599ea557d42e28c5e3e1472c8cbcb87226d609ad563af6a6a27dacf4c3ed8ce66b3d96cb69aa986d9d5aa5b0bd088cccd760a566432d05cc8dced3fd95d3417dd4577e1b3bb8b2e44eaee6e8e76ce94b13ea6f5555ff505732b0baa0a6a0a5e76f4f2fe5e8e08bba223b23e69ddfa8c6e98bf370c3665ac2fd3210c2667d0086130baa1193a309875c3be517a971a3bb3b32a49a68c6ec6388e9ee78d33e56648547b1ab85de68dad2c60384cce8c46a3d16834d2d1d1d1d1d1d119c7711cc7d1610e7398c3b4d8c24e2103f6c70a1719b0a49bc1551720152e2ce9664bc3fecd82c34fcd028dd89b3d2c5a9a654b6faf4c63e92ffa0b9fdd5f7421d2dbfaaa6bd4596da3c22a0bea2bcb9a8c03cb1f42a61a365158e2702f5f2587e8bc7c1ca4cde8ca4cc6e4e8e3486a989d8d856b2c8d65abb4b134162f6467724635ada5d6566b376bb9292fef6fc797b7230ca8931e0814eab72f62bea81a976b6772c67f74adceb56f348d1b72e6bbca4d72bd51e290dedf93227174dedf93a28770efef51719bd2c38819354e54f646d3cb88b94b3265f4288ce3e86738cc6133e5519082fb61eee36cc8991f344d7fc96713e535dc5ffd67341a8d46a351172c2c57585734a0012fbcc0f205ed2ffa8b2ffa8bd6801758bef862031be0408b76ab5bd3bb5bddf242dec8e13c63f9a65132d5575e92745e3ec84a9bfaacae92c4458739e93a4e72a7b874f8734bba1cfea625dd0d27b932a24ba864ccb75549ef149a19010000008317000030140c86234116885992727d14000e62a0645852340d08e5910cc380ce18430c000002000000003252d3006de4f975c53ab994a698dda4a8ebfa137168948145f92f9d582a8423eb2245c3c373b4b33c6f30e821a83e21cca28506989650356c81ec7f8f22ec2a06b9aff0a2cb3b88dc6c9d67dcca81a70835e8d9a158d85ae2b04aa388ef3be6ee14966e3d9e9a9e499d3f9abf6d3e7fb73d67a6de2a185cbef1570da6ee03f9ba73cebfb4007af7e4dbcd59fea20d4224c3c0f7c2964208225aef0f1d69f0ab4a01a945f30bab35108bfebde2e089cf7ac347679c7aa7fe6c32f6589cb0acbf029c377f26ca80bdc5d1106c5ca860ca5a0c2568ab61773bb39bf86c06cec1166a7edff100347571f8cefded91af533bf4309b805afe2db305d75dbe80443019049b39576f482fd99abae7f6b131fcd35b37e94fb8f95c855a40126cf04d5490fd38621a9ec56d361403447ae1ddaa6188b3520dd5ee0cff7f300577d7767f7afb71316fe6e8ecffbe7c6ddc2047cf094e99e73dc55cd643cf4dd7eb1922480eeed99a0ff2c9f9d3dda9a958c128f9cdc024d365b1d523745f3a2036e2d747ca69cca37482fb375d37aabee5dd751950d34087fa24a4d7d46ab4791e17686835dc3cc7c57a1a0d6f1f63627d8d86dbe79848bf564ab9a84932c951896e923acadf54755a3e147d2b24df274abdc5afcb451fbae4cca86f908e471af2a32fcfbb1454a69485ba567b488fc6d867f62b234dcde92bdc2367142ffdf2d643d9010925e83134e8c3e8fef9c623b63362fb86fbce1b3ed99a481a1edc4480cd28b7ef4b61c66bad9732c4b9df15872b86933d6e56b8330bf176bed3fe8fa8d1e109a5b964481d265144a1d1b5b03251899a390a0bca37a5e78b5199e5b5e59b3dd0907aec78be897cae83d16f1cee07db5d001ea36f85937e669f911ebb346316df34f3c29c5c1c030f3ed4583108e9de4c10bb213a8a20bd2d9d35cd621665bec34a26a1cd8860a1b7ab4def770dcc77a7b7bca82375595a21098f7d919778ab836ff21da07317eda3378690c66b42901a078f34df45b39a652f9b6e259f617e71a29f2321c7402ad920e8b69791a09c90aae2e93eb91ba70e13b2adb0d0ca07a49d67def386ccfa7d95a74399f40c4991328262d6bb958b27d6d4c0926e82b0ca9f2e54d2265f79b73ee64fc5135f4ab7463da7785b65f259a4db500a55644d33d13c399a1efe351559fe0466a5dd01a9b55bf47407d697df72c47cd20e45172bad4a376e997dc9eebdc165f4b4a06423aaf7b127ccc9549152159cdafb57e020fa106495e57e03b82180cd24702749f1aa022e9b2f1537872cc7120b5dda74e3adc1818370f0640d0822b99734e4f6cd4d5554db14077292723fe070ab5b40223b14b04e4d47089a6e96141cf9d3d8331c00e2300e02563c0daf5da76451da0dab41a129ca28e4e7ddd414af68d5888f27517883b3e2f24f9cba52ed07bad16e7d518979a8d38774bb2da944027ff7cbea19bf67373e612feb117fa4bb25ea0e928b00c8460f1a8fd83e5ecc8b2873588401c99a4c3ba195f917e4b749bad38fe61459dbe457844541c15ff27a5d4f76d49387f23546cdb7383714e373695fb3be98df66db5201e0e2158db9af6735509239ca3c5f183576deef2823f0e56de8d54b835ee1b0078edaa6ad99112165e2fe631945a3612ef2ef0e9b4daca9785c945ee37964ce196f7f281ac30fa6aad86ee2aeaa7032cc59fee7b8e364c18df44373d6ad62e3c97a7f6190d53290ef27ef7a15ac2b2e8348f58b9bdf7efe38c67d5d4b84bbdb7b36dbbc7d9a5edc8ef3d82492038bfc70e241fbc68d3777ec459218e5774f49a7a781e5d9c2252678020d5a97835a6534ba21c44664f866df73c3431f024fdb66437b819446b46ff686f690c96d722dbcecfe7bf00e4d2be36832bb99fafd5e63143b6e0678d8ffcc957c04601ef869fb5198c93a80a7cad4ec76da4830b330dfdf8709d799af215ccaaa78d9bd6a1448eb307f70d913ac44bbe8139b5eb6fb798c665f174593dfa5b22b6f30a2aa62685e8248e42dd944ee3ac2ca2f9a77705fd6e9668243ff80ce5a30aa0032d1d3e33a30169094897ba254c99471dfcb238592b23507255bc40254622afbcbe6b466526b0d55d928ac37264e0033eb77f5ec212159200176d8b8f3be7bc2f2cb36b6a9ff02407ec0e89c03866031f6021edc3c35878f5fb6bd66b86401dfe25a116c5e5375285cf60179bc463860d3d05937a6990458c8f616ab4ef40a5629944ada6333726338116aabdf16b783814c18f92a7676d78d359b6dc67dc7d5369b0f27b122351e43b0c0518acb022c4dd8a054bb66a0bf48ab8629626a9cfeb9ff346f54d5dc73d628ad8a3d6b9c2f1ddb882961439a98dbb96a7942552ab04cadf7279d838e64acea3e0add0b246c7a1297bb7c99569ca4ff0841071d3a16d4373b027242ecdec2da1e75e59a1bdd179f833382735e795f0c6c7f149b8f3a2c44154b207b10556b8f2c13acdf7696493aaba0391a594ec6622746ee16b33796b8d4eb58e25ce579c46d1a8f309712a2928f0181a646e3fdd7985053a371ff3d26d0acd5b0f71e17686a35eebdc60b35349af105199a3307de2a7006b15e792d2ae50e29aaad8d5c59993edb0a7cbefb5f6e8c2ce7e9a15046d530087190bbfb9bc9584fa05ae6ae8409f964f838680739aa616acf5a3e2271343e4a8e7519491685b069a971b1bfd7e1b9dca8d0dbedf228352ff5f4777b9099977bbadd1e6566e5bd1d76925369a22e4ebb1a3941737c86b1758c10f274ad0019456332ea6dca087397119d6546a0058a93701d942d4687a518f77dd32996dbc3e415de993f48a20581c248357973c8b6b42e3bf0b092ad16644db15783782e8c2a1deecca1bd77527a7f3d726576d6f84d8505260382d07a82081ccb61be997cdb27c446b168d2d42eeaff7ba10317ebfbbe04d6aed7196c75f75e5a6d8b9be1228a0c7492c36887e72b39a65c21ad18ec236c250d3030c03e4dcd638b26c38916eb353d2dc4eedc2ca16a16ec28955b8876c88b8166d1c16631bbae41b026dfa759f92b7ebcfead590e36cb1cea0cbf633bb82bd0cadf28e4264ea2ca7cd1ba2f11ba2811649e3627a9a63c2ab1234245fa89943b3d5a244f5c06b3e9ae4d59cf75bab75a5a9c3597a26ccc775c870e486388bd4318171e2254d85af999ee7c285b27adeaa5fc2c82b8310df6f173aaad5fe049a1c6da2c1c31278267ce30307470293ed916aac45ab5adae8784566eabeb0627612772cde3a4ac7cab43de1ab0b7c2d873f07c41959fbfb126870309a7b854336bc984e3310ff24b0210cfe3f20fd99d1f9b1a420952550bb8edc43c8e0b5c0f27251a23a5d9a06e19f67740bfc353005b86fd8d69b4196f427f97aa0f113cdc8c310cfe78add8aa40742f033557fa3b0c66f244cecb703b4d11bff069a25c75e49198e33efc13c99cc8e67bd2a9b4e25c651fd996815e3c19a74f2ac22e2e57858bf7bdd4a05e8d1c0d96d480bbe1e578466a44b3e1cb189110a85983d8612f5c73e5ba10a7996e8b580930879d00c8fd45b54f53941bd6fc0e2cd9c79b165d905e9f0c459461a6cc1c42508d3d01c2d4516783e01e654761171b0ae7a60395e8c814768326b05f27ba4a4bd6d63982b57243ccc6c885b703c69f442c2a3d9d42f53c32deea29b975a384163baa3d9dd25e7399fa4598c4fa4856504a7133b0b2d131a99da89a3413def3f4dc0cfc78947eced0d3196e04c93581dad4861dac6873506b8e9e554f34f11d5e15488a7c53fd985809a515d8c6e8d7a23461df55f6d32c5dd30c3ab9c87fbea9d8e948c8ea2baac3d15576a3c7f928cda6930acea6f4c143e1c28a1b4b703ccd53f368a7dfbeaa80abc6f55ee838605cd7aea57ae83b99d62c81e102ccbe2dba291e263f6566318ea2fe6a691242b7d01ca860f66c318f0b55dc83c50a0bf2d89602c3523452318e586c9bb6a3ccde6f822cb9e3aba02b8b1b74592cedf3729f3848916cddef72ed2ca492e59793c1a82483adfc6d2fd512af17d0c767b0eeae88b79a79e06ab633a05bb1849c4bab37cc52a426cc612c08dfc8c44ca7f6f32cd6f92f8d4968e9bc99931856764998e524646082950f190a5a366663accc391c7520eb876722341b8613e140160f14c83dc027cf534cfe546eedc9b4bf0db4735ace0eeb50e3878a4a0673d4c18d465949b24a5e3c4245fc13c42168a4f2fcff2a9e167e99a11d661329124ce927c38424b9d34168bb6085208712aac078c2e06e8209ffedf706a62d1b90c52b578f88a446901f06eabe1de2fd64768ed08cc36f5ad6e9eac86f99fc718b3e564c1a8c9cba4e4eaaf56f099efcc307cffefb1311b86800c4d605fcd280237669799154e19b565870019fd9d434361d6f3bcb60f3a25ce8ffa5cd0731c069102ad80916073924b1000c3f6570fa44f8d8521596f69c217d910fb1e979b705bd2a2a8a7883ca46900b56c45160d1a9b30011e71de986d46b27dd6bff91d1c9383b821678bf26f2b596dcd41981756581088dc915b621d69fc9382a2a2585fa3d99defa5d7094b6ec8d15689e9d696a6b4a4f819313d01c3a0e16d8ee1c980d5b53c0034a5b9b74fd89f1c0023361225c84c2879c4f9c2b2918a87bd5cf4b7e120bac57f2eca1a9eca2a5ac6159eecbc4aad12c24c7502efc8fef808b11db87ef31e92cf3886288e28216b09288e5d74ca7bd61276061fbe4f46c683512fa53812551617a5e1e432d201dfaeb74d2afc326fa9a5a015f03514726678210041c14151c0118c103a225d7bfb09ef9df755e2a5300736d2de2974ea3a1aca46875c51b776dc49aa612279355b1debf941d317ff09e676735d3271ad49c602b30bc27c94b785e64b4b96ebd38d5add51bd87f005ea66fe5a0beb3de2e58fd8e22cdf3cd598eeda5b58d981b28d587536b62d1115f079e9ebe3c8c756ba4b1789eed45a8c5490241221d73e4d68c50dc37cdaa0ec019c34d59cda24813ee711bc35bf5670865e380a8b6b9ea57a0803e5c3c65c2d8e64b018b67eab9828fe276fde0a87c41510ea92029364e5dee8b83495148edcddec46f2e0fdd1656efd4a38036334ca614d7f2ff54b8799f20ede85d419b126875ac859c2f3fdfe6a2dd0636dfd1ae4c02253b844d79e392bf7d3b4cea4c3f872d23b01d340de5669c4de8d09d8f4e2b891e5a684b82ee0097041d1c90041db81909fa5a4485761d4462b8b9d0170d22a2f0c6bc35cee4626dea749c3784fa717304bdd121f2d855a3490f4f7e47a4fdab403f56757060f2bc4f07f59992726e83163c92af0d77e82223433801155a6c4e3968ee4be8ab26a9afe711d4045f709b97438471e840ad9075af2f6bc8382fda8012219b274f0af72df294b6d0d68fd7b5cc9cc9f3a4cea43539f92c39a7e8066b7de8f3d4a0529bc9c6254daca9f5aba85b20fdd403867b17c1afca8601e6ab32c76d749d8d66b383761258f3700255f12b78d44ac4337ff5ad378ad3d2e1daaba3d8c7309b6aeb526823a3cd753eb0f08aed5d178b79f5325804ebb838238c6b457f7cfa7c29512040eb707002c099f6a3b92e135fa80bf8829df7fbccd0fb326de93d9c957ae7e8d87a8f9e995b91a22a418dbb58c3d134a5293091dee9e116fe12be7b4e3534508bd783c7c19706ae0a793a89d2c74100353746c013da47c33113dc6a0ba44e385d7d34f9fbcf15f3060c9bc89ff6e7e07bc704e379d134b2085a6762433e793964a2a16edbd68d1674a5ea3698b3711fd3d36fb1d3e81c0031943e7b05978d6967262e7eac3e8eaea91d0c7792f07d74282d31d7e5d30e409947d41aea07a72b679e74130c52f6d7973ed24870a231c38edd128f0c814da4783e4ef3ec0acc5073b035ff5e8abc819e64e8c9659f41935a42084aea7f8e1025e326a148be9230aece5d1ea94c99c0776938c2cf42415c2185672f240f927a676d1657ffffa1d86074e00cb7241b0c5c567f1927d98f0003de69205d40ec3d8c794882254c41d3f94af12293d1012791c6cc0a8ec0521f5a81e43ec8c9e5e7f1f12e3528f4f77b82dc34b8e06d8075976f75fcc808ece002951a53c79af312dc754bd6aa6312a5e4ccb9ae4e9bfa38033953dbdb8ffd672dcfa119a7156716a0a0968e91a11cfe02f8cfb18b0ae3d96da8a0055cdebf84e2500a554118716902a5329d81fe55d671508b2a84792f178bd1a627684113e97a5ab0ca7304b300b4bb8449544115618b4034560a3d6760a3f778debeaf8aac01e8e43033a31e20bbd341d281bf2bf94fa5fdf3e906aa2b3700b9a6f0270a097bf0d46a4bc8a74b028ed9062c78d833db49947f0d727b11433822b3655f7e268fb5838c524a32383a53612abcd3bd82a5ef42f20864a91377c6ccd7f208027af0214960388b9616e4439ed11427f721c960e2e8cd75430098660e0ed4c58aaf66b195e21a040236ea52496193b23042a0f4e158bd6a40517e416bfa39fe74718bdc9ba1678c7545e034b28d11b3066e2e5d6a6d4766096d75eae884dd3985f2dceacb8c800aececd0d7d218a8ddcab874fc2285cc70e50337b095ef13e719b1ad149893d02b029123aeee4105d78e83fcf8265ebb1a4ba00b8c1c149fbeaaf9631b04936d33fc87e405aa972b01e979123033a056528e4b2f217a182d79ca9a0e89eb42d590c642cd6f333ff45bdec11c4dce4054603b8cacba41b8b61bff420c678280659960a9707bd3ad0d6caf6e57c729f015edf0e4ed4e631b9f354c2ed0ca79cb15c9865454a7d2cdc70557780a6932cd90363c471da2d9bf1e717b1b8215c7bc5b071f0e4c37c88f886cedf6eb2c6b2bbb8985e71278ede382f500552e82add15c9523e7c9b3b1d8fbc06b2ba33cb27dcc8386ac154fb2aafe719bfac0156a90430c43857962aea4f440233a52f95e8ea9a9183fe4b211041205f5272621b4e0a614c979918bd810cfa5a1a5b50778b8bc7c1e2ff286858e7ea707a969b9abd3d9bbc4a0d8dde9f42e352874ee7678939b173abb576e20a83fc5c76def41d494d4021434f3c43683ba1379d4ec553161f09a8758bc483af1471a8c97e3d12fb72f4d171f4cc46287f61187e83ec5611df4ff80658636824154dd66741ae64ac2836bce30bce2958412ddc25c0f7c06749646d1020ceb196d43c672bf881f43fc8856e253758d8fa91ee98534be27ace121d7aa6d0f863d23d7751f920c1d8101869ed45366d9cfc40d1e9447910c9f5919466ee5bcf8f1404f0a19debcd2f63c4f645f1cc25a8cb713a402167ae9316f2b700217f15bc5f7281eead463c3de5678bdc1c2b110b3432e41ccb7b79c6808f787fc7e4023127c4936e8788303692cdd238ca6b65b2e0d7a2a9e09ee22e7f63d49dcc7d0f62658dcd081608af7698cc17138656bf74af46997a34426268979c85f3acf3e68f9f840e9053f2f63793373134d0d8a5f31571a9d54a226d5bf1d6f593aa92e2c712c186bba0b9b0207b54ba0ae7b654dad60f31c77f8cf6264c87739a80689414bf6f683e644cf888d925d256b4a48843f809d95c721128b4598b98e79f0c21142fdf8a509b3df987b1ba5176747ae70096814d53f567102ad1ce984a1a5e61a66cfded4ef1c319d0b8d3d462d15e268979103589356eddb89dbb5c6ecd211780f8c7875dda9ca1cbd3ef195b9d506074d4d29485d25f1d148ea96a57ec3db749359cfa9328123322ac879978bab3e45320a6bb2559ea40d185b964d6dd8d6a545f811475a8ab0f940992527a8b55c5f90577ee9bc87d1c51b5ece7a9ea3498a2f6f0183740705205d970739fe642e37af0081614b6f31c8eb3122f39a2c393ae667a58c652565993098292699b4a6bacf992eb48c17b0bec35b9b16aafcd9d33f906ecce7fdb8916ac809da8e94368a0363d5df4e62eade6d04c26a2af06c9f77e03134b5576bc9c0fca5936ae6c9698ce6667fc7fc4b4b44af7d8bd5f903b5339f65985f9744e0addd45e090f79388ab021e0dcc31c13c8598620992c9365484fbc22b3d9a8f4a2c0817d764028612ce416b0122388928d159e23a3b5c0b057b5b7349e688218aacb1f6a571d26c4fe04c967832639b98854bada29b4725a11ba69540d93254b8b62e9f55c7b9c33e6d9c2a10d8a6349490ab2bb71b54ccb759955fe11449cc9b9a7565840973a9eec0fc9116d63b8f692ff5aab8806d751e3c1ed24fbd465e273a640f9cf27e935130f6f84f90a98453c11a4878ba0d4151a8d2c063874642dc02a14a065871d1764027484a0c061ec4a20576d90305a1dcf7ea455cfb3b5f08ebf881c66fe0bd370ceb8630f807e8e0c1b170b04c136c5b2654c66113b11a3ac10bdb5d61060a41a57fb4fa7bd78ff11480cc04971501a0f6971e5f5a77ecec3e991db07806c3c182c02ff5902b606ec17ce3ae3098013dfd8229ce81f25c58a7c3852604d0a35da7523044cdea29da45c10bd3b983298b94f64e752139bd243f0b1a2a17cb0f0589022abe325e679b325cb48828eea3140a8002c0f80e999122a5ed92d6a1bd31e231ad8cac634f208a380ec57dc6bb0c79563ecaf969357ec0c2c10558d5bf21f65fe77f9893a354d775b49a88d1a53540b193420b633543b371c23d6c3ab2e1b21c218ce21e26a401fb8059fee6fcfb032fc99f99b133019acad858f51c15e6f534e64bd704d3e1eed38d22efcf1818771767271269f1c2b14d1ef4beb117a122469df493892827d46b62c72549edbe7d5ffd3912c4a7fb27a3d85f836330c58bedd5efcc6d4864f511d2a47447f650ec4ac4ee8c494d8601217c09932690c8ba1d767ff966a10a954628d008518cf0d9097fadb33752e7ea7864db860fc6b43ca04e1541a1c630a93f58ca63934b2e9c800716c954e818ae38297abd23a262626bf89b0f3c92981c2c5308a379c0304ae1d9f568cd31bfc64cdc2099ee156190ba8318f45c2f5f87cd66191da03f5caab5156afb4d6802b33c741a30924af24017b7324b1c96a7a63c8a47d4a360a62053ef9792e136b42aaa0a79f03c6bb3c202e26ac4355d08304e20d51668131f83caedfa413351556eaa112ae457e2afcb6f7a92ba68da8b08149b30ff8b04f410c7b4262a0f03936ee0e23b433994955f8f1ac030d13fab6fce01f29708deb63590beb7ea48b4c66380e9d4c8b968338225cc7827d5c4811660c6c74e622836c92893f25d826433ee3c5beb8ed2fe736d91283f111ebd55c18676b382d350fe7053ed41800bf2c1f518cf75562aa13a52dcf37e3aeff84caa83b7a5195a4fbe21d48cca9a12488673a84ae87e7691b13fc0a555ab670d931ad2ee566ce32ca4b8bf5f1177dd086507c13d8a5ba0bd2fbf09caeb1e14f80d48db4c58958a46575c586d4c6d2a0abbecaa885d24729b47cb5c177e595b5de2147c98e3180bc9a19d1e384ea5958b68fe07f8b0eb9b793e7d95498836a5cccb623909c23cfcc0388c409df302febe4420c848d5e3afb4d0cba7f8152ac265adbddf90f3a84ee52a3368f4ef30ca0395de5c9ef58dc1ca33a9274d51fd9bba1241a1dcd4cecd29545f1b0adb228a82673b6bfe5158a46be76693ea029542724b515e4cc187a7c6f0a79c3354616b549d512aec6f2a6a6215d8b86a4cbfca5dc62aaa66d591b017f4605690d8581d1bd5d0ff17aeb1d982757c2c919f3a13fe811201a20c17b9e9de0d625325b7e0fecb2a3e1e383168030a92e8e98e70ad67e2cc08d55f20e74e03106a1ad15b68f3b42c3bffbcf966941b2144bc3fe2879d27ae69e712e8e622ffa248428410080a3a2e5f3707479a17fc8d4fa9aac1537f1e77c49ebb31e88878251b6773d697150f4523b57dd9cfb117298ff8fb5f4bcf1fb29242b0174b5fec8cc9e0787344a21e9d331030bd63dd548f4c5ca9faec2716748ed328bebb065090aafac043918117cc198e87d3400a4f0201891e51d904c4abe0152ed58c457b42f15dd190d4efe3a7ba6169dee5a5fe48a95ef7baaef109bfe45bcd0169bfd76dfcebf1ebc6a4f51aff150d11a5fb9f1314d0007b861d707ecf1e3a23b97528d06577a0b38dc7fffd9f98d9b2c37ffe855a9262f5890e207378f33e14e3236a8748fbf147311600f43f7e32cc846124db82fdda002765dea7622e541866bb25bf13fe4131c1f16509da6fa8c5e4c32601f47ede13da73dd18a0319e17b210cf6edc756563a221a8e5e1e813bb8a989dff75a399f0c8e728169a4e4242d27112927cf405cb2cafb603e162259a13391efbcb2addfae7bc12d0eab2dee377955d5fbb9c54ce4a686a12aac530bfabd0fc3288782bdbbfa6bbc8f74e95371ed607d8bb120898afeffa00da321dec1778f9968a3318bd8fa482e71580f378221cc2adf0a79c117b8e10e8aa86f5418b81da3f3ea2215f7fdd548451fa59e6cfd6413e6298131069194221b9088050086df4463084f52a8836aff3d17d13eb61a650b9a2c53ca3bfe7bc50d9e8cac9ad0e2e7822f746f2ad34d12508ac372abbdcd1cc5543dd4a000938d39f5b78487970e0b42c2efd089d13bc593ca2be85f40e90290adb968537ccc4428b27b5196aa4d91a66eb8a719b03c42360760c6db50c76afc3fc6dfc9bed2a73064916c39235f099605f9589805a9d197ddd3633201f4467340e4dd467f4b2c36218e3d0d16453c228be2e1918334a3c16c88e41b0fdcde9e46f34522c1a1ec1de3f82f4afb926bdee57a1e2af08c190808244cc921b467a15802db45ec1cb83c71e655671ec0fae3e6f0375e96aa5d860c589354e764874323e5c9b564d1ab549e0d73a81cfdb8843999baf071a5e1bbceb887d5865385e01ee3d4fa0ff3c7827bdd1c0b9a100a830005747d707a1535ebbff14e5e56d44370716cb708b61f01dce980a971209206861208cc944860e7d385f5cb6ed53f6488cfefc72b9ad4fb2c3218b0084b5afac6bd3d58839b6a574ab91201164804ed88196b00421c9f41f84fbb3b93fca245621676fcda1d3237b214eb2215c3df47bfa605f12be0573585e1525d6ca257b88a32a406f1ab569d4267b6fb8f87ce357ad04c4d88360eb236b7d9a3a89e71776e4850944cc6fcb461a7c8ec555c9f95bddf435a7ad910a84248d5aa82062c439b077e3ed77c1e88fb07730d3c3de65310dd73b1e6ac96f5347fe565e600d01eb123c05c27d03ee412735581ac86192106432bca445c242f8905d77fa9a2c46c404b3bf0621da84956c58b3801c48c2ae11704c4df6a4a3c8df4b8e192d493402214134d97a4e72ab087ddf57187dfa3ad3d7719a39a5f1f14cdfb2680401b2c21bc8c0e2a72b015cccff22e1628b3b7bdc5f99793fffeb440effd775c400b07b780ac7b7312680dd45a4dafbc0ed3a0df64623a75d1c7d3ac668d8ec97250805a1208c84090cfb85f0fa2f33a1b89c4e7c81e94fbbbd5a008215e8e4a01a0418782decc58160bd06ce51ca09f9e642ff3250869965e6e01c515c96acd2024dbc1e0df28c4635e7813f412ff8a9a23f160cf8c956e4af7b5fdd48fcebec457a85791ff66cb4645e57d96662758f30760b11275904efeda7c02acd1d78b1533327fe0e07570754a2f7cb4296b04e97db3a761a1d91466b634a10ea1f5e8ab3b2fc05707ef1b5f4deaa9f558877e5bf752c55a8600b4173bf4c5f4dfa3a066814d83841f86890f8e16c9e144910682a98df2ac196f2cd9656ea5ce13ff6b69bce06462b76a42b590b69c8668eb100589e0e21146619a362033de481aab2a28e5f071a9940606366bb0d0e23eb3203f3cb05d0de3f6b2dcf019af7312b744bcfdec0d007e9351e3d04ab444261537070c94198dede149d89068bd95c80c027b070530b4945d1b8f2df3674d423581a736ff4ed7f49a8e85bdfcc5af8baf29ca20b950ae345873f99046b8f75c02353a5b355c77c2cc508854a24ca6249c1b28a51fbf2b17888e517050f313a122c8f16e823b82b7797cca143e9e90f7cf2694b86838c5d16b22ec1bc2ace6ef00af3cc4958d8a4c7fff5926d17f1e88a3eb9f286ec970c14a19dc4fd5e4c8fba7f53862cda04374732c692ca7196f8be0d86318706a08bef8bb1ceb124664ebff04e50b19433f4fc0441c9d61905700e4b0f4666756683b8cf500e140359a02e11a6588284416bb7de1b7438b213ce0c3af59e38f070725d1c75118d606c5f3feae9cc21ef0fd6479db13fbcc622aa3386ba7ceb267e060a7bd22e75a171062b1b661b3dae5435b0c2f6ee6244284fba2ada6038c76cda609031044e1d13d0405a7f798472e0606b527411c4b8dc1789721a8a547359933f04fc6b2e8e49cc6a89f7171658f88d344f1735c904998d0b7f551097c5147e058567d39a43073c667bf6e61dbfe72fbd7bc04f33b48fd8514897be4ce16f18909d299335a44bc25678a457baf16611abae8cfc2016e744032e24845f0c023ce40e073630847fe47695fbb0d0f63f7d1473cb13222f207dba88bc62d5afe0886522a05a4318df82c46271b3179a0da485bfb544191a8c18042d47b0c300c6a4ba5ccdcf44218661823d2f70997667ed0f2860cf7954a013e6274a2741416e4326f9b097d780bb91100206f93fd52c99d280f55c380b2b735dd0950a20309c7f04c01c48366a6927f8428ab40a33bf719647b3b4cc1c2b0253261fab634080172d45e0a5120e364e95cbbeb8f9ea32ff8bce9513cd4e9815f391034c63fc63c8bf45aca4a95fdd5e95e08d4a344c23729d64dee36a9758f529a392b369ef5c02cb99ed2c1b0c91ca102221f5278648ee6b0b06efc1014f8c359f97d2d63db72e0c6c2e824fe91448679e6a2929729f944b0f419710ccef5d6850dd0675f27a66345fff9b4eef2821aa5d422acb2bde308f3a2df644171b5b13cd197465532d1a2599cc49352404870876c046a9d96d3193d5b386595093b255d122db4dec16c2834364135232993c3152b39e316fbed3065147d62e3fc2c44a722da6b537c5d2809c8a13af5ac4559672f0d1699530d56bd9eb0cd73321d3b108ded9d1bc649a37e0bc0859da9b8519c8931a450e70d09c599165af5738833f4e2fb3b5c014dc8b40c1a11225bf1cc5113d2942d1a16d434ab451421e7cf9eadef1b2c90ac72b30d1eed6020b06941f6924eb8698d5bebd0e5c05b72d0cdbff2bae89a6db0922cee2cf8c8ef73702bb96edddd57f1b3aff4551b87f7798decf09942d62f1a39069a3d001226e2d2dda1421bc8e32e95fc4f64258a24f6af394b030a0e87c21f5cecc7ce96b1f1b3d7f0b18017bac3417e8a066f19daa9f0a43c18e5dfd16a90f184d3d7c998025a1124c7c0bb30a1cbf2b944695b1f6fbb624859ac0f2fbdfb919f1afb2d40f1488c2a09805c03a5fce868e999a7afc55f070dd7b593c2a807737563e80f49a4d0d33d3822620833ceb73642d5762ff49b676ad041748cff7b0f035218e1a381c6225ac1470f959a8e2581ee6c55e3a15a646feb9fab1a3939b92bc69ce06429e27d8380ef007c31acbd7e32e6c9aca5642e5eaaceed28052fd1521e5ffed37b925c42b1497d4ea59d14777a4af9fb06777958ed0e1a10476228a6ab6be06ac719c8730defefae3d38a4f34a954289eaad75908281f403b1da939eea630d93800f8bf30cc894b43dc502e575ff23128ec4d5c956eb0974b2cd4c7c55b70ea0105572bc51c39bf25aa00e4f8957090a6ab76c25dc8e3a684f3566a0bb0991253f9c36561d1544e35349157ea7099d2e81def4b26938434240c98c6170accc811409d6346c6182995cb0d5422cfd05eb5c5c819e1b843e492b2177f613294f3acc82b9f2b7e8bd69b893f5a29386c949c38d9726c557f1dcf335aca4d4066490b22cb842b281f65a5b9ec0275e817a6478d3f99ca050b69348c96180ca3a5b476d1a45cffd2d69fe47e108c97d64cc0ea0b969d562b93842ed1739389045514c20298ea5771e9b94d37d0ab6d6041ea737dfd4e2bafe09b66fe20936ad2cf359c5412af72d267d866940c35d282924fcd2c8109ff0ff1c214ab363a2a6933b2165c06f4b78c3a14cb3539ed793e265024ab66c7dc58a14d8f1f918bb5f6b12f43e3559e8ae0e46bcdba2ca2aaee58ac07ac703d2e86c04a7f5b6e1356927ada165d9c6161ff85ab1ce66c8a33061c9239ddfe5f5c706a06db3b19ca85f534beb2751f8be29ff4b11205b7e15d3a6416ac3025c184a9cc4569f8920a926aaeb77dce0ba146df857a1107f2154588a25d643add7c673dd5934bcaafbf7071fd2b879cef9dd011115f01253f9ccd3aeb9028ce7eb6496932ab367339b0682e15fcb133fd2f028ecfa6689de79c3ad44b9e26480e0fbcd5db8f09b69984288d24417390ed68aa6ef0e99e9d49a92e2c4729c98a28edc72ad0fb75b1f9ddffdd2f6f8670d65c50068902f822150d398e53e113a998747fdd8b73029940b224c0b2d3160087ae30f8d99abdc0491068661fa194a20feb0bddcf989b5f9910efdf4aa1fddb8f0db3bbf617036d59255b9937b8be1a5c3171b566c1a38733726249c0695597d119cc3e6d190f84716c34bb73a3b3112c0e87d21333665deae159ff52741ed305c532a6d5007675825ed7fb135d792d657dc01df42923a64fae755c4bf696449810c72b491289cb725c965a73cb66ea3ba372ba9e489a5f210f4642dc2151b73e4802f535eb75c574824f0dd0a7b95b2fe803c1a87998334c54b25054c64d10980c520fca2b789a995b83112a462857a622da6a79210a01efaa082e8c808e2870801e792aebee65729ac71f71833d889cfa80af2183ff163ac66ec86780a605ebde0906bea90ec0d7a0eaba5c7686d12ec6f48604732a909bcbe9a222006d18896c372b0678af11b820130b65158100c3a0a045a4ec1ea12057a407fd08333af76c05c20d5708de3397d62e260b606fb0eee90b5dd1852374d6424774c5319fbd88322e2d3340770f8058a7fab22534cd609c4fb96f5b141ab30b1fea5ffb2675f54bd0be2fa30f870dcc75ee47a2e158bc09d7d5c1d2a89b7f7eff5c343611a4bf12f0a9871f16acf054082c69980d10ed70313f8811d68c393bc8cdccc39444c1e7be8b4335ce94a88bd076cff1cfd48b50f4860e0e6091535f821238ce76d0a95a96557da39accdc25bb103bd2a31a5d30648b52b0b45ab2fa4abfed728c1c8ef9ab172735cf4ab4975dbc432208a4b27e691fc7eb3fcb85526ee35c358a5ca2f284a558377e868f3cc11147d832befe222fd7df2e52f0f75e18b5b2a44ca5810a6ed01aa38141d588e84610f92dab58f8b1c15f41217b6d1ede27316c76603e962bb2fdfdbe1766f1759b60e706637db60d42f5f2d93dcaf455045c178c7d2cd6d25de3b6bb89d85b5cff4796df35fe78148b4e0aec99cc4b395f10b10f23adf598e3a583265e7b30b4d944c96c9081d5d71762c919ef45740fa48f70107e9d04dcfcf9163ac1e7275ba363a261e08817ea9d26963e6b0bf99856683161b10fc045197b6630e79adc8f35a4f7dc39e8e7a7f1237fe37764e3767071f7b5cedc494b2cf683c7e63ea8efd212e43a07766411071bbfee889341e7eded496bc24e3970e0762ad8507f483fbaac8881c78cccc02d7f848f128c42b8476ae33e119882b7c4d1edc7d4b70cac046492a531f7768285b9b710f357bc66e48d173dc465e891683d894408f17166cf540f066b776c96c38f293d9fcc77f34bcc95c9ad058021c240c83417ec82cf78fe890ff22c75fda630deffe215b5f6243a3f76ef85fcf140ddf9d28dafb8e322ef5b7d0180d255d194ca63c33662dbae8ce8bd97a5f1c765942973e69386c0e19f4a3167a2aff08f58ff9982eec08e03432b47c9a365589180a35a0809dd4fc0cf1535b1bd602b0a5893a22b950fc748db74185c6060fb6bbedfdd219e9a884287864a572013963a0b0475efee618b21f90b90a1724762302593770c9a2f30c8314ac96eb791cffa6a621b7625b906bdc8e5c1ce08c792e2549cf88ef668ad4356934c899c178a19042fd4f97a38a5bddcad6b1339374deb1d8e8114d96795a82b44c7ab46836f19f0a78bf4698a92a830afaa4031b56d0bf6dd99e9c118fc1d4677c44737d4b59881a929825aaca71030e30d2680395ca60623672782ab33faa147a2ba5d9f78786fb592777c3e35d8cc7d6f5f71b1be8a283d5c4bf4af6b7b50991fa5a930e8cb9126ad309ae3701f4b5fa61582864116141796b6bf5ab5a6b3d6b6b2641d664fa1b3a0aa2a90edae09968d042afaab66d59ac66f1cedf676ad90dbfb029cbd8d968cbccc4ea9a5815df27d5a9b88b80b18a655d813aaa772376ab16885619136c29dc6ada5d5b5a1bd96da0c8f0c980852ab28ee9e96e6407f06c4a9e06b264f92718a1614d5725a1bf58f0a89611c8b4bff5d7fb826dcab7a7ce05e37e83a19befb6c057f94431998944dca987a8b3ff2efed8f54418556b20dd30041ebe40d30d117cd75fde6c5b225fc317bf42544b55f7e6ba205bd800eaeb9333ab35fc944a7fb3d5c42071c9862b58673e804d27c0ccff1544f9d69de48290e64925f35703c9225fad970208e7d263a58b9b0dc034701a915b854f0105c3c952ac23def3a12ba2de5546558c40a9fe2533713bbf1a02fa4b3c2890b98f4385f9e06d39b78fa9ce5d071522cc32367947ad05ee200a842504b92b4c46842b895eca434810971f953abd96424eaca38d259a97a3dada71e49c3ae9f9d3e5d8f04c31bb0fde4aec9f232ec15316d54b4c0ba1c8b3c157610b4a464433c8681c741c50e1eff59d6975dcddadc926a4e3e4defa4855ab2c4868916512e02b7f190df1606c87a59aaf428e703bdb24af40d9d7792ac976973b3a45b7c1af94a7dfcb3c103d89536ae9ff9130716fa400360e8f6ba19c93d8cc0aac80ad6e70e36bb9e4ed0a4b22980986251d0f2f9ea54e5e0fd76e4ee76f3a8e990244d0b29f35498cfd83a4b704a7703ab9f7beec2b9ecf1f6d8adb791a8d800d97f00aeb77f91b0a831a61a77070d72679db7ebf5e8611c33bbc7b2c0d23174f2f427651ec33431bbb9e2e791e2104bb9e2bd78e8ff8e5a48caf9405860028205641c259f44e3d5c6257be1ef6134241ab66a48f2571e5dcd3863064b39e970de0f357d024f67f73ba7bd6a5b4b20ae863cd0e1e1a1219920240e1a78c1ac8843d6f01c73f9ca4682e1ba74ad3e37ded9ee2db4fb5da1cb05f5beabb8b4006ea1f76b0a3a9274aa19674ef3f0acc5f63d05fce7c090f498bd30fdbe0e2c9678a99874edc68490d2c217f00be8ed5a6a71449a6d9ede9ef7a3dd2e9c17133de0c95fe79a1104c67501c475bee98ac9f40d81ec4df0b4fd9c3b5e342c28428e630d16c0bde5bc3618169107aea202ad5e469a9fadf2b0e9b426d841183bae22ce5e6a69cf434b103216c87fd6aea707dc65f395b6a30249ef23f73ef81f4fe518b177eb6585df56194c8282e8cc609dcc387301a60d15fd1c621a350e9cfdb1d7342a36bbdf5b99dd28236b4aae6f825887ce631a15baf6b120bb6f8b56df1f9022676e5dbb82f0d31448f3ab91178e3602a8af9fdf7b5a223d2f468fe9da0722ee2a7e2e3efba4c57ac52c07470d2baf898ce269b759f820ccc3590cbaf4a068650a4f42d1cb51d9110ff8718acd9cde9e9a589951d30c51ea719ad33d187f2f6d08eaf40947df793514ecfdf2444deb163a2cbc1c072bbf78c2dc8173d1a08e71a5323add5ab5e4e0e03b5775a3240c42132574d73de7a01b0dfa157c4cfc9c96b92429053e84773144e71bc14a75533b5efd1ab2a75ddd9a6b120593cd42cff279918a26b1831de92692730068cceedd4f29015732ab95c8e7d07a287aaf29127a20bfd46b6e3b0213e039194bcb58b50fa14b89447042df948933a6c4d40b6c95dbb9c6b6628dc2f290dfb5484816614eb0a5f63a7405dd2c8cc5b1bdf02c9348416f3c8628d147dd62281c4193680d129ea8f327e814594743ea7d78a7fd247c306f48af5dc44b88662880ac5cbecf6431c8be5909bd7214292278ac0ef5da657c89accf251499e6c2c9ec9ee1db978fcecd7de8deecea850f7f1e77365ac8c402ff43072dcc7f76ed25d6c0c5caae15b6dbc69235d65ed2b2b21c39881ea8f2e5f9ba85768158b77179cb6d24a3052dfc4464b408980721abdf7cb6bba821e0de469c4de016f87a73c5d2c356c101d6c52add99cd8592d2e3e2d1c92eb139b28d39dc5f8a9a63dbae353f24db52ce6939e4772ed2ace568a80cbed12549ffbbead564dd3d3bfad81c8ce07a994356fba3b9bab4b3617f91db7f9353fad23ff091534c608639b6bc0ed05a1f430ffba6cbd1181a8ec6d1723486c6d0f3e869ffe8c3fe93fe7369903c1d43c3d0191a47c3d078741c9da1f784e444b99978947c7ebdb15a1a9a251b1d476768183a47cf1a9e06aa23371019633b82a44b8a6e702b642c05c7c5813d11d1e3fd8c5507c55cb0f86f868357716462e18aad496cb34e06bf4e8991a0490c897b643fee5182259b5119d40838797d121b962ac20bc0b743d83084e351c40a1ac78615e32ca37bbd09f24fcc3b53214eaeac6bb5741d692613743eb060edb47c558a8d5795400d498345ba8a2fc35a04160b200b87af16b920f04548aca4df9c67b44a8c4474234383691ac542cf05c63e16c75c6426453a1f043efa26495fadd7430f5eca70b3e6c1f0a8ac015638767259b3bab7833ff79ed85eca6c76f3973a707d3acfa35cd4fd9a374a77ff1e345afaa3caf2a7933b2efef92b90a044048963d27a8820437d7bb172b2a26b03bce51d0e5dbfebe946855f27a5f101331603ec1bba162356d0d4d0b99324385989b233b7402090690b0459d5be5af562b7702357a5aa6ab8a857a5be37dc1bacdefb16ae15abbb72193729e8d5075b4664415dc67990672f059f21183e4f303a42dfe58a04efe08fb5dfcd59afa7330bb9f27c8a13e66cb4655d1545f4437968cb97e8903357bb13f0a780bdd4a78ad8c6aae962f2c9c4965fe460d0d6410ad841b66e2fd603420e3e8475ed6403ef32df0db3ea2cbcb907fd3023215fd9c642a48537347a7de3970f6aee589d80b7a090fdc6df5bb8e0a81181940d384f8761cb761c9cbbdd67e6d8c94490ddea42c40a6bd050ccf17ba5c7267122b780120add3a2d5811546079d10e60d23fd66e5905f23a0a929fd070315dda5c4946659e087491f4cd05b5317738b753e25476fccf691502437107ce423d6bf49eca4a32611b6a214a23cf59ce7a51a23a720b0d60e30ccc2ac911593bbb67215fccd16cb85a07443b9330ed1f25b7cea12ba4abeade3b1287065c78c0aa6a921001448f0f33800fc3d87d30b321bf7e0fb1f8316c376cbfea7d6a67887927e6c9c31ec679d923d90e637297bfd2e12fce58e35eb4072128e937c536c21b5966c7dfb3ce6d5cae090dd0eb09cd92d5ecb9e8fc69ef03832f1c796d8641ca4c563a5844c7ff7ed3c5ec5fc3e112a34d117992e6eef2cac1806f188210507321ca3c5e27360dc3c7888a0cf26e79d9eceb5293a0806c83a714a58ca0e1f7483461b0908294e02085b8f8de708165f954f4fa293a2b40e61b62f08fe745f00cfaf48ff4b284b2a65b848b4238041ab1c0092a025af8234e70c74fe0b4cbd20307024839a1ed115b70a9a4117a260fe2b26be5d20c31575ee66e7b169b4ce503863408014eecdb7d42abcc89357a880274998d6c8b0f1640b8b344f513ce1f131cfa94527a2b392b51b2857a015f32971be7a7e652a37d9fc866c23b0aaf9f698e46ddeee26882a17ac3b5a6685cf2937c90c1a73003e8469e54939b2bf1cee2b2cb148d187b909629d10b4e791e48d5648a11840d08c7bf720a897f149849645828980fd3959d58c428d5391595f5792d902119057d67250dcbb650053e27ec15945322646240cb5269bf3c908e37b074392c49ec638852b19fbe0ee6dc92879012c3aecbceaac5a64e8cf11a0b90843d64b97e4161391cb629a0be015594507ef4417004944945529ae20733705bc9fb029068c1245ea5af0c85700446788693c80350674a0914732018533149d9438371c3f40f172d2b3f98ccb427912a40dd736a027f180caa4aa8d18f766d26bf00358ea521931fdae85629dc2d56db624c55d254b483a5827bae20af0a2284417315a8553145adae3562498e5f075bdcd23daf89e71dc6ff8853dd92a1a8a96103f809e885ad6b3125470fa9f144167174b6369e60b8caf0111eed020938f4dcefddfe966114905dc9516ed982b9b0721aef83f6d21cc7313f959b90905fe207448be0d9d9518daca54a3ec4695174738d7a9981fb9159f4d9889659d89f301c3de88f37c3a503bfa41e8500b24bcc099af3c91cc15e2734481038cd3990ddc52d337c9631ce59be4b90d00205b84d2e4680c2ad92fb238fea275849d983c6add30e0275b33ce4f2898bfe3d37b3e923f019fb2ce098e80c6a20d380618b00d48b751da612cd00b63abf2221bb32e8258ffe617497aa11d24607efce21d13dba519b1b6390c512bb1ae41a04e8919afa0711e1f24a9cea28140ac831598bd0f047bab5fe00dbaf089d7d2926493ffb85714f636482960db3e38d402d3b9452bb0bbccb871882dd8498fccaa3bb9020447b1ec2bfbf4c4b4ddb0d3613588c46032d3840b91b584591ca0b6a49b0d8bda737848f1dbc534ff6c170b9262bbaa598511390b1ddbabd236f6e084b63a41060ee9484f25629158c6f4a589e1a488e41260e7b2a2871caf290dfa76613d21f85115e2c4fe20ad060b01cfc95eb28818ebac2285a9e79da3bc6c462386a7089de41a6e8805989277cbab20b9f0ff24f7519c4cd374f81102ccf676e216075bf7c50eafc0cdb99d525188aed49008410b19fa6b560051d0bee7c32dcb6bebcfcd68161643442d00ddf07ce63771fd157abea678e611bc6551cbd80ded1d50437ba551399244345520525cbcd8316f639416f51131a1c3965a8bea65988c876c81cc52762b71d40e37adc43c6ce0b744d2bed2418f4ba8e64d6027cf130d581730e8bf43f455e53d034ac85745a258ca106bf5858593d83519c6a59ef16877fd54b21c8e9c67b125f8e9e51ca68d5a2707d18aae549524ca3e5e340b41efe4f4871801a128d8c9398e72584b2852ad958f1326349934d5ac1236eff3ed7d8ad3371d7fdb2415103d835179ea002372f878b112fde29853de6a60c0738ef12bc8d25463e8ee7b66c9335653d4895644f94d975c2e9b5daa56e48e3f1e848ddde5eeccb488f53db2c72e321d3ce51fb88026a6344c12ccfa6e403ad5ffa0fc38e03cf1da43f6c02ac5ec433de136d137c3f6683ba662746cc82d48ec33d286f3b8298b36ffb29ff1a84bb1689be1645bc29de53ae89a6ad1f61243d534537fc34437e5ac90c1b0deeedce28a5de236451ed6847b7e6527207a1bff83d3090d6f0049254837ac8894b8b9a0c7d216a9cf3be17505d87b68c84180ac95e922a6b0234a6d854bf58f6530afc19ab0253dbf84c4e93a0f202ba5c1aadfa022a640037788331b488130ea4018ace1c27f80a2089588cb08c0097c91bb04f0358c31342d21099ffb7423089b1812ac0511514c508fb9258c90eeed68ff106e470f1dacdc5bc029336368c9fefd59f4704d0d3dcccc04678f5758532db8231573d10ff31327195f2ef294bbe946f04935369c5b264d91b188d1f5b8398c9c75a9b740bec6dd434b91472f1d28825469415890201b9623344eade995c4bf8b79ae5e69c9717afcf19e91eea105c25cedd93dbb7a0abc7474f91ead64ea0f9cdba24e8d2d438875cfb36c693920bc40b6df316c8d955158911fa6e1f847092c355dfde973f8042415576477d44ffb09bbd9b188a207b61f2bca78492732095368d2c43909897e501517ff5ef0d8786f648871ac155512948bfe356d8cb09deeeb579224c8f38d4f178aa9a4655e4c00a6bef308c65a5d437514151c6de18cc15c399161afe193eb7951fc38862a507684b7c9bc06f5599a55f556ceb1d29c87c433ebc27cbc383b66c4e16fd2fb9294a846a2e332133001a08ebe013651d80484700b8480cbd5f58c3570d6c9d613410ca77ea65a2e94261fb156e6d4948f3b627f3cc9b51abde5dab6254f59c2fe262c4cd897aedd4abc9f8d61a1303bf9320f0fa4586bfe455abacb39d7a186c132769b84ee96c3f6d24dc80ad586d87fb7cff60d62cf4112bfc110a81c6d7acdf8595a50e7c2ab0873278c1768bef5276d80723b50dd86e3d48c39fb35788d656e3c67e2524368c9e606848b8de59a02ceec3450785458becf8c54cd46d933b92218cd79d792061756862bb625c28cb1e2090e176202e5b1c83812626fc516ce8f7dbb047b36068b4bc3bb4b4d8c53ea6bd8f7aabf5e85ea47ef2da35eb4dd6754f9c54b9b6e8375697c96c74f1fb3b27ee5ace8decdce66dd2cca5726eef687792a2440e8473ce6d39d4f675c440f7efc4f1ef165835780034b3509a2fcdfbf51faa263a95cf7c811b87dc597bbad404c89b2a6d630120c92b9d0849154c9c4bd8b7db4a98136d20f1b89f05b6ff6a4c1eb8747464226a4d41cba9394f4a427921592dcc83fdfd314031fd6a041365f10cef2b0e6bfc7fd59ec790e6ea349217c85a64f195f6fa8af3962bde858aba9eebdfca28229338f399137097bb79584a7c5cbb3583656c0dbdf49cce5cfb588dc439f8896dd9a6282cef165d12f343e25e71a7b45a92ded2b3b7f52c15184f867bf3e9b5462237e943834a08b5a23fd441d2991e0ca53f2525e5c213609d140f7b0dcef520a51834d96c6fb0d2276e791c529d298fdede706e5900c44561b5b0b33426cd6e39335ace7b8c5ca1c0808782ea5acffb2ac8d37d0fe34224e0c223a0d0635532aef4426cacb11f8c4bb407631eb0f8020c93064f5b02df1ae720ef74c5bb70c9f06f60a3597ded3248ef62625fdd6fb30c835c11a49fe01f61be575565e14a6149aa7057b07acf5efd9bad3b542719a145cd204889e27af0295c438bb9c4856c135edbdc556070ab30215e05329d1fb305c36e0a5cdd4dc0be62234b62f3b3b03efc64b8f825d02c86df35d9504484a76a4c3227e741a52ccd2fae3c61b6fa917235567603bf834696390ab2006ec24d649ef189efbfb1ff1fa09e5eb27e60a26e10453bec01d467ad64bfc10f4ddfa2ce97095b8dc001c5fca5fcbcb0a5047499af665eb0d474fe0f3b1d82124e848382bc74c4a191502ad450348af8ec59a3d18f06befac72931549fe0832a269c88663ffcb005fcdf1d9ab313942511d85b1d5b5db05d123bfa2effbbe6a68f24c29d4bb9ed7aa06b41cf7665af607de2ccdb2ede6f065e7cd46d3f58a03836611a944c81b91ea071b710c0c076ad931064ea9ffda9afaf176464ac588ad5cd64a41d9c955adffd1c9cc9911a9a4934493d8c02fa077bb36d4b9e28c3516ff0d55a574a7125e434e763792a5d245f4b831791a369bffb5002fa674d857953d28fb970569f0b97e8cb784748f918ff218a935111c5c6f4633afc115e8b8fd63159f2167dd8ad3f386c8dcf0f45638d411661e6a2310c3b02e85dfb9654bf106813fbab14e00147dcf259a0e597232a345f445076da6dd684b1e77ec4c7eaf628bc8e9858e32189f802c342e217cab143636f7a8c99f08fca798498b48dbddb3e3172d919b28d61ced3c320ce1cd453bfd00b9547f07b027ab69766ea2956136375a8b9c767ceacbd61009644c27dcedc1ac8d8d753f21f6a49b235e5d7d7a272d5456a33a2807ba23bb3e78c36ee8cd194ec46a9291cd9c026057c04851c44ae676083549e08000e4ec1966001dc4ad3118186a89251b93b1ff8a0f6acb7a6eb19e23bac6fc7190d47900fb9582fefa4ab3db2ceb9885b07c89807c64c461f1c6dbfa4454f69e822a6c987936f7fcd4e4341d226d14140a624dfae53ee4e502876b274b2755e9c1b3f05424c40bd7063c29210cefdbb45e7d27984d62617f622dcbd74a5e13215827ab46e30c9782a5da62765efa26fa0291b2e538d0d41feb622da950ee0420f7f2ad921e992d4fcecd1d2bde7892e4bb301386a59d60b94cb048cabf5338b1fa8c68521f1f18ac07510c25645ed7414587ee2ae5709eddf3d88137e7323155af456640d4ca488113fa75b18c57a8ef417588019a825e4a097f27add8ed830014f03bd1fde106e3020fb8d88e79b9da5b57564bab988a26ae95baa96f3e81f96b16378d274e348931dae83b9ca920e248e665d9e061d2b53072a8715b9804bc7528389014bfefa1b002e212b060911fda2f4cc0b7c4f7cb9509d14a2bdb05c3b1448ea77fff9e96e041991c42d18dad77de1287f3e5ac1e292e6b52db4f2fadf5c222b8c467ee8b870b5ad230b213c2d2d7a0980c56fe05b6c14281031974671132dec4bf23c4afdd49d57a75d97c0b38ff1e8a204eca5c40d10ac8ad343c59dddf32d4ff0b1eafe68b9ac5163d805956228a3ba8bc095f9b604b272de17fedc4c2462c72aa7d0634520cdc06be703efa56ffcde3bedb98a8ae699845223fa36866c53a15896b2430cadc035c6466c3027c522ae629772b1cb8d4228522e6a17ca44f8b69ce38a1a6e954e98426ce55587490ada780489d4eb68b43fc7e02b34ad3378026aca051baa17a49124bc8447011b19970030fccafdb5db6c10b1b1d515388c0f0af29d95016613744b143422bbdb7dc592290baa1d22ca0ec3b67f058168ccf18f11947bda68f89f9bf9de2673c8f36ef5012ebcedf25fcf0aa2f13df45bf7ce60bf4b278b25cf81dc06e3a2c8c04fe565b399692a434f0ac268966cd65cd11680299c3536861480a57cbbc8c1c007b57a6de4331523a76f4ac324604854ed1c04cd004bfafd42e801f48612741f0e914512ab457ac5b26b3750c30338c5ef9c6b0c7adb168accfc2a3adf9e497e0fcab808b7d325c460e6227d851537bf626b091aa9aae1eb8ab096318bd2602ee19569bec38548e3fc486046dfa69773eb4c803b52b20635d11caef8dd27e1a8068b5e5996d6198982f64ece71e769c4c395a33f419ed9089e303dfc5b4e057292086803bebba1e7fc173536d155a406e2788ede280917676ed793dca44b293b00778fe84b4b2c252652003d04c1567acf7cc5f48a514c34cf7d66be8939935cff79950a2e09fbb1361cfdeee3022a80141751482018960402d6202901121f2cd76df73bb97a98566af629369b64aa13f0a15a0312e6e63280acc14e0243f685f916e176cd80e5dbbb91ebd5cd0673f7da78030253c41aabc27571e990deb05a3453a83ec9f23f04a467371874724b9f48420a48fe7389bf446e88c6ff06ef1491b6c4c37046c84322278e0f380df5812e5d7d7b249774d4c311cd6dbaf991ed1de1ef10124516df7690c66085b58b7bec5355317e10e1133001663636dc76a7e8ea4cb800693eeed243b5d3002e9c4f008b20da4eb58fd168220ed741698fc681632eff915215676c9ebbe4937d98b92d880bcc856ed0e8c46801cae2c02c53a094913ac4c082d186d386b3f2b10074207fa113864b9be7a77d82a38aaeefd42a6c536053fab26647a695feab916f7aee5006b54ac7d8ff5acdf7218c6c988c219e8c00f68148e4df25d8366b84b22599926cbd029502bd02499268127595bc5024f211692b6ddbb26ebb4b3618bc66f295a9d134a84db409af6a136d32d319ab8041b3a05929964aa286a552d0698713ed44a37dbbbbbb3b6c9128c6d188b430e8d4ffffffffa2381a9148a5d2e6eeeeeece524a29a554606b8c784e5064a727435a38f5e003d5477d78557dd487c49d784c2da46a0bfdb00cbb81248bd06aa5d2212bd5a62d684f94f551225d046a112db2ac5a64c449956a8f12d9226c041e410215892241a248489cd7a42a24b708dc23cb709124d1136d06a86d68a0067221bce6b55abfcb659652aefa788b15a750911c7e6011f2018719112c423ee050038b06f25a936278c1952c59187ea0fee8cf8ffef8cc8c8ebed81f62df24ed8249a644979460f851264d4cda449b2cab361971d26150e844631295893261a24c80804eb45e9d76f013cd4fb4138dd6363490ab1aa881bea594524a390ac1a48901526933b90899dc645a56d38873e55ac8dddddd21acc11ae72613039caf52527c753a79d75ee779cbea3d0c823328039ccd663348040cfa6f18248244c020180483823efe26534e5de7efa948152997558e38fda5851a88d997ff5d3e0ab5b2e22c2d2c2d2dcbdac2b5da07572994a6565e8b997f502e2de12d26064ab8b8bcc0c418989898658de118cf39270bc1b5e69a0d33d758d4def7dfc7093a9a5af4966a71969612255c5e605e606096154669218f71989854ca5d2a95cbccc8cccc2cebcceb75b3bbafa00944700545a91b262b9ca7f119130334264c38aba6c64f985c84562756ab655d8d38df75adee2eed07a62c5fb16c6cbc6bb5dcf572bd5ecbfaf2e27f1fbfefeeeeeefeffff7f7777776f11fdfb65c2694cd4d49c38e12bd68ac55a5656942064e32c9b56cbe5f217ec05832d2b2cc618e34d44b1038dd6a1b871d80d0e0e0a149e0280140000b0ac008c38fdfffff83125822b894a79f1010840000f408001067002582a0850a182575584023295758be288b4ac25e59a9452ba94524a29a5943221165b4857144d2e74442ac1ff797d0ee2a9271616958ac54281a28019bb2ed268b139e734b9b789e35c74ea4e5db7ac1d2d36679c73c6e69c33c67e77efefeeeeeeffffff8f0c551445312e6b8c231269695b725269dbdcc499386e59b939a72fc316b1b24f26ddddddfdffffffb3d96c369b95369373a614ee74ea3c7ff9bfacaf22ff274f19a514359412081966b3d9ecbbbbbbbb534e5de7792a2ad25391f21f855a6181b3d9cc8828ffffff1f638c314615f98f42adacb0b4c096165e6d6991ddddeeeeee2ea59452ca9802cf1858ac2ac7cfea6076c283757ac01e3d78b5470f12c733c7d4220723c15138886bba40cb10cee064a6ff3f796b74d7a98c420da9bb5c3e54f8717ab202109d50a7ce65d539e2a48ac5526d6a72e152855caa4d5deb52558c3f80cc202cc4a0c63416d31890202cc47476a0eee8ce8eee0489e9ecf008812a4485085121b11d1e21b2215087e8105ed5213a84c44979a24999ea6c0ffb406844112d42e260d00af64ab48aa365252d33148996559444e442ec234a96405da24b785597e892a9eeeeee5e9bb5399261d6b3990cb39ef5cffeffffdfdddddd7d213714751c917cf3cd7d59bdc4b5dde2b6891a6e9b0cb3d96c369361c664f6fdffffff714422954adbe6a5cd79e634777777efeeeeeecd4d268e4b493975b0eb78b5ebfeffff5f4a29a594a3d1e9c4c2a252fd0af0860981824016e00c31e84407aa8eeaf0aaeaa80e8903626a21a7ebcc233ed00818646ae12dfc092f435eedde504cc7e442b4f3c3b2964788caa0ca54b6ac2a1b715215dab463d8bdac3de2fc7784c886b4d003b5477b7ab4272464480b3d3e44a012512244948894437a7c88143102d5881a31a246a45c1fed20d6081f814892404da2012f18ec0607e2e0f02a0ecef77ddff77d31c618638cdddddded799ee7799e87c1aa5ecc34d84069e0407d604018307815060c12a7b20c5ea8aaaaaad2660c3f329d199cc87476768c519743215d27a959d75de7aa96923ac422a4cbf0f592383829d50729d5464341005a562a04115235608d1acb5a63c4759daba5af976ad3d70b0747b5294e370822d4188107126c401b3678d5860d120767228c20e5086b634b5813f6841bf0c60d5ebd71c3860927dc400107c481835771e0089900b428e0e001a69003737278352747a290424e0e1d3be08e1dbcba63c76a9563772c8fedb13ea00a248e6baa3d5685fdb12b2c105ed5a993c4f10ce932ec26330bcc31661de61de681caa33c3cca43e2388e481becfe7568505608cbe0d26448592ed7885472e8722929c68f0b6583b68795a9cce5a2c5e69c93c58acd39e7f4bcf354541ef528d4b2a26273ce19bbbbbbfbffffff49fffa4adbae9b73a63897723a759e8aa7a2b2ac2aeeeedeefeeeeee31c61863eceeeeeeeffbbeeffb3c2ee5d4799e8a8a948f822814afa25093e76a159b73ce199b40cc39dddddd3dc618638cffffff2fa594524af92b289695169612255c5e3c2615934a2d6b0a2626955a1a8c893131a286313173ced894b5dab7bbbbbbf7b7947071797981818949c1548a5753a91798989e1f638c31c6eeeeee96524a29e5f77ddff77d0f13934aa95432323334908686576968dcdddd5df47ddff77ddf7f21ecd6d81d6197845d1b0b4b20712b420d57d34279b23df0b03496e9f0fcffffffef7e205e08677012baa149b0902a157d489761aba530d80d1414c75cd60429e44c9003e6c8b1ac3946dc09ca136fb5549bb66030d5a6b01871e4e4d0b18307e4c1835779f02071302847c70e1e3d7c401f3e78d5870f1dcb637bac8f55e107fcf183577ffcf01a0f1f2a1cf18140201020bc0a0448c8c78f156610a8413448100da2ab150b3a3b3c42027233ad5629cbccacaaf2b2eb5abaee1f26c562b9cb55b3ab65b18dd25c2eb559d7eeaa8c06e5490f3c040dd1030f010c40808a0256c0152b7875c50a12a7dbe6262e65594f30588c2a76c51ab00740044209c00412e0d50412207112c8952ca16cdd902ec3ae7bbd240ece02262ee5d4411c1c172c0ea0d807204040f512018c20025e8d200212c7d28003ae26192a22144441284ae8090512e8111fd9fffffff772c395e9cc18638c31c6effb3efdf6e32f6e51643aacf577b26aef926b87f4e6c653a4a8c002bd80a360a093c10bf8e2c5b2be18ad562e1b1bd5a636363632b097bc518536bdf11429549ba64811e30519bcd06003c80189e35a061a6cc0018c1830460c5e8d11434a0d968385b131b6031950860c5e95218383181dc8f060069c31835767cc30a208238a9032860c0f667c4003d2a0c1ab3468480f3ea00142085084d58aa76ad7ddd8c5b129e4e4d00175e8e0551d3a48dc3233333373d7fdef94524a96bb5c4b2295361374c54883f24469524aa90b83953637712930256559536030b9a5f849d10a45a44934aa0b3ad21754095425aa845755892a2171caa23026b0ede606050a095a3fadffff8fdf2393c964b2ce53718ff53d32994cc6f2c5fefeffffff182558d78f4b6532198bd5238b2fdb81464b89e04a51292feaab46984a57313120ff512b2c2b2c2ccbcab25a757777f79c73ce89f254c62b8e5a61616969f1122e255c5c96d5455575777755f5c55d5e60606252aa944ab5ac2a5555ddddddddddddfe98122e2f4a8332ae929999a1315163a2a666596be69cb13977a0c9f8eaa2ef06eaeeeeeefffffff73ccff33c4f2543336382a6c6c489132b96b75c2d976b595d362d976b7b5bb1d512356cb57aa5436c7e7fdff77ddf577362b562b16c6c5a2ee872f1aacbc5b269b95caf17ec06dedcf0eacd8d8836d96627ed888e12e4eeeeee31c61863eceeeeeeffffff97524a29a5e7799ee779fd362d97eb159555a854b1bbd9c860060000031b000400c22010868120cabdd50014001522252c1c3e1d0e134ec4c1582046c6520c06428801ca18640002c02845cc507200bec7d0d1398c0469284bd1904740e9779447b8759902354190cfc4c3b38b073ba2529a83aea59b4e1958e7fd214b9afa7b8181e1ded318e2c567ec429147c66994a74849d160dc6bb4927bcea3af0206687bb7ddd99dc0592d9f1963c42ddfb9858223e2473ed17e4c9e9c487fac6b01ec2e06e17ca0be84235d516d410e2928cbc191cd21dc7b34a576c394d886b580c507d3057cd9e91ab5ab62be55c61dd6992520f959d525fd0cf4732d6848c54df452c6e9836b79e31ebe80bc47f90829f3d3d1dc58c746430940509894f16600110a1d5a0bcd234d625a451089d306a448dc5c85ea352534a2c9c99bf5ed69dda7d63d64b6e017df2802727778aa18d624fbae3be6ff2c92726d55b2899ca3d341b02f2c027c20685ad319f9ba984103bbbafec51191b1a890edae42b54b8482a57061b06229dcd2a29aba39a43efa2c93be875eace8dbf210c932ff19c91a11044af1b78d595ec93bcc66022b4c6ba284a021990cab0eb01c454dc884fa65306dd7fb2bfeee713060500d2599985a06a4904f274ec9716fa8ba3747298b3e04c66d22bc1c5e255d48d003aa4440237e341bb3965a385ea55d5f324ca9c26ab184625387dc6351f335735f42e59e78176fcae2137804fb7ed99428300872084ec0ee42983970968c1815e853139b33b0cfe8b19873e0a61b314440cbaaeecad4fac9649dc111689690d1a2d4ce094cb0061fd3f136eb1110d0454b17dd5cb6ad0b2942e27449de4cce87dd11ffeb762e016edec3df5cbcd1f337741209e8f05fa1c8f2db0870f183df6105683154b8b563936118e243b89cf762e32889e7e652a032f82dfa274e4bb1eb8c797b7678f1722155400007e371119ae9e4a6731246f4bd81a07209dd1a13e3d4257a54b88683a2d1a9445b5a78a85e95cb23742ad53a4e6bdf5c28efe0df3f31c669c31378cfce00c6ee2ee7e6d6d7d319b710dab86c45352e2f054746192cbfb6833b685ba00993b5e87364a11356a5ebb64908500ac428900f18ee862e6984622c178903280b4d9575028a77b81aa5ce3dd6f12462ccb4a31ef89eb7515f2e51a358f4b87af2a23e6ad40950f37995b160b4ef718be0000091cbb14dd02677ae674be94c2c5ddd5b175100218e951f7d029362492a0e04a7e8930b96a87ad05e17ae0b627dd05836dba645ba750b1c99411aac18c102a8465f3d9f1c7dd5db33720b4495800aeb72de0e1495e6cb51640e08c588eb1f314bbf8aa7699eedfd61f40db1f88a381e9d2cd0c486621ecf748931143d146f14d24263fece4b57f5e65b5f11ac3901c3524be79320aa6cb94bdd3447ae68c047cc4051bc5748358d7914c9d1334a22ce730390acbd22bff33cafca27ed0d91c336660f73338804e912c03cc9144d17c885d73748fed010401aa2edcf28bca5c095c99c78871b6d172b20d14074bd7ab1a30f76f2727bfbcf9d0df759fedca4cc07a038f81d69f90d1816bd24b0c53b6d7098445b3198583edcbdf14a6d48de2085e11db0417b8f1ad16e4cf63bac17ab8ce9231f426f898bbe6f83b5e48c423dd088700cb59f91c110e56f0e92b435071911698ec9dc073b0d70f98d89f9ef9cc5a133650cafbad96a5339dfb67124b7896ce0169da2031325c14f6fd6270ad0b657ec1f81ea466e0337f3c2197214ca402b2abadb5d7f302ef504728b7aeef2807a9e50d7447db60d54f90db6fbc2febe2e8850d62f816e02648b4c0387819135ba6ba421948af931a2c6ea85f3813300528c3b97f69024d47e6a3054d1cbfa7964d477e47094bcdd643b6187c75fc0fb4d6bbb8f2f03f555658fb9e7c0243cc6d0aaac4c3d8c65aad7f0bf099a6781f2d382b0ca2b67bfbbf9e6669e0ef2acc513dd9dc9c7259098204c1c1aa28cd922e0009aca3209cb0a94038baae6a72ba4eaba9083d229992f2f391d1d8a53cd09102e26122723ed12ba1cd51388d5697c8e916e1f18b7b07a70e96d1dfeb8bc47cd972d514884414dc111c089bad1d94a7cf1ef40fc951e65e578021f57280035e74eac5fb6a9ea87fa1a5ecb64a63ccdbf2e3775180ab1310c3a514ca8fafbdc14de9157a69bfceb0e2ef144f4abc7b98c273b3d56f35a7d18843e586f8370816e315aac3fa2f59c96e5254cfc17c21f97798a91fbc6df837425d701a0536d621d0788fdb7c4b6e09e72de36b43978471e3747e50aae91cfcd9356a945428bacb92bb08d2fff54c8f43aa6346f9e1a5784e60e3894235187f7ae897b595b315ea95645a912a9d6e11ce4ffdc12461159d05c5738e7250651ff33fad76d08627eb0dbab17a96edce621bb85c4b83e5f9022fbf577d76d3431b2bd7baa9bd22e580e390052f0f0d1b287fd00441e9a86375fbff35d9add4a774cc9a22454040dfc33d8e4516837f5ba38af0fbb4c6c6851ac275be1ade31840ceec0781be1c28f6f11387deed02cb7df11e451686018d4643d35db88f08b50abba315397451f0057a764b7ae98af91b83f4350534016d59308706d1da8b9d0fd4f7393c3beda675b64bc5a87482b0325f406acfc466580776ac55592d3a3ff1c4eff17136fb1d16646e73f1875ebab7e3cd579552fcff686e8431f424a15c489332eb83db8bbd09297525d42a4f01455bb7bb587aead69498afc3b98d130d5997982df99a3e918d4c3791cdebd7fc987bc82980e8692a085f83a77c8e91fe90111e498e81a3025d52cddb82ccd7ebd9b0edc03d12f9336e39784f4b01de9d7f383c9817a54634ba87545279daea7ba3b333225873384b7f19dc15c21c89fc1e6f0034cf73c21c9d147ac7a9bf0ba956599508858deb15af6b702cd350df5f10a9d0d33fccec7ad4589e1c9ae5ba77b7f0211e2d496706886710b1892e2eb90a3eb8376026936f2f98ea022d9539d4f8a2f5b36e23c4a45e31c953c13fa828120caf0be2f337e67d9044936cccf51cc113a3340ed99d201558c360cd653e8976cd4667c14ce02de7ada466e62cec26eda70cc18dc2e099a3aedbc1992af697792f0830397e43a65c4e72b9a9f1ecba1b702784c511e8a0d94db0ea399a9baa1cecdb27a779ed5843f87df36bfe37b08f4aa7d27e62b743df751076f0648dbb4a4132fe5b475e29e865a56dbd3aa3a140456dc92d9f2d58e7ee84f81174b1ef0f75a2c1a31b3aba8fd186e25d0181d2a7932dffae8e51c715287fe0b09fa34d225315faf4370db7e6db72e23573aee3529a2e04b3381fbe65f4e765ff9f4492bf6bc2df7146e96dac8fec7d325b67f237c65d76936f33d6dd99fc9b71af8e3d752ba3dd3bf944a34f9e7752930ab62ba212d92988c1831f1b29af0da1e1ae344a7ae9e95d451b7fc3b34ead78d29b84591b057a8873adeab5be56c858af13dbcc53f72aa72bc5b5a0abc5f81d01a5698e754faa8813b9fd3507efc5c906fc8cac07f03344f5cd1752499fef1f37d9226451c54a44134faae39588d5e8f8eef80fd2ce80a0ffdff31490b2fab39a42b5b238efa411322ff33d5246e3f27341a073a86a542a5b8e19998e34780f021e830cc6becd47c7e6680b9df8bc30ac1c3e28e2663fb542fa797a99e3ee07f5c7f99ff0ad95f94edb0edea8c8c79896ff79cf3a4e29aa1e38afb091f979bc08707660d04ee7a4c43015db659c639c934f18a763114d2da824510232aca83ac556453a73878d05f1ecfe36ad9b5efd428a2270f6f4433bd15abcf2ca544038b564de0df5d5461582a1052e57973786046914095004784073a998d132ad087ad625a61f7b3f27a21b84ba4df14934075b56a028a182e7d09da3a6a4d9a4c7355350bb1e92fc137dc32835cb251309e572858e4a1709e44c1b1066d9c09094c76943896b057037b137dd9d1cb2c0d3644a84af496b1935df45639cc7804a36432f059adc1ae768c5facb40008a0c028cdf519202f74258d2e4e16fe6cd6d6458f033012d321a03481b528c03f456d84ef775fd84af7ef4d8ec48e804429a1bffbcc4747918391628b555a225526e5e8a4c3354e3cd4d08d6130635957c349f391b1c8ff1b4268a4c7dd7ad1089042f025868177ba66c7e565a5d1429e9a2cd0b710f0a5d13a0272832c94bafc61c48d1fb89005d42b049ca473d914b3e6f1c6bac0c79bb8c34ceaf6dc2f267b94f82b0deac813c272b6871ea026713506e34fe1a0f844c44b9f86f9eb8b066443a3b68a142b7461b45a1c916e8cee581b7f01d76f3494228a5a2db726abcc22482a5607421e67e76ca45b35851ad82d15a21539e4c3f43e2443edacd3c11d1fa1d6f891a35c5f2d66d1f45144b3f18b539d2c57f1df45f8501ee0e847bed7427e523baa530d656e9305072047c2c50a05281990fd1900e2432f05bf3b59d069a10aed4a3a3e78d79224506c12c27deebc34a27cb656fb0715f8749efd341408b9b4e897e7930b4373ff2583e90973297dbc16d6cc5a0b14b580934bfd893ee22bc11c6825d89dc6af54473c20668c9b42ba1708b561eece4e0da09161fe31dad502d0c0cdc01854da9a826efe3a64696aad989ffad1243793dd073cd02389f7815ca73a5ba33da1777ca04c094d2d87feb7baf519d47f40618494b937e88de25378ba642a6e4c02b95574df34f596116230788d30022accd4971b012a691f29580f166e6606d161ba0c64704450bcde21b35cdb9c4bf0c3d99b3e9b758eecf14a8f54fdd195ec3718f4f9247a9a9208c58337c3469dd01e7d3ec6b8eee851590a77917850c7d69e9c37c810aca9302e024be48cd3a97f4e35a05bc64c99b02d91cf1c9a3545b88ce85a658df0a1c25b185d464997838ea76b867e8025a8abb571879ff36c2e6b465ccf49e07677a72656ec4d55adc6475e49adeb6fc3fb0dc6d7aadffe741d5a20be59c1bc7fb4d5cbb1676b78735897568ad75812c371bcb91974051cab5ebce8f12a016ebeb1c6472390cdd2621573e45923322953262bd52881297ba762b677039136daad93f81889c7d59f85d1e709223e9d9818bab70dc9899a390054562ce6852741cadc4686dc7dd36d34f3fd6a5993554dae3c119e9b041ac82a59ad8dcaf70262722b634e77b9a5eaab545a7600e11305ea5a3083a8a2f314cd33f5367c8bdf49b3349ed285e708158368eb6636f8346bf1f58e90335a34c0dfab78a34450d416787f35ad25ec183f17fc3d268d404713255ad0d0ea1d3986de561a9486ac8b4b43cd4eff7e12eadc9d79977d94dbedd587763fa6da6bd1be69e618330a2bf6c8a4bbad8e43167981f579e765feb469747a33d46e30e5268717761bc6a09672a0cfed4e3dda5ed53712712ce9b175b96f886a5f2d7db743cbbae6e951ebcce9ce3c14a97c30696ae0fcdb01a033f48fac0e39043aaaf6d930b5e91fd3d0c21e348efdadb1786f08b210a0752c3b3d3982a0a5e08e138d241f465fabbc29f1b676b3808793cc6514d3e4aa80c88df0905cf648228c0682df955411d3d6dd25d36af9e83c8853a5c99b27e6a3fbf0964f1612fdf81838eb449edb2e91cfbc4953a1feac08058efdd285327bee2418cc9ca3be66b75e6585af36f37f6dd99a1b26cb02e1fdc860908bec8e69da22372ce69c443482ca6089161805536c1dc775f4d62745f1c695394f58a2c4115411ce0bdd0afdbba55ce1a6f77799cf3a523ff04717427f5a011873bb1500c91248d9c79c670a61cd00cb36a30b32387ead7c04e4556398db945b0f447852df2dfae8b26105d8a51bcaf28f2f8493108fb1835de7890f19c0f349a28acb9babe62f82cd5bb4dfc6abd54448656b2bdb1a5f6b1df756de36b8d19b4553ae3bee27e57d9a7f61f7856a4aa55c62f22f4be48e3a8bf3b737105e83244ff39db4547a754d0f518abab006c0a5b24327e451bc24d22a5dc827ef37788fb446d40124ce24f36b7d2e0d72139cc0f901b1115529a9fa07feec05c581a22b70971a72de621f9afb47ebeaa12d50a149ec1781adcccc60e57145b8d881f80e96207d51f55972718804ea1ea8fb6623e5b20e6b233906700554f4ba4e2b1c39246876241ab8077918ac0e679418aec63e512a163eb855e705794518738cdc3fe943bdfc0e2c0e702d8e8e8eb245b1ec632b705e81001c54d7e675ecc072c2a7ab74293a7232153f92397b2498f5c817f9943b1332d78d1aaf890acb1c92f2ead38f5d0d6ff6ae1d47530c12fb9d26deece2ac7b0665cd3e37b2c4dcc40a32e61b836df5add26943dadd9d5c2f4752be13ff2e2766071f099c2166bdadb7fe3a6196b8afdba5ef9c7370fb8440189139308fda3eb6e74ddb5b63880e5cf678138a10c7ff0d9f313a8eabb8e66a51150d3f2e759f9463126076e62d327d02ec4116fa9e45882b5945e2d2a5edf1bee14275a105482ca37679c3968daf87a84c092c1595272a2d0678f25aae8422af893e26243be5478b275d1a7fe0c0e547823057d346bfd37946968b08009e1b31ac7804a8ed141c519db0678142a1dd397660d9fcd9a762b369b2e5fb9db047aeb09339db3fc484c9bd91f956fdcc1b4ea22831063f289a0d06b5d6df8f618f393ebee743c7833fe16cf58cb16448ab27e11a6ce1567aadd3c9128616252dc70b4ea4de806884ad617531cee0a2052cf73572476eb3ee2018d60123a040d995b9611816f7549206f7501a33627c5834a9946ca5702c69b9903b3cc7541cdb99ae5891b88ceed833ac77cb4952086a98cd2983a5e21961eaecb0e168d1fd59bebe44fd6f84c6283f843668bab2f37613845afb1b8e17a08b7c0aa52b06dd1d6d42cc96a93f9db00945d767bdf3af16a7d41d7caa2fd35d489a5eda722e2923d103ba259c89eed16c5d97b2d501ab153004fa290e2c24436af52211959bbc4b238cd70e585a9e77e314283825c5f2f397e10237cc7c6f3e9482ae52dedab0e241e667789c8f7c5edfcefea5f02707194582b8bd6116f41033522bf8fc73e18a90ff50799bbc8c1dcb0ffa43a1daa9ddc7cb122dab787704fb2d5f894df179edb4c84e06bf9e06c4b522108869ac7e12093b207e0e30d5321f80b4e15b13d336922f6531644c3ced730f78514ecb433efd38c8f8163e47373942ad291bfda7bd2138a5d5c6e26f29d31aee40887fb7b092b7c70ab29a78432f4cac2de927dd420bc2918be334bbb37fa54dc0cc27dc2c2e0608937382d7ebd4dc7a3eb6ab01d01bd9a6298f65b8acf67bf56cbb02704b9cb5631dffd5a2f1f4594e4aef0eadc054b3c7785200cff9710c31ad14c2b77f1711606c1cb01b49c1d826ded1f2a7a5634cbf8c0484a4dd7d407645e8200d7b470b5aeb872df264be5babc4479ffc370288e19b2d745237bea9d4520a09cde29ff46322d3d7f18ebccd322be777012298bf14224742f36d1c8abcdfca9b0f6c86307be03163b91b59bd996881a0ffb1447226141a924885fc3937c92d93f98be0580de7f097c74eb3a91514337e63567333584a00e07ce095efafce8b8c3ea4cd00b71d92950056f702bec8eed7800b2d1032592623e6455b499366059fe0c95eed7e9de4165d68ee5f28dc0bc3ee029d6055b3926c420233704a65e30f8f98b1e94ed69017176a08415b6a2e162bb96adb8adb5b05f66b1c44f6a9c21f5631a4b39242dcbbdd3fed4375ac370784d96879ef01fcec5997d4eef037f97ac853444f93896d4792f501b530bb6fe6847e8d356caaa511b6b22342bc3c88da8dcee7f6f7c500b1b9310ff22d55d24804cc34a1202399051e5d6865f1fe3c8057019c6e8c0ea84f93c64fa71c974a49ffa10b455ef3b581d0827a4f2807da689e1252500e381db18a362e9e78f4d1c6fd89acde0215cf6b953b3083c2a571ceabef0482e1afad10bfd45a21f06d6aebe1c7dcd0c03a193b9a8c849575e478564a234381de332f1a71b391ab559cd4ab4f6c4fa810d02cab868db34f30cba6bc217e40f76fcef98d189d1eca4cbfd39d8a7fb12dc07540bdcaf2264ec2b0af39bf76ba1cac3b8e8c41c62d8f4053c6d57774319615bceeeb3c59bde9142b6492004d3073081ef3ae45b08c10c4a62a91d0f0d38efd0fa16d05d44360904da963dcac983998bdafbb19a3b1d6a8f46f934fe1e709664b5691023dcfdff917785d559fce95a54677906aab899331968ad5ab7da9cecee2307eb3195d278ced8e5263f6b08a3d93e336e722066b2eefaf0dc35c3725b05671a560e6d8d5a530f7f075a6a25d564ad9b31426d3b0256a0a222ec090a0cfcc571978f913fec6da1f45fbdd1cee814d57c6cfe8100dff58aafb98f4fe49387edd1124b163253fccde88e3a391defa0002b2e61ab4049610bfb6861076e4e2144ffe7874edfdd72373930b26a03abbdd6fe6a280aa71b3bb42c1cd59f8dc9e181da9e17aafd10686bb1741d886fbba6612e9e4bba8be86b8df6ba106c09edfab60471c0d725b340538754afc4fcad64e9eeb26c4850a3fbdf5c0643fc83c781fb93783b0328409de4deb624c3acfca93bccdc5d0ee6ec1ecf6ed0981e0f2dbbb8da3a5995261efd749e03248e9da60bf7d8953e62218d5948f096d8494c14952e2a807e699ff579c195ef9372bd57632901bfc119d5cc870913913042023cab4c70bac0b8a551031e38ab354f489be91a22ae3c69dc42eafc8b340982d6a723e50a9929a45c0a66bac3fc5e4eac5cd8711b03514043581a7f2e446d232532df0f7128dba7ca5060935045b6045eccbf8158df9716824ba3d2d8774f2668c54ca0d7a485fdf36f43a4ae7835881e84de4b20837ecde5b3c6455ed2179b8368b83cb9f37cdf9916cea807a2add05b756f8b087d424fb88a4e11ebaddd13db564dcd7e9ca6d5684b7f516a8b2e8fe93f5f037e6072f2f717b23595a2b0055da1ddcb83006350bf6101e502efbcb90486215d1805142e157178ea2cfa103565e32daa819592053d0a1b08221b4fa715da89da815e19b89f8ad1e1e85faa7976a5955ba1ed05b3fc9c3c17652dfa2762a549acc689712bb0f160292abe555c9cadd9e7f0033556e9319615d7335a64b9ac1f42d14983de11eafe46ffce4d2ba926f371d0b56cb7115405d9e8b4650335336ef2ae767d5a9dec7ec91991ba054a3e6e38203f0404a4dd9e9f7d1a4f0bc04456d793b4e49391cb69a66821e18309b3fbaef4cac51415067833d2d82675123a483f6aa52189eedac1b4582aa5fb7183c07189a58b049fe6845db97247b6d50f8f00b7415b1018d3dc4436e423b06f7de7022dc455d7d60de2ce3a4599df87092f281e1e02b4042efcf1c7b6aa57edb2e14d500c407e8e774e6ae104bb3ec7ad79024cc41f5e20576cf00dc02cab64948ba064a2d7306141ae4121e4f9106d107869c7d34e2012f2e9ed05689bd17e0dd1d031543dd58665b4f01a0a9ba1a459b004fc3024cf6675ab371c94224509c919385befa6e8e6f29789cf50cf200fde157dd2c619c7c1b428baadd737c8d67e0ec16319445b3e24725c3431de91a7f1a58599a44e63ff9aebfbd88fd6a08dabd396735b06bb9b335add8ed8d087378075bf32f34a41de8741e34a7d4d5f66009ee7f5f9a13140cbd1069ca3250d90b2e3e185af881d17db387b1a13e669b2fb82233d864e3f7b911257e897d9acc35573d312ac1831fe520e9381dcba62fdd495719d2e4775c190975990331b426ad3dd839fab6bb4178eb5ab906838ca229497f5b96fad812c12c04cef4fc193edf7e06124de014a7065b25d11d4442f46ac342b0d30eceecba8ff6b4fec3de1d6c0291f468a78c847ad69286b5c273d0996786f7e207e527f34f63223571381236d4381d9413e1e4425d84237f9c829a18481ad7b8e9e3ae86edaa7559ef8d73a7ec48e1fd26b0f5ec4464430896c50b28d52ecb0d5a30133a831164880912ed5630bb07ce1ecda585e87fd85672afa56615959979a9a561f06c4b01358088969be8761a1e55d708ce162589f4583fa82d923c67417bb470499ce19b8093bc16e031da0c3e6b927709eb341937331dfefdca2dd0895b3fe9c17f9480bd9cdb356079959c30cc5c4c1bc317baa45509e5b339e10dc1f97af87ff6944618a5c2b2068d8877b1ac76933e6cf3a6fcdffc4a62bc8dc4a8073de5287deeacf35ce09afedf8b7860e0fc825d02826842ec94b82007d406e09e0d0efa6feac122fcb927c42c72346eb28f9792aac38a1f0c72cd0dad2eff367ef690ecb519dedf66232f02aeb9b8aee9179460d17a3fbc897ce3d241ada51888f6a7722c549ba0719f195d2b54ef7e93dc181e049e2b6576dffead53de673f77def5d370dd83f4f4e23050351642a7150dfb87216a008a67a1fbdfedfa0918db057b220e6d988d39b1f28f1c89e6902b72080cad9a138cfef2c9e64a25e1099ed1db540d77b3ac2227eeb45614940e8d6619c05a1acbb2599d1f7dbbaeb6cb71e52b31ea9d14c466ef0a793a3ac05cc511e20e928f2b13fc0d69b7838ca5336f9c6b69f51d590335ff8fa7f21b24fe9c101c16e6d988f9dec72e7ed4e81d519d5e66a8540f14589fdbad1c3cad495d4918eb6317b87412f9ea6e50706273a30f72aabab3db8abcc350630b0ae2402ff2d3986ae8826ecc3989c429a4b23adeba08d69b8415ad3ad7da70e606666c2dc2807eac2e13b897a9120a18b5f35019089e4362b0e325865a4a5554bdce32008f79ba006f7ebbe5f774ac214b6e03a2132e4b27d80fe202abce2d8931150fa20fcffc7d37f4078efc7da1e94e27ef50de8cc1113c4064562668a7cfe6670d515833c572a9048f0b63bf02be8ea54731cdb545a760d0b17f996dec34025399e252fa0ee8e0608a5e794eb3ed1e10a068f86a8fa183bf988c85ad733a82b90be390f8945798d6f1868fd0bf1e378c9ec95bf28f7b1697920ce6a25247219f8c170204cf4dbdeb6087a95bcafeb03ba36bc79f1cf00a8ae12c3ef9012068af7d5bfde528fb1d874d87ba8c33f53decb16260e583091f8dc821a7de9445f7d6c14e2d88e0b15a2fcafffd33175b382d980ab76f64071bbc4a7c167e499f71319b7aa92d241b35749e87b75f966a0c8eab3fc6d37854aab4295cbb897c832ac12b5a3e47b1c34544a181e5669a8b3aac763b3ac0a95c63d0254d66c8ae1a18229e2755b222d6fa51d932e0851809cd9364967d68777269d7d9e1936b567da97fa4c3c8b915b477ca97a8de35c7d471ca553064318adcac21de0dbaaf448e962971f2b8359cb5ae5ea5a180902b19d94f66eedab82de0c54fd372b0e813cbf1c4633e3a36fec8bb40063e435b2bad342479dab2d030537ab5cbc2906aef6347e02624c716fcaf78dc1aa70651b775865777f21bee40d437c016355981a0f75d0299885c5054c7e58e1242af1b40c4180d39655cf01a8c99f0ff4d147f722b0bdc61baa7974872e2bc2f728deed1f577fb34650f6d7e2ec28b858c746240fd829a5d295ae46bbb08efb9023224149012e7dbd91889063ccdc3c6d15b492d06d95e07a621be825bc57c86868d85690896887d81d1525576dc482ed42949319589a69d06eab5af6061327582f22fc7382e2d3710810142adfeda265ca5db2e67517f9aadec5a5fe5db6068217cdbdff979c6251538c4061c36c04e94fda681499058a29942d784ceabd19a1eff79f8993be3428866800f5b7f7a91a2c34fc926bd7604867c5e317d4c1aded63dfeae0f4e311c892bb5c57abe042c731509fb47c7f5c0fec25a160df99a00851d02f98bf15193d5ad99c28e2d797a3c705b11c72b9ce03aaf28e50aa31f983f1218583d3744b8a2b74dfb4153749e9c756241a9663a2e1a21d6806c77a180905d98462466e878eca8eb2859c1b4371d4e0cfb2955eac228de9f9e477680771b70e4543dfa08deb0fd5d42b1f27f2b2c9bc2dc000984b3af79d88879449e03c5816957edd3e2f64d0226d73f87c584265b6e41301711af64b76f01307f06ecb7d24893d0ec3b41b3c8b278e578216b57c444a0f493ee5da83a692574ee966cd8f5a05545168c4c922d1b5dff3ee2d950f6791108a6a20e776b398c39b941ba1328536ce87910b68b8b4aeb0d00359a40125f3617702d1700fa6bf4ed41b49a77700f648d75154a515bffe43b1c8a2ffe4202c3187af07022a4a7ec54d8316abd057046b4341ef7dc49cda87395ef965a1368c0e062dd0bcfee817dcf68a985da63ca4819f8cf0ef7122d5bef4c91f1a22360e465d7c7404aaa877b75a309ed5a603af9cc0033c45bd86a7305304f0aa7f8d4030ea5e6d21323e8b23bdc207a3f579fd66aa02abaed356f8e2ac7675eeb9dfe7552798c651744a24115f52610a423622db4a201acdfeffff37d96defbdb7dc5bca94a40c380ba30b630bb145160cb7d8a214b0c68d2dfa80e1868a2df2c0d0dd54b1451c18b3b1bec170d3c9bc8274c5e251c65aad58ac5514ab5514ac9a658ccd70b596a6a3b9b41dedf5ed5ef3edd4e6db67c8387d3b006ebe3d06ceb78350df0e23f5ed30aa6f6f597d3bcb65b5be7dd3f9f619c4b2531c0e5114bbe6a1a6851487fd07cd339fe14ddb344dd3c070738aa2381c2a4271b8088f505b56b38c919cb0f890ae6ae6595665652991accc413dd835d71804691e9fb3cc6758bbb225997048b656414425ef835d7ec55c7a3a601e4d10359e3d1da873ec0551e37d6c2ebf5eccb34b7fe3910511957c0da2c657d047e6f275c83e0341b0b16031e9123bb1ccb239e774d9444a1d189e25c25ab556d5aa566bad60a8e964576b694c7894b196e2d16499c5564ee800cc18c3628025815d4c090a6242682c81d3cd22bcb0be191147d4c5219b9883fd03edcb8bfb93186ac7e893ed88efcd88186aaf556b857a89953bf819dc6ca608f8c5a13e6142788747126c0fb32cf30cec5aadc59cab97775e5138d49102ffe211c63b2b8c3183d84d0becaa9b4c22ecfc90aea6d38f2b257cf1a1d6d23eaaaa606561a75cc9285c72b54357580d75692dbaaa3e9dab93e79c7366ff5daea997aa9aece0398e99270432fbb30b83c53c668d9d2e038f421ad88943291c0efbc14e31074b8f47fdf8d63bffb8c73dea9fcb92b6848ac08a488538c2ac10b3a03d89da1651db421c7521e6905207ad9137b44b8a17fae0605952c3b22facfccd3377eab1d4a41550a506f5d3c1b7633ea0b3198b416b624845f0ed9c8c193838f186bede57afc76025f87109823620efb97c71288a5462670541d5e563f2ca30c81d10e5f978648b1680ae186a5fe22e5d60f671758415060e750d879aa3b41796c55b3cd45af26bb99b4d8b9afda3e166fa76313087c18647f18898434a962ce327466be5c7a391acd3ab2488a03b93198d2ac55379493611e8b8b27871d1c517becf430d0b4eb4a060b02cee9e7f7cc5ebb7024629925224451214823fd45aab4d53a1348506839e7e37673a373d07780ee29a201c5a4511068c55df2ce3aa0928f8d892df5fa8e09127aafa51558514ba4d53a19453b9415454545454dcc5a589b7692a1cf542ebc3fad2395944e7607f0e87d5985c18ffdd2092c59a3734263bb6f3cec276ecf16527af76d9868fb09117eb7c86d983c004b51687341d0020f18117bebbb0ddece6e5ef82edb2f6c252ffbcc5593cac2d2cb5ae584b6d34172c47a144b197be9c9919739a8305f560af5e19c452994f1b2f6f5821d0b22fcfc00cd878f62abf6b7da9355441178fa682372c7b8bd70020cf2d364a396d6a2ed8905b2d8a62bb864712f4219f467a3b4769138f40d2238fa473101a0587e88ab238d437fee5e5e31a8807ea9f4780829f4720b648650bf673155fb99f3ef4c1cf1e0dc700be1e1e580fa567ee5d20ef83be074a21c81b32baa25160270f18d66ac1d0fe9602862fbf81616d35a9b668b6a48b7f6ee8a2e9bc5c8d894b17b623c5523bf5981444dee444243ed8e2431acf32f8283d1ecd85d6e251385bdf1e529bef90ba5c3c0a59070a8f428aa3bd781432eae5e9305d823f48c7e1912903f1a57a46825dd669abf91545edaf151044f0a1d642f16886d8e93f6fa7af26b5689004f727a9438b372811479d8786e03df8c6887c3b56838defd22b55b019d09881862e624a3c768aa1f6ce3cfe9c8f792c4d8fcf0ee43b0bb6250565d0a4a02dd1ace0e8cb623e79d497a0d6dac256f7ef32eb092270f1d905615ebf7f7a34987f340cdfa939e7644f6bd15ab09343dc50e82acab4c71cf2890db596a6a3b5e2670edac1afe94cbe1b1479379493eee3912c3cf1b068c2f6f46e9c8c259b3d209051568f04f9331ce69b7d7619878b70a81d474593b0d6c91c323e3a1873b0c7217c10d9bc7cd37e33ff637df476487a258b935d161673500f30e49720884fcf40be5d27958f47b47801f751a5448bce02c7177bcef3789ee7452c58ecbb52a79fd257b9e2b9ae53b9b1f4dd589294fae7210d9ec147e7e47763892f7ff65d36714e5c1df1e4d9a3e92b586c94694d3cd45c0c456a3103996f3f3783e40c9b8c4dceb20cc398195b61661ae69a27d19513d945889d564c80e2095458211f8795ce5c99ab0c9d0c67ab9bd8506b318aba5ad45eab7685d542bdc23717be9da3abd6096288da303dc1b4e26d78345bf1f6aa49b15469ab59c74a1d1ca89f39893938f0429fc4d11671c4916848c14083d0cdaeb9677b28bf5efce2174ef55a2b0d2d33ccf8e8f1c8c71cd8cc391c16c3300cc33cd5cb772be690efa9be432fc926828d88172fd82c46748918a2388cc323ba8aa125a0c061331b73c4c7266b56f8fe9ccedb2b681644997679bb0551a6fdfb9cde2234f0818d048bda312e71fdafd452582fe5a2b5a48ee8797860fd43ec746a922685286ac7a26671ea1276d25a56b0fe21a3b4567f4c8212d4fca8aae28b0f99d5246d8914b557a13af976ea9222294499c6300cc330cc35294c8d8bef896d59c7bdbc942b2950a87c3e34489cca0d5244025a5ce50651695151697112dc28b1380b4b4b7596bb856f0f63f02b86da3fdfae31d1745242cdf51f8f028f6142987453ea1af9456bb5a89d59e2fc3e2249620c9f8f48944041b55aabe70dedf541b139c150fac7556e8c22cbb9e7332d3940dff3158fe623537cd0ef3cc5e3d179e7dc0c32fc8d3aa82bded01eb9149f612f35c44a0f427ee1a53c233cfa7887da17d8dbb5292c9108f8bc5d9342cc81796b3adf1a16df120c35d7b79605f55073425af150eb02012a1e6a55f8f6280f60e325150f352c7ccf9747782d087516e77058662965659f33554402586e1012d8281521bf28e510b1b151a2446c6e94e88cd2ab8a0ad64b6ff168247b3441c82f1e9b737268ce7010f28b8f51869ba474de659af25214c278f66a3fe0b37f1807218197a22440e83140b8751564c843a18dc722894edfd0d03515a66043add512c928b3971777ae467c79e6592f86798c734e0cc3b03927c6cc7cc26e9a144b114bf1204bd8e90abb793b8d8247d5db693b55f26df398875a8b6611492bceb1338a6611a388c1907a418511f1dd4d0575cdf0d8dbad590d2636d45af1dbc32d06db0a482a1e6e466c447cafb40f8ce6851590556afdac055fa416580ca2a85dfbd4867906a90880b4c2650d5dd74b6c27c30cc4cb672fcf37943e8178a9a00d54f8f6307423496b45514311e361e288ae38d44ea1a04f9eae78445df3475a93ef5662c3c95e9de37bb5967635261aa831d17478c460389fc10a6aad0fb5d63749967a89f53e1eb121e22578430c75d1e3e7421d36597a3bea4bd046bd580ca24c1251a67d5e4c8928d34e2f2664477d06b1534b810993a20d36d880c3725cdf14a13d1da2132a788fbc5105862a3ef3f0000a53bcc603fbead26bd4e8bc8647d351284434262c6a177934d6394d47d349f1cc6a3a1c6ab7576b71a8b5160f8d0987da5d29d475998b286aafe1f598efed90cfaf28d3ce5fb02175694c3c6fd75a3cb2deaee9b867effce8791e48e473191f18822ef30ccc40f71dd889bc5abbd087e7cecd3b17793bea7b2e0a6288cf5ce4f5989f813f6c9e39773b90ba9cdb7ce3b6cd6b783d3670a586676d465dceb947a3693202e0f5a8600c0ae525a4ae6fa72e1e41c16ebe31211c6aafc1a39120766ad9cca787d80d1dd334497203e82858c74e4de21776faf68682d589a26e12b3a2a85de788131b7c5761b18f2a2a5ced5a2be6c0be5b89ad6068f23192a84bbff5a337c3b1495496fc2387c34e79b15394696f2a6c889d08d0498fcef1e5a75796e47d8939e2c74a7b0a1b6aad885d2214ec644fea793e1b3f292a31aeb0b4b8bcc0ccf08fe9a30c403017201c8209a4d99b4508830434afe0109b6b3eef945e0fd53770080c0537a5da2ccb1e4ec9f1e3093f50d26ef599aeb12481889e03a663e00f1404596ec1451a1d79522c5b599918ce109c21585d59a9bc31c71d7b1e0e0ec37f7cdee23fa8c370e9d180a4f7d0e29ff700c3a9470f24411e5afc731f60385551f1158fa5575863b80c1000aa1a035c812e13cb288c54f19006178393d17961b90becc42f0c07d8cd0cad4e7ef16b06334fbae21f1356138b986c4fc6a9ac38751f3eff9c823f727a500141d2557e5087402c5157710afe1822c70715f0c7e7d47f80404a3f565cc57ba0aee2d255c0217224d8838ab38043b4b88a0fc1e23496563c9638b9b90ef2379a4d88e68aa5954b59c01f2baee21ff823a7871510249dc5575c05fc019220880715ffdc071650db5901371bf003295827145c2b976bb55dcd29a535d6bac56dd33c9a9a39cd22ca3889324f2814ea62f11667e6361c60482abe05e7d16cce79d1938c25a139760316c3b7634bbcf4a6331765940df22542fd12d92e91cf615aa2d77138ac565b6e2c61cfaf26c512efd4c080402cb1be1d5bb5a8047363c9e3d1ec1024486c5188a9be9d050c82a51ae3be0ee662382d7ad921480b185b0403c44e2da238172441d00e9faf78fc1e58c021a8abf8e7b144779083a73d8840884d87b800c7a608dfd5b9949822a7b019626333e47f65c5a3a9bee2f160c654e615acfccfa9ef40a3821570e40ded5cf8f6272e301146f22bec9a2931972a2b9e4a8ec761df7d3c3a10f1f59a474ff31966e6c95cb76baf7061cbce502ce7536697e27839c4ffbc72b66d765c125a844358266536e7cc3210e3300cfc80f90052526813a2cc0006e0d89c9181a0d1a4c6005ee678e9e08d3922cccb17bf5e82a10de7b84b6d5c8ac3cd2616b45940c75dec041994def4eed221bfdd9597975fd30a36f3103bc507622426993c6c38738e09f9edd68f5af8eda67cc4c10a360432531f3d0748903bc976bb9f5500e202ae8f2f2e1e0b9252bc534010f399761cee00a6570ef3098640d8a0282cacf422281b521c90067cc40fcb0fe9aafee7e30571fb27156cc828282a502911e2bd7723921eb0beeb8f9e03b69f3ec3fc73aeb036598aa8914172a4d31bd4e0e995ac7a85ada01e984f9f20900fb721bf15f158c16dc886c3c3ebe57261a7d7cb05c5e582f2aa58abd59aad4c6b4519c9d72b9665592b4b65a71dac85dd8b393b76c240fa92256a434d3cd2306a3319454d6cb239c2c6e6081e99328f86c11b4f678abaead328df4e6d248ec4c1e667730a56da1cc13e277549b7e1d09c73355793be5c502426378f06932f33499b996801dda2e84c97955120e7e1bc9c4231319f091e613e78fe334a7ac54021e6b3d3d5a6691d5885b9647a7850314c470e1c37bc7170ecde9f1e0feaedb8a4141e5cbd0370bef7fdd95fde14af37c44efe3ba68d17178fb3b7c3b9dad56b7d7a3c7630008362054e74de3f7a12dc3141d51450b8977985c55c3a6f43361c9da72bcaeacf0a87409847150e930761e00e7ecca3f8f6cd0609264919b0e26a0849be359dd776bea54a08593cc75a0dc18ad7a2f4c8620887e2f3ed91c58943f1e5ed9185901e59e070e8391851e7064a7c480333c2029f7285908fc30db9187cbb8e1b6e5ef8f61c37dca4106e4d7cfb8d1b6e31f876d2bdf70700da005f4017d0037ab5f2b0e00d81dc6d48121e9858e9cc2fcaa2abc93a3a5658d7f9e29ba5b55849e0e243662db1f7c3ac05041730a10a590a8a1538c1223bc9000b58fc5cb2f3edd8099e40f2fab9a465842559fc5cc2082455f8b9043b09219f86a77c9df75e62a714660ba7c8d49973e2ccd56ab59a73ce39a7a76b81c5d1d19a4c22b0cf4b29dd6321c13961494811fd620774e7311bb8a4af56d425846c59dfc2089a64210a965ff3062c787a65f4b61b0e41c186b3a583489a2f9f4f9cad4fd371d15794214f42e1587a0c56f3e9479e7841a524f521b37a8a1697d52a8a1665556185901f5297976c3a964d2536a4385a91148f360c87899a9f7435b58a652f313a8e73d16ad5e6dc6289c3ea67a1f442760c64c29eb1e748f13073acc5741565526eaf628e8e712404471d42c89731e6c0b07abad84d07f28e87ac3910db39274b118b9f6b57d0b4a071e15bb9a01e1f521728f39cb82202089f135744dcfc774199cb1b140e2bc40324489d0a1b52d734c24a506b4d6131f740900786e0902bee20192205121c27dd94c29636adc67061bd3c01c609763a07a309763a078a1185a531000005006430c14e19339e98e12bbf4e5c7009a00c4a908146121a3324618618245f4cab96b83e825e8a86d091904825aa81044b6b04e00801a8c10835c81891b1a10836dc40841b6c346143002901c0f0a60f8000432040018450000304c1002326462420906efcc022807a3b7703870f70e4d071bde9381c00750004f4000109e0410266727846bea4d0c57b3e3af745ac54d5d4fcfcd2122505ecc04e052c40077676f6058607599a3876c2440558cda52462b9183230d8e087130073931a931c48764984ca1d0e81d809bb29627df0ff205d7306431ffc123bb13348847a3da46bceb163f7078975922fe68339205f93376a1a880989cf5ac9e8e1c04a67c69831c63c0c5b51cc319006e4bfe56a095ed40469675567ab6f90d34232b13dc482a40909c73cf3294d3266cc1b30999e15e1118719eae6060707850ab193d60ab11312af6a5264828a0aa69a527b26a43d1bc219134698d4b56749980453d39e4591b19a144b59eb3b2a597d63270c07dca0c81246935d1cb64e1b529c1a68adeecde78d952e7d4a9b2338d46ef31e331a70e006862f33b0b3556df5cc43465116d561e9c8c066956630b8a8b55802e928d8905fad29c47632c829579ca5e57315296160ba6eb6b0aca87c201aa16fc93c86574d6b45ae827aa0fef9471d48496bc51cda6b9a4b7b2dd1344dd358d5391c7b34d5737edeefa712168613c988a844279c30f2f3aabc9438ec4cc2c2d0618f28c14874e28bd4b72c851a9428450f9b261cc284302996546e100ae6d4ea1a48713894f9c7a3c9b24f0ae150e884c371e7db23bf5430257df188a98bbee88bba2814ea9af495793c9a393b57dd3eae90eca8aac86176c94d4a59bc85613cd4ba50f195093ecf6fce39a5949ff56824330d4bc94998280d10722683e70c28dbe72a273b616067c76058a594d233c9a482dcb9ec188a959f4793798498efa35f8213456f90223e1ffdec52caebede89c412236de5daf03411f8f646183f9021b62a75790e7fbf9beb9c1f3b52f416d27cab8c086d8e94e93119eeff798cf6964a6befd82718722a4079e7d22315b6065f4d12fb91eac95ec7a498b05169461051624bd0492e00efe0dcaab24c334d9103bc570f5c65a130db443bae69a6f5eb920f473971ccf145e9e1562f8ef36aa7b79231226a7ff6eabb0ae9bb09cc624cb9c39d39a70a833f668add682d59860371213c29f8161c7811d8f3667679ff582aac787e1d170bd1b6a83e29e7351b09db2a580e164ec8409c16e787ec00e0c6b8c8f47b4e09aa8edb6121b3f3e31849ddf380f37cfb01376da366edb368ebbd88d96691c487b4de531385560d933103b71885dc34e5a0bbb6114a3b01bec8409c14e15bb01c1cc14d8905f2f1f574b98028a7f3b020536e4d7cf11e64ca0503314c19138313c69441265cd8a28936d613306e5100eb5bc9947601906801997a7768579025b5ded9ace0b186238ce6117c6cf2bffbb6c5ac273b2e369021b4b7205489ab8c24d4d29c44e196b4ca611563a6374353fca62140e8af38ff5201d3ed64bd75a26e11087da555a44013b551df8c0ef12369cec26dbc41c3ee4b74df1382d73be9bcd130b821d086ea083e0c4302cc3320cc33070ceece3d1ccf95da9633aa6440ce20ded1c484f10433d8bb0d894444a605120e920e9b1f4dd20427d867996c0865acb35264ca2f29b9c81aa6fa0eab144354df3e91ba7cd39992536495029aace6c66539bd99cec4af2c4875a8b3af990ae68918add6027c64e8ce210457dae2615c0db470620808cb787dacb060f37530d0f37548c871beb794767b30980871b0e0d1e6ee1d6bac1c3ada6060fb71b91879c46018543f4c5207579f539024b5f995722ad26cdd0241ade3278bbb6d324d0dbb7539364789f6293aedbf0d824f717178f4d9ae11e8f4d02805b8f4d8a01f28fc726c170cf639360bcf3c86d8e9dd8e7ca1c808fae01aea6a3b9b41d500037b6c80678c38d2d7a013fd0861b5be401656ab8013b2d6a9555f6f2f930c655e9ece99992ac15e7cc3e9c2a19b39984489a61e21014d29b58966559c532ea7948e3372e838056c2648c744e3979bb5d5bdffd382c758e3d768f8679c8b7c3db57ee6a3ce2a7d06dda709de2def554f1dcc59e13c502082086da7158cd87d8c8c57718e3054bc477788306233c019134ab13df1da3f0ed5c108b39e6e18d2681ae1b2aab971679f7c5f5dc9d9fc25d6a85f7bc9bf2a426e5c66f829dce1e8d05db4117948e71d19f3e23c9237d429971ba334c3c92249f201b9b9759e3ea696a56cce1bdf44c098fd8f9a5c725155efab7a37ae92d960e67724e6c0c9498178fb8499383e172c1707508c3d56a52bd6951fbe9344f9ea7ccd3cb705530b4150c5f3cf06686c903d650b99ae460f82265b8625c35a2f068585f6315656aa862a0c4bc625e9c176c0d55936c58c3f5bdaaa1f3f1b0464b82618dd57b60802ece5e59fadc189defc678eeaa4931aa1675ab6298f0087bcee74b8b9743fc1855f70efd8e59591b234524c9289a3d6358312d2a620e253cea26312445d4d158c41bfa63a48823194393635a4d6a8f61715817c39a1e4b13743117e53daf0e42e15175f075e57b77cec7ba604190f4aea614a4ab2991c04b392110d3e6a76f3a4c972decf7c26991caca8379488373445d11f2e5218ddf1e9ba1d3580377f06b9ed16f8f81c2c4b7d370a26108932217315178149df062c8f72ac87718f3a2c1866f421a4c588d132e287c4883906f2d63192e1ec1707d7b28c3f52a95287814a9f8293e545112f324c61543cddc7ba40e464fcff510cb9ee9e1baf3d4c76e2cb1c7037cea2a30d830c67523c6c523f6090a311f7c6ec77a9ec118178776906007dd8f1e118c9b18e89e1b8262d95b95040790e9824e1c6aa6e00fec20246e649ed1cca9ff40a78a4394c6b8688c8bc6b828e80432819000210132814eda9c30e1cc5c61c1862aabef1b231c402690c9c5e5c423b61f8face0052a2b1ecd3081334ca0cb068f15a4473906b1d7effebb2076c932792e88c11df7d973a2134e8af039d1092725f8ed3d37273ae124078fc3caef4ad47763c953bf3d1a0aee009fb31ad0c5334cf2865e624badc44ebf11b3d3a41b51d43e5551d44e43cdbb867c78030a48de06e698c461658c2be668f9ae1f13e5db77bebdbeecf41b31525eed79880da76ade58ced37518ff04a3ac894e3c61c1d730d2841a290e750dd5778d540d23df0ee3e2c02259a39a2a6bade74b6111751d0ebbb90c1e0d103278349d7bd7fb7aa3134e56cfdd6c324b20a66f0ef21cc01f553870a81dbc11e38a71493a9fcea069210f7481aeda9a97b3219fb3d17177fbed46279cf8e0b5ab0dd93c1de6f7c802c7d63c4172c602bf9d6fe70b83ade15018b3c537c87961a3135dac3e04992a116cd8e17c3ba06bd5e1744598840373680c3b3f1d862ac605babe79d04a5325412690e9dba9bb9c9a844d95cbe9db6f88714d558cab455c0314d6053bc3d424ccbb6780375a24061bc6b8625cb3da70f351862c041248d30aa8808b3442edf513eb6ac5bc5e20ba671a215983e770d866a2532b0c73e65a9dab5c19933ab8880f1de42d843cccc7554bf55c2c80ddba1a3a9fe11e6a7866206a584033b121a7628ee6256e56ac1c781466aef9ec593bbbf252fd87203cf099c78f5e8fec43209ff9e0d782c83e732e879b4dc101fe1ce69441f4175f7c71372f2c919a9c0c54670f414e06aa837a60ce8e8140f4679d0eecb5bafc0a863ce26bc033d04c9e2051f30c827490bfb9fccdb97982e7dbf2d19338ac6449253149ca08104a927068ae5246b8b02127d9b860c3a8e2c2e6c0239fc901cc8143d317c0a1d91c36cf2c80479508e7ede510bf8242cce794e5dcbbcb415834b9e86cc32317f0457e648af448206a7817aed194e01a0ec2d73da0b59f174eb95cf9d80eff1a1e05894c238cf1d9ca67994fce6af89926b111164def3e6018572b2f601859315c66c8a9d04b92a3806320a7a258f6be0cbec8287834e3837e75998443320a95954956a08ca2e5e2b37a8da46aed0b10a1ff81ddc52b7bc672f150b2a41205581767c9eec23f30086a0f25086ab087d8a21088d07b7571ecba488fc605942dc9da828ae3bc7be92e7777685ee6714e76f2471e9f1e6bb5b6fb90532fe0d68565af36b021b3124ec2a4d2123791536ca4b4044e14c50f398a8f5cd32400f80c6be7a17dd16190e370d820a926499d16b178f499d3eb131b4a9d9fde3d9732c3a119e2a411e638ae9b00f53ece7deecc0238f4798be7c0a31470fad318020050ca338723b122f286e9e1f7fc6194bc613aff20ca4c0fb767064320429fe21fb737f4c0cde1ce7068fac6854df130aa16c0a1e9293ec37c7f60b7ce4354541c34e4a7c3b88c84189a0e7379093234fde57213222be1d60f1a67c5a77311169fcea8f615c770be82457efa3383b2fbe92e2e5360c8fee231861e78eb2fa04c7168bacb0d3bf0d65b6e28bfc5fa4cb7dc30e5430e61ae1033e5c605f088471f9f9e430ad78c08e719f76520f41694463834fd03a30fb88643936db6978d4896b879d98449b2a6a6a6c6a6345deaf0887db263a49fd35b345d729e2b5fab1f1ba56b1cd7611c77daf5dcf81e18ef4799e9dea492144d9f510a3f3d244d11993053bdb0a14ca5982d1be19095bc3c0be7613e1e61a99efb741589099a78e9ed2002eac13fb026a73ac8070a22d2792c71a026df7168daaee284c55f7b5f5a347d6ac1ae9a34c3a926c954144d9f4e60f032f599e7d16c5b5846ddfcf489751e8f1d3a0f029c771e0438e7548b9a899fcedd1c7a8736c24397665a347d7362439992291e19993b304204483ec6100341e3abf34df2d3b5e931ce2ad86cfaac82c5e6f4a99a497814324fa7daeb0b01630118a2aac246e7a46c52b569917449012e6c586dde07cd746cb2560d6c35f18865387f9a38548fe050a6c40456930d87e4ac5e6dba9a781439bac0306aa7938bad8c4915367c7940fc08822a87da45f9881686b432d68efeead5f9a58799122659eaa33bc7d52a8443b2de9c60e8a846bea2a4c760922cd5f0d2ab91138a4761c561427a15c249aebb2a63280b81c819db13a34c46b381f5080ec90cac362aa8383c925e8bf0c81fa4e004c36ce7650db2c221d92eeba1ada798b99a546da2487a3dbdac362fab8a935c11ab2f561f575fb4de868fab2f4eeff1cae8f598cf9e753ca3644f8c32b28233d820397d3b0e51b73c8aa38851ef789479bd1908c2c01d4f7f8629f883730c381ad6c3d51a3f0ad63fcc5e4dca74a060335593b257a67ace5e8f3d7b2bb11f555fc0f9ea84cbaa605f54401b2427b20158005c8c5104363acb9bd109c44697312463e49e5cd8182312381c56d6ba5203276383e470909cf8c2451acc943d4ec658b2e8e5da0fb66930a488b95bc23c5f0ab64e4883278a638f34c27e398f62bb382465bba287355e8a2c4c8d34f2882fa38cec6e0ec92863ecd7a73a142bc9fd0c9edeee342655db366d6ecc1a5d45198f3934a71c2467669db3550fa5f683744de788939da905c7af7843bb4ac9dbf8b852dde039ef08131f9df071a56af250a49e868f47a030bdf478a8b1e155a20e0a956c682124598b28a6165a1771b20fd4877049953e8fde0e1f38d3a21b1c6a28d66f1c7932c408eb3ff908141cad0b29332f89a497bd75e693ee660527c450cf79295d4db74d9bfad437ab5a638b766811911c9c8471254931482c1a17200f37530c10f4f202039ce12c525c50951770b0a01f37b9c25650b8d9c8d84ed974506bf50c307695016a31eee7a04b1dc65d7196ab6263dc5802dd58827163a9a4e37aa16e52dfa826c512a758c7c5230936ebf08b5dec629d263a3adc845d5a7b34592679beacb04c30c410186a62a8b16061bcc5a3b7b9bc1a130e693a3b661636e4d774092183004d0f0202b104e33ecc70d30327be28b538d6daee0e4182acf8e741549cf26b823bc0b4809fb3780f9fb38043e4481f62c53f97600fd4599c051c42e5078baff80f1857517118ffb1e22cfe43c561587cc57b807115165f711f605c250bf647ce8f16fffc070ca758b03f727aa001fed1aa8ae5b62ec3e854b176dbb6ad5695cf6eb5d61a579fcfda1cb6ed6437f7788ca11679377a1fb0ba742f37e7cd6d4b57419fe106700e93bb1189890a2f870630299656425df26e2c65994800b5d6da4bacbf26fd931fcda7bebecf3dfcf90cd757b52f998a322d9b7879e2485bc1fafb878fb856f0b9c7e53729140aa5aaa6c5d6776dfdbeefdbf1008f3e1e7d604baf0ebac733c3f2233f1f971f3024a57baa7375ad761ebefdb5df03fa24f77d3c55dbbeeffbbe5a3f1f273f9b563d212d2459aa0f69789462e35ed6c0a19629a943e5db37188438d427cfc7b717d830f41d63fca4cb148f8cb8a2304984924978148fa482d49754a2f2a154c956aa07dd998ea09ef85042f9f650ae647df1288caedfe1511877be46b9c087350cdf1ebd1ef10acf3ec33678c4a04c81d42518faa0df0da5cd87546148f3642a2553a0fcfce371f650fec73f10e4017388eff18f7fce1e8d27f441fff3f9aee6acb1e611f1bc062679de1ef2ae3412e251056be81d1bc69d0b78a0491130fd134120e2c3e88242910f638bfb2e3d7d7c86e9894742ea6bc9b7cb54ccf1f1767904cfdb251124023ccc336f974dc41c1eef232c9ff03c944ce83c94534c0f25923997f091a9577cef06f13ce5fb3ef73c4ff13cdf3c9a8f99863ddff77ddff7f9e7d1fb80f676936ed36a86d1294ff224515987fa2803109e21984064a601244037dfb2249928e2bb0f431fbbec490c3597b9aacf70f6640bdfde9f172769687566ae374a8600ce433b6b6cddb1bde3b1e16e3cd3dbd15f71649ddd18c58eb06d12fc41b6b76ddbb679f43cafbfde39cd9a9e3d6b5ab4794b617ddbb66ddbc08f6b0a16066786e5c56ae839c51c937eec278cd11fcee3670b9f178f6a966559d63adb958f6161af2c6d373ea6633dcf0962c5e191c7c68647fd62cf09e2a8b7103d1a8fcf707b341ee7ae2cd55b9dc38e60a5cff496d518449924a28c125146c8ad434ef50e51b38b01b9f31bf8c31690e8178fea0a628877b24c7a3bdc58ea21d86ddb7cdb36bbd3245962afa79883ab0906873924c18fabe27436736ed3b79bdfbc6e0e90bf81a1cc3ab31e1b8f73d4f3387763692e79abba428bd76ef75cf4b6cdb78b69cc832c65d566c7f3847d71efec90f15a2c4d4f3abd42cccfebb679fe793e05cb1e7ea8603fcf8da518491e154491c7268eea123184e35141247dba103d364dfabc1a87dd1c3b82ddc0ce8643b254719688a38ea1661002b1d4f9e5ba2b4bb2437dfba70ba9382af2edddf920763a8821538b9a6f0fd539ae876043189c67666697a733751d0ae44375ceb9eea6771a02b2d49d5ac41e7626769019fcb8360f617036ffbc98a0795891c8257c7b2d9213772075786c2a8ed4c1359de90811be81f06d42c2b7d722c0e0a49808ab0f6a0a27ca5c2295524ae99c9d49ea68280c832375f44bc2e07ce6f2d8481dd9ce17a24c434931e204df4e5f224809f2edb25fdf9eb9c20f18bebd3f62f8f66c47eaf84491d917628e8f1751a63f5d88aea51cf19d32826fff44913a3c36f1e38524794c1045ed3a3c398837b060e4b1414a0a3c49a490e01bf4b0e033866fff44e190d4c2b24bf0f3e2900ee921f3fdec7c5eecfe89f2e9d9f4d514fcec7c5ef6c3cfeb1385495c535353c3825263218ae2cf5c3185284a79fa6a92c788286a5f410cbe3d35f8760da42f8f0d15f206e91b1072e7a9274b5cf4a43462d9e5cc9c9320939863e5db3f3b318716ca9dde6951837aa843705e1d4889e32ec807ce3befc06993edb4a8678d1436fcbcc2ce6413763b4f5f9de9f52de33750b26b5788508240603a457e4e61a760c38af379cd8a236f900ebaa136a0b84823dc68267976f20823a40909662274037992266ec912c315ac2a1894200a5b61f190867332f39cc36155ba589fbb814d71954ef3525ca5c5a347d3229df3362bfeb32ad4238d20399d7f4a2c48a44eca2636ed7860675229d9141946173f6e3faf8bd0a9120ebba37ee79c104b9ddb2ef79ffb5deced8d5654faf1282c15c9042725b3b88a09603c301d8babacb0a655ac567666f087cce7af64cebe92b9bc3d5c3c8301a3c5b3eb9279365b5c32aebd07a4384807ce5bbc05fc2166309c7d6545bac010a273217cd4b72e840ffb9ffb7879cfb90b6af1f829d90a8bab801295e2114b986512957119976519c75d999228c9844449946442a6b839512854b7dc9718994c194155d44bab38146a222c95a5c86219b1b78d708428838428d349a687f2f57abd5ef1c84ba75c5480f5b41b44aabaae3a67031b76eaf336c2a42024f0d24b75186729a2cc1451868a28a38404ce2d66610ee33f605cabdf4b6ce79f740ef31f301ed7dc0718c77c8635cd855d20ba6e6b57d6f488497e90b68775e9dba54e81971fa717a483752e7a3d26f52c61290d370f42bebd719b33ac75f3cacebf8ed2178bc59a1b333333cba0dcf911d2087e71814541ac7304df96e5c34e55e1f1a87dc4f7812de476ac9ff1883fdb880d6c9b6c384444f3549334b04f35853957d742f95a1141c927e0e3aa89d46b5e79d0aacf7075cd31770c1c622b69e00e2d6a8f2cf6d97dc3a34983495c4301a69472ca3eb10be150cf6b4da8176b42a1527d73e291903ef58947b285344ea3640dacf4b66953dbb4a94d3647d8d8f0e8885adbe6bb6d5eaf977c655fe65d451290c897176b2d4b5693a956f1f372466904a477aad69fccbab1a134fdebf57add972e5d6a2693d582f05c0aa35a3aef62d691d613df52b84c26245e19edd32be69828d4045f7ac679d6794883e9e75d3741842ec26d233248204854a7620e23449654ccc1f2edda7de182d5c2775fe19510ab6831e8e83cec317c877dc5b74bfa798d24cd3f30943ec1162b6909720b64254d8f206da97dbb6ce2109fe8894d8c049bd8c4a3c96c6231122c3eb110d6267bd5a495526a822ba59051ac5aa131238951a1e72b4d51a65dfb8cde396f7f1be91487d8c448c8af53df6553abbeefbbadea541be954a77834f9db363e995e2ff93af5498bb56db852ed2662a73ad5a928d38ee1d89047feed590ecbc88a47f1c81854f020f6d8497804a21e3b0aa9e3ce2c8043ed51e505281f46550e0dd861b5cd8e29e6906e6f277d6a5a7b61354fb5915ed1c076777b979f6be9da8bea3f3c8ef90f1850c75dc94594e922ca6c61e5ca282c2f1e285fd561fc07e61eff511dc65f3ae98178f038e63ec0388807cc3dee03e61e10c687ea30e0105bc903be444f7a8e4bb801203fddc5a57720cf01b25d5cdcdecfa371d1bc8d30a9596efdc838517c7bbddc728968202b61b9f5576e3c32862bbcce23b36460535c05942c0ec9503a6db158f2d56ab194b0584a5a1c2777e44bb2364b43f2ed269a08dded22b4110ec9e894093caef98fea98fff0b8d65ed81f393d68eef11f9857ffa1b9c767f88079751f34f754c7dc870afae00159d5a246d958da4ab19423c176ef5aad95ee394bef5033b09ee733ec79a79ac4b55afbf10a9fddeca5e78019ef4d8e4637ef3cf2d9d55e7a3be487c7d663f30c047dc01ed6a9f3b04e1dc8476f87750ad28832d3e5e7e1fc6c4ecf3db73708f9c573fe358ba3c41c9c7b9c99681e32140f586bc54090f32ea750cc0493da088bda63c4e814a378d43d33c1ac5a7560a7381958e9d2d4a96e79a29486d2d4270e51166551166551799226898434499344429ebaae533c32c2a35675926f6754add64a16a7d3a4b6e11d16efb09620830fdb060a46f8907750269429bbdcd31b8f8c81063f6f165f4d9228c9922cc9922c896a4da25073a34143d33410d2602ac4c652e55852c2869d3a9d9ac426539f9aa58449184781d2e4fbc54c38c001cb811789c29e6fb4e26f4e3c32861dfccb76b78eec1487da4812967ac82896228ada591fcb2c14b3a24ca798d5cea6d6aa29ca849706b76d2f06a2854002999a4c010ab84823b461e332cd331c7632f3ed9fe1fd76b55bb16a456d51c761a78c891213860ec515e110df0ed5e170a893f8f804078f13032526cace0efa378634e90ba6bfa894cdb2a6510d434523100000041314002028100c0784a221a154aa29a5fb14800b889c5076569e08a31c87519032c81842140040c00c10000c44db06245ac6e379c20871c8701e53bd322da1a5f2f34adda47245018302c2b2a162949e932c975c110fb63d5bcb1c6c4b8fbf25d03b011398d6ddfe2be9b5884936312ec3e5da555c3d2ea910ff3ad06f7ac34573e073babfab392ebdc1ff39de323fdced176fd73dcb3335b0ef0f1933233a07b1db25f2ae9ab118724e6eb2315d735bb5455ed885d3ba5ba9daa2e52273ba2f00a9d28480356be43c99179ac7fb768c923a0c9a7871587a31fcda1e0abaaca24cd52c0d9d22b181dda8f0d48580add4a53bb1247df1b5b75985e3028b0562c04559b558cf059a684a903919e480c5bbbd5243fef0e32edc460b158564fac2abfc63b8e837890c947b5fd52d05cf559c8ab3ad490e0bf873e8bcec149246be2743a43d0dcb5806172f9cad9a77c3121397f8821ba133c877204f6a0209fd0e98eacf59534489ae7f97d38ae2e2ac36ce420bf11c64d6dd442e7801b7e5d3d5208322730acacc0f7b7278a0eaa3c1100f58b9c39502d9bab071a8c5748a4a302d99625dfbbf3c046d1af8a050897ed68e130497326f85610b7abe96dac70a1c9b923458da515f511a89110eebadf49c94c89a5758b8aa6a013bb6510abe893093e543695c0667271bf9275bad7c75c7577f25221aedb2208dc4c65fb923d25ec86274b7bf9b70642ebb35c9a0ed6e5380268edd795cb17b81d0c7474c6a18360413ac14e3047c8a5604f90dc89e467642095f86fe24607c6f4d211c5a114702b2050fcf19b5ccd250175027f870cff430a7713c7aa91e397c8c3d75a7255e5015fb07cb3cf535c38838f06eadeb10eb0c53f343b2b4e447ffb0950266d96a2e473a30a948a0269d77e2a09e5d8ca1add817c93a97796eb0e44d491e258caffe3749bc86540ac1a06bd423ebe3c31e4770ec49fea3890bf3fc9cd081b2bf13089e65fa8d7a75d6c8b2199239e2fb0f36eb773c4134559fc0688c6ae3c4c3043fc96eab4ce1dcf0048448382aea5769cbad3bdf81b133d179a7570ab5070fb22f8b2eebb86bba3c53d3cf370712d86c1aa623367732b799f2cd2447ab469593bc44871496caefae003dc1e1758e0acc6ae735174afc65d3e99037b6759239222d0bc19880a996af7d4ba2ede41d137d244448cee2156edf7c025b71c4dc487a917b50d217a9dbaf4fc936c9592afaf5b608bc2e6bcc36b1c01ef53ae1eba32e46a7807d704c2f0c4271298d64d7d3d18db94ad91f64183de1175c4288684c40242ea2ad61a218d4ed8af51c920e9c1d8b3e3eae934a78e2f8d3e46e58e7d6646b7ea3ac5e05a3a3faafc55714fabfe869e63d06cef503a7e4f36c9433a5c47a3adf2ea01c89423e48ec8e88c95014f1a3847f5d7060e41a66344a9808c3e9e4c7a2fe3b3c98f2ad85faea6c8e8c95b361fc7a7b4df64c7f0db08d97742e22455e37b45b62c65224c016f0ff5a1969a875ba8bd3eb39809b8c5d566656a4829ada8c34301eb2a5529e73830691d72f0d0ae48001e2084ed48c767cb15ee5086d08613549ea53bf5516d6781b30409f20a2fc63c4850eea85da4b2cad6f838777dd779a2fe56c5a5dccd36b85d424a6b8ffb52848125450cccbcd6a24407fcc85a8b040f08f6dc7032495768062f8411b120fe1ed44014681f24d333ad4eeb804ce4458ed161a3de7a4a8ab65b0d2b8b58f169f345a9d499a438ff8528e7326d0f950527bc4f2aabd222658d074186b8ac636d618e3a63f6411a102342a7e231037a1591395074c22ca123934105440e7b5408d7d9707a464926f106a5cfec897b038475fc14c27807d6179481e5b9dfa2cc80190c7c9bb41e6a87e8a81c06691159f64f9fb07f92961e22b47cf766e4151965f193f69cd6a3289b7c1f65b8f0ff2c5a45065291b16dd8641e05171c952de2589284a03008f4f58d712f0535cb39a192f0c673f19606fb332dddf81545fc920ec64fe7ebb9dfa94f9194690d61f0f9beda00a1f2dd74a06df6a38f43ebb132579386cd4cfaa99797fab640712ea798490688dbcdc41a2ef0dcd277ceee038f704f7a1613f30f01b6d42885a24d2550ac13e34c4a5da95dd03d487180ecc86e55460f27a8fb3ade9103a5f9aed11b89e7f2e3bbeaed813518db6badbb32e0332acaf59819cb77643ddcaf731b2954c160808e1d81277fbe9872aaf0312711fe13360fc921a6e99038d62a6ae186cbb448d9afaa62ed3b13d69943dd8696c9a5fa0a0c392b6a651f601a89f615c262ca35b42c266b41b1a2478ea51dce927114c6e3e1c135fa26f7c86338bab3623a30fab0b60fd01fc32d1d7bbe44b871383c37af2fd26630378365cafbf2fa5819cdc1e8217d92c2ae4f47b9f2fe260501c1040094ceae08bf0686b7ec0011c3a9e8cac7abfca8ed880a5211535a319868e0aab902e293466db50f89ff1b8a23a13f513e4cda57b28abdc2cc3efcd99bcfa3ce8c6f4fb30111909dac999eff68387c78d8985e64a7f702265809a4e00ba6d21ae3b754389a9bce95f9b92061e64bb8da44906d13454f5c99c006bb3a26fad2166636330ae83e1b44aba379d4063125a54dcecff6d2efc8ed7e5c289b8f7fb5708f69f8a0f5f32e0aa5187f87dcb9a2e81749673b7d39f10dc05125b25cb4a3e32320fd93dd8108cd7460eeb7b4616a92e408793de1821d28dbf24ee24b349f5fef46b0ef726ac131528dfcd2ac436cea850c97243cfde35ad94593ad1638d836ce725bc420374f378efb8675dafdb7bd8f70f62b0df229a66b4f92bc742ec6ed2e1c12ac59f1a086a2ca02cbbab0cc475f11da828c54a0f875845e9aae3c45bea4f28fec898cf5c4ca78e31faad763753ff5dd1caed630d7964e585c22992b5339b5dbc4c41434833ab739c8df906e1cce4ad9098312fa0a1506d29594962de24a17b1afb63eb2ed687528f8885e90f5e17d394b611a95719f0e3bc6ba453de633534be455361d320c9bcee9bb4fc31d71ba9a50acca2a9539f414ecac63c910f154a516bd0c6d8e6ceacc867d87846969dda109e6ca3afd7bdb69b3666949943716cc4d47b54a5fb4b74536cfee229d66961cedc2a1cbd2d5a481820f84f5173950f6566964092077c8ca450a88a1a666bcbe1c83ac2ff9c06dbd37b233246c1279a374aff8e3791a8f42e4ed0410492e72dc1025380631fe7de8035075486f1e0aedc0c13261188cdffa9c10a05ce2041cec48fb3d3291e5b9aa6a6f57aebb606669b588f053efdb77f12172bb66d1314399751f1c9bec460c33e1c8c463a191deb4c83cc11d35732abb025d2c0a8b7e503bd3ebb6d0d34d624762b2ef3f88ba3171a864b20c39125f5cf5dcd33a4468068561e5a5336c29cb278f84cd508bb85700aceabb1fefc09462ea41839932077767e32a062a657cb3411a3f094ac718902f5e1815cd7049e52f3a78308214d179ee28fffff26dfe7c8f1351995ae5bf7e8f43bedad9b127e00ece0f3d1bc9f5c90867d147b6f6871f45c77c0ea0cf170d6d13eb70a0cef7f9009edc7d9e2d176d371022a209a5be1c25b0ebe7bd84a0dadefb6531a4bc954b502157504c96fa5550ab3a4d758fa9f3982e17e516c081d13afd01d09fcb41d3d58807783e1c01346b2c721c11f1409021ee3a28ee292e20ae88eaf83340fd7feaa497d4c4e019687ed9065664d2cd3d7f4e7b9b5ae9045f94277ef800d19693a8f4d5cb3fb04a95aa9e23467363bc7cccc4d0712933051f8ac71ecba0bf6c3114b7342a2f01c0265c943f89400fdefcffed6a09f4cf5becc09e336b1d047c06df1a0eb1f02930435730b9749a461a22d4358f2cbb4a27b76b095341aea72e5a29cdedd424d05ce50fb4b0ff14203fb49635daa060836cc5dc5952bf08993e62171b94a86fce24a001ee7318df2b48854ad809e96a6af12b59a51cc1d81b477853da32ada70888370f33d477cc035c0af447f73801de334eac39cd4ce3d039e44b431b20f7baa55fcfa6bbfc81d67a27886010e0a07ee5a2e38d89af985d87ae8a4a02fc489cfacd9df02fabaa98a5f1b1c2e5c6ef4837dbf0b25396757a5e1da5084db29b3b305abf7b74d70154cf8407048418adbfef6149b0b3114f8fcd56120dd9de711a91c1b64325300b7e0197bd2d5fb0f2d9f1137f89dd59421cd7b129f3ffc764d0c5a04734ba26895593c2502b23fccaf899419eab7b8e3e7225d07528adb5739ffded6a4c99c0cd70e47ec7d1670eb35871103c410d6c8810847138609da19c8673df50b0ba76b2666db7b928906c6000afbc1606252992ff5f98eb5a8a00dd5c197f1d90bc074374421109178c21ee3874844657249094e46cc5d75033a84bbd0d83136a2660499e5a117cac746cd2a6022288ed3b8d1d453ac069e6eefabb17e20e117c91b2222cdbdb4e309a24ad14a31398fd05c58c26deb1889c74035f191250dc78ccf75b449bcc240dbc636832aba852e8f02866ee94962d32eb7349f0aab715113d50651f0fbfb81d4829dd0060f55e2c1550bd6f6de8f55a04ea29acc61ff5099882016cfd92b84b87efdd40695f9c55279b24b54df2067294256230790e05b720a24c0f71d0214d30b13bfd4eeace4273ea222f5e9493cd467c4216c778e19aa4048a0691779a83e420f9903e7a8d896c7f073cfce4b1f4843f8dc602849a57068ab21ef19932745a465d7a353bff209ffee3b90fca58755e7d23fa20ee15bbf1ceac93aa712235ce668955d92b5988d26ee54620c46cb2f253e3e64b24aea4ad36a892585bc71a0b8008d48bf95dd7976b6b5d83370a02d940120798ee873761c554d2b2c3aad7cbcd1efb7b6c68985309c2578ee7786b061546a47be274dfbcd9b0cfa1480445bfef25a794d099f47fe2e0f2d5b5eb52b4fb89cdf75dec2d9e50e354367942a6d302b9ed838e0990210de72a24ec1b7e7ce5721f1d2e244547864571fff1b6723a91fdf98bb4a71459ce169a00710586d6c83cb4b0383baed073eb7ca94ba7b9f012e2614c9d8ed91b9ddc87e6a64c113d3a254728b805bcd707a21d3cec4284008c02d4041b70e38d4b48e5b33b5fcdd1785b4d510f44be2bdca13eed6de9813fc3b45448415feca9732275a51a5bf3cb2dc30c789e1bc4f59dcd1a24bd2e5d6e10f317adbbbdd3f314522dd60120a7fa96c60dbd933bc2b20ed6b7c2438be4e4e440ba30ebb448529cd26d57945674f116b3f45690580d46587e93e1d5cbc58f5776b4ea7bdbfefd98ea9efbd406b43f15c2ca4f62b87980094ef82269e3044747c440a58061b8c2e219a52d93ee2d311fa291f9ff15664da82bb4aec7d7c3e804778575a484eefed3dc5f0a65f01791fca22119ced28fa501c53ae7df87dd0fb428c58c86cde753f14bf690ff989619bcf811fa2a1555883928c02058eae77f4a5cd0ee4fa63d53b7de87c3fabe22becfe00a64618bbf1247b7ff7cb965d633b9806712493d6c7665244f37401ebd0c8d3e960b3a2d9c4cbaa8185c93a926df16b7996e734a3749cb94494904eb898d80ac0d81e8d1f98038dfba471110fcab23c4bf51c91dec7618076fdcac4097f91e6012618c89fc58c47c3e34c44c6e38204477697040ef4950c8303fd8a6662f97a2af6d4a2eed92925c8ae082d076a274f135b9385506fb7036b552604823181adc52fc755c43ff1bac8d08b3134a5cf649378d98bc9beb6f0f3b600fdae0fb3d0626a7da8a00b6cf0fe220dae680243bdb4abc56ea94195cd11d5dd016e4b80d478bf9d4eb734686f49efcbe6b73fe3519464220d1ba95d05f480bc5ef633a7404eeace267caea9e96bb6b2ffec3179761508383f90de19070cbcf5c18cbf59eb415c53aa3fd4a7aa339e7213cc4b271bf88e7495a69ac5b9a76778d58ad19657e4c4482a16c56706a23d9234a551be5f39160386ec2a432449c0c5292bd8f3800b64106e6627ac45bb60c7cce7cf5808a1754411130c50616e7b5cc8ee97e06fa5bb7bc176a0d45d60e27a37ac5d353d595a10248abdbea8bd3b6fbddd05ea356ee9fb77f3c71e42824f6640101a3d4d04862f33a5764d3d9a6927a8a4207c82a842584155d003f3b31602efc9ebcb333062e708d0db02f160ed7321ab9d6ea173f711306a4974cd8f4aa5122d2f57044bcb18fe955ad09517e6a32f9156caa99cca767cf8be70b572c2759f64ce6da09d5f52289fe4fd0f44124b92e3ee8b75a670d42176554e154d34f332846923c0721a32e0b15e6cbc87949b49604e5629e62641e9e1a2203f71f2484e7e744e17cb3bc21d234ac70e73a2c758a74ef8882a779d1d9853475e8689418c44e142a3ac3232fe986932b4293317e4e574426f6bdeca58f86c4a6b538601cdada8eb42cff2474a37db1fa1b067c7229d8d9c4bf4aed6db8a8443664b90dd1c58e7d08c2edfd1ba26b2c33ebf79748d373e5ddf0f3cb4c1118ef6b5d2d120f7f755e119d9330848dd89413ab0f637da918239e6376a2702b4137d5dbbdd055b596b1df066db55932e014d726a33cc116a052ed1f6893c1a3612b5243d1873d2508757a043c659b8908ef444f7a7cc63686d376fa30ca021259634bd072282d4b2701faa0e2b6b68b37b42c0fc9de94a1a409f56209053b9d5e9d079982a527650cf0446bf8e95ad90fff0c1312c0f5de265e4ca20d89ed767d9ba11b095a8093435a9156d4569a1bdbccd2dd00b789b5ae67ac79e9453b0c5fe93051122cd31a8e35a53040c1ced2348d04191090136c13042f432a0c0af2a3dc7945ca797789920a0deffef818e97a4fe5f9354c1c1c983b4afac29f0cb4a14d29af3c3a80ce71ef22c4bd68d453a8896138f4c43f167fe83fdb1dbfa50c7f8869a9940d42aa8a968d4dc041600584cf786a6dff381613548b2194f035a5ffa49407b27eff9945d1f49eef23adefdde68e5e7984fadc319a1d415c2aec1fc8b2584163db720b1f0b3627ee5d4c63a12956c77855015bb32eaf4e83acc2a34dd4fe96c420a87a267868099d738ef7f69756c99002bd5bfd58232fb89dca86ca111d55e49f3caf1f96f8841e8aee4594381b700bf948ef2462dc02f6e9613b81ddfa24c73dda3ac9894858908e7eb16f2abcff9a36b6e86ccfff2bd3a49321fcc9395eb50d864ddabf6b5d92657a2a680a0bbe0a224cba4b6fb29e709898b62dc35e05d3e74edae09b419a28153569a5e94296f294630c3845b2dc7c8d08fee75af7bd592f518030e0dee28c12e2a392258261da759a39d70e1ac80416f193d4c7f168f92d144570b1da0040040b62244b3bfbcfbede4ed243fe2d3ec4b2cecce1c7e9e50df51167c52baa50532df396e9ffa9a1f815df1372a59db27abeb733a49543f9a83b2603ebadbf4dbc82ebdd443eca95e6756858aca1929877471267a1eb7edd717b9a322af2f1e391ed3f3b3027870b12c8548bacf338c8fe102a08dacfd98d6725d0d92299da66d620508563c242e3c122a9c6d9bc2080f9e06d14a469a800d0c9edb8db891c06e2507ada354cac76e1c02ee07f56c869fcd75a1236da5377dc9e355f2f10f5a894aab6ded81a1654e47d9b66b04cddb0997e8bb97771ce11193dfcf6f9ff08c8251cdef8f16f59a0a9bea959c5e88ae8a55fe9ea9cd00aaae136b68871241fff3f9d856c738e18c146449cc1d2746bd5b619ceaee2d4d94888beefb96f861f68589a494b8451c22674454a5a5319fcfcca6d743426961f79920e327b52721a87909d7c6cc70245c1234667695fc6539f75d507f2944d3cf80530f3df02286c0be5d4f881e551ba5b533a87eaf8457927c9dc25ca6aacba779658cf212d6ad1e6e9301c1d7c30f81bb6d1eb77436daf0c17e4ca18ec237982fcee5caad3d662f0feef30ae87bd7c7037a4995228341c53ae085ff732debf000e838ed57f8eff4b8e8b5dcbcb3498ca746e599004300231948605814c10f8bd328084e6b7e0e20b054b2044b977ad4447c290fec8dcdd9882de4cdbcb120d41dd70fc6bec80b4f175f708ae084ff679e1545f1190593294e1ee865c5ace89e7348606f423f6943650ad9d1afe774a982b761d6d7fdba2b750a9212a0d58a0525d1903dcfb24cb1af4bbb4768d18d0d39065dc2f4fd759a4c5ac3cb2423a26f23fcd1c175e62f8ffaf961640203ff3d99069e05a6e763cf2dd467dbd9ab3fb9631388e7db4b000288e2620c8e381e72ecf83ba8b90c43c6ec72ea309a79b04b4a6e02bc0f87978866baa5bc8a88999e013ff54ff6443502acb3bf74d56f3a5c484d412490af00a37e7b0b6cc835927e26d1625acd678a0af4d59243dbf6f7caa846289eb26a7658bdcfd66958aa8688dd7173338055337529c4c44966c503a46d6e4f75efa7216d89da898f1abbd12f1b91191c9422ec1f5e8b747c91b0e6bfc4c61f1be9c95a469d6182143d6731c7b3ea2beaf19594e43c2583fd09c4be161a99bfb4b112fbe6fb63107b808a1e10b5363ea6c901f8f2d4551e601e87176013b215727781a2792225b42f120c9e94a3ddf776c681ccf15e1ca5d8c2ad8b64dcd8ff8f6409482063f6f5d5be1c2eb76bf25b31856cab37b26749ca1bab4205f6cfdae8044c7368858879fc1337d1cab766cad454e4050a607522e2d744461d9548d595919f07670a6d3a54f8c54f568cd94ed0cee0d8e94d830ed49be06b538e282f0d56ffadaa0ad12913ab719599f72560dfbae0f7e5047a00f2388749ac1fd696a9d2066b6c31aa35969022a61ea8ebe115cb35c27c57f452a2f4c22af0c2391701b18128b484cf6789e7ea673fa65365c1137fc5d767ea34d53c27d5e1a0b045e27da886292ab32e95994db944763b94dd0c2de7c29345014b8fe05c9a8a521a60b8a145abc4a8ae8c9e50d42d8bd2f862b6b6b3a77f665148b6333a06186877346a1dadda7187d0735515650a1186920e6117d309e149198e84b289759c6c9e785767073033254c6fcc924a43999a64dbf39361dac97303fb80de28f663625dc6774363c452b431c06e0c7a235c925a0549974d1bc2514f51306a166f98293e2273d798d8bc5ebacc790f3a57c80b2bab867462798de1f1fc27261f679d390bbf822e635111a52b740d5fbf36a4059b6e851bc4de1be203c34760470a8cdfc60fbdd5c502a499ab63fa3834b9f8a138fc23e780dc2d7e5dd227390491a860859559133aef5b63c12b642a9e17748c790b58eef6d9a6c62ead570eb8b15367b951ca6dbcfdb26b35b895929835a3b477c7ee7054eef0495e2389a6f58f8fa176fa83bcefdb44fa1a36bbb6680a2907d198031f11da361002d1730c93738dc099220829ea05ec3bb98a4b42b3c274ecc58f90b032064f5a8d276129e54a83f925f3025c86bee5a969bf0a5b8c20796395652959d51cdc7549ac7cda7b618b1ea4c7eb6e539972c0241e886dc205ed76352cf7261a1af9a84dd0ba9f00664160067f45f9006cbe447567661975d17c4982c858049c95831ecafe17fb9e0105f825178501752ea495aca4f5719e35eaab5da34929be1b378270ec7a08918182593acf9295c8fbb5af1270262ac4659530b4d9a85539f987e8adbc9d03d9a53866515dd4238610316ebf2ae90d7d3bf5280be280ea0145bfed4a0ab0dfe1c3fd82aee28a4b3cc44c69e4c995e49ffb90a353b92343e8d26f45a3c4db55489ff18fa43c388d44c07731e08e60aebb97da7a836ef184535d573f4f58f47d832ca40b7075369d4333f1fc4b41d02dcbcf6a26613d98511726c34c71c82e62a2eaefd1d8d75d1c097801e52003147e11ea926438715cca700c3c4ace6c3f8a428ca9616b8ce2643c7a3ed66948a369de3832d3218db28347c9d6434a9b9704b22b41ed2d475a65665e64d41ecb4f7a83dcf2d9638836043da3f763c902cc4c3e7686730877dda2b90e772d123ce4491503bfc29f1980b3be937adb5554fb198e021c24a445c2a21f9d0c4f5d446f7607e8a0c7d6ce0925211d836255f806072b2bf5b407b01215c5d0df4c7772fdffc02af8647cd2c3341ce9736ce11f08f76be91417de50f59bd754d6c816c874108b1e90f4a4c31713482797e90adc8eae43f42a3e9d9153f5941f3d649ff2e4c00a18d3a1dd979fff4643cf3e8f0dc19b475c4fb94c1b40a574b0bc8e68f9b07b78392ec9a4f961940ea2b2a840d67e50fbdab8a6c47a249e33dd7e24348ffee922f4f56606851ee2a7ec27c42801e40d1c56605c8f7737b8ea23230731589342089f928f0dbe0f7470aba9a4bbbba5309a402abc293149fba3f857948e90a15856d6d8afa1291815c9be414b7d3c7296d602dcc0b65ca7cfc88a0356dfeab7229117fd4d0cac6d44f05e56c9063a5689bc302b4c8e9041de1c366f074f067c9b0a6bc7955503b9df2401b8fc2864b61491f7a478009541384618d12cd06a4c288a176c1e4c8cf62c14cd66fe6f7e0383e3670297474fc036be084a605084f33da0e2dbca4c24322129012ff56d024957382bd2ee9d2724e845b8cba768783731a39429c1c31e3456069eb47b06bb84e95a27146f507b1a3c68c04d2edaa40a1d252dab47c94216beb32a884c6c0e15f973d7fc3c460339fcc0796c7484e4e5ad50b85c0b584190a992874c51e37857057b3f3ba55b86158aa2d9aea4b967cbb0087979d2e5c431b8fc598f048c5b7c6ae35d06a13e87b2492d57c7095a8c1e2d6d78ad54899cf6dfe88a9e607072d35ed17aa2f08bf9e477d3ca399b9c0cdcc81a16bd49ca45cea4cc70127bb5d1de26251d27ca93473fc5c6d4c5a3436aab55a781d001eac74735e2d00f7112675c4cd8fc56953b832b3ba8890c5ef7018370ffaf83cb537514d4df0adadf1fccf85d1ab8939e0cba0f7dbc66f7231822074f904a90c507684ac85b4ab4eb76960a62fe3c927ff0e9821b9638cda063752510c6c6176acc3f52689ccf8eb4086aae14017bc944a549edf32c422da09542f722240e37453e4e4567ff50140201c5a1d387b830e60818f809e71e7cbf3208634ac714206b258b65f237e52f40144407e63c1069227804a4e7c6ddb64bc7aeae6ec1aabc0e56b65ad84b65b1f1e56d1abe33223111cf95a85890bedd9cef86d84c5e9b18e74fadc645575d27271fcc2a3c2d192d217a7d364e4d5270c5dd61d19d2fbdc780f071cb9c8b39fe703b2f684d068dfb1fa154fc2b0b18f066c7910a1abc90caabfa0f431298ce5c0353c19eedc34195006f6406a38b79104155dc9e0e158a2d82209fc1d55c554ae52eb08264e03868576bf0a077a94a92e953cb9566f874245a012c40d9e55e13886af7fa27648766bdfdc7e753eb2a55d2940cb96a453604a1176966d0d3811e1f2e5d13e8a80fd669ca622fc182dc878381dd0b10db5e15490d1ee7ffae4f4c07e89e14921f5ddae58911566df9620363e99d954f1a47e317441bdeafa79852b93bfdc3d6ab4c568db562d7641de617e04e986d516148cb752c9a94fb960b0fe61ae4bd6d506d6ffb9fcd8ccbcf2ca8e83b54bf7777b6153ca2d85f5156c0f0d1e43a5abd1f31f6fe20fb6467107634363f35dfaa81891af102f8b77317eb733a1d9477ced2f60b811471b83a59c75de5626057f12e5bc2c92eb2cbdf86c568dea432ce2c1bb047dbc36b54e6690593e57314acacda84175580e86c794f03c9e70f2d21a1ea8623420482eb8805057313faa38ab20fde4722222987bb8ffabbe5c0ac606372df30a3c080eaa7207456e94c8e3e18d18f0396d24a6168908fea37ea478f976a08c9e88dd764367d6cc77b30dd151cb890f37fefc18230532879b7744114502ebe947790c3d2cf0484de442731e046ec176dae1862359279f8c5f76fcca9b48299e5b62ca587182e8fe00c6646f2b8a0197ff305abda98be587ce56238e926f5ecfbd0cf1905d4472f337edca5690675b7c683c52883e2f6926af5ff296b971c36ea1ce6f8b7d02078e11c1c04221a619ea18a680c2962297214b18a394886023847b969a20f742b0f47e6b7971431f633da41859ed40499901dd91b04bc8ba8f69b833802951d285b34637345df08c9f3ca6189961a89e12d6ae349073179335d4e9c4dc411e50632b1ead8e2a47f165f4939cb542ff48d7ccc9fd0d512941419c1d08395d8926a20aa57588e7218bd5a90302f5f308d686999240920267e79cec3dd919336caef0ecd8453bce5fe8cf6722800310f7cbac77f3daf6a5b6f7f261f09354937c89dde5d1612c8f82ff2bbad5da01bac22b888eb7ac984c3e071c84930b35ddd9044bd08154d1096947f3910628946ac0f605d158a9512d82184542e34899947e2eb1ee52c3b0d61b3da72d3c3ecf6dc1aa499d03b0c42dbeb8d6d93ed0ef4402dd0a52b25d9ab3ace281a8591bddf2408acee7b34b2e0436b061a7b50e7353f5239b78a01756e54e648f5d3e94dee0754bc1293d5accb35617f32c03c9d1590d9773bd0f3396d30e5549a34b23a33673903a130e74827d679f82d410b3410536235452857d2bfb738a349c05a26303adb82a67543e353d2fc2bff6534884f4119d73c91ec7bfc33ea8047b55a609ee9a89d912089a3b0f76e925408bc1ff92ce49410379aa61e89df17d34d40c1cc2658acd842f7b9532d271a73d7092dd209587f52d4ff06bdd9ff4acdb2caea100a4c032fc9430707610d6d75100f6436c64370d6b011abcd1716cfdd2ee9a316b1473b41c59e8852d6a8bd34812cfd43cc27c441844d2a05efaceb9ec2e6e7a88031b933080b271b6859d60e88cc7da44bd12cc5207a96343e5ca0c58601731644b163381efe81b805330f27bdd90178ff19f534761f575d8f949179495f74298c0a6da9429c55cbbd1624d8baa5510e73185766ed1e897ea54d26aeecb107dd4b9cf91704dcc7b12867245ca8b5e3e53d510ca2db03e56682556efdf280307d625a6ae737fb3730c73ec7c979b8ad0d39d9e46f0095ffadcac06fa3f4d5a486107e7916d61c3252a2d3422a090a93c96174d31e0f20e895020bd0dca67a488573a41a3eef94537a6ed99d7531644d327783863c163b8f4cfbe195de385098adefbfc818044ae3f2c56c0e8751e6a283fc05bf502ca533e1aaf6585870a222176255eebaa684a9a708db0482706da063f580b6d1655dfd769f5410298eb4e827d6cb983462019debb37109e8d654498a04a39e770f9d02a3d2c3695e929794689d11d18414d255e9da4565a08963e47560cb8a03bbb315e9e9ba4cb38597701ec5c6f44d7847ce45c4495f0f10aa9f4d34339126965441aa7e54c4678c7ba13c86e2ffbe1fc56b8ad80b74e1ef14d10429e2f3798e6ec80172a7405f5317c33e5206b39a58978c32cffd6e2e037a3b43789fe7881d1dffe2de6b4c830a8de02d1a6cc92473b42eff0fc30c230304a6e6ae7148168a214d8ee3613850d0f33d23004c8b650f7a1f88250f1662d4974d49385cfc3a5460986a386b6ad0f4ed0c9e8611ba583082f3c4950af7c9626c27d0bb1961032166c44d492f89dafeae6f36727c0da07d459dc9ec6697b6b5229c92b30b7fa7b5b965dd0e11a5e6e4f4c1996e40602a288eb9a745d251c4bd6099b5b6ab39f3070294abf015f6d742cc18864af464c168e8646d0d5baf3dd54541cc26f20f6d7e4ce33f4076fcb18a8f23ceb9eb2b42e333cfe1595108102d5db036ac1ce7b79bed1623b618e051b14603228b1da6fed21c96378dbe955753edee7b3935293c1038742a28a62c6cb33d6158584415cb98b34de315627d5d4275cfa2c385c3a5eca91fed6697fadc815178a742de8552086b3d28d1586854ca46f15621d787203fe61e0ecafc1567727220249c1ef668802f2cf8681d6ef477f4f1d9be316ddf6ea4937a2e6e85d5b9d82798b807527b467660626a626d82cdebecf6c13ed68055c1a80e934461279d304a7e59dc8e4727494139aac2d076d2549f82d1c908539c4057f33fc63a254d691c52bdd2d59dacf32d6d8b2d4c8549dc996d460955cb4fde5760488d787c2c6ca2e34582069b1409909ea88eafa335253380ccd2e868e46ebe37040f35083ee9aa02935aec472b9a60d60a44c9d41c666f073b7359a1e41ec9640647379514197c6331a01faf39ca28bb450c67aadc772f3ee7081c0f6133d7afd2a081cdb958ce20220e6624602318bf26b1ac5df13405e996820e029d54d23926b3ce936595b00a3afb0603a2f79431e3eb98b7ed39650ac7f56a28c9abace9d09ca3ca6032eca5573569da5416dc50573c55da61496e039fb268731fc6ffd5f554f96f928276ce109ee18759e50e2a091b3552ea9b21d14909a6154ac9629a796f20fa9a06bae52e5b52de51e2f4c337709f0dbe9ecda90f08526321281b510567d215f3d49142cf6052e659f6b39b772b36be601e95dbc0b9673e928a31d488d128b4440b39aad83758d0adea844af8bfb28038ddea8bcbb322d9a4b2fbef3ab669004aa6284b292865bc69c8293737aac0cb61e69c462d255955761dd407b2470b62a7216a5f112a2ac4b0b71c2314f6b2c2957c44403a4480bacc409e831397e3f5e817cc0e72718dee9761dbd8d752d73bf22dcffb49cd23b42344bde90598601d0bec1a6d204df4f3c5a12eb6742733f4a864d251d6f71f0989d1365b61447e7cd7d084d5d0b028670fa32316176329021c3ded3897147ed5febfcf5f873f2d0e137aac38b855d25c4c2d9d9d69624f8725d543d8d4487dad77516943bb600b9c7b37a7b5d5683a665f2b5e2157a11a6e502c0da498189bef477ca11c8c030718cacb450e15962a9156dfd558179232e95ffc4ee51c0e95f335caec3aac22bf50e673778cd4379cba86731df336784f23cd8354510229a0eee5cc38b1e6bb9c47f3139520dd44c9159c4b202e1a745f131adf6e81a3ff2a15659382eb78a6f0703c2b031f0212756126c9f3e3723a78a0eebac0e0509a7318a121cc958c0652dfb887c2b886104793516b8dca28c50ebd619e4e0ea55afc43e6da80a05098c0a0ab1e1a6e14c501512263109a745656bf99e8e61e6734541a58a50b01c11535eed5e8bdca28ad8a173cff86b1d7526604cdd7795266085d4e33966a0386138608f7d215eb8160efe3190742847ccb112da6b9c92c36571d46467087718d4161708e1978dfcc7e1c0dcaa629507010a8901d9230868bde1175783285cf035b648e4d661fe8a3608b556f0d161f4945ca27324cf5d8619d70de4fb9346e34ba2b5aeb52eb4067ed7e74c9e4e0912e9bd84e03effa642ffb66e8fa0f84370792a469467ae1b5c4e1eb9b51bda17b5187ac1f705ee3531e40bcb4f04680c80e6f9e27aec8abddc2bac4b01ab0252db5f16931a5243efc284194412811cf2e88d4e1d25eeaf91b832102b658ae877d34205841607ab0cf9e9aac530e855a1ab022b4bdb280064e4bc6c0f7423d1019606571188b630ef10bf6a712c096c3b79d2c0c811db1146788e52a81548596d707a58df0881b2e81ea908983b5de466a6074a54670e73a857a4782feba0a6c1b59f7f59f7088141bf02610f73558e32ca948fe0e34de48701dd0327994161a49a1983377ebe805ca305d1f207952ba0640ccfae2d465641645f2ff99f54d9aa380444491ac6a3f4a4a6cbb425018a1cf64f3df495aff488fae502aa53d061ddc44181a82cba49c5ab73079f9db2167ef0016b2f7ffb429964e9aa33bc67645e3189aa4a5b2f28941068b7ad76b1ffda75530eaf469f230895b85a55dab28fe06d85d1d05396463ef2cc6cbf201d66d8304465f89ca19656b7343a4fa781e038f64f090697e07a3565c504fa8284e23773ab95442cd4b40f41124d05f71f43f995c25ed98218c5d0f61251f18cf4aefb4f3323a31e80efee5a3b4b6cdace7b5a4b31bc51529556ecb4227a555cedfa803c166bf645229913fe8e9b93524245a50587af5656851a71610ae15468c02606f3a9ae5055648db45ab916f5b10c37c6804eb1d08305f272905a7bb9461c8b71979a42b8419c366070ff4ea3ce6a6449b18ce22f66546513a098093bc543e45909f9dc8cf4d2e908557f0332fda675c378e23b7356b243e892ed37e113bbc6841e44e235f32b368afdaf5be872fd6ed0c6a09c2fb307f3e06e7a4fa483480911afe1303b974f2f1f54d9ed5ad2914e2626aac6f98efd548ccf54a3f9d2c1b1337f77b5ece1baa4affac15602cd2c0a7f1e82ac55da50d414ba65c48bc35f92f058a110c92611a83a7e6f9b1490b6f2980a860b751840fa3d0426e78eb7f22069984b5e713c357e4cc884f04bc3167d790b3b4d6ba190029ecfdd226469440b9266874651082b9e266437ee533b708d01fcb8cc63f57be50153be9f9fe7ba09b67cc10e8ff0c41169c4ed5a8b88f2bac209534051dc0405036f39c50d00e25f60c3befba6df06969a4d25158be304c68f75aeccda4018913ebe5ef2a73b9a7a68c37816503be9301207ddd4897011f328c1d1e26f4244274dcfafabd5f3627cd6b6b806ffedea9b15a3aff991c81c18daa88dd186ee8b7178d592a9cdaf0ebc74dfedc267701a5d659b4a8fa90cdeb75c2fd86bcc9c9a1a4f02fa2d8a2a88576e8422b247a8aa85975bbedfad4e2f484027a1fa07536fa3da2f4196105e989f086e6e34985a1c5784c58200200fcb455044767235c619167348c5a693893b0c5ee0d6ad08915c94c9ad9f958262912d238da3a4464f326841320b152013213cfbf24f9d779f725323a4b2abb629b385e2270d2e8c84cd1ff6c41ae24357869866f62a5dacc8d211e03f3874605394c497cb5bf51404506200600dbffd632a7975de5692db25c6d4fb9484f2f3af832e4032f35d87f58fd98772ca2de561d149aa62cb2acf436e7a3a9b5af868f92e49f5207af5428787549d7a2a1d4ea7a067a02d5adc04c79875647dfba2da4b7361bbccad3491ab19fa06e1295b2eba76a523c81d8c86585d95b2bd894b0ed416da611b3963b78ac14f11474de95174a2cf4a342eca8c7f445360790e25d044d35fd62a79a31b70384215ad7f79c148d757633b1b31f4a041c451f22e967aeaca1e11f264e32ad4e6e6f2ca2e948d6a53320d48f4f0c0aa1403cea4abd6b9455af81279d06460517b3768594f0780402303005fd0f9429f3629156915e9a70e5bce760d90c5c809217ed5b2302bad5eaa78b7da9fbbdee70bdc90509fedb8aa031be19810601fcb2d81437558241ae8aa68a5e147d4c03021de25ee98bf0e1d103ea0265e63a6285fa2ff4bd93c197bcf0a22ccbe99eebb4b8ea1680647665dd09e1daf76c2a538a0358ebc699bd72691c4e8dcb50efb5325ce8e02e499ebdd67589f3c3447d328c6e4ac605afe78aa8b324973505a0716de59cca1826828e4cfb8fdea84bfeae9734d8f357c6b4e5443ad4d859f742e66a670345303b61a40e8ed0c0df516c7081b0363fb64fee5970a943d3d5777a2160dd136e603dfedc813676b0aa8f513f15ef9ffa3218b51baa2ca488bf7da00d6dda304bda50f8dc7f954fe4a5d082d1870d8f8f735cb6af44948d174841ad8f5e9327c426a7ebfdee0d791719ec59da466fe3394d6e57e444733c216fcb74931ef2f8641e03d3f31c52459331a25628fe5182cfa6ab1e40e5b1612e87cb6b3ee58b1a04b5c4f455e799d22e25d922f284e8dd7a8db0ade6e35b61e13f3e7c3be855cd0f91ed0af75e72a677861b955c9bd702669b4040cfbef12e793d2300072ff4c449b78dd4d483cb4c5d71d332d58c4b90b9205a1efa23a6ea244484ee0d4b76cb3850ced834b956de972359638a997c0c6ed7c0537124d11a1eda34171e6c9c1f0e89992565c5c8221e54b0a23e70a4f8d64d6f0f4aeae8b16afe84901dea3dc5e049e21c5e9a4b49cb0c7f4ae8d7fc3453b0290d60763c641335008501609a3276d57ac0a17bbb0aa72f4096213f3a1e1963ee6c174c8d5a5670e260923b402e77dd98b93b1649c58a1ff733d06362efbc120aa77d111c2616b8bcd94c40ddf3ae5060a11bce802666fce3b80689376fb23dd9b7934790e68688db7b33ac19224d302d3382da705afef3b6c7074dc84bf4b6579c18a101486b11001e209852939aee12d9be972270a70dc15efee4181532cae497868a1af853e4e6602eb2829805fe36aa2ec2debdff59498a903f0cb1fa392da29cadf02eb65202febc0571da7b09b940f5236d266bb2f65ec63f0cef2679f2ffcdf981994e23c991a11942b437383811c1cdbc20c85e2aba28bdc56fc44503f40ac079105b756374c794c3e7289b6f2f56136ec30640233bc58eabec17a4cacb49180e866aed55a1060721d0a6a04cc17cae635bcf07dcf2d4af7be0e8b136c3e129286c4586665c54b757208e261f23d20786134af852bcf97881cdf164a6c2f8ac414ef907f3f8d40a635255ff86aa684d5cd5250d81b45745c4e6e4569cb0eca3e80738c5e59dcd01338d38cb5568c69f7abde069397fe600b2890ac8430bba04e9cd85c3643d29e7f29802a02e7f459fd4dae77c8e4c1ed7a7efab90a7c293dc4f12738f67ced9d459ca69ec6e91cf3ff9d7e4a6837672e88b3c313d12ca7344e7d577c193cb4d01f10dc055d2f1a810c25c0d644ec17086da70ef3c26f6bb94e688ae73560cbb2c519a6b25a8663a661f080458670ad1104a7f29914da01dbb993f74f3c06e721e0849b12af613a59dc5cf5b150f71d87262698e806e7481c561cb41528eb69de7ac790cc5651e904c7af14773745e8d0e00003f4d4215a4f7283c18acc9f4c3f124d81d03b7d05201d2fcd41f2bb187ecbd14a38350954c6dcc1e649c09179adebc9f1351695a844ce34a40d4cf4b528fcf87db92d97afb5093286d89380fac965a938ecd02b7c88aadb393f39f2d426e701efd2bfde595a9d006c617e2a751a97c1dbb04e30da3ffab1d0ac6f10e1caa43a0b15b4a46a8f4f0d34e2477ae7103df167d4dfd40e8c45e70ac3052db641f96824146c5202d6306420dda12553b513b9330ac736a2887a21552bdec47fa992e42f24cac6dab9f6be7993f6579dbefb7a589e63fd373d02783857f21204d5a67625631ba6403cd60f275cf9b4f5698c7844c79534aa9a30913d8451ce865aacae93e1dfb18c53cbabb749ac8aebde3d6b885b84c55df1a06c3c4da732066f710202026d5f7fa7091e24edcf2a64ce2b4fe85a2e983233d7e8bedf789dcf242ae93a4c9737aed24135f96584258ac073abd7510f393af69b72974ca10094e9f3ed0af5131b9c4d0dc28402f02dc8b40a2f53014eb6c72b8d02841e9492751dc3a897a47da91d6c33169c41fa426cac2c18004b14c21f264d3f34eb8c635dba303d4bc80058f664849d47ff0a1c5dac531d2a0826cc6a0f00d14361cc56fa552fe7fe6deddba399ca552c68d61282562526c904a39e925b9ab5c7fbb24d8206c7c3ed9d0f650847adf9147166ff1bfe3b10c9e634db47f5f598c1d6b96014ec650e5809c431024eb31486ae71ac4f22d1aed6bb3a74c4f67bb977664428da53e659b31afcdadfb575e35b2fb1024231001bd393c73bc6b98060a5b53f3f7dfa44491d6f0a46a5041dccc89f6bf9edf0df208f4b5ff3e3d1008a77f26bfc6aac15e3b26b0548180f45becfb80e2081ab52b1cd9bead27a8cc24ee6e2905491d7421bf897d983c485fc2a349496ff4bcc9345553dc6827cd668bc9e6834620a2e46eda9efdbafe8260298c645b1a2aaf1171b8d5151363fd9fb02251c5148775da221b58e16a2340c07c90b372a613d62cafcfa0bdc30bd8423e9d087a8644c8aa49952d5d86f556f60c846643dca0b22f3a5b23eddde3ee89453e4aa395eff8a5d483de4dcb42fb6a9253675674ae64faba2607786dde54dba2da31b52aa6474d4181ae7aea9089bbf5b49ac0cc139801efa72ea54c674482862756b3ca9a5656e196ab7706c9c53350ce0326dcf2133a97c8928341482bd8752b39993ded2dac505d818a13187802397f9f67b0491950e4db5976bcb548204f4269e64479c85eacd10e3675b4cc2774b7baf84a45c667e3854a06892b837c0b5d265ce286998955af5ac98ca216a4c92a17fd48445e86850b64f321661acaa3624168204e63b5e1af0175dfaf108145e1cc932f476450101d64a9fa736244a2e81b096c7935079941d468474aa10d1b2afe9284b7a0372196a827260ef4db51f18253d685cda75896bea6a208348b601754d54e22e10e705e9e2441dd70a89d4642df0060771009774356c46fa2d9e61a6902c97320e930f440a94a11a441ea78f9f9eeb60649a782894274848bdec9e27127a85a1cfbd989c21ff9fbb8c7e6551b4f63c228cf3d7e7b7656c4dfa0ac0710bb82b29bec8ed03d7d7a51d00a1a5ad368d0ae1c245ae8c9360b2ba89f27687b9645e162160a427eed1a718450a756143ca37b95a3ba35e83db927c9ea8cdc015ce34c281e40452e24ccf1875dbeb51997edfdd831bee5f09ea2f6160101b1c1221d18a8dd8133bceb960722cda36cbc676bddeecfb79b178f93a689d229ee9ac2d1e56a921d28a40c49dc41736e17df6931c8762ba46769abf1416c5a866553c8205067216d94a30cb1cf88258a50b1c4c870421c328b018a8399a6b6568907942a4a60473823641b69f1402aec7f34320971a6dac197e38c31c7c13a2a024437383e51955bc8a3e8699c48ac315f5ff489cfd09bca5fe4a48b3d5b1201263d47c607d6b059ff329ab71362ef8e2102b2ea56ac4209e75f59c5687ad9c73a7948acd762586c28c87a600336a1704b3938dac5958a38c900fd14e4f8d2cea56e6fe739294ba60c16f9a94985140b877fcaa0e674646e6fdd75e03f7a0b979f0b58663805ab91ba2bb6f923cb85058a297ad6e6a63a421962a9ca7f9532424b7dfd1df8d04d4b625a3417cd91899f85e8545a0d96cd84ea410674a843ee8616981dbee6808f513cb95faf4e1c7fe1aec64684d9b653c5c06ff80b40161498197dd7c940dd8b875ac8ab120af4017cfd18a52f3c5ec3caf8025834f005fa6f497a21418c0a00bd6c003ebaffd5c3699c957238888e658c18af00e8b66c0eeab8af601b50ca1cf4d050cbbd25ba312ecfbedf3dcc1d27e6269f5774f75c08dd5e0f3e2529b80482efa6d456874897dc488984c8a60ee79ccae32da6e53d7206de14856270df318a98ef721d0f0a557e5e27aae7082baa99ff6d7a3c19bbb30b3b9b8788456381c4d135f5177a4e07ab9c95603e46cb31ffe0dd972a9189d304313183820f9cd3df679ebaad09893a35e5ac609a4545f26b0534d51634f5e2183c9cc08ec83018013cee10e79a1a42affeeba5cfeafe063b0f6b63c441e7a30e3e23f14b6b1d0c18368040878b78e79bf80fc6e3ab202d7ae24b94d7761a6328cc3bf401da83e67970e7bbae38e35136955c0fee71b7f7c5518a41024ad9e2754eb85e2b9d9e8210b16a0205e80b62be19546dbf251c4dd4f9342da469b9cd0f40e8060da90761fa83647d450f7b907cddc8b07a03924303824e41ce9d9cedc4c7dc9a3b2c1a654b5f7741ff26b4c3a85b312b50522220785f3087f67be4c7853452ff78013bcfc38f2e00a3df54cf7297b73fd67a052d6c7fd5829c7b2835ae68873b8aba65617775616c76a18b8fd6b5c27e7614520c3cf16aab2c33e36c2f9518f5c5ea95410c97ce2e5c029867fd17ef9b2821140c94da029ef668293c6d7f80624e1137c6cfe7a18d6790586c4a0f0f84bee9e84ad83ec0a04c90971bd2a06d8da1c6fb7ce0f0b9c91e78893683b855a2d6d747126d46715149ade8a3873a210347949a2d339140513ad6f8c4e14cc240fdaed4ad2f3e807bdd1a2bf4d9ebab1259e421eda77b623739950b81b1b6a61ce1a70aa2ddcc92985f0d645b8344835ac1270e3fa9c0533256c147104f26b8a174ace18343998c030e5757cb4c10384ac70a3e719849048e92b1c27eefc325197205ae54b767d1f2930ca492b5aa8f1ee8841408b992b5567d4e0b9e0d927522086cf0b0fa622e12e86af6697670d676484244d334f6291bc94eac59bf17e14d06a1376765250a3d3650d5b4d50a363e63b8a464acf091439980014052770b566933bd0362ff1712154be9d809e55d2b40780ffa214378751a72c14a933793732e77649d406028fd598fc487103999002f82b3861f48bb3ccbc298c111bc984af58eb4a019332b4f58e5f2d27bdd2cd7ebb34f44869fbb0d5dfdb1e869382182c2174a6361c2dac13e9cf98539e95c09f9811ea6ab7c05d970a4aad3b67ed981e360d8ee1acd3fc4a91ea7216ef045cd54d44ddb3d3be67b599e26929caf515c722e4235356c5a7909b1b95ae582c4e577a097a23c1daa4724d49dc51b1478c28b0107347746503114c15d9da8aba9ee1bbb3f63d8eaa0f74681784d97f24825901f521920bbac472fe05862e6510269086ae1f22cc8f80cc3b03d10aa2189702d0830114b4aedbc07e4e4a4ecd4d83327b7f1968efce64487cd4bb2f1c30ad704425b2c24f834b36ff22ecd7bfddb3534eb4af316208730c3b99b82eb939a31575e79f8852386e2c37a826507968b96b399a022824d49b7bbf264ced5d0d3506425a00a29c73a834ddd1759a22a1f6652123e551e5d9bfe4729c785bf3370e8ef50d6a514a83934621641bf39ff40f0488a11fa52f8aa5bc1f7df252b75718d0379040d8451369759e10484f32ef01d2cd2268e329275ba229ebc68b8b6a86fdc7355f55d6c0dbc9cbebcdf1abf8df2c777967c4f27f4b35e1d6802f084579550d766efcb9c79339914203ae422fb9abf0eec953134a630e222089fd0050fd7d75dc9691f93da85fa197a4e67caae402d5ffcf43f5fcfd30f854f62dbdfc75daee071570540fc1e0e5dff223c83dbfcd87aebc21f43c699419df88db83f3e6025a07e0a8046bc60ef1ada1c24c9224e9f0699fc4ae879616c268ecec254738afed04bb28c11e1a165ac29ea266b606fe506d523183e993afbcfce3efbf13ec32a082785ea3c78034b58c5622c56247109356c21424856bfd5383e504eae68c515b9876834e45510b73ed7821524c6fa87c294a45de559387ccb002d15df35785bf36ed87c93e44d92c6d314586eae85498238e35ea0185878992bb9d740ec0dd56eb884aeac10ba071c368a9857df9c57d0c2bca56ebd11b0aab4308c7cc70fd48491a032ddb368d2664a58c5e84d817790eb24123c63ab90d45750ac1f84884c3405b12177f72fc98dfe3f36ee1d8299dfee6d2bec7d999b906b76a106c4a71a5eaa550aef0cf43b1128c9812e78b561401c8c817d5c8540197582a50a223196e09114dd102bcee4e1a103ed2c6dbbc756b67fece649e6c968a4d927a7d1a267546687725e92e757f26d3114759035842630d16f2fe980b9896dfcf3011cadd11f7fee471efef917b009c36cbbd7e885aceb6890fadd97bcfe3d430cbc505e1cb1631542b081c6b1fa05c8fb431909f40be1a2c44f53d673131f3111d13396d9d4f1253e8f416a1e13ac299902cb8119dffd4988442a1e9e1571bea8419d4f3c808764a090037182cb3fd8bfd073192b3087c467b21745226abd21b32985edf886d06c760517116370223bf50522a76c30489ac6a98cbf5325e12144c8edc92a6f3c1d1e1c489a5db4090bee64558ac14b2e6ee210b21cc46ed14843ac08163208c705a71a990a06d48bd9def9190167abf8b797593aab883a62a1e6bc94bfa4300d0ffcee9cdb5c5d3155cea8e982eaf65ba752fb4e86a01e93c0dfea38503dd1ca51105a0c210150950867129b1b42e24096c899ff11c9f97aa3412481591e6bd8cc07a42e03b27cec351cf821db957fa194b3281b14a2df445713bbc9c93540ceb50358073595e19ea0413e662015f6613ade3b3b474d6ea9206e330393de1cc675cd4fe2aa400982f08cd3e3380763e4bc5c734923d6db0627cf515d73b6d03f5417d87a9a7403b24986759ca6e6f13923b385f18020cf82f7160f7c69b43c57cd03980a7da65260f85233289dcdfd18e10454bf45af5594b8e697ee854f78f8f7d32e1d20b815173f6f391fb4c7773869a457e7fba159e98a654d88c55330eeec402ccd472a084bc119936d93005df63ca0380a8cb051f24925c003ed14d23c1799112565b560415be5ef61c3e49a438f114e2b2996327bd6a200ca516e20432b379b52011ae7f5660fa8c1bd6c59e085177c559475d79f0f2e8592fea32080512489905c132515245dd61fc312b946526d2ac0068f8a45a5dd312cfdf6710803c28e65d9bb9a0a65c115f217b0688dc77901ff9a64c665c51dc4d584eb25f8b04bdb47f515fb57ef36310dba6a9440b0fb2f7e8ba2463ec598e2250dcaed7050bbbd9dde5cc9b1158cf23fd7fd142bbd832c006952e299caacb88b60b8e780096a4f47863099ae599f65bcb66f510eee997475b35efa3b942d7656ea24acafa09bb14e6e57afd1c567e83209ec5681977d057cb66150b6189db423ec544177c45ad291d2dd9180f496752a2ecd9af9740692d49a236e46341d934a59c5a85ae662f60178a1899887b3bf055f7f42260199deb59061d95a3d74156d17e95f3cf1f8a4c0374316ac9372d4d48f2c1a34986c18cd56e79a827741ee036217068e9f433ec84e8aed5822011dbd9bc82f2a9e24586f356b6b10a41b8255da76becad2e840418c4fb3630d9df6cb06ee3a00a98b7abad3d7c96a23730804211158b9bd339baa6df0f73eda7f0a25e14b039866b7b2889c0471019b91fae8e63fe4e2b7aee8fb8aff151f4d60c0d87f56be4907a85caa5253a3b0fcb91afc33157f83c9b045de5fa5a81243651e4f3a4b2cccbd6b82f13ba5531a1d181529bb275a1edf3a73da6117bfe8cdd889a295f7cb4917d8278352c300522cdf3f45088bd4b12687d97a713af9c54d4510d881964c6ce1150c3f01078e36176fea7100121a60640fbc48f124e1c529b417b21c3bbdaeabc6fa93b64984559d6e1602b309ce9e0d04bf09230fc2c1dfe34306448de5eec551493506fa17f838a44a11493962d7d714a63053cb7e5e0f778182471d9b8682da19a15404c12c7a7342dc278ee93e42633367f89e47c6bc6a63cc538feb816974a73011381a34169dff8ff8127013d14df9eef5e308c13795c41dd69bb5db1fdbbebf3a718314734dae47edd1d3f9537eec3800ce5413522c186ff3585021cff7c739d4f1db6ca0d6b0338c7ce47a89a0c67f4fa4aba53968d292f32f6756de3e716397e739363591323673187236dc485ee2ff7a67fcb7e153bcf65a693b339c388413ab7a0c54d175896f2fb9688a078c80ece242c0959d51e17b95916b3c6bbea22acd93acaf45038c10eca1ed6119565d4ef945fd8b76f7dbcd0b07436713155ee801dd5db277a3f6a6704a83d5cd41dc38d81ff2f2f49cfcd1862482c6b79d302a3d25aa8b8913cee00ed45f3bfe6acb9260049d371883b2dc952aa062fe9710532756a92d701a75f2eeebc9a9d36920c3e90c1c00a58862db66c9db6dae4d8632bfdd1d53d0cc3780ddf580fb443b89934b1bd362d8d94b968f8fa020d80b626008bf8f385c61cdd9f3a2192829d9c63efbe7f3c8fb3f55244ad24279f127b820a634b7f99ab509a06bf7831320a12c08602286bf6ec8341d7eddd511ce50a1c29758bdab7582a53a1ca5b223130fde8ea9b3bc2950a041ac7e3ab4505e46cea94de7d434111af8ea3222f622e18be07533d84e6ece259eb2ca8f66a2409de6ffd3ba2c5bba6b56e388fba5163fc3b1dd555534a1a87ebc3813dc3a6dac3731b778b8410178e1ffd75a874dfbb376ad8e7fc9088a0ad2f0180f09e23f61aa95057f9dc4dce6a2f74657b0801195933f294aa24544b9e70dc51110bfd953019db0df2dd00d83550e6e8b4d424909fa5ed13636665c97091a8fa08272903ebff4c8f971c9eb2de823bd1e879500974c5c9a1d090f1980a65fee4f2cbc9473fa020b2d355a05764ec368bc5fb41b176d20302881b71cc3dcafa8289ef041e3b8b7a0d1154ee51fa235c7f169fc6b1ab80e40ed1d05fab583caed408342378980e810125d3418e0355b73680dc1d5f91414f47c4443e013018e357f71f1d4ba25ca896511da2bdd32a000d53b6d20217294411aa322dc2f9585601428233203cdfe1ee40d2feec9268d02c4d7ff9dfec292419274a3c2121f4b913dfd18e12aa64890e3fa4bd9f9b239299c23607e1ea31da2e47d0a4a8bc8b2ce8267951fa76d9a3f8fffd4f4a16d9ccacdd4aad3b46b041d602972ff09cee172fac98e567554f86ed4835ce9b036d06bf638176cb07077eb887cdf4dd5189801063c44ccc143a49e3a426f0b51508e65e382464e2129401ef55bbb1d3c48763b50503e74e1e4762449563c60817ce6a8554883967976a9f308091a83ab09454d526a3ca8c61eab26717cef22ea2c48a5c9c7103833ba78e4971c1eb6768d15202b31fc228ff1e8766f21a82f4eee170d39e4745ff5440793bdcb43a9df37d8cf6ae5ae550df51acc34aebeb07868015eacbc05857464f98c010c61dc0817faa2bae6e5d9618f9326a709ea1e884f34966b7cf41b04644308c52defa22722011e0c40f0f16fb42ef9d567bfaabf47bcb9cc1f6e442317179e482550fa7fcbfe6ddb28650f2ac9295a4602b63e3a4218c0503774bec210dd85b2489660b20413dc62d7ec5c6cc5a32a2013ac415c30a93a340bafcdd4469c7659ea82a9f95fc8f125d690da3923526570051dd1014f3730d2ca51c12c4c3adfeb6a2ba3c95373fc11a4aeb94832821d8c92bc7acadbe273dbad0cf7cb1af1df784aebafa854781c5a0882463d66634efdc1e8c74a04d1b0179797f14d8fb82cd256b52bc48a0f8b8b9ccdc668bf11b838c6a43cfa0ffed764557365da9d63e3a72c1ae4a6eb99bd3a2d5d7558165efbd76777ccdd185884410f9bec87b5891211a01500cf8a23c50ae48c6176cb007f2f63721d322031007aa81440a8a22c7275b5cf96747839aa6ef1ae5c1b71dc28262a06c9ddc6c1a28ca2fd074653367a1110fc33bbc3d42e1ae9bbab0fc8a2b5448b4e4ad66e67f9d75ade1118ba38480a80a30142962eafd41861da0a3509125cde73f14fb7e38a99966a380d33e497b01dc4a67a0cf141ebe5c642f877cf61f39b6772adae29e3965b1842a3d80e8b95a88f967a93d03fc27ea3cbffc7a1057f1f3cdc6b77248829b72d2a6261011a1ffcdea21812f1f71c25406bed569cdafddd05973b95483106dc6a329f0b7f0d2e09b943623468de20cac921a3d6f7e5af30395ccb2b09f09b980b2a7b7b4b3ede59a1fdd1b1ca19ddb324657a5208bca2597272c5c5e6498323ee8350b744ccf015a4763f7c4a87d5e07185112bb5b5ea84a59793591390f11f50b5c9130e3fcdfff100b1e250ed1a59243dcdc601e9fea408e16abd5942f666e2ae0ffe02ce974c88c95509f56501c32ed1aba3ca2e1807f0c4a83ac02f6aec05fe200863d908680f304936b514ad603a168c71ae62232607b6ca7be0f96d27d8d0c9dfad03f2c7a454a37264656e8f800326077132e0f4c7d134fcf70342478bc54dc15679f92b31890475fd567948aca6907606564b65f84bc10d13a51a28cf2111663f0e555ecb7bd18ea1057bdb16ce16a543578358131c8cbb4e6d210e34c57846fd95cd40aac5c9a0b6697f309cabdd9e263469e11f49f835b6ec082ad83ebcedabf982824e4a2a4a3354ed9ba4373cb2ef3821c8ec5b31da3007e613d716617a9dd1b643d4403c6f323913af77a5a5f591df001ce28e45a963e46aea3b2080a4bb63e84cc7ad58a5825809e9b598dbf40ce9badbb33af70409ba71eca9e529092c271c76b466ce8787c6c1d818f72c6081060776eea7a5d2b8626a84f2838e63b6021532fa61f26c24e3a7f2506b24c1a1614e3d71ad6828b836712761b3776e6579c177b38b6c6489911c6a79e5666ee1e42043ac8acd81c6d92c0bc5bc81a062e867745e61e3860297b466c7252dc800e02380b8eb9e0d07dacaf94b81270a30e20f760608dc4992942e74002517ae2ed4d885b2b31f6df3080b1391879cbd0f2908c8fbac145b32205491c4fe8f10e99b3d587a09f0ee9c3a198b405c045e20630d3869416455641af8846adc12ea01a52ba78c0de496be2a7c99c2dc80deb883a9527984dc0fcc842407cd4af2698fe6659af3b6e74e182e5c8d5bddb588fcece50e74aba6bffad6c79267982a27d0396a72a18a79d1bcf30ae57188050c037d28bb59171cf746b2b1def60f06a7f4851c419da74531d7304b4d5fa4315a8c27b5c650e7f2dba4b1512b3b2b8d96d18c98b262365dc93e7cea350c68a1e9f5fb49d506b0c84da18010ab00832aba2c8ab970d7031211ebfa9a55f9cf71dd6f4ad879d16abd36d62daca22e2f641de3afc5e8932a9b73ad95cae4e14752c96687988bd457f58d973997e4a0ae81718e7d85f16ba564815eb718ccd92df920b5516e8811a21e97e5d393f29b2ef624ef9edd72ecaf8f04912b7a9c4abf22c3313a56e914cd3378594dd9fd80fb9073bb84debbbf8636be0c1a978ad15d4f1711d670de58f992090922ace8b3be76b98b0e1f6f5abd5c238ff40b21bbecb5419bbc509940059cf3c60088ea5648f03277e9487040adde816ea820974eb1157394275095547d1a2a0a8067e31c8e0695a6e385b8e89d08b7bca87b3a8647ae55175c97bc94a46a5638fb556b163615b0070a43962e9c3518a39ad1943fa2433bca82bcaa75281d4a5f3ee49c825f0a6ba80f983f4aa307ee437fd932a4fe2f03c1c39840fb410dcea18dede9bc464e1e21a32c4c05350fe1539c4500cd78fc28a95137494a1fa20007c19c6c477a6d2e23d02321c75f8d657e05f52cfa98c1580993e85135b994514a39737344ccae832c6d6244cf899ab3fd21f880925406c12b30f79d6cc004057f860e1e716bc91e2769676dfe6163158cc41bd2f2a451fc3b621d8c91775cf9f797010ffbed944854935318722b3a88388b5feb076246a23db88654df6f5037751dbe0ea37240fe0844e8fae71f41d3fdd85fac443a9e3df85c6911e7ff481e516761c3cd8e06761671b80595ccab0ea0193a92e3bd566c07c08f4d98df679e104cc896ed23b2c1ae8d154d36de655f4989c726dae1c7eb0f8a6edab8b92749c55ed1ecec453f7f803f68638b3d00fd8185e4ab918d5170e0032517c8936c57e1b85b8c43c571670fa2eb444863119aefc514e04f3cb3fe345155722dc1c5258674dbb2a547289c937de98286c023834c4ef239a3686426661929a5c1c2b3d4f0586ae5e6d0ec8343e5ec09020752c6d679d4ca9f149150c6b865b318e52865feb4321d0c04147376a7d722dec5a856dc5af0fdb98009052913a7f4ea746c20f49b13c8e450a4d0bc746f09c92f0d8a81fd735e38b8f52b485ac5688f01206637efac68a291c16bb01994a28262af568600abf774a5b7fb5d3ee20ff0232c0821d80001e2f3854cb9b92a1a08aaa542379115b2c2aa9c70de02250d4a2114bdb33bfe7c452594171e6616f4c52a84b3e4d31f304301f6e92b67f4a0aede6efa267081b3e28ca5387c9fae414447aa266258aac051316c98d2c06a6b421881cfec8997adf5901d77449facb4399c1da016f0e571039d64aa8412ae526d7477f53e3404160e4f3572236c69250a49f4c6ccf52ca31c25063b9837d4496a1a60b3067928d2487aa5f2831fb1421b97602f6c3a19dabe0815e04d6ca4c2c64c79bd4ddfc4c2e6ade6a32364061bd3af37ccf88bce03b66862cff5d92e72f7f324e77ed738b6f571be4baaef4bc73f3ee305d0049a8ac3ec112da89c57377e35ed088c78c7aa1c476aecffaacb9fe3714793dfec73d5d2f0c158c0fc3252d7949e1bbb72fffc0307b10783fcc64d19fb4f5a33232fce052a90ee78495cad7a3c451a4791ccf4d30774a5ee39ca352d328cbca89c96474cf4f114cd20801445a14e2801f3ca8b00ffcecc333419267dbd77fa95dc34f2ead3a7161e856be0efd0065407b4c8b470d2e3366f2d5478136a66570b33d5150068a0afdca77f757606981b78ed02cdd9aa7a324e0044c537f426d9325cfdf17fe0da183d67a98db2487b91d963f9289249d6871169147769ee8f7166b052771bedb716d2aabcd119a539b517756f568457e9fc141781f4b5d9feca9e7fe4da6832bf2bc67b1814e01352407a5e953f5f515273eac0d35cf1945556ca874ca212a40996ce80c70f8ff15dd6668a6cbf2feeb2aaaa8d1f64f300cb42082829a431b79ac09e5e94117d8a9173bd1dd045e66ca66b8bf55a0b11695f71f410a91708213924fc663570e56d4052f0cf6ba75cccbb801118f3b0c4437ec48530666ff3664bdb40c80adc190b8b8a42f3d3c0f9bd411735313700275910fdb86a6deb1e6a2428e12d91f7129d9d8d4644456f47d5443c997b862d2081cfd816b9251a4183e0e672ef7930fbb4a51e02fc2a425c332e273b1546a2f45a2fcc55cd7c3256ff48312b8811a973e2064465237f8b7276ee46bf8808439fa0912210e2198cccb9beea0a46be12d3f1fc4f4ddc70bb6c800a9985094540dda2593f33070b48fa2090080ca42568477c04c846e77ab9e534fbe6a802fc13040b8cfd58a35d2216ec5f211354f743f36a85e072a17aef6e2792b10e01971e936b4d57c091e82f4872f59309f69185b931a620fdcc97a50dd60820ba29dbedb1dffcbfa53e26081b029a18a31ff9d0d1266748563560374cd8baf4f8cc621f17dc90cd46bdcfc50729063466d2b3405392e077a623a4beec8e4cbf5184f50b0f8d91b59e117680ea1556017f279dd687523d15644e1a1cfef8ea91c95b6565009bdd96ad0894c95f93c6f880dfd1e3e579d1dfea03b28e0a29c974a22006e670621274d596cea18d487da267c3fbcb7c4eca3fbec8ffc1a368868bb0f0df5e06d4392059110518bf6b01445276fcfb2c05fbf1510cafaedba0c568c0602f621fd694c28a8cae41fe26d699e8bdf8b9075cfa60c46ad3c48f2951abcf1fabd8235bf247de27e9e1a4530fb06bdc60f773217b6e0cf486903823edc95bb79ffbd7e4f456bc2d8ba9925a8cacfcc5533d1eea8fcdf0ccce34713819013b107fd34d05fe8d00c72edf570d00395d14906fca1c8aae062e08e735e4898dee946f9c2f7d610eb71034fe609a9f8c021ff790e5de95d8f3ae4c203c2eb38ca05ed12737ee55a4cac9198a89e992655a3d72c8f63d11789f36dfb1ddbfd71d1750ff85930bfc312881b131d26dfa04d81d035ce4e26c7acb41f0a83907e9c12b4a8c80a162ea62866fe89455212a4128300c708bde5613954a7501b47e0e4b600fa5f0475139bc40a70646ddc5fb4ad0acc89fe190becdc0d21330acc81cc2c08ee10e33af0027b3bc0fbe93c581132038f8c13cab146144ca0b13365d0dbfec7ce1fcf26e97c525d148737bdbf1e6f083bf61bab582fb90f57de3e7bcb6878abe353b912fa7179a40fc555c8616c8d352d3b9c481aa890f418dc0fe4db673316b8ba942d56be9325a4961299fb5cb5d140ead98db2cb12bbb5ed3dd5c47d28385e2f023bdce1a94e8024e0a443fb7ae2624a4305452f8e95943a377716debd9f81609a965e5852d9970ff971809ef4a38245c9bbae0d9316bfe682b81a8bb79b6eee4907319ec259f21e011b54da98803d4b929b2f90db4e7609108d9e8fc721859de7fd839e67199ace80513ed759343e82f8230ebce8ce8e961a0f65332fb498cc4aa4919d3c2f5059306193a400600aad83b807be09f39c94134b540224dfb0e23f413c1d666e876e3115ea04e927e7eab07c338fa5d1540d6d6abc1a98d71b4db4d4e5e00cca45ca8ee2c64692046559bbcbbf6a97f9cae89a98391ffd7384a0143e16d135cff09e408cd4f61cff1ee2cd3fcef5bfc6566634efff9d8521492d140c88c8a2d32992e64e0b6bef7cae78991fc1236b8f78f31bbe4678d6b795436d59026da102f23ec71adc22d5fae81aa0df3cee0d0735cd106191d2e5640b2b82aee62d40b6ebe344e381c7a07143c555ad06621aec0dc16a125f63dbae186a161a00c7d59aa8a8ce22703e8246b81f6ad1dbc9d881dd11b46a4766c39a828a92ca3b17abb3e151917fabf73ae86fdc8a97da59b98ddd6d03bd524acb24f1143e74fedc1086681b0aa93ddea2be305a19e33590d9d827ec3e6c16cf1ce99b69cb3e5271a26f5f030c9ab7d24e2a1c949525be78a17f5ac68abada33dbe64cbbb68b305ef02a3e435f1d49d0cc5f2860d5d3351b65f6d47bc2d1670fa6a232c4b68cc8f8ad5bad9d398c0dd04d959789ba9fb768c2d7c072ccb35d107403323f0771a5b9870fb4cd0834f8fbf380b11da9f0b9a08a18166ba9e1de8c5cebc54ef01846e7005dc0bf5bc4e8c91b131b29b7a38a31afa75cb28e3639c65fb00c5fb6b1dc19caa09363e3e7c9322c8180f2f7e8359fc12960ba4364b569672d0e49455025d065c9f0e71d0de30a50786b13a1d34163cc192d26213e42db76ba9d48e021990939b6cd4dd61efb17eb6c4411c0a6535a0faac38fef81644313767d37f4e3069ebbc09e6c1dee98410f74f18ee0a1e54d88adbae632086be404fb365ffe1e0b4e847424584f1a8c8e302306b725480ef8da993aa71d6698f4d90c69b595863c9143a309ff3ade2d96dbbc85c7d5764a24becb0fde5b40cccbb3b29d29848a1c0e782ea511433bec19f001ee75cc7faf2edd571fa1ab1016a98df0420dd115ad487af89f784428b65f083fc4c15d9183ec660fa50a0ea5860e49ae0d275999496e58dd62922ff7dc2f609d6c2e735fe4d5159f6e395568f577e3d7db0c5c445f8d1638e66b80b2865652639e293b10eeb27483daa2374d075eb05ca8bb45a262f7bb12e2339bf4034dd4e6717dcb51275512c50cbfca681af099022a17de03d6d8d49a8121116d9367ee6a5e07fc627249e24f27836fb5463c51fc0eb55c8c90f5b906feede6ff7287cdd2ffaaef686c6df3b711407003a62ecdff56196eca2ba02539146ef01d8ec9fd881cb9390dad718d4de2eb8d46bfed5df51205bb783fca96eb71c4529fc911bcd720a7e3c003f20b9b0803d5ce35a74a46edf066c468dd72c9acc9171f27510b848341aac5fe1b178c55ea4fef3a10ceb43b452f58184271236e470df71d0b061c45b7ad52d66473eb0aaa8282a43051a368f56ebe20fccc2abdbd2c376ec3a3259cde9e5a9393a659ea08ed23d271520c329c857d4dc1eccabe80866c4370aac87283d27c0004d0cdcef4c7576dab92dc5bc70afafb9a884bb456226d7cb49c6044a0aa0753c31c332d4134eae6481a54951f1ee2668c4d554e95148e660a959c39268e2267c5fa07a975c289e68974d3ad2d4ab349b2a011afa69266db2d766f84c916bb4c359b3171c65827587a9b4b7012eff88f0e762e74c6d092a3d72a35b9b43dacf97e37df00f4d26295bfc985c2ffbbe5394b8eafbdf29c9642e4432e23369949a5dd13db601c2beaf0d1451677359944c2ad6c9b55fa2b9589764b7e675131c038b64984c9f4ec921f7cf05112112567d106f6af23dc690f155085bab354f006e95fe81aa1cc812fa231336cacce8fa27a06a7bbecbf988bf88e4165a509cff0578eafedd07f67ac5aa2920eb5c46d5261f14a6fe03649e39dc8bc98f8a1d0286475d3cb0bb747b7681b5c4655279a549f291d12e746fd0bec9e6068d39576948923ffffbf7d87477b07ccd6568e1c151553871d0c9bd2c6e7eefc7bf53e3032327fecd10eaaf8b13243a3c14f779c92528bbc01920336200ec786ce1d1e8845d79348e58e84aac8756ccab61c32c4a8b6d4ef6c5c38a413e2cefc30b8fca58eba2a39313e03b4ac5fdcfb08141682eed69a9664c25fe1df5270a74b95ae9b9d819fc62d89ee32815837d4370b2a5fdf26f92f70360fa0eae1b61d6fc82c36ad249083ee6726e178737e851f244a381335d972324d8ee926ca242e0531399062d9dcc318f94265e8e0b77c55421995afddeb129e4a3969326acec2b4efde77a47de833cfecdbb5ace4429ebc1e0f54a89b677ef78efba1d0ffd168c18923681bda005c6e8bbd1c204f44bf3e182f672861fab055e54d2fc1cf7ae03403518630502e4e54b4f5efdba1208a0a2896f8ab0d70b6f819c2da62b564fbd61b69b76498fb46489468f6ecfbb8b8598d906220dc87cab0ed5b7a9929c4ffa0d622e999dc97dac258f5f8da8e3ff90669a3baae32a08fc9fb97cdf06c0aff9a40d155c6bf7d132003ddc27cb00541ced8306cb0048f0ede72332e177f7b5a66706483368288a8a244891d0c1d133b1c040424938b44c45668d788ede60545abd5d9787f807ac11dab613284eef1d1864401608c1d12b967b96acc6ab9e4c140358d70628bbee9cb4cd1ba832f553f8922be02b51059d6f2ae504b36730c900e900b730199e60721dc68343a43ee16ea7875e6d3c5167f97eef52cfe3a4ae6a439b2ae2cce3f8a5d84bf10481f12b7575874e89c6eb2336e98e6f31890f25acc61145d3c6892104e55ad0dfff3a85f2c4e423125a7b7a8ecebf2f2f62e5442f6ab651fa7b95cb5524257166f921ad96376537c27cc9836c888c8e3094894be7968c9a3a62981b0e73b49c48f4c781014b3184443708b4a538f470d1ee08647b2df3cff4949bdcca67b328f35f6613588af39d3ebc65984fbfd42b66053eacc6292d5c9089cfebd8353ba5769f2656aaaa67643ee6253fbf10fa51d1aa5b3d5d42e53ecfb828002e817784b77a9a26aa637320132cfc1f65d29133077abfd1ffd2cbcfea193a64a48bcb88d4dbe0be5eb179dc55f86c0580478046670b2a43e86c600cec9d375b5d44281e6ecc28b90177cae8d72c500b2b9abdb976aadfdd17fa272683f01f73d85eef90317a19bd5e9745db7f01809fd6a9124bfa6844e6794ca151f30708753f04fe6695e9d9d55bdd24bc23059e5f04860d58305c19251d4d48f8f53e5daf56cbfdea044b95f072bdbc2c4d239fcaf5f278ae5f3b83a11276e02c46281c120e0c966d30e996cb39dd155ed2e2a0d6783b888f58afb6bc770a101dab0df6b7b649238410b209d97bcbbd03870d840d140d9d218611de393333e373096168825f393c7758a34d2e47cd3330a667072cf7151302ecb90f61cf61249cf8209d3b1250a62c1e82fb0a4682842ba6e98c07f67e3379bb36ea44339562a30e136104c09aed5e7b9c10f0d9b5b8c9742589c51919b11773961d723960b80b656a46aeba193973e5c80e9fcdf0f83408af4cabb2f7975d439267e0d603857662508e3a39fee498134f23b7ed08bc465c79c35f0490e4ed70c84cce3c991a85d53c0d0bd9be6d874db86f7d8fbb373ad511eb804295383560e34bedc5edbd6da54ddbb499ad94374dbbef2ebd5c831984f1126ad5571abaced02a1a33f16229b51735cb5226596a529ac82193d2842bc50c34ea6c8f3af2ba2293f676a212180a79b148ab7091f6e489749e8f767e461fec9c44e6bba95d9b93d3346e6a1c7763e6a616757c00559e0ed093526a5847c7d2a4868958a71792d735ee3a87a34e8fba5309a212ede1a81b119f1bed346b98c5b6277fdd264abe6c82684f6a9de85fd775bf6c98882e45e798b4a71395b8384d8483c333568b79caa8f3519da804d591a73a49e4245a15a30e142f5c97a6ddce49d29e507c7237da4cb427a30e24225736302525f499f7bc03c4158675884e441f404f3e07cb0742c1b22bf2078528864213c75247ca24431d90d423dd7485143488fa6650a68fb50a2178e9ab0627f816520cf69589267d60278c4c7b54ca21d70f0cf576e8dc69cfa33066d8991e66eeb40ad2c874e2cdfa945178fe2693d92353f4743b842aeef3993dd6a78fe85484a70f9ef4d3a755301fd51efde684fdbc4c6fb46a9e9ee6071b580366fa194faeae63a7d664d22aedf41ff78efbe85dc6bde32ea4bb769a1e75a3aeeb3afc8d9e5d1b651a9769232d668d9b2e80297a783899c0188afd9a3a3636c723fb67bd3be41e3317adee9a488779a5db2a156bbdc35e7bd647320a10d0b8912e0edb1efdca65c1819d4c9668954907cddc69e6f04b7bf425292ccc3473b7268592a94565ac8f4eaddb7fa391f5d13f8f877521233bb2a7a3d188bebb66af4c7bf4ddf5daa3e72e4c7bd45275e74e2f633b3c63b96b967584978b56810b00a853490e98a4810e595b2109266bebb8679c0dcc169e3eedd1471258af55301328d3d3093445ab2214619f22cca012f101fb9dcbd1d906c6d0cf1258af7feecde198b794e8b8242ab931e7c62437e2c8c8143d76618639ab354ec82fd87f5ea6de6442eff1644abd4c674fb402959326b7ce108a2b6c207f33c3af661918e8d85564e19e4119ea80246bca420df410652dd19e8c44b4278964686fe6a583792bfb2157199e917155923793664606b69b64efec377a951d12d1a91b3fda9339b0f3168e4ce24eaba665793b7187495c8249335922ee4409cf4464c24464c20413ad8a10b664e853842f542bd823e28f05c0d50cc402f482b504fb4120227a35235b753d431f2ada5282ad92e5170053f258c8920c59cec815ace9f1c9f0e7c712b66f61f95b9675eb5fc9faf52c2c7f58bf2fedc952e9a555f0f2af168487509622935264c2a455513ec1b2c8d0270a2de46f8606f9f3f2854d1002e5207235f343ae3ca10c71cf78fd6d3be0e393ab4541610843c56206b66d968e708423fca0f4f3f343839844abe8617e8130e65f7422c3c813e35f6c02c6bff88409545c2275ef5f5422c3479d5601e05087c34725adc2adba878f495af5c3d3e18db42a87c31769150e87bf69d5cbe189b4ca74f821ad6a71f820ad6271f8225a553a3c9056ad1c9e8856910effc347abbac3f76895e8f041b48a3bbc4dabb6c3ffd02aedd9e16fccd090699535e32e2d87332e0aa65e5cc67d81a9178fb925e8bd38cc6581de8bc7b8167a2f0ee36ed07b7117b742efc5517742efc50b22f244a15028140a85f26ecca91ba1e7e22fee472b90512ebc0bf38bfbc5ece2f37e4832ea90c3813a006efc00f4e24530863c51570263e25ddc2f7e20c7a3ee77c40c795e871b73a0178f6f4c02bdf87b230ef4e27f8d402ffe748b402f3e877b03bd781c2e11e8c5bfdc21d08b37dd20d08b6f718b805e3c8b0b047af1a54b04f4e25d6e102ba6b80153f12c10ca0cf4e2499706f4e2471706a6e2edf5a017df5d14f4e245f7f00596a017af5d16e8c567d7c20d42e8c5a824cf9c2411a7cad01984a8a03225084ac914c90f79ced0c8f4d0479e1eea2f2516bb654a4fb11146f2dcda4ba255bde2c8145999131a2c80bd0e7fd8a4d68a697a6c5a2525a491c74d2aa703fe8242e08c33de82545e87ab7acad22948f303858732346085b555168516b4a0652b9c7546e646bd71e3c6ad25040da2a2f6f2d20c8d2cbd991b345af595604a2fbd82352d6585b303720a7b6a611bb33cbc11b1da565d9af63c1878eb74c25bd6af67b56555989a724a2aa794321e8d1f6668d0e89a837e6c2f66cd073bd35ea4692f7e06060d0152c4cc0d4ec7957db417af1eed45681344ab62ec48e1bc3ddaa338564a6309a6e2a56cd987b0d2d4206804282528d484060b60ede3bbffd01e649181c58e9bd0d8b427718f9f56353c668f6119062c760c3791163bc5287c3d76e92ba5cfb06b4fafb516fbe8957c5ff66815e4326cdb6b9af66cbe5a6b66d3aa9ad56ab3dbd0fcd043f3830d861dfe442843b1c723b974608f9db1ce7ef4cc626bd20e6f8925475c62694f3691a747623f5b6f6596a1f1a35523fcc5dbb7b5b7b7c77eb4ca76add6662b53ddb36bddfdd15e3fbb3d7cb4d73d7cfce8306ca6bd2681fde04f8f56c1283e1a46992d82291b5932f4290214ba6061861c965cb0f034bdf580a9becc272353dbb35124d2d17cb087909b3ddaf3d19efc4c81fdd19e7c8fcb041d35a4551ffc01d2aaaf16d12ac8842cdfc307f66779df3641c8dbba41a10c75b0421826872079b06f5bb69de3ee11cc0b546a9cd06ff78845852530a9d9aec929749793e5145b2b8e0c05f4d7331d4d344522ad659e8860099136a150bf65b7a4638519ceeb275e9d5da2449e77664c010a30438f56113102a5e04467a8e608a7049d9aed5300651f60edd9302e8159266bb53696dc00d1109724e109350359eb252eb770c53dbec255cb57d46b8b24805e5c7211215f3d34768461df8dc49d1c1a2ca9395282f253e324c6ebbb7c6094f81be5c882d37cb023ed349d89602e6d810a30e8d418395232434fcda580134b7dab0a3d2314b4203494841fd1d055579cfb8c2b70ecb17e556ce10b7fd713b22c451af1576f6f8ad8881c9da390cfbe6af1e680995ef70382fb86e62a799a5e570f8c917f02a6e4a54025cf25050b8b91e88384299ed41839d24285508d13cd0347b2274b6a5aaeddc0da404a7c61daf54a02b41794ab089711ae28608c7cf5c9f2314ade6eacc14c1b362213a330c504546a8c1c613182a09a99ee41dec8914d8a27352d3fa202aad98ea44673d2fd93110d5db256ab26e17a02bca87c171592a7074c63c272b77e81dc1c8f950cc39223a78374d38e4e887d77989b07e975ae78779bb4e09cd7acc82db3a7cb956e37cbb547e6ebc29fdc35d88d35a27b45c92e9aa3630de6336231394ba461da2fd9d39e361fb1f469cfe542985af1965b61ea3a77ed0dbddf0d95513821ae472ca7684fbbd267e5728a568db45114fb4f46b11f9da6451ccb3beeca29582e7da44f7bb2a45d135de9237b4832ae9ca659aeeed7e82c37e6d1bc7643b3e82b37e6773ad0baad6fb664069103c27abc8cd2aa0e4f9181aea00b4a7bda45d6da526984af2850347cf9d4c07e7149ecb15b5f2cc76cf6c49e9e1eabb670db8d35da861af2c04e8d912399187eae7333c618e3ad3976c70873bc7c3ade0b4aa7e2d53364cb90ebbdb291b6000fdee05363e448490b42354eb21b39621161a866fb9101f4d438b9601172aa92921b2c1ab2ac5718b2dc42b64f28558106a22aaad59ac205e5f2216113e9347f34779751f2d533e1a84a190cb52745553a1c69810ec7640f73776badca347acca4bb8d6ead966511e127c6a004ab5ecf4032196cb46e688e59261acab014b27a647d7cc77a9b709cd52ae984a5a40d592341917b72c0fa607b46e6a221d110ecc93ed8b86596c8064587501483481be484c8ae15d1fdd1664bfc712900f4686ca669958e024055942c0f699abb261fdbb973d88891155968c2a4c6c811aa84a09aed475c786a9cc423a9d1e2b6e95c3da4ab08704544a6e42f2a2a3904e809491e2f649904a1275421cbd410a0ea8ac2fa15c575f5441c64f9a8736bbe356bd6edd8735d978ef4913c31c6b8139f2020d6c4254c903c3d974e7bd80bec77f55c3db0c6137055a5b04cc8971488c895a8566b852e9f9ea18cdd951044c95588ecb1a73d7941b97c2c70f9c0bea1b9c986735e836153c457cf05a5535234942357d7139892ab8b094cc93f110d5d4f2e2659be47cdf0ea9959d5342dfbd5734111baaaf46ac61208450896489e4bcae573054936f4207f1795212ce4ef3ac3952df944437968662aa1e4154388229340d4867ca944439715b91d574f9657cf7c4f0b20d24f8682c9f1135a4219ea704422b98eb4653960061a447d5bb46912d0291f447b7292c0b348906566023bfa6a3e9b378913ccd6c9fd43d5c04eb4cf6b9a4d254196a2ed439d091c77618d9453b0b256ebadac605a7337d6449ec89361557475d751e4b02a7289e14db15fe481432fc81f04c2b042d133ae070608d051cb326d24aad89c232d8e32ac8aba6dab4708e558451d2d4a1199b092e151b7b292755dd705b198b5d6aedc2fe66cd5d68dab64a8423a5548a70ae954211823ef799e376a9148241abdd66ed4fd2ba1c062531fd6d433744aeac89982abd047af43d647ca4ec7d68f9eeb8845b46235cb1289021f59faeff48db40c455986c7816636262976d046add1c6166dd838a3461b2511ac91c3166dbcd0affe36da08c2126d0c29451b445ea28d1b114ba65d32c248ee0789368ad421d186910b7f4d4f24da883871c675136dc4241a8031f4d619327d11daf44678a09169954c1f7162647a1a93e92f0f408f7ebb2fa0477bc8f4187dd440926803156778e046ccc19f0f999efe4484d329072872c821531883030e2fb0e7e5c5440093a9c5005ab4602100162c4a374a25171b2e2e2b6aac58d1e2434b0bcb0c0bcbca6a6585a42291463d8c469686b55d00ba4ec48348c4edc0719bccb66933342d939165580c8655985aaf18d765c1b02c9aca94663a5fc01a520200d6e876016b4414ac01ab65aa1888cef557a6ef4144af444be86174327dc204f6b88049a69a508f0b74903f38854ca637327dbdac86dc57a4e67e5ca2b5a88a0651184a0a30550fe514460d86d1dc5c2469d574a1c472a123515a97c1a2a4f48a8453534938595e12507bab294841adda5edf42f46fdbb6f39017b23d5bfdb4b7bdd6ba955040f82301b54acbeaccb46c45021a0a6a1549ca6a28d757d2d0ea0c676895e81af44250ae2b2a6b208d641aece8a4262b59ad32553fba9a126c8651411845220db56a7b3d49a6ea6b95f8833d1c10dbb3ac0969f523577035a557364b7cc496bf15935cffd99cf6eabf97d1697a8523572b72c5f296ea52fac6e9b0b8ab2532555fbaab1c99aa77b92b1c99aa5f715b2e8b97e56a47ae484ce413b96279fd8a47ae565ee56ab52353b5cad5ea894c552b532b1e99aadfbe72574ce42ad6d4afea573a5fe5b40a47ae5054f4ca89ae5f35d12b267a457ac5ab9dd106511585855c515ec81545865c516bc8d5454eae2e96e4fab9d0c9d505935c2de9f5a820b91abd5ebb242052507b92cb51b3866707ecca5b1effa1804c08187de5438cbe72d291307df421486fc148b06093869bb4dcd2bd4cd5af5cd235695f39ac195d93864d08b82eeb2b1889d1add1ad2341fa7558a329c1624e06560524eb55b55aab02caf5a32b2353f5a49bf1c0c67a8d72384c08b83eba8feb230c65ca877529f17763e58c849361fe2050ae27917096b0f24072d535a28b12d035282099aae796b0229414604cb59ab015250525a553f528201853cfc5c0d2cf731225a53d1c47ecc82ef1a7e33c66b2fc76a95d54d04501b5a76121f23ba8900c9b74cccb4b6ca2b20cb69fdd1fe4a5e9a150b6f9934114e61305caa6c240864039bbe8666faec33bb467588886e345f6dab457dfdd20daab97546026c29bc65d9294f6ea4940ed553690807295f84351c9358b5c0e79538feca3bd5a8fa22257242014905cad7e60aabe1eca0f25946b8602ca950494ebea27d76b3166590651151b01240b99c1c9f5d8ad18ea70044382350e4070ce86a88fdb32adb696d5b8450e47778d9ec1081baf9f9eee96515a15af6b920342f41f19a53d693a4a7b8f018a2c839552b1f152da33f5494752636a6c4200c77de5ddd8c7caca8dcc73475223af591db74cdbb0a8d5ec34eb36741b2c0f64f91c7869f34efadabccde4074bc8f18eb226eae24bb596fcc066b0abbd65b6e5b274ad7158448fd7ad97aecbb572aed563e5749805ff647912b6a85841403b727b61c9f4f6921c64c9e1a897aca28a2aaa88f733926b5fd8146fe5584a62c0f38417d0b0c52d6e59e71c5613168f133b9367f65c55b09f95f3c5a0ec5608d273af894172c5612b47a6a8c815c5512c27b67f560ebdb6b892e98d3d3f20428e9c10cfd9e7ce56336a95c8f0dabc4e269743e6c6d6944db0548486ea9669db46614db3a05996e564efa06cdbae5ddbb48e5a6f9a4665ee54edf2499ed76e51c39f0c0a32844a1158e280e80b654bd0148c5241c1b079c15a92c450152a8482a6ecc815778ba73d79eece6b8ad610f31ce68e04e9f3437067c148ac9cfb1564bb7f564e8e15976f8799e504e9ce1d2ba7b6d81deb494643861c8ecc073554c4a124adea9c68a371e219b23c8723cb72dac3d6122bd8ae6e2f5963d9b62bca5abd36c79515ee70a865db6e97b5daddf443230268d3b08eb32e902282b64c6389b9aea89bd544114b04160a2c176439038b27673db09f9c277d087a168c04777a1246c2890feef448ac7cdef63f38c462db32adae9c7b632167d7e6edbee4d823c9ca392b47a6ac258da594f644b9f6b50898e7ee639ec33ee8ad1c972dbb5dae7db70cb91dd84d36edc98ba6fb06e1931dfac82976eaafdbe3a7f1acffe64e0c0a2a8293035f36cdb475dcac8aad9cecda28a0e093e32571554a7b120b81fd28156d07a6e4e1cecd5f0c0a9a2e689c48a95820cba34004594e0e084d1c18a3cd6b95bb3488025129f51aa641adaab5560d530ad49efca8945ec11e0a84a3ad1c58c33a1cb238800363a4a573ad1c252e2c5829a57b484c72bc2d197242cc28ec103d6221222b870d1866e5502af6075572bca2ec653cb05f673bb0d7e1941eac80092ea020086510aa91c781db21a798b9d19e3cb6bd703ca40f36d1fcb0e20418d39ce478b10c87e03e4446babc86c3965d2e6bf156edb465b7662d72384c085839771f2be7b01127da8dccaf60f9c40777123642cf61b9f3925bc425f99b3b31c8ca534a7b326b22bb2c59bbf009201421c77be5be2fb9e230f59887d9070e1f8841124c706a7ae42a6201a6e4bde0438635c4a07cd119bb0d3d64e5c01aa2881d673ab09f9563edc828add27ca0584eb48ac7ca912b796b89653db1847ee44a2e295d39414315c80651c9aec50118d30118e30118a3a4ad9c4feae448e18417b2c643fb86bf18062a5cf498cfedb0b2488b9ca6613f4fd66ed5f0b65d18c51780307774b83c77600d4b07c6cc00ae9e64387d90a5e5021c583cd6148b7dfb8150d66e9735257d0d5b3973673221eadb7f2291e89f9523b2222b45f2db357bad25568ea5c4cab1725ab56950e3b44da3da7c62e5b4ea8343d61225ada24964f92254b0db6e73a208263bb272ba1c487db214b276693635e1f01128d453e3c4a4a35e439269baef28775f3065ca9303533c7245a940ca63e5502a5a09086bc87d164c34feae5cb7bea6bc5df8841322c89a10d75fb28e5ccd19c01d9db9a33377a4cedcb172e68e951314141474eb65d18955ae27431d8e5c48e69118ad1f5548f822b0860988ce1d4f01a88a386d2357250c402f5e34dfb7080644f8835528003db9b2a9b6f47bf902165e629cf662121871228d14fad8d4cdc69cf8929217255109f489561231c237a6692fc6f8c1531b1ad8e3d9d45aab0d4dfcc14676c318638c31c2c7287dac6c966a2d75aa09fc827c6c1ff48f8669a934ba26a5d8af75608dae33c8b2719065fbe06b17b40fd6c5282b17bd7beb30c9c9e9209715fdd34059562b5df00a0e0359dc72fb2cda777676600d4bebc815ac61927b27874ace92d611bdc34355da9322fc89be72293ae9dfca8ae82bffa28fe84256de9da649370eb52749506705eaac409d151df8915e7fdaf3e96e8ce223f269558dd2aaee8754f18ced6a77dc38edc98b80624ecc1145d1bfcec9522412891e391ca21db98a393b3b5ca0dca851d03a11e86ba049c57eadd33a47885eed8d106193b5e2b1e7d43aba3d9224b9de4fa29db68e5c4520201d201d201d8b7b58d824ba157df4ad0b23e1c447f6eb48cc5b4752d3611f54c34864bf4eb149d4f741dfd88893ee46263689e83bec633e3e6223193689b009017deb43c45fbf9aa681e48a7b06c4e11f3225bf05558d8ac5399946a048655e58038324f9612353d286622853b07774a060e1bfeec7633fd644122d160e681a8456775b169df45ab3e5753a6fc529e7e9a184f01b95925e4a2927ec9e48c9e392d2882bf7e5ad1d6f7940cbb6b6befdcc67774eab55dba5c4ae8b461a7165f923f97aedffe8e8e8cf7bcd7aab7f5dd93c68cb0953c06cad624db7ce9cb3a114bde5e735f5a74e9e3ef1898eb490e8b487c4882bcb77e34b24f3484422e7958227f9194a11c516a46092653294c247284b01b44489bce5174c8a2354c95e86521c618aac41065828051294642d6f9fd7b0d36b96951dc2adfbb6713bb29c695c8e15c760a6699f3aadcaae5d7238342c0b2257d7dec2724dcbaa967dc3b6ec1b761a89dd74bd42e28fe4ec7e5287cc2dae4ded15bb12f9d3b6165848851c8f16dbb5cce52d32edf0157f3773db6a966559a4dba7619b911839522467d88744d68edde46c2eb15d212d7e246bf79339a3d9b7cc0899bf982b1632391e5fe716cf4e350ddf74aebfa669f52dea37753295f9992a17fa8a77d4b778762b5c3dfb84aad2339c45ac3e8b41e4aac74d97103ab26b3cb26b4d441bda378cbdb3f6ed141371395eae6121da5b9ce3786c39fbcb0a09dbb02dcb386ee3726017b271d7b0ecd9afcc8431aefad45a6b6c81b526e20c7a79edfb766771ad972e77972b3a8d5cb142c3f1c9e56af4d9823f235723dc43a6e6e50afeacc5f359a645ad5ec3300c13927dfbb06bbd451e441bf4daab5cc96b986ad7b4162226340c7ff88b3cabd135ed1096347b1d9b3472426cda2bc6346caaa7c7de43ae82c8d4bcb5533b3d764535b037336fff6e66c66e68de7e43bfc8d369a7af5c8eed42341e5bde1e44ae20c4b063f3229e8c9dbbd886bf0858967669ae375ad9fd2890b3af02397b96b399ab0e2d5fd7b4b851eb7e48b2b55dbbd8cdaee4706cdae9e7afd723b970e4419c414f23218c3c883620cc3a709650533b229168f20504f287ad530dabc434edc518638ca50d68f1dd70899cf9444922679fd980fd66f2e1b9d2dbe3f00cacd14129724329c029b967b88e38f98b39dbcd2ebc1abc500ed978e9051b6fd201bf755eaf4399fec3600d2cd327329522532664fa64525a856ebd06238452d4649ea667648a360784cd33edd14f2c2353348915ba2eace984e46aeed0c9a3cddb5191296a992cab3ea94d9c21d3d7a05651d1ab9627d5895641289c9092a94c944c9fd49f4ca570220d943e81220849f257a7646ab3155ba655dfe4a11d954c4fa5002493a3403b2a7235314f0fac813379501a8e6d7cc4ccfd6c8a2a2c8e21d7ec9159ca24c8eb447bf4fd16f29f4ca63cf21e31f311337f9327d337ae4fdaa32db0df33a59d5027d49d01d5ab88432d4e23e9d636a0b9cca72197da83556468a18f9329b9b5b8414ad3d8e4d3811afb2945b5b006b65cf90053fd27aa14333066c8cad098137bf8496a3c2005144259ce4cd38d849653d8f91df2740a1a95f964049c085cacb071dce5e56e5dc869dfb4f66012910cec76ee5bafae472344ae96ef6ea79048775889bff90944abbbecf0b5752af68c81ddcee118735ab5e138ad5b0d2447e6449c88d32a1973a4843d638cb148544d68e175ac3ebb8e8d15abf7068c89fd199374102041112748ab2c2a2d59830029220848114166cc89315ad29a00ce9e91366d2953adb516c20b636c582594b2238c626839bbbbfb47f78dc3d4203ad5382ae46e8f56f5c0ea35ebf6a8d7267b224710d7dfaaf62efcf6fa364678ccfc19c9d326881e56b4668edcf51b992f6cda41272073c42838fb393e3714348892730396bec9d4a6096c7f729393dfbe05c18a3e4f60b973dc85b3bd9577dc5fde755cf72fe274b8c9e82f1cf7eea22b847b778dbb9ab5f2ee8a3eee138859f496af74f7e5a2fbf2f232390e7fdd45dd59ae8956ba8b848858442c229148843f96af5c6359e1ba1369d5ca5956f08ce538ee90eb5ebabd116dddb9eedc2127c24d465c91f64638b2b8bd16735eb88bbabf5c24eade72ade5461cd37398fe92b9fb7261d66001eccbbb6bd0001642418628194e214328848432144241593bbd8eee2fd7445fb942ba8baead5cab5be472b09cbbe8ae1c723b5856f0d77d0231afbce5dcca7d7987e36574d36d321abde5fdd1dda6e9c21c715a85b574ff6a915675ddf26f6505487b2b2df65f6d815bce72ade51621722344a4552ccf1b8783256e446e5ea45530072181fda0504eabea895431d22a110b1c712c177cfdc08edef75ac5f23e4cab56de9769550be9f09d7d05fe4ad9374e88283a4d6f9c8ece5f0538c85551c7bdfca26af70e7b25b0fdaf66d1b6e1ef4622c9f434721fab5728cfbee5c3e29b26d25ebf0a451c98922b2010062d6924db9188a429e9085a1236f68dcc324a0e08d81e6c6fe2effa8dcc7d9a8697bcdeb75e74bf225974ee7e31732d051394c8f6957b5fd9f47a0ef88bd2e798a7b2fb8a6e35c10e6f93e674d8f78d59d32e257c8e092536e98097cf01b57ad26b7777c46ccf5d9845f6247b0df230371f2ccb2787630546ae74d12d5d833f5828451394e43e8b2a0cb040a8c8f02329b92f92820951725f5b3f7e44f28dcc4244c7df8b102cde879fa643fcb5c0b5bd6844912c441e5e7eeae022c7035ee6403229060249b6b0c99296f51cd83a773f7ad20dd0fd3a8085453560d17668e7d1d874bd7f4dd7ad43d38581d051abbcaee7e03044922dfc15a1f42d363177f21a16d5c05a90e3d1ddc242ba5f58c8e837f293f846e60ecfd1499fdc0e7b78c9e91861f8826f64667179883f139e2de49b13427416f88b59f4fe8ee486171691858078b6f7ddc82cc21f12b975c83cf1a4f8bbe9c7aea5f71b5b55d806227ac909c8f1c87277784b1fddaf481eddba5fcca56b1f8bc35bb5e7b8aee18a4d3ab8d7e7e05e6924bca3d326d82fca82c5e74d3aaed3e7b8589ce6894d3ae8e773b0289df40961e9221da5d1b5ae10b8c30a81e5eea50b57fdbd7e4efcdd74eeae4106d88ba460021359f4adefbc1f913ce7e165a5ac7afa95bee2dc35e2aaa28a2ade90e71b4f20e68ed461213bec45222028a516cc54ebadbba2fb893ad37593f6ee48f2854ddceb9164cbca45327c77735c1d568e4bc785ad470e08fad16924bc5fe9478040924df4a61c1c46922936e9b04e9fc3c21f91fc915ec237328b4ef18dccf0a423c9b0a391a26bef72bf2099f415f72392496fb95f914c62c1334120c92b780231db4b4e474bb62769db69dac62a6d2fb6b2f49cf3ebae5d9fd73abd3ce6ad58fb9b50fbbc42e4a1bcf06724df741689ea37b37de925b7b43a6f4defb7e5d1b5beda75d82acb92d9b226d07984bf22f9a66b5bdc379abc34f6da644fd83eccf3f3d1dec8dc46c42aaaa8a20a1d12e8dce19bce228925d0f9a633279bc01a6d935a5fe6bc06eb2965cf9a8add1894bc402fcba2b1566b21b626cd0f36715a734a5869e67c7bf1eb5b74f663ad31c6d83146392594de67e2ad5cd1c0543c4cc5c7787b24561a83090fa23e991ff5f80f46e26fd628efdda6a4b00b1ae4c1b60facbc25639472c638e58c73ce80c0c67f324f40c9df73dbdc425a8e98e92586d046843372cf8e52489a40084811f1f5d7b57ac2c76bf0cac07819dec230ed41dca592add2c232ed793240dab3092248ab6aad41964d900b7ad0839e07af2017c82da2bd065244900be2196b650b0205695511adfa01a7e8f664604cfc94160a514b8a5e4da0663b815286b465b5d7ec3d62f423ecbbd39ba4b7d2e482ad32d5047ec1d6d82ea0960fae5a92ab0d4f2d4e2b4e1a57e68c33ce38679cdca4331b4dd2ed4773fb9c73ced274992b66cbc43a6b96b00b86351177ed8ae69c225863cd3967572f6d7ece39e7b41fcd39a7c59f3de9d39ee51f897492bd1012cb24e13949933449f324fcb11cbbc672e3cf1dcd69b1cf11cb081b8decb4734efb69a7fdd739d6da39e79c73cefaeb945bb9bdadc49d7302b58e3dd65dc72c3675f57af639e75cb14e9f44746e65ce39e7ec708f8a4df6f5c2265bef83be62234eec8d601f9c11d1b923a9a1e9edf6cf9d67a0bf3e04fd859b675ed9dec6c9d0ba8feb1636e2847423f2d749d847bd081b69483f84754a8f84bcf521e8398c449ff6131c1c1c9c9ad195d9de8a93bb5b7170b2769d4028928085ac6517666c4e119edc9cdb9cda9cb0a6c29a39e78c4192fc90a9f98a6d646ada503c23533389fc6cd9d18088f9c5285ed24b2a03632c7c85abeb18b66e9de209a5856b7b53360f6cbfd160e5e7fbaf8d8f9879c84c9e584910146fc6c6c608f6fb512c413fd060ab60f70f6f1af18df660cfd8d7268df6e069fa1ea632ed495ba2d83ac5fd38af0b650adeba504a13d8d8dd3d7faa28884f68b44a022922089098538a4aa21259c2209a1f801401a78020c3c70e441590e8c9c31608874810422933d32abb5a8159b9d20e4572c55db742afebb61b3147ae80c894fc77168c7109f65cf6f6003deb333edcc891e9f509a394221a30c6fad7c3b723d38b2e0aa6ac7330d9fa760f3deb5aca2282fe06914c2f3f63b3252906225731a75a5b8a393cb0dfcc2a7200a6e44580821e17f4c49c99991b9546ab24b5b029b01f1958a33d18190ffaccd80421c59bb9e1c1ec005536d0934702bc0761a0aafe4586779103b451ba50657d7381365e5ad4c03046da68e37105c2ca126dfc508a3686bc441b3371860703c6c8bf34968131bff1072c642d40e1013df96a7359b00a599e4221cb0f815338008c9141c419f2f20979e60486d329872fe490030e5ec00187172a2f2fa62e984c2db8d0a2058b2db060519a522ab968c1c565451656ac68c1424b0b4b100bcbca155656485620914655188dac146b3b2a749d680a221127058edb80b64d8b82a66550c832ec091856a7a8f57242963652da4869236de479481bf903481b7921a44d10729381357a36924b6e6cd0fa3e58f8be10a6206e3912230e1a447d3428cbd81da306e3d0d6dfaa926a2357510331256ffd2b5dff8efdf3b673f893891a88aaec18c6f9853f00e42fe294220ba209a04c4510680740e6c9c85f1c9251e52f0e45a129b6577065658a00593e069c0157f5f25eb4715d1e06ac61c5242ea08d0b470bc017b086852306608c3c8e9538596619877082a245040da2beba247310d6884618d16800fc016b6c993b1110c22d640e8621731f4443e6b4b7905bf8d12aebdc8968d575ee405a55cfbd885661e76caf56b84f0f58fa20923b10b992e71e73600d98b9ff90ab3e177132c7a5c1ceb73c9248fdd19190277d88d15b3012fd910fd6122d00a6b84311fe0163b8cf0ed87997c7cbcf0f213ffb48902eb14974234e7cb47cc5e787e8bb6024466f6c12e126fd15d8480b77166c658abb5cc14eb473173db1b006d638e1aec9ad35d1b539fa4869438e1c8f7ad3f6a8a43dee72ca0fb269c340748e54b4c73de6649abe5cfd8029ee9c4ce62eba5bbe46f70777ad7ba694207f937461cde8c21a4d6e10d680a781810cafd99be5edc29e294cb2e866b9391c3107c670308a9e1be41f727599e25eabedf0674ba5dff33e19ae078ce14ed3a2dbd99a62b943148785d4258d1d419bc256f95967686080727465d89565578f618992aee967d865d3ef436101163e21c5948cfdd27e6fa6c28673546a2f0ab9360cb3b41759da1b49d390f692b48f56c127a45022e615b94f2449af926c41518c21f7a3925ec1303021a255f00929a4e43e104cc227e47e732f776610bb9cd669ba5ebb8ef9e8543fc61e1618ecd69e25af1968f45a44b54a0b73a83d799a7e71290e4da284f65028d4270afda153d07ba99429de1201b094d8bc4729189094a0ae755a0523e3858cc7b826e3b64e2f81f9d74b64e0d6814902068ca7aec1b85850ea62403060603a76ebc1581526b6271b0f8c0b73ca469c424a5301d33f1d273b4edac049f40ad6ac60cd8b6be3312eccbda4553670ee244ea926a4a1131d92299f56a57e7a8cd22bd24f8f53b44ac64fdd4fa7f813f7138b9f1e936815cc4f323fb9f869c64f8f4bb44afbe971a755d94f307eba3f3d36d1aaeda7fe91a9f574b29e9ceec9d5cb4f87a7d3a00c391ea61ddce3b9c7cbc0445ac6656021a6186c7a7198651c6653d79d744db0e6a9ce83b9172355bfe083a127595e6a3c4353642de76a49349cf65e6ec644a6e43726b2fcddc9f230324d892cef2289fc974a301766eec697db3766174ec9f7469f4c877eb2f5445a3d968ff503833525579ba1936568c8e0c631f5f0ef19f3f0cf83116900613a33be43ffbc38942bab444c4c4ccc6fcccc64211090d9b4239e3b873f24115f3e3662abc3a470ef643cab81fdb0a14e46860db597e1d0c09e1eff61322e566506967b8731a0f6b8775cd775fdd3755dd77118d00e01b83c06744ca755a6cf8801e303a5277f984e6cd50cb9a23da7430ec78c9be96449b487c9c03d198e3f9d7b7cfc09470e7727df42c63f8ee3645c195f65813f6b65fc744dc6c582b81da71ce3295b1c8e139eb15810fd1ac8e2c174b6a8533b3a144960af0bd3b11858f4028311014ffeea1011f2870d5581798cf9d0478752a7693ad4e17b7b740270bf99695cef4392533d1cc61d82c2c1434f0f17abc243922c8f2f6c2fe66b0816ab307db12a9d6a6ce882c23ee185203c6104300e635e70a7c72ebd6c96a57eb5ebe4e97e2f62c87877612ee3f2e8decd0f06e6c5bb17875c8c71fa0927dbb1a77f8dc3e3f498a4553839ad8259768472698f0dcc11dfc87c7a73394ea76b3ed8173229987319936c4997e5b4276f6696a4bdeeee329cee7a623b731b931bd8c6320e7365a4ae8c4b877a9868a23db931f169d589f6b47735c1c67cfa090a3684d32a18fcc53ce31accb570e810ccab702fde37c6d73f54e4d4bffec186602ecc33aecb4f1b942c1fe3a69668629b8053c8f25694d385199e4af1847978642afa1061096be86995cb5d2814999ba33b87ffd52c23c647ee2faebdb8fdc384e54e291930cfd1bdb1e91cea450a7fb5c2523efd2be51787277c44cc2fcedd989bc3f1025bc366019c15ac31c1f810548e31c59ca66155430ab68053f3d9bcc9e8c899d21e11a6c378bc34adc1f660bc39209ac3435019e6306ebaa6d161b636a71bb34fc7dc6e22c6e3dc661347f08081dcd7e08dcd30d7b4138ddc75f8eb73a707c8e4c64262dce59a0f3626c608e40494f6a4c503e3daacc5ad7990615c52d6e40694615c16599b1b953d23a4964883b99d356b8b715d5c1ee3dc8d71ad795ad5c2327b8501f5fb497bb10318470f55da933834661c723866fc26734de3dc1db26599430e874c0b0c004fc68a6422654affa8b0a1d56514ac8e5cd5211f6e031baa43aff19913e00238ea3c7c874f256ccb2c065688be8f1e4bd80f72dcfd414457b7c0c1c0663871e68e8de51230468a5d01ac11816343b08696e5b12a0108400002d0833637983bb3d65bc6c4c23c9fc5611cdb7cb0524732a133c8302e97952c9138ed499944ca9429527e806403b1c82e6a2277c25f917c3255d38eeef7177f4872d71c8fd23b0c58d24ddd594471852a3995611456904286dc8e0e37216118173fdd1bd955da9335b787720b911316e7381c2cf08ccd77029dfb2ceecc22988bb81c30378205c686b2165818566cda1615994eef3c338ce9749969d64e780536c7cca79b2015d81e8c41a293bb6bd806d31fb09f8bdca75b383549ac93e9324ed3d890e470648d55991cb0194edd828dcf58603f6cc8a2c15f2500feea00f067ed0dfc9550f8fb0ef8bbe7d5c89db00e989b70cc3b2b8912b6fbaca156ddcb63555ab5c3e5339cce92b48ac5e5b39c56b9b87ca6a455a7cb674b5a955dd5ade2e11dcb3315581816bf381ca76b3ed87b9a8e1c0fd38eeea8a3b0101d7878e472c41e30109ddbd483e683ed29eedde162556e8673b324594ea6246b1e6ea693028baa5fb0f130fef50fcccd0070b324376b71b325374ba23d791a375362c6cd646eb6c406732314c890615c970c3919181b6a4f8a85f11e2e9022826cd4f061a655302e4fabb42ae6f2c5573afdb3f9c561ff45ea35a77efca5be22f5164c7b60b009a74ef82bd90e7f2fe1cf8371713862708c4b231f807b04cd1f36a4ba47cc14bd43dfa6c3354dc9a56b6a0c446796b7bc33e45a9ca663dced2ead2a5dbe792687637238b4f7e5010319c6c5219b2e8c220a392d9ea0ac26bac3b806b953c7912e101c1139e2cff421a8dcbd63369dee8724c38071978fc587a0b28bcbef230744ff8f9c0e54fefb1241e59fded7301fecf62132593b69316b5a8f2c939b4abc43647216a15843fe5019c22adf1803f93bcef0092228c92cb61832300d369094f1c77873df8bcf3887bf98c64288a072bfb190d3bb9f6eba76ba30ef4c97837153dfd3b5b9992e77c8e9e87e4265eecd35d75c6bdd37dd0f954d37fee4c5039c827871d3e1d7bdb1a80637868c94cb1b723b60defd74611eafe9303e224e17e690d3618af82322c3b8e94618d7609c4e441091619c8e6d627e7118f7eb0e834535b01d1e82ba9f1c8f176f2ce4c54d5848eafdd3d7e121a8fc0273a9b338e476b8e84861197c23738ccfc03306dfc82ce351c65b8818f88b59c65b46d7719ce9f4f4ee9c0cfc21413bee2713fe2207d47db6ea46f6d753bc81ee1773e704c6e9687cd291652ede8f887e87b317580e7f31ebe89f4e23237671ee422cbbb8f662071e0e7b15006c48ae4832872123460ef139e06073b783cc85edbdf886a05e9c3b00620cfe6a4a060c8c1707808b2b84fbc9e5a7d35d5cd3e606b91c2ff0d7f9c5bd77dd638c3dd008c00e3cc81c87fbc2c385eded80bfcbe00f9561727719347277981bb93b8ceea6211a300f000fa6cb1cb66a87a762c4cce8017734f0071300fcd1e001ef70617b32181bea3e03cbc05f8dc130d8500c0c030fa54cf87b06c05f5ca8c3bd78398198b9bfb83003c0c5597c723a3a7358888b9f1eb91d2e3f1d723a5cfce4e27207802e36eec6ab498e076cef2322c70e23712247ee9eeee2c27ce26ee7783aeaed99fef63a03203171f83b924f67f10e7f2ceee2845db8b82ea8fbfdc82caec3fd90f06416c7f72322b3803517cfd85fe3824092af4d2066975f9c8e96ece272c93d4697f7a5e20c5562122591273e893bf00702c120184425e6449ca1f8a1320c8d1b39e0f0037db8fb0d91c9d9b725d9743a77bb9f2e0fee1d76b95fcc2e8ff793c991f4977f7585430e395cd8291c5e2e6c1a19ef76ee0a89db21172120934df8eb9187c8b0b8dde2e2c82e8eecedc2025b4f947892bdd444ab4a1802a8bc7279eb8995b56c6505932cdfa22da12959c14d48cf48f808aac64976f9056e74830c694f5e52811d8775826616ec0785b020b9c2d60053f216a0c2812c9f8920cb182487b0a18ae9c00886310c613c3e7285e9c09494ab3a045392c35fe5c932d6212c0c44c81fa6d3f3040de4af0e6143a5f65e5a287fa8699fa08e4824d89188a4b3621636a04114cd0f541e5ef0144ff86fc257782dfc57776cedcd5a2194124a02e4cd527ac939eb27b468ea21b599b3ce3a6ba5f4b22c3ae79c737e4e284b98961034c8c345f3a4725a379d67b5be996f3a07dad8f92808bdc04e17cccccc949858f8a3e61863c4699923ad8e908a3e24ff9150b0b0e70f99a2afd55a3995b000a4b7a2554b95d2c79e4c0f7f10d157c71f3994fec2391187d29e744e20edd17f1028539a843e06fd04c15490cf0f8d4199feccd01fad44cf814c29fd2753922b58730f721cb0f01bb0f09c062cbcc42cedd1db0b0916be89956f21ce041a2c80cd0e61972ca4c2447b8d619167a7875e3dedf1f05c4f7876747a5ae584142852a4908c30836bcf3e5960230f4d7bda758f9841604ceff4a1a083a30e8db4520907c020b046cc5f5c62813590e187f8ab9db55b89070948c8349a65945af1422bb390003feb5a44c121178689508935305f18869d7ad4fb75514779d4baaeeb342211142b88433a603bea705b10b9da308d4c75fc94f4dce5b1aab031e2269c0e78eeda7578e3b10bfb752106b1d3eb72c72e770ee66bdbee901824f250893e3cf1270c4982b83dda8b920322e678886d97300cb3d8e179daebaed5565bbaaed8d35ebf1f8448ab86b4ea3b3bad82714707c22665e81345136dd129836446719882060b603bc8d2010bb5eb34fd8ac90cf1279321bdc4623d7ca66dd8b55b0fb91d19fee094dab59e5deb106af4ba3e3a3527d63860bfcbc8550ff98450123993202526429b4e8f7a94e222446e4ee4a6488c3ddabbd04d910f1e6288811021ffa31b4a13b2566be5ecc246e304f693a1544675e15761adc3d334aa55d74b7b3232edfdf85cf80667023b4ff127d3c387b5fe5dd7757df668efba642e19989256cacd520aa56429ab1422a2b8404e830679805811ec573190f6da260849a18445049952422f57589a2ad0202a62a73f2c591c2cedcd69c1f7fcfa873d62eba2b05b18fb310c3bca9bd6f5ee391ea2c476402c1ee5e188f1ca10571f3d4a331866410b63f893ce28a45003b7f6e67b3265e955c5c1c1c1e9a999b716bd282c51ec527841082184104219b9ea01ff532a824f0f0ccaa05c4b64e10850253b800316fc64f87849a8aa31c6286597a34b8ea518e38455c6286b97a54b494a38e19ca711ce88ef524f2cf1677540afc50867aca101accda8f46c75a5514e32552302410080002314002028100c8804c3d1783ca4eb72ee0114800d8fc25076521987490e43c818630c10000000000000000009020093cd2a3082704724fe979390121ee71352ed9ee62cd64eac3d039952428216b4542754a4aef70436cdec754514cf8481d1c6f3c596f606a65cdf747a31868e219409516d6152c008073e4d900ed8eb68b2fa6c72d053e4c4b92aabdbbb54fa476474bf5c2229e8a7a18e32640c409c10070978b5a4f857ec30c2daa6fbf4537ca13d84f05164e0843d444971348f40470a445da3142ecdcb08a37e8d1e8f7a8c336f94d97844962398b1703d6edbd8c47f4ccc4f10ffdd442728257f0010a0d36495da6f53880c9b46f44bbd819d5e567c23d5bb49a9988cd9946bfe44b14d5248a895ac62b6c21abc22d18d4d1b77f1f89bb8cad1953732d2707754881c2c96a9c5aa747707c9a23efeaf720d74b0190ed0cd49a36d9a95eea0e851ba9f91598a1c66c492ba426fdf85337b1c85bd225c5e42238a447cea12b2716478ae392fb44fcb2b4c785a6e1778607af6bc2085bb3ec471b67161ed8715f4de5c3213f087c4a46420a8dcb81cad3c063172cf04b8598661ddeebc7d118f1207b97a81dbd63dacdbc3b03981d444891ee61e908169bb30cc5a82d93b8d47e6a416cd0df0aabc8e5ebab423055ac1370fb7a45e2d2172aecee5ba072efb1a64f457bd45988d6028d820757f621dd8c9014e6e5c3dba9dc4b542842767a5211df7b9b3e3ffca2c66ee62014aaac426328f7aca876bbfa53ba7d028ab08269a25d5b6c422cf0dae4e9d8808005f81ab55e7bd56e36a363e2c909964cd8ed39c75280aa84c2c1291fdc28c926e1b4b05b5c967924dd9d1a5225da444670110a3bb431855a299965503a11bd8e12218a086bb58d05b40d2371db703c8aacd431e03e63c4a2ebffd52f0eaff3120a7b49b1231b32d556f89ccdc17b53248cdd638b85f466393a1577eb24a681e2917e9283d83bfd723bfee2bbdc80a0c73063e56c1469ed3380ba2b89116c331a624ee4afd77932a9e5aa1cdc052c78d7db0e03186d50777e24bac7c0743224d9c347bfa9e9ae3fb28b34d7c18450be7bf40c057285616b636bdf20822a8c344b9889c98309e6385a4e0e092812928d42d013bb23b50c913ea41ca30ed32f6248f7e3ce57a8085901129c228ac7dce419b01a0b118b2fd173fde9d5a4bc0e89cc07361cf25dd9ef277671cd5febc5f650453024100acb2bea66cf174a6a4e8ddcd37d686a12834bc878d1dc97181c590e79552246064f9f071f239971be323c29546a4b8e31d240bf48e5dce44099181f9355d2da6787977e813d3a6b9ea4e0ec660179b02cdec38d86833f67d9d5abd386353388c88a05ce80b5d34462e064316ff6f99f3d6e3a55038a59eaec49804796a761717f492034dd2427c5cb8b09db192df75f88325fdf2e7e8801a4c12cc8418b5a19cb931f7ed7479b84367f9c71eebabaf7d2c8436f1fee95258c12e19e57b36ccf6a316f05b4c1fc28357f34948602a8d0ce6a40a8a6a20f2545098fae0f52149cebb43bb31a41f320a447e1e1e100f47f8c65d4f849445271d0903237559239707711ac574579eb02c716396e4203edb0f0160922ba2cb188131d7aa4bec39fa5c845e4837ca53cce37b8f1a47b8f15ab62de89e71622e2e284b24114a762db876b0f78530665edc73ad40a99d90dc3ad121a69ee1f01e1bce1a51f3e75a8c466cc12413e2ff6dcb7ba4f9d2f6703264d343bccb59d874c52561dad45a01fa0e6e9c36eb62a4b6e2b8a4b037e9d05bd163cd065811990033a53fddbd032637dc9890cdafe7f9cfa674f90ab98efc5a0fc47efb00748395cd0c06d54631a4739939cb4fc17fabff153ef82fe80a7e933453f70cb46b4a0f113239747792682344c32f8aa92b8b61d2248b7422aef78bf74024b4cdaed45b3c64722d51ccc2952b11766d3deb81000a3bc07986b94b48c65da26f914935485f7eb9f9adff20cfde250614ba702268dc05ad6aa98ff79705fefbd00cf2623a57d2056333fe8740d9db99e3bd6e5dfe06ffedc9afcd72c59ae8b5bca7d2c233975e9738bf8993bc2547688ae3c0bda497798fceb2e5e9010e7f1aa0148af89e082048a5f82f49005b7c15c294404082b088a92fb630c3e042d2ccf007d03bbd10842f7b3025de05bdbb55b0c1f24e0b6d63b5f4be6d549d26150499005b8200920550ae9bf755244b6b8dd8df6a5b9c5c19c4c298a3136843bd9b5fc6989b11c58d91c462d15779cc5e1ed7be1fcbf7a8e76e3233f7e2ccd0a38faa1055154520f82733bd63b86226c256e3360c4b1c5f0bffd3d1bc30d36b23e32b415238446ff47fe81a4136eb7daec779eb170d6857846048672384e796c48bcd5ecfd1f2364c0a2fb6bbf53778e83448670bff1c8efa8191b689e41cd108353f920b247725c677dffb95e48bbffd56b3bef5e2cb9d720c82390ca2d6fc6de7db8fa4564fc604ed91cdc1f23eed00ece22bd99d92aba84593f29b67a25c777085c8dfd4bb31e3259f641462a86333cba2df004d85a84b2046e206cb3e489745847195c22b8d797bede4f254bb9a30899592ce0c2c88ad484e2e5a02fb34f35e87c127811bd3a6729d2db63939295d646b6288b266d4544adbf5fd99b2cd107c2be7b26ae8ac7411da55edbffbd6cfe6aa8ec8c65b9cdbb73903c370fd30c8d43c6ea56a23fe34c64e811356c0fa94200fbe87acab5741524d5f52f6c3838527ab8b1fd561ef8650c7422bd76abce6e89d514a0d41a896333d581f800a49dbf28547725ff40fbd4e008f4f6239ee79921c581e1313f738df699e32386ecd022f86313efa3e9137ed640bb9bff10ba00c1906e10750268619295d69234c20b0a7b9d4d57149b4d4726578eea5b1ee47211b284d63ae59ed38f298a1f78f972a03d30c75bb68072aa55aab0f44f225b24e96986fe08a417a3a44c7dad6db32568549e3479cb51bc407cad10258c65ebc8bdb1dfba2c9cea5edd0e1316fd1c60be710b698ab3cc4e7b9a2d13101d13ef64e93b0831e2f8f6d913be64915c038a2db80ff29657d04ab43df5d0c83027da13b4777e5b11ca1c0e6f6e79c04e4a03c065cd89203ea0f37103b5d6ad494a94f0472fde7729c53dd752d652343eb08ba3d1d33c2bf2154d6e591d1bd5d7082e45b0dc9876fec66943e8d5d14b50884d0bdeb2b2206c1fc3c406ddc06705ba97a51888017251c7b4f90d124875f2e9a4387108d9d452e4b61d05494e887a273cf78fb5f5f685c1699076db7a8923cd26c4aa9a1bd74534a23ccadf2601701d67540da8ddd594b3381898eefaece31e288c15661f2c535ecdcb40ac1a28956f7d1e06d91582d72f712c0b9c7b35febaf9586a35e0702d055fdf0edcc51beb3ee4108b796a5c96291df0e50eee97efb2b7375413285ab1d2d47c15be17f8df716eefefc35cc21c97949f45eb5ba8728728eeb6dc3aff3fc71975e768cf711507a07177ab689ff04e3ab664ee94a596a025711bb1467082a20a435293e0035ed45e2cb761ccba69ad756296f4ee36bd193fae7f94eba36df31b42283afaefb1096183fdb3ad08f03928e44a75702c537718636e26410b9922bf7578f236b7bff3cf6799e5e7e366ee1ce64d40f930bafaf03ed3534b35aac0e73555767458a176ed885fe061dd133dd646d86cd3b7f5848bddad892814e8cb630860ff67ee269aac6aa43c916117779f7bd3cb131fdfa66383b0c975695fc1594687eab70ed4a565739fcf653cabe44ca1a5ca4e94a1f506d4eb3eba365551a30c7f985ce136418565165d9c07aa4523c4e76c98de8eb8f8371a6dafa72f6fa7bf1b92e9dcc5dfe125496d1ece309474db46cce6b08a4ba267cc15db3c02d1c2a20fdb8a44efc08ba27730ce92cb6e1f18eb0beb5e52c68d864b5453a4895d98ea86249fe2d1499178d6a5b84f0e2205c8931db1267dde8f3c72cf67064139a0ac4d7635068e27ac4002b90d5265d906f2569f635c576e78d525673f02754c09c4d7e595402d1550661651f58eb638b15d409e9f74a2b38eca4b66d0b0a654cb6d8693462a521e15ebed99f2805072cfe49194b1bf9945d12f5f1c0e9c4e2c818c18f9be9e93b55f7aad466e1172d9eb1c35a53b361efe64206ca18ed7dc18026144f121ec449e8a102b9a8877e5837663709a764231aca2d335534e1335ead0fd16ec67db92aa0be8b09b96ba8694c1e4dd28e261befa50ce15e9a8943da9a39c1af14f1245fd309aefcca68f861c4f5209abee9d40d77323a38bb09c1b576b22db3ad2a8c96324e708ded49da0e4d885047ee16267186f190682ef9800b6a5ff7d9b97eedc2f965f48087dd5a7f207b668f2d66242d0e040ec0d8100716b86f87afccb5e8259a6dc523648c3723a926233dfe1ef623b8d031e367b4e1e65b28e994cb09beabd36a2c3de04a6ea1bf689fb547ec466b79732360f550f9ebdf296b9c552a9b0fb191fab7488e7976851c1e12b75313f3d01b13e7dfd50fd7ebb90e9b9a523db5fc31439378e1c2ba8c372dd5e546296d0c74eadae2b803675a8620ee21c27eb4f5a30300d37351118daf4aa3b6916130288aed072bcd10b6e9ed6c06a250694ca9680e43fd0556c963b2642a61faa74f6928c696404ddc081102cfed4fd24fad887fa85700ccba225871b1442221e742025390e0ec3fdb4cf447dfb810f29b0abb2c89a617626991d3e178c00df9e7f3f623972b740599b80882879c07c3ce3233a0579856df4970bd98a546013c9648762d10c435f792c68a5c438254c09dfa831bf9c54353a3a0f6b43d606c0b1266903b9717c1e926456027c3fd1c3aafafee6480af7df22095deb3663185ef9357ce02b454c5647ec7f749f0e4de03f0415f719fbcf5ac295d6e0c657912887cb98043cb98ddb50bafee309c16cc4d6a6028ff3380b3ce651795df1938fbf626ac5124cd46b4fe014f23f8cfcbf7ba222a68f8e84a909a714a9e7f8f5171f69ea0a3c90cc3964b621fbde3eae2ee6a1c5db940d4bcb10360aae8b00ca2ec2aecd9140b6d7297475f12b9bf504bb017ef8f2f752fce4239d083e365a5959f40db4e80bfff76efd927f48e9023beddfd1017a3c4062fa0d71287b243f9f9f8625277eb12c29320b54864ad4c2e442a340797707948b8844ae76f62b397af0d222d5f37568eb2e1a9db27853b45b22c88ea79c6e4b422d701f925eec204afc35367eae7acf5c0d0a50fe60edcebf3f6d251af0bff34fc402586f575dc961b65f038c8fe2249de0e6340f5032260b38ef1b58125fc384b679cfcae16c8e9c8a782eae646d21a1d3074133cdb94b187d8ce901e8b35e71ac55e931245d8b2d0b9c0c48461b4997cdebe86e79fcc7633138259ba7af042153860bee5a108a0a7109c09920d5e7adc1b69d9d532a2cd49bd7e9f20dabe95641435c4bab12fbdeab1b90e47842135066a5f3a784980ee69c1382860a01ece77e3a12629d39cf7e0a5456f023719d94fba01d0aacb117473fefc1fb98ea7d206ea13f3247a11bc45ca39130bd126325d9a49fbdc6808a2eeb2e188c04c46211a3a2f29db2f3103f318fc00e47a7595383679cc2823f56665f708ea55e5c11a6af816a31e87cac1582a5a09fd3f17861bfacd10d018a317cbf6258db4c87bc10d5597a701cd62e7c72b858ee0af49d9c53aaee3890ca889e5f839340112f6d97d38f7ab7dcf9c9fcb8a641e0198053f1fd5ebb4a8dc294ca0e1585384bafdecfd51a332c79beb9f8a0877f120c185d0ae2c689030bcd575ae8e892496e6330ff7de374bf6c2c457091686311ae704ae2443a71f7170f12ba18489448a025b7544e940a4af773e444de90adb40845d1016e3a4b11fed6eea0d5bdc799ca6851150110bfefeeb3e73e806a3764279e78ab0dab30694ad77c180877132bfdb425c07418f0f8abf1ceaf8205d91cd749fffcbe1cceb3ba36643680c962b0a540cf70c61db8734edee067d8f7343e12881c2d504ea9b541d9305120a08952fbc6677cba0678a3c00e504d069c9839c1b2c4576789aa18b099b2a9f010679b9954f7a446b5a00b3e7ade1502cd6a9049855c4d7dc9965b146c7853592f6a278c542236390ad4b7e3951cd3335d6674d240411becac25404e990665913539342c34dfde657b3cca117c4f418496a94a2749492590f3b4551b30029290f81d03bed0bd559cf35cb9207502c9669d52c44fc0e3c5e090eeb39fec0595e2bc63eb60cb48c598843a348f7a651401814631febf6abb6c3a6d79bcd5a9a965087c674a9a30be1d4d1349440a4c1a7b091678edb589c0128b41f12db62d9f4bae2b5215a58d03a588f24b333f303c6c792c16bb3ecb51cdb3a5eb9f422df762c444ec1152ce0e23c60340cd199bfd7b505ae95a3a1f909b5f59a377d1d22907325350a02aa375a11b667ba9fa3ee2e1966e613578773690c26dc463cd9d6122ed40ad64d37e4c193679231c2ff057070b30743583ac95cbd15f2a980ca86c16d0306cb8a3709cdf073aaf17d6e899ac52d82201fa3000c7cbb088246c00d7cd4861f7be1228fb8fbf61770b30dbbb02cd83af008e5adb0aab5839ac990df1fc582e38cb4e49731b68cfb2c98f9f5d76939ccf8a2bf7c81c19d2248d91c66d8e018cb0ffed65852f1080041283240446ba587c5e9cebf7aef5166ec9d0c8719b08da2e108106a82beb4577e889e118ec71c1186f92e416dc515402d2d1da49c581b013bd9b4a36938003daeee79f2500e62193ae3269a1549f826226762414090f342f00ec46ebc0782ca550690ffd6d956b041a92d88a7329426482d55774db98a30294798cfaa58d51a63f25fca11b5cf3f571aee459d081c2b3a35c163cce289da317a1937fe3c8e4efb91e0b096efb2c683ba0d800018dc7bada2ef09373e2e10ef672bea536e54dc6a839e54044482f8ddd90354070ccbc77dd30236833a5ee2f880838ccfbe156b196318d33e704521c2a7adb0ce42aa7de4c00056ff456878c26b57ba1896b822da36ec73307bc1f83f306e2d3b1e67bae463c5523e4f934ca80563e52167673603e33b3ebc82cf15e4fe32fc0cf55f10bccebd06671455c39bd8324f44116cd423c1a745cf3c719d052ce9c7f685709f8924181dbbbad281f2d32bcf6ae967d39618bd744fce2f64a4d7794fb18cca31b4536c1afce3d808bb4aa968f447be6828abb7cfe1d20e16c8d2acc839e269fd053662098f7891040e3178e203273057e56c83586230961d8a26fe34711fc15574b0a209374f603bf46b5cb9f7a1a91e2bcd65508aadbf3d8d2c1988daf8e185e3450b8109c8533e5c6fa7a04652e0a15435446a9368d39d40eb6372e8dd2d0e5c5dbe3a2bf4a4908488fc31b9e12f600283628bf1027c7c0e63c739be3ad0e9d0b0965f530daaf38b1fdfb83522b05cc625f836d58ab647cc57573b18dd4a0d0775d1a4ff278a44f1381dc87c22ab5bc2786ba7e5848c0fa57af1e29d6da428ac8ff9e2a3fa8b2f12a018aa75954bd16c4d959f17f8daf4b2f63443b1703d1b81fe148f9e7aaa23c6da2cd232821903721c09f2d6526e357e9a68579d4c8b0e2060e9e437466fe5cd705331caa265332033d08b2fc710dd99d76cf4bf400074c51a00acaaec6dcb00c741f55061e36ef8d587af68a8c8c5326ea4ce10704bd501693a4911f07e1f91421698bd435899fd05d8fcfdefa1edd53b1040c122508e1cbd6af732d09d90a3d33ec0e4d7783487a4f4529cc158b48ad8bf44f6d6d1bb57013223caba8e5d2db044399546fb39e4e92dd2e00bfb5c943ef0519ed4b49c777f6d64c625c4abe1d286411806c5dbfef4e68606faf43c824fe2ebcf3891e3c3ffca6eb73de512ca0bcc912a73aa85bc8d63ca161156a7eb8a8bc749f447e2b6facdcf5a249dc203cf7c899ea3b3d63d490ebde7bd6f7aa8289931a9a2a655ce255124513a85e62167051ca60a7d455388e390968dacb6799ec3d0cc60c2d78a7559adb40de0a1789968a69d481a6fe6fdf605e89c111abd6ca51b5ba545bfc5446a7d6af04c536cbd798f2dd710448c0f59b24432155db7bcdddd5024e7cffa37159e787e017dbbe1c167485eb1df3440d04c0c0f221b8b5404c2f4b089ea4a46c8a1124565d179585214e03ac654e5fb6f05865187c640f47fd15b913494ba08614d2f587fe61fd0cc496a9b006370b21fbea8f58394142af67ca063e55bc7fad3793b2ab7f612ed69b921d9e8c6fa4908e0f1d2bee72e93086fa25aff1192e4a19c1f8dc671240f89debba7c8a42b933d875ef7dcbe659f56befd7426fceb587357bc4b704c221088f654ccf7d03b1547a9cfafc0752a19891df6573cd55123c054393ba92361c8ab6d372dd125cfa9d61264a7b75c1f850ea49c7070dffef2ac040810a1098f99ded1e1b73ef0ccd9384e937e0d8783f1a23bdeecb4ec3f491e67923a678c04511d222278af754d5c9abba5cb32f2ad869b377e14719cc1309a2321dd5f0967889cb75d17dd217f0b439092d8b2fd2495b6b8f3c8462792d9279cff9ad46fdd08f9fd1200a922981ea26ec1d23d7ce3cfc76a5aa451e2cf0d9e013a00d914fea99deeaf497214713ddd44c470a6ac871575b02babdd53fd9b1dcc08ff98dd7498b4bb2b90920587e12525f78f368a126813aff88575af88a10b4335d768e2caaf528b7bb4682c9c14832cf31b4e30f87eb6c40ab9e679135f39594790b9c50942d9c9b4506306d5f9e743c3fc4b641db1bf794518e7b88d235f22fdceed359a0993f2ace28046a1c103c7bfe71b81f167fcce13aa08f76ab2f2f70343e37db93ba2cf34af9f4613de1ff49e5ba404d17354da5812d372d43e504436a334264fdabce01daf649da34ec2a3268fab4a941d1e474ab0d1bea36e269612f02a539c47c6011ab13a8cb6087f05c3747c48d4853337c2ba635112c4bf83f7d45b63a8506f37de133f3637a37c1f34ec9ad2d3c193c1095530039cf0914e5b131311fd72138495e88839f3ddeaa0bc0696aec3a2710630d8ba1321b6cb84d3432fb423a5471b11b805168fe7760cb0e84459ca0432baef95e0e00eb617d46b92f98418ea1cae0af4e514e4413a0c6ba83fb79ab84198035d2619787aaac14887547f0016e205d6242cf06c7223213c9f1ce457b8b5468ad87a91b6fa97f11dfa7897d20141651d62a4ee215fa062d4f77062f538bcd9f5699033813d04b50b9a0a34e4588248dd0734c5eb13f9a61a5842f086dddb379aea082e026cc278be1dd8ee56884d16609469e85d472f828adcc247af8d47caef34cf1a0515be5cb2c6332ff4420ddb02091adb1f53c0c1a74458bb79e1037ccfc6c62feb5c98df250ebb9f71a82b88ca952b74e3918b9e98e70e9450a97c25a2160554a6b5358f2f4965c63a93de8dcf041bb28d9765286454254ce52a092ddf54506685bbb2be9e730d0e17543188014e74d52e8cc9ff15b2797a42dacc340ce428720c507e1432d77017915fdc36bebc58c2b9399d0f23f8b0d005a081853aa672b76693c4e3b85d42f3d8dec1a9ea175b1612b8cefbff95faa8423c5f20c9f9bdbbfc3e853f56501d7b16f84e1140afbb7b1a565eb68c402f50383a422fea4aac5ff9153dc41778969a10325e8de280d2c2391202930215750fd015e89bd79fdfd54e9387204764759426bd36b8285d5ea06676bae39d99a359451a992af43ac53640243d73b2e9e8e7a5435c3f43536966764eda4f59c5c1bbd3c61b8d9d505bfe0ab6c760186ae09dde713610e0107105ea584989b39280b4cadaa2e3cbe1b6fe972ee0e1c326a59465b8a04e601dc41c94f1d9ed561830287074237c198ac692c401657b023993b742785d9d0bad116196d7c948af8f12d69841bcddb86b5b1fa8ae0f6bed8fdfdc7ab3eb125e28f15797d2bf488db2627b5fa42c8a8fcb73b0b0aa32906e9e10bf826e41f897995f4dbb8145455116700ff0fe81358285259c120cc26aa2180ea55addd66e4cebb1e6768d80718b06bbf8b70a6b01f4d1d87ca78bfee845647f0de210e70721f332b437281504e10d441d92c9eca88b6eed346a95ace90bf2041da01323b0576041a51efe9dd3f676e2e61bcaef595e272c1400ad8951aeb47643d0caf18548f806cd3e4728e7dbda0b8b2c03419fb054d6dacc2db51670f29de5f459ba08ede764f93d46e0d659b950ae22342a375b435d2f75b8c74e9db66fd64c82cb09a0803dc5a96610951f66a52246a9e5f1963bb988c8b0c17ad825563e0df4dab0916774b17d27812f6c8d29bf525656f48c9e1aa9df5d6cc0de9598515ebe130c8ed2838debbdde7f2897ec5af5dd68fe91182d5bb51e1b04683fe8dfeb75c5806508175af83cab9e81bd0cc7c6f0f82c3091422182c1e9ddab506e2a0ce0f9b113486ce2802f229eb90225d2972238f3dc874349be5eaf8e83e6b2d2d63920ae0d0f2ccff9749860879469456f8e22a690aad7517773db24e3e39836a9fa6a5e7063078a40c9b8138c9046e9ebc7e3d2cbf6708752d25b155607d5c595d8ba8ce68f5838a54108460025ae0097f1df5a96070225d94534b5322967ba7902848029e67efed2698679b9281e8949e42019269d8090d5a85f78a1574a4e8969afdc62ed63a6e79efe8a6209f8a01132a6876925425ded4de1e886379d1559883572121114b0809f4586d79a208e4f394859b188602a8da4d74036b255c6ba84329907ed33b289b6273264768466b9b125d9f7f247ba1571eebec0f078f96d4dc9d96ce74a6498a90d44cc3e31ad3f560db93a328043fbfd74b3485d81b9c96761c82544031013b2f0df870271b52e65f2848e178fc92ea4d8f2c34c807b91c232163914018639c8679965c1ff1ed39a93208c496c5f14721ee8b365c6596ce592dfe4d1d5a62ba8b7b1cd270a45305f327701ef351f7d405f4d22abd1caa7e9415ad5f172a198fbdc53d77d4e814da45ac0ce73ee8882a539b60ed4032491ab76b79d4c500f358ae8ec43ef5c8ad6563f1ee5c6dbc7fca1a3b610768913af84b6dbb5926174faf73a8fbe6a3c1ddd056f8d747c12b91f98d3d46b21b8a933e63b386865a5232f484d574f0b8bc728725988a69dc8a0f75bcbeddc211757a1394437b39c1c268906992aa51e8be743670b005a84ca2b37f3b4559319a7af98c30be56ef21576a476ec5139081ce637e526bd426adc30b84826a88ed80eac47a4d3039c39b7a3e6972f4c32047684582a113513c819285989f64bd197b70397edcc7440d067db1d9eb0c84749ad15c71708997617e2f4895c15265c1c9edd584de8b2617f54c7d4b5b1a1202aff56af9398e0340ff159af3b0a341bbb5b8d8c5a600595ec3164b5951aa06c13dba37da39862dcae6d1b53bbaf1bd51bd56483feecbd0e0dd62fe6f7fa9bb8a4333335d23742cd45374edc9d2593ef1bda53a2c087fac1654f80e4ecd7ca1cbd3e8f0b6cfce3c6d7438d92846cc09307ed26250d93ea7e1923eabd3ecc80ff690d30a6733b50a2973b8a309bfc1c1682c9497307a4b5d8b669c42573398f2291bb3060a54efd0932bc5e59f37ee871ffca22b6f14d1c9d2eb596e35ece5180b1b0e6a378c897203a04060407c1891185fbe814472c9b0b4656be897730c32022290a908b1eada64a7423cd1be3d4996a98e0cdddffb0902c691ca524e9811741819d98f24483f9af6b8daad6829cc30399afeed93f16911ef78ebde899701381061a98ae8959b33242743ebb03522d3962c12fffed88e21bace3682c0700f4c06cc02dabf0518c9956fe6e1893a1d96a0f510155914bd8d515c869c149c300b1349a7505a1ab177ef186288852437ceab2230c85a1ad1d2eae124bc7cae96e58ae49da6aa386080a3ac4d39117d8f04e1d6d839616398b4d01b38e6819a325ede009484f7795d31c8e331694c7377fa2efd2ff07f008ac53fe539edea00ece61eaa735088f3ce478596084271eddac935b17e7489146c07bd7240ea6006735d00c532a2bb6802ce740991971a27817a1d4bb221ecd4fa29983cec1aadb3f2970c68c16201e26b040ff62dff48a45cd71de413cc0ac0c0722301b78b353aa01988bbb3743b8d74ba98523c970fd847010c75c4618a981849101e451908a2debb1500d8a6355f7b85ce4994f38cba7f3fb6bb6946252339f3bef2cb1ca2043d5d0ebaddc7cbf82c95849ae1734c73f1fe339298c98c8711681e3249f2cacb82e9517c56a2d56ac76cc27611120d8fe34b70a184ee84c3a8ec428716b5df3ea4ea4ff5323b297a845548ba4e7dff6f5714e410507d6399193220ff1951cf299ac1ee4bf843368a0ed89a2797d292343deb94aa37414b6e3e9957c084fdf45d8f621e60b330c96c6f940904b1e26ab07704b45961a854ad0e8ae82fb5312927cf6a67eba1d6dc9f7d669dce2507de945dc135122475e43f71978a6bcdff4b652a1db3d75e254c9c55a8ca30cde9aa68e66d2b0b4f8f86b6ab81229c4ed35afba6bbb8af9eaceb15a27c241523a6135f9e07a329d2c0d6fc21ad582e3cacece9683d5fa67fd00f8b3e3c1d95c530b6fe6731cfbb13a6bc5aa30a3a7927f951f6b6beca8706d76911ee2e68296dbfe18a40bd6e01726708bd8ec933c03304ab98d9541dff575d225525126ff86e9f63778851d83f99608255957aea1e78dc6d9458d3a6e403e8aadb31bffe406f4f4d87159a0f4a8eb2cb6d37c0caf74cc7affd7e025399138e096db77af668d6e77846d9743236b53b9e7c624f14d7e86706bcb1b1320875aabaa6444e04c068d43704e1f3395f7b0da8ee1eae0c700459d1694f1cd18187eee061a681d1eb3144115ac3696b13d06b9e70a47336aa17fd85d95dc378e01b337552365f14d106989bd9841ce63e0e86e90294b5c47c002c99d8d3324c901069f691f0fc199039dd335da07a9255f985b19da5837f8ec358aff0fd949eaa098d840f4df906a528c69760cb75befbfe703d08729a82bb7447b6cfcf8c59c6510b26daf42ee3a7772ca486bc6156cbaf38e9727f587600bc90cfcd105ac46bfbbfd899c363845c048b5479c95293252c5bbb928d0bf6dc61436c175135928e6089b01c1c7b3740fa4acf7e856bfa0961d9a21914997a871915c88a5a432a127bf41a139c5e418df67da55aeb90f645f431386ce7dd295b5207d496650235b9b18208fd992748cc20356e5ec30b34d9d2984287bc311bd2ca695e596486f0104c4dd899169dd1bce6215adc996c104b6016d51db18da729b0b293497935fdc49cdc934a52f6fb8c7d90cda79ce6ca26fd87016fadf8ac8dfb02dcd94fc48b2c02eb78ed48c3ad570a01111ad1e30d682f66b04b000a8b990e73df380ac7e15d7fc1b4a199306ecaf8a236ccf20c8ee347708eeadec32b2b52ab800201df78e62a6fd050b783165d6d03bca67061b8ebaf6ec7e247d7c06c5880db936bb5783dd8978054692e14140796c6aab3946cdf56d955453b5c13e52a1ed18409094d7c8b64ddb78421c567843c62dd474059f5b7e6c3e2d5394c70aea85ab3f62c4577c019adddd2434f41a1b4ca17d033ddb642b0cf37ccd0fef88bd7c453e68666e3cb1eacc75429175a386df435bc3eea7df381fa4193c06a3152bc74ed2d64315a199baaa12f8fb519f5072ca91e82d6051b1c0c43492b34da0df121f2ac3603322bcfa15e3e53f734de583e651acb8bc614dfe51335e3b39f207c9407b43793e9ba45eec97fdad839cd790e99c95fd8de7f3464fa142ab6c53142ef00ddf894281967516d5b8f829db658a5018485593067cccd24735945bcb7d41ab0239cc727e5a6f3e448f4e5cd4b7a2e6e5bed812fae08a1d033286ec434056a1cfc6c6cee7c4f867c1685117853c5bfb91407875db3480913e1b33d03c6c5d189135164661d6fbcd6f4ba9a4b2217b8c801ee5c9ab8d24ea54a7b39b5c7a074441fcf080e22daf8b4f660d900ed36175dc297352b433221e447e9bcd2eb5862e6ff50411a57a1845755004a6d84c16a8bb79c67d3022eb9501dae54d1491647720978e9dca9b122c439675ca126d3ddc163a0d314db8f23c1efff594480bc3a810ece130e234cc1c76a0f1c06ebe224e4d1160814a944caa4b29a1f214f69a18a60b779d7452292600ed2ef63075b3a2b516d7cb0499941892b26234ad83ad2e380e2d1605b0db7ba8511cf5950ab19d3def9c4857a6beba82911278a30e277320435a5a6485da259649b4b765d3b12204c04d03c33ee74b84ac32dd578100f9f25fbb6758dbca8ae63c1c8a404cded3c030ba59124e7823f79f202488b5ce1ae9fa863796a0471a9cad0bf97bf01a16e5cec62f8309d58d510cac17af30620c874a430b961a570d8ce861aefe6638f8a3782e3b64e6f24e888ce0688e1375ef8b2cd804dab10d3f9385f44ff86684c80329e730d31a326965d181bdb87cfff584af6ed88731817e06ad23740de557ca4ac3839bd112450d261f5a57e07b2753424e4e117090275b84e90acfa5f34f512dd7496e39afedb3db14962b945b0d8bd9548688b4b450c4a97a314b906da5b3705de8ae143eb7151b7632e5f04771a0b7c171e63e4e84b7e18b42cb038600258856ad4066bc205a83352facc7985bfca913037c98fa6f9f05c781df409865f08e0a5272a7ab3718623be2b8bdee3ab7cbb8dad6d4f8e26c184f19465916586ab6d4df40bad686a738b5089f6a5c8127de8711b82c0cd6ffd8f4158e35332c7431bb92a4b92dc75a024f11f632d5d40feb58a2095cd0e53683834b9dd9221c880042c4413c3996ba566700eede9d5bada86393e355f8515fc2e78b888a31e13c66a91c14252c9fb9321642f8ab9617386545ee6c7774e768a17e81503d0800df0f622a4331cc5c41d148ab9d17c326beb6beb3efb9bd0d40ad4c4beb4e8d17d50dea7485da2ec9f641da139560cffdaf35c4dc82ffcfc8b10080434abd5bbe7d6c279145422c6a8c4a4fc4ad1b4e10099507312c196508644182d8b47e97af3017f3bf6036f7cc2549ad50db9f376776a2edb7ea799896f4d02aea29745b9521d2384ce02982293684db6d1669edb01ec849ca6e7cd2c8bc674b7a0004396ce1ee72c71355bdbc64233adc089539246c0d37dfde36c2e44af82c0c522fd2693498ae0881c3cc1f0e9428c23f709ee705f2dc3b19cb0bf5ec74cc585e0e019b5b910b69779c732e1cb3dab2f51958c56aa9c4968276b224b2ca0f54f9d3995b4cfbd987e868859fb7f815c0cc81ca72a6d12f873608b0a0a1427376856e023edd09d734c54fdb13f22ffaf8141945f978deb5ff6a2512116e5e42401701092d0a4f083482b06ffcc995d93f9eb8b5e3f5f9a1d04e0b517fa192c5757fb8372e17aeaec789fc015f67e24337cc02377c2d4db3093e0940c8e640affbcad8b8311a943b53b2782ab8c33bf1159ad33682c8ebe5560e50340cb59b743294eafea054bf49e3e9c3874067a961eed4263092e95961472b90ad03d561557927f823817c3123d295b4b0191230cb7a47b4e83bf4e6406c4080b6d9371301458d39aa65d21a3c15667ee960f83834a164948bbf5b8f9642affcc9f7da27f8adf0272986b37934d09a112b7c675d6845bec4c00772d21fb2c27737c7d6a1d886ed8b74b7b0e3b3d1bd1bbb809fa9131d0407a11b3896694b968a30dd887a9e074a24a7a3255611d1dc2d0c78949d387f49e347c73ecaa50780963e09d9c46a7df71665f2ddf9c9ae6d34d813286eb21132be0f5c8b8d9e5441eb3d8624d7fa58c945c82eb1d7c06eb270135881cb4050efc2f35cfca1b062afb6c0c76415c451e0cc7244a180a418584aeb456e89d86fe29569f0c0aa0d1fe797fa1eb10ed869701577342630b3d626ab514b9e72cd450e27bf4bbb128386185aadd13089345ada62d03955d23f197aa490022710ae39e40428272d46f02e9529ea9c93d741716f9132103b028cc01dddc1efe90952636b65c4d7444221af6f506345d2d5f7cdccc281423269ee297df36150130a54744aeda30b9cc366dfe3f0b64411952c0fc3a0363ccb1265e06c57839722d840f1be99d95100355f4554b85e9b1e9b73f125d40c0aa730b6fe13eeb083c61c8d6ca96f2eb9d0677c791d0a34528339604b505aa6a67e7064f4cd7785074656bf0a6044061c82bef9d9c18fb19e2f6f488934fa6680ba00ab5f7c56c97a010460033871a6efe9121e0d6aded2f8de373f0890581c07b293cdc54ab3680873761dd2d8768181de65490007c248b9fbe6ef9b4928f397c9ef3892daacc5a7fb5266126ab3720c80c07971c4c1eacd189c539b4f24ae9d5f54f682f3a905407d6899c9269db2b26a9d4f64f691609b2d69a9b37d0e64642311b70b789bc58d239c9555ce7b8f50999b65e4aa5e89a68ff015ca7f2b61cc6a20e96c4bd7e23ed35ab217b7e32e067311fb8bdc0cb2d01d5d3b1f46bfbe596b1323a0d4aed9cfb3a7198d850d66bed711e5a69d1bb36c087655dcb5c127e497d5d0d4da3d8530663b38798367974d7e59c4962054f2822f008e77e0f3b46ce1572ab98eaa91cea35e885ccd849680a8c384bfa77f029819fc3117ccaf727997aa36f45e19ccc6724f7edae2142867a3ade69b873cc5fb9a9d239e648bf8a6723fb6f770f43ace35e1bee087ca384e5406d9257b0a6d094258c08d51e6027483072f193aa1915c24ee55251e766a81d0076a1926c0293d6a89364c34dac6ebb619204d16f0808e25fbeb8b95a13e20f8fe5786269106ae2d77228a7d23c7834d28a26161d61ddde78b89b2887b9913af3f2475ac73eda1f7fb0f4dcfac0888d518667f994b966323e45252d50b0ebaa8abe6e0690375e880a9b34e3796e65c9eb972dafaa66f4f00bc64cc60283a4ebe928b5b0d210e34780e412da9fa9804fa7def44710e0036536df1d0b820884e550d01ab9d85684e803cf58ac04197cc3f8e1d30b71ebe341ed00845c76c6323f34bca557039b9b09591f8d262386015b32d365d18b5c8346b0db337ad4cd1559a18e969ea8f0cdaa85e011d1225cea8243b01c521f7bca6729d4f39c308e686dfbd5fd4204023cf9aa9d3fef67d566c2368704700de3704d57b81d9bb05dcff79f42e9be72dfe1b90b726e4f80231d31130d608c8787358237a36911ec2e41dcd23a4ef124d219f70027fca7f19e09ce22d84dc07a5aeba2ee1852170cf07f26e1ef5a6eacea9e303fd0d07dd82fba8e9c3dcdd7613b3ef942516608a52c9d1d4af1c5384e350f8a73be9828a31faab3250d1045d3a5bf90e79461ec76a2cc490892199b488788a16ab61440d395bf073e309729ce7ee33b11258c7aeb5a544a98ad0bb7de2efa688a02521ec2ea1a728c8920e522f816abb7232c6cf9bc37acf23656217408a3425bf8aa104adb5ab462093ca330b468c42e75b1aca9423213f5583f61ee660ed71b7d8b88cbd1c94d33038ea64c4f64ab8b7941e954036de52382cf91b025b48a1351bd4f693c61089b7799031df86b52dd60d3f5ec0a9215ee2b4a86733249ef1cce4c8ae208bfce7d2416f7faf88a233b0df3c0a239e4a51fcbe0778c46a426555373f0f2d939a00c87ee7223285b26b679734715713a2694a244983646140d46b7f97dede2533e1d896ff58678821d139c422c070a2a03fe23d7f6577c39f1ef5b3c023bbe7abab3b75022f4e2c5c43f9a9b61f6fb2d9266035a76d0d3a943ec1d9797dab81e9723db60a6133ed32ea0b958d7f5b6d2f358d63e3b20b2a5f6bb9a5e123b1b6a5709c490b237bd044ac890bc7bc0d6454fc8b3623d94ff40922b68faad3a2095317cfdb2e51038d1d6958c0c5206cdc1a1b162a3200789aa949f7e2c89027872012b1dad49db1faa9c066c75d1c4bc25d44e4d4367070ca003f6f0435faeae6e05e413e0828ca80b3a4d248cf0713840876e45fce206196dee60395f1e2d67604dc862d94f2a0024c0177de1043bbb6bb36317162c7ba9252f4935085164728e3027511f76cc16bc7a89b4cd2f0d1d4cc5ee4c4e3093415da28855977173427b2c24161aa2f1e9e109b22ffe56f002e34b161f369126f12df6021a0ae370f385e15aac6f2611f3c12ad7811c7b7b1ee2038d41243826c2fde1e5b5895859ff92c38906dfa4b47709085334127eed2f458767a769a220a1acb9b67f36d2a856a5e585e3db0a9582a27001cb062c1e8c5cc378816d0ad6e2db4c72c3d6f306303bfe33f747f9dbdf37f2b1c4b511c64197e0e754365d067f098888d240b66413f27ac2ab0c165ca927ea8052645e7c106f4adfc70455b9af45248c1b0dec806b1b688c78de145c43839c57774cd53dfa5043de600ddd5d4ba568201b882bd713588f68031c968928c4db39a9e1078a332cdb67acc384462554d8ef900db293a2dd170951517afc66c20f2e27220cd4208755aadbe945d4824efa2adc3dff8bd7c515f68799e11d96a96abdb29ac0ee094f8ccfa582d6ba6eba45efc7f4911d55c38f47a450f745325c3eb96fa5d35a08d0e50552ffb436653bfe06c353d2e89c1975f1c814420b185d5eb26a17aa16b797e755b81c218bb6758af86da435ba9c9f64482caba29447df0f21ab1acce6c70caf23dfabcffb3fd8ad4926e8d996430260b422d9c1367860c4d66afb85c830fc57192043f2ceb0a1c1a6b9082e0ebfc08ee6173aac670738ee8c8270e071acf0dbed1b51db044cba70e03e0c85c183a96b8fc3b2c47a56c89a0bd0e3fcb36b71f8cbb8d695dab40662a94d002addb263dc73c63e13542d4c19fa9984541524029c66550d4e4aa63983b0056985b7e6f188ce2e4a7e7441b0dbc4003d9e2c4d2d4c250d66a0003dd87d8d1e0cd73cb546974f2a85e965e39cc6eb3f29c0b7ef9931a529af8f04c26d8e33eb45a1baef090a9171bbe68ed63a085cb07910b00a25607e81587172a424a27e0376a741d82beb365f8d8c5f0abcb980449f863e827fb037f566564a9acf0d3f409d35d9f6a49835312066a4f3dd6e622401736daec7ff621c2fb85ae5f29bfd45824f2683069d7b2201d920c44d9628e2c9003ea7cc8f8c0b8ba1592771b1a7be2302bebfc647c7c4058433ea0e1ca075c24915bd2fb98cd428b8788e169476b62b8def259103f9bccbf0970c3042cd216d0635cb56dfee919e1496c67bc380565144a261c89d7def925157910c9d740d8510fa138a73eb98d494bf185b1c998331ff139ea1b973e1434c64e004e41671370bc0057e3bac63a61e6117801b7d06cb74661ace9952dc766849e1c836cdc41363a547a157aae1937374af8c88e893b6396b86645f986e2c979a072b0717172bab25afb359374a1c0b52c3472a76b1e0a14d9193280aa2da5fae1413ae0dd0a6aad73a5af615d5b425898ac6af04881b5910182a18aad1f080fb4aeea635f046ad2b305417ffa8fef2969f5659608a20775a43e01bf70152b116cf4a22f2df0da501dbe053db1f481bf399eee88d0d877c0c513f7193c66c4b2ce1a6c42d36476804cddc680d234ea870ca1f710136a0acaabea28b90e4775cf852674daa4529c909525da54b9f57b6e3f44392b79a10365eff72f699935f5104e11510d0cee6b61635e7fcbc41e1c32f53a706eeda689b1a08ec005bdb416afce5cae76244a9e9c3ed20a04a68ad12789c6377d52a84acebc4370ac205672065a4aa01688a06e8179f4e0c262fd93946f3c5582b2fa4776b49b0750319b5df702c839a2f2c67196ee17786eeb8ebf77c6f84adfd88362ad4e1b76ad396352fda33696d7947fe8b277b4caba136d7992b0eec49b57625d6757fc2778c68b8dfb4f8ab945ddb303e15aa0708b4ff3147fea68be14f012f3dab6e854d5a6a96c76c1efe62fce17e21a6e4a41a239040f0eb916ef90cf5bebad4e7ecc639b1ba3f034c1e64a1b58ec41ebe7898040664db268cb23e6386035c72c51fee1f44d2bebfd4a7c12121c3abf7afb8aad16b26418ed7d941f7d3a94db07e69f9d13be04b342060c9387e439ce6d05599025ab71c4a5ac2313c36ca9eb19eab485d925821e159e79429f9da2886e233ef24e4fc5d515c2b4ca3aaf2893548e3fea4ceea10bb716c29e4a2a8c4cd00e9470b4f70a72810f7439c66235e5b818927441846ba5f66ab18af8da81417fec2548477fb0de8d7ab41855fe8be7793b8964ff97ce3ebc28099f2c8f868895e64682f0da2c8d867e15f8899a2f66eb3a61fa59890ca476e1ea03c564e6f5de8e8a2dc18c80280c88bf875b56d993ae5e37b5d46938ccd048f99861dcfa6f392abccc6bdf1d942c040e4f6fcac66cea2de16d09926b3c204779677e7ba12574abe1e85deee3ea1b5527eb6b726d07676d55d4009eda39575682cb1754ea9d25fd5e2b96b4f1ecaaaf162cff178628d3a8c23516ef7c9032a40d80c5c0df18ac4e7fbb1c92679bc935aca59969db12f60d40eb1b27a33d50bf462b25607e9e8643ca06077de8f575e6b438aa165449c218a120975ad62603985ec1e716853bb2a338939c01a909afb90af9cffbf3eb53d9d56d71f8f7b52214997dc57b2a05e28fc033226deeae6954f568b4ecb1424c298faef7c1fa1048de9b4ae00d3fa37348fab656b6c48b25437fef68ce4eabfe63a9f16f1ef240efe5482ea01de0e3666279b977d9ffdd0b9feeead8aede96f8c50f0e25315f00674983a023c01b435069d4d13c332661b235e5ba7812b439372545d218ef0c35cfbda93034f98b40c526ddaebb2fa95b53f88c8b664200b660fc7ce99c2e7516821a179038fd67e49ab083013cee3bc097ad239c8a4d0ecc316f58b5b02301101db711e9f7fcdf6591f00b93f08abe3f488a2e4e8d7dca6540f90ff543d0ab52465236b6914a1911f06d04c8d3a0a5384cad0a40e7f1163273ccc5f2ee78498d9f3ee65614ce19b835392725db8c334f4685b1f4f5ca50b9a08291487341707a5437a69035a4fca7ef32540c66360ccaec411f55581ea43bcb90c7abaf795b2a00091bd64166905391c3740efe97cc1336b6e9df89b5fdc2b26c9297967bf1bccefa2508af7420b6ab38d9a107b1da72856e8248c7a3958a2f6fc355a57e1dc58e79e12fdf7051e68449765b154a0eaa43f61d44db41ba8f83614291921b5cbbda1f0aa296956e296c163b67ea92152ec0e92f4d4c258ad0a1ab6388784c643a76f1dbb2aa78d7cfe8c4617180102cbecbf308fc34b77bfc7e9c4f8ec657d082b3985917cfc48ae437d644039ccaf283f03a5a28073f17ff06781bd6af8b5fa19efab6181492cdf83ad0ea20d121f02e8cc82a59ce2239b48ff51e28cf21e09d64fec40cb57a547197c0cce6a40e62ee05146a26fc0ddf382a92b2fac8d346aca491755916e8e706bfc4d64a6431e9628fcb6fa985865817eabc37b54445c9810f32104701c2e428ced105fb0996a3dc937a26bd068b7c1a0fd0498ffb0f700532309fc18df92eb0ba8be8a3ab1fd349a49df91f7ab6505dde193689ef218da6c24ff64512c3b94fcf78ca4388eaf93cab1b8430817fda0042fb2c522f5072bc68305ea094013f4e5f68b937e695af56cbd8e7f89f834721d21612bb35d09c64e480e5814f1c7e7086d1ec90cf230c5389226fac4ac4c1a8e3ec0d5ef9603703ad7ba4b7434e5a6d33ab339d67e07ecd3cb29b075f8f4b3c6f2da728ecba5968dd8501b2e50a5a088f91d17e6083f459113d8fd80925e56ef3354c6d81252bc54bc3ad161e496043acc51800a382e0ef9d4009ad7506c0bafa36e46f36bb873b4836b89e7e158261af7dd24e23b68a1e536f0d14ebe064d16d814cd1588b4beff63b377cf42ae01012f4e08a295ab033fd517710c447698b04cd43dfd0a29c6ef29a4e943f23c9fef2f16c91ad57569b76008fb590fcf0195b83e84204eaa83c9d2c7c68e3524d3cae859b377076aea8b66f99b672a03127c6a5ecc7e3a9e0266e5375014fe66e6c5af133e5b8386be726b91ca1c36af21ed8dddb8df79a2c2905424d58010f648c5c73b63d215517c97b8ec195fbc5f13d1aa9c12cf2c1e1dc31825ad3e559c6f6ea96ca593a3fb94eaa53a0bb8ab8047ca08305aa66e97af5784f4fb1de10a82009d7c72e74190c4634434a72083546e173ba824f7bd9ed8e82d0e324c85d205ba6594e66b9bb6d5cd1ab5f34cd655a8470da07e0c9f201f5f88709fc78c7ec8267bd0fff986fbb4b5ee99734a72f69c21819346e0dd14cb929094116d0162318db740917b870c0e894ed183a0ca8803f71a312d21bdb947f7b7a435426555797249968c76e8135308396c3a63f62adc62b3dd30693dd0278de2bdb0961b11c8aeefce6153653a2e0cbbea363ff5659b1295f08e270e860ec4a0607741026316ddabe9c0ba030a19ce8542a0692c6ca0dffd63ebe2c57ad6d777f72cb3a386c3a779445aed0b81a791c2ce56da1c128533a622bcf92c3b2654a9ec773b75663ce2e0a94fd86a4649d4c6fd1782ed47738bd46d1b0302d7645b8c2f5809feeef2de2fd1a2db8f69c7a05fadfd8e1176d1ab477b4c22442c2e8668a7d6aa13c7471fac5794499a9503e2f71a2d8d6e8aa831b000bb11218a125400ef580e4182ef30af966e3caf7546cb12fd0462b0c901c9302b585c0bd5016d3e5343dd4de2bc5cbe1271884a72d2e82b8f67f9ed6f6dc5ee8f16c1c1cb45021ef51c77e4688a206d00a3caa68b417f9b46adb579ff445de247db6f2b681fd14dd556cf057779d7594af477bd096a6b5235ce5a2d89e8a15c945a89874e219b699191a0bd4490b5de0fcfeb2eaae237865bc5ce6891a6496c4fe938e5542ce69367ccfbe20c9813b7c4490bddb5f0282e48d1286edf011f3801b7a901c79afd481fbd0485979bcc05dc27ef7bfbd40ec8d4285430e9aee23fe03ac7d7b44b19cfe83a9cb806ad83b0c003dcbbff3c3e9728af2a0b86e78d23d67b15002b6b893016c320a91dbea79ab7f16eab20841e796bccf89d6d0147e1dd835d46b354090683c943a0017348f2ec6e8a836312eff8cfe15c6c15fdf6f859a7ad00a3faf9f1640f6d724b00796e25c2ed6a0bd90e18d27501834dbb93893f8592ad9359feb4c8c5cd20940837b670c295be86ac1c2f2e1efd393926e8e6adcb9d0289b02723cc124346c8f4f01a49bff0eeeba2a88f9079e96f7a941368c7b0f87782e07a146a711789d44ca54f5d26251454d6fe79eb205fbf5e9414c86379e42227c62f49d48121fe56b8821ca40945f05ff37f90c0ea653e1d3ac4415d4600835d20c4e6bcb7c110df1b4c0f808843bc349ca12792a35e17d0251ca0cf59a9618005bddc83d370565a94b90dffe6664f9b3a3da9aa0832834d41c68f7afc936d278ad8bafd8ef9635beba4d510c744090c29dbd61df696ba08a80dbae8520951b4797db01126c81df2b63009376b2f49d4a44ebc4d02a1606b4c73b93918dd7405297eaea0baba33269723427f0424a8f7ced83927bd489d5067982f842300b5bacbbf15b8b1ee752c256f95e5f9174358a6f6114cc260991dee6e0e1dda957ca368ca92c7a2b64f12bb5c36ec8d006772c836cf0fcc88cab6d922c8c2d98580b03a37eae28b41fd8230b45b280f0ccde280a8324e430f7ff6c3820e027949edc4810b7fd173b407f76835e68176df80bad2517d6dc6f03de618f27223568995bc75a10a3839933b23766f822aed38c73e5928b2e38184a27a10fe0bcbf6a8e1c3d4ef63660cc01d2959e749b7aa418800c358224e1f8f530e886ff8d16f5bafd53a47e1c61cea0b630a2697e60122df0972600e69d3126fc809cbec5ec8665f0c9c504aed6eb69e93898c19e324baf83b02c1dda38a1c3872cf5609ec577e3039ac2e4674ea21428d08816a0ae10ac5a19f82c4a9d8504d0786e547bdf9e80c632590a2639955b65347f07ad8547446f58d4497c4d7987b98f28011e0d10dbbf6b37588adc8053d13c6a1773921d312ca887f142ad62a2a941e84ffab15113360a05800e9fc5b8cd01d4543dd013604a81a0e1ff15de31c099d5020318a01d436cf499957bd8badc59cf3e4d28c89fd6e5966ee3cbd09f8dfc39c80351e3845221bec942bb6487196f125f2c0f0dbb517048cf0237106448fe38b2dd1e5d9de552b22fa258811c2344fb79726055d7ef82402978d208222b43c4667bace2688d593d37accfc80dab2c66d8835cbc5ed270c1c49a382f503750ea27f7444092971b3494bf2c19888af030c74c7f86e5536e66b603e5e352e25c9f36191eb19de3d960b17a7b8f02496a6c1f2dc2d604edef995356a6b6d2f9759525d4ff75f3f0908e406ac6c42076b2e4ceacd61e931f91d712e6c2e89f28139f2d4297e186032587e5cfd602f1eb0a6a0004a2f29b7aba8c74e20ed940c10348fe46477ba29487b9967282779bbbd35488c75584da34867fc9de40d2f7209633fd17941e2ea3de6bd868c88fe09bbfcc9680f2a9a9568b88ec985f8089d3cd4bc2a7d403532f076805784f66e09f7846401598204219f7a4c39a643c890d698fe17eb9c9a7426c3321337c6ddbcd94bfb60cfdcff2740099f34750a4284539002ead525d9f2cf39ee9ad1c9a046691a2c556689138af781e73723d05033c64b64938ff8737711c70db487c699ce8d6a132bf691b15a6e3f87abacdb9ab533997f491313e894c4f0182e90ee7813530668587e4fc0c3791a1b30e06fd92852ba6194cc206a2ddc60c8414bf6643883a22f7b1c923a28c59d8aa9d6c5afb90588e4d6f6485ff3e645ec00660c58f28706f6e35bcb3ff2ef86c3cb026f59cd338c930c6205ebe84dc3d2fbecf0045b38a84013cc7d4e8ed97241125793a988e866fa269c4069d1be1448142fc3690e4da6a575feddd085b4b7d299dfa523e64f2a9453a0d69a9811a08e6ea20836fa9506a5b110d185292a9aed19a2b211ae58851c372621017adce62d61d4d06ce51347bef7313b0c940155127442342ad960ae0362614dca86fa67822f4d1faedd116f043993e242b733aa3d6500f47bc6084a5f70f42b61de33e3c6962b70a46d213ce7a120e2129595efa2213688d5a4bf92cac650e22400949b23a1c7051aca80d11cebbf644ac5cb829304f471696d3c602b51d80fa573f2c1d3e39d2b9ec5d9d908dedb22de336b1b0a46203edb9349d3df667e882458550f0186ade166904cf75e086ed72db32ab6862cfc37ec092ad39356c58bfc8e986fa77a0b8358f507504298f778bcda24fa6de19fa07aaea6c47294ce24eb766e590902366ca2b94a81a4673ed541c12cbc8c57e230a87cfb020618ade3f5b4f6e3c3519ce201788f918bc40451a1486daf133a04768517b84bb9dfdffa0659e0f4d6bc5b54b53b00e4acbf9a282f30d062e3a32f4da897ad91c157240096211ca943f1d2464cda996637b5a36d946281438046ed9b11ebd25b9cf3fa4bfa236e4f5fba6c91aa442a901711d83affbb0523c819646aa5da5406f500acc2665150f991f5ecd294d3d630c3252605c620f3d88f4fa15a827c2411500ba1c21027de8526708a4202233384e5531278380a57bc6691b03b0a8f012798433f12bd204b36039c5b36de056409366aea0a02d8eca4540c33e37213140fe9400bc54acc456896140e07e6271fe355f282cfb8c4d1820f7ec0d00db06826297429a7d74f52ba2c28961ee898be57fa83134e8bc424b9083bf9f315c0118c66ace3be5651c5866bd949dcc24257fb5b161e840aae495674634c5ea7589e62e935f44aa86bb894576591d2f78c7d77d6d4234f581334b02724add0e5b5bc820df2873f250f9ca2c5d4cb255336c56b4e90de6235e762d42d65066c57288901830c283d263e8a721392ce65d2eb8785c0b7a61e6a1bf29ce6756e93eabfa16f2e6a4ffb6725a526fa3ea88fb0f4b222701a9b0a8fbfc85469a76fb4d1a9af20afbe1caa293556db8303df1b555e2064467eb32189b47a22534d5ca66027981dd94e65c6963236f0519c66b54bdfb675d012dc1a8d18e024dccf579ba8a46ed3f095560bde44b910a0940866a285dad2c5e5a53975916f99ac2e4dc617e2cdb5aa61c4b650a348cb251b8205cb7a3868b1a92c4d321e45876ee74f29dec89fd04a1b225647ef697a4e21cb6541c634abd4ed2938e7077dc217ffe82ac9fcdb91813c5a609ffe7604cacc4e17747b726aa3946bed01b5bde59f60bf30060965d9cc38c4dc8587f8e3462e7bd296f9193e790a1efae47ddfdf6fdd77845fad9183324804fc14e50139cb51d783ca2c4e530f69e9953569ef1138f8e7ce30b931061aed94a9101aae4ac82c4b707a4d399f349e532dd3fe131c7d34d8119ebd33e205e767b0b62b9f20ca05a648d3cd1cb6a07f0c1e1937bc0cbcfba88bc2917cab7ba74e2adc93712d9e5f4fcb3aad09c4e41a8a0300424d98d182bf750577dbd03abfa603a2a3095e9d1f25d7a3dcf6e6e3f86c23ac4f508702d330f44fc5cf6dcbe217aaf8b7d91aa33ba2a46d14c1b24cc3884535c8dfae3a3d5931a9443e1878267d8b5b752171209978fcedbb460a8440cd7309757e070458267b8c1ae61155b98d4b5d41a0549982bb2bd149c54c9b141188dec7727d8d755cf55dfb38b8fe3adb062f085e73a1c16d66f50d617f62f621c41abc19ec23049068170e9a5c1d687779c2abfc834fa957262676070b9377c1f6314971f0fe986d1cb8ae059fcf3c0262d6e39e2c75b41549a9dd93e17f7a3f56dac41a56d9926ffa53d0512d93d4bf47312d825c458ddd206936012b034c8d93ce155bf53058b7324b73e8040ddf834709618336d9b8cec69b0d5ea88fb0d6e15c933dda80594dc9e3e8b4a9a101b19e0113cff50074b449a6eeee907e458e984a3e4ba7ed415542d9369d7a8b63ff228d292eaccc21c33260573152538bad52f7ce146a9d752c528bad3aca554ba3e80b280aecca8c89dd6c52befad5048bb97172d70aa12d6956f19b12cc273a04601f9d8bff822f3198151213c9f88668cfd28d1ba2912ffd5bb07a0401d80241d8993281c17bbe0f42f403660e67b85521b01adb8ac596a04c54c3e859017a033b550680972cf00d37c5943bd2738cd565f5c2056c884062f95aad356a5afa6698ef5c2c7a761ca8ded9a82d8533798fdeb8ae4943ab5e4b7ec14bee798abc79de7976bf242658ee3fe52248f28e6bcb25a5950f6b19389e4dbe7107d3e0b967d895058fd2c6cc80f5db1db2a692d8423e7ec8436f18bbfb74e5036e8333cbac1cbafc14bdc80d2631494fb9233e6df30f7802a58c68e92bb596d8bab39e290cd5dff48b126fd80e51ee56d57f3c0795de292672eb943964e20d64083e5ae326aeb517ed83d173b33733a8e0cbd73a6fcfc1f2033450d9f3e6b5d06f64905a55ca187ccb7b134b240845ff332d638c21fd3c525e4386c621de426e28d6623d8b15c340c1ab40a0629765aeb92951780a01a05be47e758508326c8c4a129a622ca0a5fae786103cda1982344bb5a753404dfe3a932e16fe1964b02980f19918e0153b3b51cdd360a50879522156c0acd7ead39f7d1d7147f9fb8867b0ebfd0b503201b05ee996a8a36bb30e2aed30e7ee153b080a372afd2d3650d2ae810310ca9c6606577d9889bb268705c1b18487cae1db7643863c7f6b38845b076f153a2e7127263be5fdba5edbd5d0d2fd4057b2df11d9de141adff8c599afadf32a8d40f6364a921d0ddb4863f37afe9a2d3f37797ee6023d38b53f7da3a6237001a6e2d12918504a1b81cc65ac6151476958ce6ed8842317e1b627ea205c32caca11be6102c9977a316222e562a1491793df1442cde7bacffc9e29f9f04bc01718f69d5c728d7db3c81691fa0ef2f7876ae9112e8700997981533c80f06d88c69a45f25d546ef597932db8bc57797490177a4cfd617f734431f93bfef9ad11fadba5bb21afdb5e0738a1b3aa5632819ed887317290c39519db83d0a70f6608aa3e623e9d5e4ee0ef38ba99c8b947ca20675482d17ff4d7c996d54a32697364154a4f87021860a32fb3493278a2becb7a5509e39d0919f97f32ee877a9c06ac67dd2325a6a96b496df3421261d45d88d0169852a6e10a41725b84280fd9d2190594a568db8b6568130bfa562c460b96d092810f19c8859d6fdaa6aae36adc98e6c158b7e3ffd1a9c4683ba0b8c24dd4a031855e35da6b8083074c3248a94d1ab11dbce2369ca8da4790b7e2641a7fbcf67d94037d6ab9eea6c25fb3a7c496a2888c757302b1eec37a3da286670cf6e858000b4b199a9ca1015aa92b372931f1455a04e2e7c5a5b6e7fdb40e032751b252d754b5f31498f3b008841b0ce3df834136d5303102bcca5c223dfd245c88bf6cfaee2fba3963f2be2923cbbccce3fc2ca25d86e37ebf88ade5682b804e8dce6c04c8703bc164a81bea228d6e77791c7a9c7c9d4bd9e78073013b52a45efc3fd21a72642e52f1171ec35cf9c0aa769b29de06328c6538fa0a2bfbf966fbbd2d782c2f52cf3863b5e907a5fbf4f33f172a9fd0df238fb44347f91287871de83f50b44202e628c853519762ec91264bf22c2f24cd9eb1f7f4f9709593ef620cf07d35a74994bb82386cfa3204b901a5d86dd2ac1d2b0d52d9b58be5341531f567f8a9b11e3af0943260c3e45994d2a836348a3c372b3b31ef3022a10560b93653f1d1947c30f9dbb998fc510b356ca864ad8fd713f622d95a0cb91491a4bd181c1b16a109d7d561879773b9f3def0806057000c17523c56a00dde9f6a32e62f6926fd4a06ebda429024c1941f3655097273710e431b4f6b1e156ad4cf1e3bdd174aa615a37b089e904a5699e67a0fe4982514bd3d477d69b0b30d4ce58fe881f5a9b1372e574066f8e53110f8a9090f1b49784e675e99cc59012a3e8cdfd22a77b9517b654e818abf618c20f847080ad2295127258e2653014a11ac9c6c75aaafbfffe1052cb80464a9eb1aa21ab0c04ef6701c4fd17b1ab19189c2f18d361dc3269061241b20cbd5e28c0c0a5f44901266648be9c92c77c891504d24b318aec7cb7d82d83a218a0b3b28127fb5dd0d8e24b4d5feb01e2d37bf587faafe4c7b5cbe61bedced10f72a612b34bda66421c24b436d84ded94859e26b6294a76336e9518326159125f1c23201c56cdf6a44c8cee3e728cb62b0d3f025d7d77244e5780cd859b0036ba9cae051b71458b2a7e3689e9293c265b77f1e395fe20ca5ce7885ae78bcc1d740227556a40f59d827b9aae58b95d79e03a8b113180e49b83cd181a86b62f8bd66205768751a8dfd5b86673e156a31db9d05d922d5083dd79beea8a0122c36c9f223702d41ab3adda3f180c4e85a169ecb099df12f58d7fadc2efe496f433915f64d1b10b800c86199975cb4d40168e81c59eceb2f70f050413fe0ddabafc78732c1099e8b6ae2c762cdcc2d70388433801ee291532418689b93a8598d32bf5daa6d797b2263c8a2bafc4574d0af2a0a461dd2b89375539378136a8ccc504d755b44fa5aa01db125bc5c71a683dddb3632868ab54ca7ad76b8a36d3ded59d271732ba133772a5d298c6382f4a9667c8b7c860148172cc4ec0f7cad6a9151464fcfb8c36450e8d184f12be4b9046e095fd0562a9645fafe023a94000d37b638f3391aa1a0666a3bbdb336592012a312a52fdcb315ca31aeb0a88a4ea05c36c6bc5125d902751562a1ec915bc65ab576527d3ee5b11dccca9d894069052fbd3be127b4d2b4325072a0ddda0af05d503126a99b9f667fdd60e48761175cba5d6cb1561e60a4165fb65c8e4bff158a1cdeefb27a7247e75eb2cbb5da40baf6c1db2348adf8f3f20bda11d4bf486897c124c84c2f6a8d9765bc987c6861a55e8c5ac884839129b6ceae1563d8b02b4539e2d9200bca42ac8d0eee3068851e2523e9d9f91b17779bbabe6359b78ed9e6e9ad52dc827286db836606462f02b5893133020ba66a7f9e6b7fac7ac2509c901308c0ece0933e1b996404dc6548c5c7311e348eb923dcaed816e70abd8106d6e2b93e0222a7d1499a0bbc1788805a39dba675d51f8842e41af5c1095e0f5219aa36eec2b5d4a2766ff5ce5614c2bd220717dd567fed4ff9326bbabcfede64f0da9bbffa97f15e193963e004bd8959121b4fa5cc1c33294bd05768c452937c71c5b6bbcb97df967927d4a8a142c05f898190c0621d1ce0332724748944539655299fb144aff92769ec25ae5fb7854d006812e2a87c70bd36624a05c3623f812787801ec096d2531d568a1b07aa346502f6ae359e72915b8422ffd46f37606c8d0edba4476a0414c2804cd60cabd8ca65ac37f9ebcd6c1f19d4b01b0e8a17fedda94fc00d6c11c9f40c651f9fe782b2bb87b7da28441e8ff92c9a01d981abfdcf2865466bc3fd4be5a4006b209c6e8e1ebf33410261735d74d832336d15579a0ca7a3d6d9877a5f8261eafe1aaf02911b2b2bc8ba66a41553855b18f70b4d2be3418673d7ca89c0b417d20c8a9d649cf8d9fe06f2846b344228d9d36e8a368cc942847bf2008662dfe73f564856be7e9bd00987e4563b5a18709941ca6d8aa320cab53a08dec1be78059384854d0fb8e167a396170a52440ea9f4dd4b409c554e0ec6af5ed09220ea2776fab855c959e268309ebcda16ac04af626c90052a116b492c7b8d8d16e9705ad63dc4b803c0849b50768a0a34096bd2aac0224ca5a4eae3a40394b53088e0bec02f23adc2da4b21d9ed4a5846d8b5f6928d6013ec2b5e4129fc010544c99e255b652cbc7bf2d2d8ff9eba5e4d82d1e42a7b1a736d6ddce1acabbad5eb96c1a4b4448b12fe77d136292258b6b09c2cf1260f05634b8ee1a785ad61731005aa58369951f48cc74b2bb470ee8c60fc402fef4b41e858733ce1256f23f72b2140f58f2e1ce32df18d3551fab69a92057897298f4c4a26786309f92810647e7dc20e81ed3c0e01e2f284368931f8872f3cd7939f04eb64097249ae4ae3853b2f17310602f22ee2794831f87dbd4050b0aa6a84ffa758a8dc1e651cc2d68636c7c923ac6bf4613dc7b30b0f6d8dc4f972f321506d8b067240c1c9218e9d946556b3fb41eca1af30535188862705cfaa75b3bbdcd9fec06b12ee4fc623b67e60facc73e9e44f42fc9d2d86bfc7a16fd1055b65f481022a00fc9357e9d90dcc19c191a78361b995da7aa623cb966f2db9d21d91301df508e5a12cc531864c1085acbdfac0a533cbea2979dcfbf7390629aeae4d6eba5b261ae017585a3dadd59b002e7aeb8c3dd8a5180381acbc51e7d033e16b93676c93d11a004a4d44430964ab923918cd3d4888730f188c3c1809244186e14f988fbec3cfdfcc3d1660ca562d3058298b246b42d58e263a36bccbc433a47f92c85c6e33c0b605d1a21472eaa85734e1b4a12ce80e680e6437874fff3630b647044d7739635536e7f1a2b4263d144b3ba34d55b34cd4e1e980604f28cd2d84f27ee63fdaa2c83c6028a3e97fde2ac3e4c56525345401791782e6778ccbe62ef929b177a10b8070e4516b2844edd4ecc25bc5f4bfd12587a397f6a8b28fd78023a52fc2ca80a8e5f011db29adcd42e7b2c91e9dfde3345080e0ba04d946acc664b1817938244f311755f7c9a6b35afc653a35cf59b147c85ba6187474515c1fb312108933f7abb16eca5a5d9e500868d8eda7b5d1276d4fac6d74818b39160e3e0c4a755244f4e1215c60639f606c31ade82689854e32d3d3b50f1090ef56a502ecb9e42a37be4bdfa47459a10156ef17257c823430c3d2f049b35aae3a9ca598675e8f0baa986289ad7f84300e5dac1338d6549227e5419c8ef2283815f8abd02f365f5df67d12d58b6bf5e90bcced2636140dcd5940baf37e65a3c0ac840cbb206b5f53ab28f6a8b3cd0dc42913560427ea1e63610555bb7b3263ecb1014d56b681d4976c448655520f563dd36fdaa9646fe0b0255e58e1ad323d864d8782fd740e18f8c84a37ad33d13946a9d5d97663d9fa6b66001960afde2ce3d764097daabb4e55252092eca815ba29a49a4039c0cbdaa9f708b94cce305cd400fbf5944463cde0bf463d0eb5e899bcd3a6e611c2c4cdbf6713beaf891d8108e737f511819d987c924399b812c9976d6294df4f80ee000edac5fcad09b8969d1eef8e5c21a9c5d812d0e1b3e2554323aa2011587d3f27efe3d9513c1bb4357691200c6c29ab7105be615b4469fd7d23866c1598a4c853549958c41c5bd6a2ae8d34119573f250501cdf6ef43ea321b520085c5307f3ef24ff964c6634182ab195346abbb14bd5fbfeb2e0833f566fe686277c2c21853bd41487570829e7be66877e56a9fc30c3b14dda52eb411696dcd9aa8773a532dd45b60ad662a203b38e4abb897dfe21d8ff4c397b158222837de32300c1c57c9383e83a5fafc6ab8828b8c2aeb7de0b5b80e1fc12585d407d49e1afc515a7cf7e2d68f5243d8d823a41d8890d25976e1c30d0bdeafc5c0501e8057216c6b507a0013a494f0a8244b69418ff7513f2ac5b46ce54031f8f1688bfe29aa4033ce622475c3d5c951e98dd7efdb7c1dd2ccaf0b36c2dd303ff5fdb0ff8b7d0377fdbe434abdb024b68fd7d43ac60db4ad9e20ec0537fbda8c94160fc41b827ece18a8d4461e0ea2f43bdcc2bd6858fd6092b8e872acfcefffa3888c07618bb08a8a4d863e570120ccffe13d3ea28cd6ccbffc35face5f36ff09b41f23d94f3f2f3b1c52f00320a830dc3f1e786bb13471786531d984a0a42874ea251e7c42166824af7dc875825c512131fa9b38f9dcadd34aa29b8904bf8a7815c611d84132cb86ae0c73cfda49940fe49a3b5561c3a1f761d4a8669942785ea5b89655680fb59bed7059a2d0b9d83f040ab7762ef3c2251f07d542aecb34deb59ceedfd20c912f3c0c6923ef60770f6f21a479b3857d6e5f1c46121e20f5a1070c2f9034f99716462836de03da72d50580db7bcd78439887089064d1484e24e19a5fa3e5233c67a1cf75b3ce3d8ce58a15497fb65cd1deafeab699b25efa5b41b51a6305ef5df02c39ff3ea20e4b03f8fedc9812355158a1cf3082d05f1b9b15e29930a494a2f5dcfdad07ac48cb89d87066a6ee8d692c561ea8ba8b8702d6ba1ae70212b29142567b1daf014bba12ab9f8c70ffcb8a567a1d3ec485d5600584d560f328fc1451d6e71814bad8f79d0667c59b66c08e076958a325305fad18ae5d25eaf8060c7fec74079ed1246b228acd7db4e21eb8030beee08d892d8d013eb343b0a26da97d4a88d61f4530d6e4c80aea019fe7e2ced930b62e61590f9618bb798883c6f1aceb1db0abb4516c846753eb04acd789546aa26db8438892a160ec67077feeab2a643a50fc2b72cbb8b70c5de50d0d1e189a8e04b0a8d1f4dcfb0f335a4630c13cac9c46070bf7830c946cbc2074ba061dcb31ac266e709bdea96743061ed832b1abcb1de297094c95e5e0c0ee70cea831d6e17ca292b4e8e18c8b1d42748d916e486c8592c0a815b9f0d6392ed12ed6996fcfb51562dd1f3924f6e590ee107da3060e0c6dba750091c7c5a07898437b805a02683f958c3978d22363d17debd9c650a1b565ec4502f645f7de49b8e63aa1f03c65682b0a06638322593b8e81a47f87ada565cdde616851a41da31c8428313b436a035642c8bfda47ec239fb0a0d9c50d21293984d0c843c8b30483af8ef9e7906c875040e346ef056ae2329df70980497456a4b1f2add065ccc91ab2f219d453fd904abb35f20c67bc15b660d23ea44af320a9f605f6d642b4c21705d949981bee344df50df330d0e952a28e5a9c68e5bd27ceb269c104b2cf2fa18730ff10efea04b5c80ec82647e7c0109ac34e9902be5e5c5a8512f64b689e4310213eedc7d54bdb879d064c7481d48988c562365991d8b9bc644cce0f0bbd4922df3149c8ca5f8c3457baae2bd951274808bb66c6511eacd4464fa88c70a7f76b612d84f239ab87a173efabcb1fec251745ae8ae63da1a514c03cadd88e621f30ebf4d3d27940bf1e778c04edb3354ac2e5a30f66280048d1f259d0115f561e5903edf6da9011a23fd06ff0ff5db4b40e7c2d1b8996d4df38d9a4794870993d1fa3b8cb76cb6da4da0878fd6bee7468c421ac0f20b1abcac4e3aac67f6eca943e358bb4c4e69408b632e1a3233c04e52a8647618f33a0196b094bf21cf1211183135b9517e96c191b69e5965cdff98508a3b355299f54de5b1978382c4de4a10852405143493738b782466a166fa8659c0b4bc7904e06fa9e8150aa032bd07f700e1dfdae5a969da52c9cecc5957219729c02817516f1703162678ec9b068121f601fcf0fd59187ecc1249f157f3606888383351092f5ba2a7b0cf0bbaadf5da6f747646466f471993e492f29785960bb6035a84c2b5edd83196ed465037c7b4ad9d2208585860b7a430556d570cc4d25a1953def71a7c79e300c84705071e75eebcdbe1c0b99eb4f557bbee3ff7eb7d5cb5d2c46fbb5a45ae0853097f34da4bb7d59356c03dd50afed25569c1004838b0ab688f6bd8738c74b5b3f98a44891c67e0fc6f156661dab18b7813fe3e5d3363315cdede19fe8bd404f202a2881b28e39fa0fc7cac0e213a18e939755061d2271e457449336f58cc02d2d188fe28db7600ccb9cfca67528bf445ee90b65203309ff58908ceaf893ae620562da421646501ba0eb5c1274cd3d4c6097390e5e2f5b0c3fcaeba69a6f1b3ebac662accd96e7d307fcdfdd299ca57cf63a5295b334b1c34fccbf72a4e12e84386873742dae0969d109a9f42e65357f92ca5248b9a8428afc922642573b1a73d450e86d75d37b0ce9fe3aa9f9ed831de56679107276091e6eb981db267133312522c3a9cd0f38d992e1b57d630602130f0237a05663636d3b4eacaa64d2fd6911da64a4f63b6014c94c6edb041a2e0b981a5f1ccc10b3531c7b72ee44e8cecc7797b3c4ed88260f911809ab8709da32e6687d1c56bf2f7bc3c1ac780c6c653c2f1ea264f9b8ec9c4c78567311e1e1b9307fb756173ca1e45c088f27b5c20c3c65bd7ebcfa83de2ee63daf157be8f1fd721f684d2139bc435ab341e11ba85fb9e23b1be40b315c4849d790bab03c631169b3a141f1c75e8dbebd8ed7c55fa7223380d40750fa038c72999876d9fd5b9226f3dc6cab9bef578c6a2667db564634cbb0dddbe293dd6e8fa077054cdf0a4e87674f33872233a96910ed3ed72f0b418f377a9ca75bc0d0e721e87fc5d881b0c203591c6be10c351aa447e431c756c1fe80667fce1e939c888794d75984b11cd853034723df193b8fe42c3bb8d43db2c3560fef5a2a20a847ea614e21faf5bf0736a8a66c8c0e2589d1f4c86e19a61acb240667ae23ac9393b22d2550ade5e154886edf3146fc44e112a303dfc03de60ee33546a8fe53ce16c3734a14b596bdc97d393404d3a242e218e340eb10dd9a1691611a3e1e26562db27ac7e6af081a9874246cad633ef4e3462b64c2c1083b45ee275e3c86469dfc96e95a4f0cd8bd0f8246bba7e123bb258bf2eaa95cacb41fa11e08d05aef4748917d8d6818e22494e7d89000dddac2320ee670815fb68fdfdddc288580d4c121e3f675d6bbf651d52587ba9e9a7e9f4a4e4602a73a62671d651d52496e69373eaf0f5b4f40ff52a261be340c525ae1b8f09a9c13561c4af684499fad8280d586e9a867db0fdd72fa0c7b8793866b6ba754393c1a6b1c5fcda18d84891e238e437884a639a1f96b6342781347a2ef58494587f1859b7d4743d1c6e2ae5484b7ebf390671c79dd7f2e4812e76f03799eb16df389e39cd13a4fdb2c1d98a529d1746df0652b9e9bb2f3abb003765bc2611f0bb7e4949d0561a4dcce385a4ca4821745e72be1aa2f949c561976e4ab8bedab8955a50b5d57ecb9dbb4214be728e91dccef87d5fd8fe44e843e1e7bd489c6369d768d864b9c26d3e82001d494ad72013a9987b8a1e2f8a0e86a9c1156e408dd625b195f8d960402808da90539e0a67cac52bb893460364e843f01c2f70c2677bbf906854ac8749a023e4469d6abf4597d04cbac2f884cb2b20a9af1f79aa07408b45069c7cf3a618e8feb452af252bed8e50a8ec263b76466fb43498cbd97df406714a571e992d8c4c48e2448180ca1b212834f178c9e3f046dc42fb206e79b7fa81e1851e9ce4acbfea8408d59ad301e57d640570f5c020ca0e0b2cd3683c37298b116df03404ab975c8edb9da4c9090079d99bbac08044b8ddd1db9b69bf6e7120621606f68103adda65e182e515e213c18101197380bdcbe0e5c61af429616a6146ddb2c704a230aceceecdc604f8a2102b19a6affa409a9520e2d019e6df3cf04a1cf838c119fcd3763bee386de4bf134e50225b2f598a4c98af53d3c19a574474a908649c202a16fbd403ad5740b934c20111115b5212525535178af6ca65f8dbd364a3825bf1fc46055646a1738bcd6f4468e3b51ea14b2baed05431982718a4157742058743ac4c928e256d984f54d01f41ff33f3a4cd71d15f381c71ec2b2ac212008d52d5665e54aaff487d24a9a9bc2f633ceb7a1098f4f77856775a6d3b9fa70e7924eb121ab64148514989b43d91aaf046e0965ea05b1fb8979c242c08001f5de1c015a46ed937fd36f711f134b0b535ef00d03a2b30a72a97fbe5c4f8ae85419a49fdf457e8b96ebcddbb1a78b46a046e720e27ac17b92a56ff665f754012ea16d9c2e51c5ab489a73fdf161ae5465527191ba4b84741768082a1d6212a4444fc87e78bfa2d5f8519d8c2c8c9ffc3499885721ee5a01be2a209e98ee9b55f3ce7f09142f0eb1b642c7b3e787464d76f4f1c375a14a7f8e3ebc1fd73621cb72896db24bfa538e46a86829a8731036e70fe71f030c906e5e5ebfa467c7f9cfcf5752eea3c389a9e80465963b911e4384a415c9161996e19e7eb5f59b85acece1160f7822133550fd23ce35d0177b7e6219059b18e081a6a64b7fa87ffd1335f3361c9dd4ce0a4dbded70529cc87c6b47651329e600a1a034e1edecee507d71b7ec28e7875cfc213fca0447c70d872f40603d59eb2675f66eda713d57db0eedc5be915c8231d4012c04ddc2236e40c750c958a89678f70bb23de39a2d019eb085948ef3ace9de099de356c9dc8906ed3f1b49e99fdc17eb0997d35cb20192c1c607db77f5eaeab5237be2e5af4f55b994245dc0b29d1009db45fe6b410b29653b7eaa0142496029fe461f94555e3d904e50c2a2e3f4a2a6818a90b9dd6f0c40359883581666bda98097005fa0d8b181d4c009fd8c62f044399998fbb8bba11914de03c8d9bdea99f7edbcc330e75406f63ccd5f93bda06c75879b2f15f024255dce8bce8cbab5777ee56695121d905c84a27e4c96123643eae711ea3c9b8c224e452705521347554179c3188871073d054a7d86ea856a0ca8996da028d232b3ee199dca621717dd616634d4eec7deb8f9de266141007827c461a417586d96f30bea432d7d990a0f14ffbcfa0ff07b89c626676c53c7b7c7afeba46b34ce2333ed375052a79db8a4bba708973f1235ad616028eb316798b37ae0f0059866cc78e1d088660c5ea8cc75dcb6b5ae3370816671e50507e27354901bb83b508c097aae63b97f9804b481e35d4afc2ab680090710c476ecb069c231813a07199e732de6c8135a94e3b31a184fee08f110fda2a18db2312e476e8d9f57ae875f6e5fa37846d5f37f27143b63ba9b80078030c66241f5679457bc2f4fdffd397e582233343cd4e18b397c0d2bdd7245621eff96ca79611f36e880373a77554819f18087ed9a22f0c0ede91c09c5a30194e4a5f1a26671c601c4542d7dd93b25f4360d0bdbca693cb871879ff9cdd3a3c75447b5ae84af4a90209af1e8e607714d73762c9f0078f660f89f5fd4cb6be2ac639d1d4d2e5f34236c708d24f8fd77d9593504fd6d4f14d97b26ea9c1cdbdca043b1a573641d215db5fd84b7df5d88ee75f9107eff42493e416e3f7c98615fec5b555478e1ec991551916a901f5a6e53242cb3eff092a955b51451bc22601e0b4eb40fa36fde10717d695a63a77329603efc6785ba30e95890c06675702ed81622e951de6169ba67d3e2bb9183e45bc120589f048ab8731feeea3dc11bf51ed119499b22b307731684d5dd1831f2c6f4a83135e7ab0d45402ede611448ff832e85b7dd5af8a2c12232df2c230ed32c1748fbf8c30133373d9eaeee94a321334c8934a7adc318b675529154eca37e0a1fbc833b24098a6064dc2a2d786511848a08b821988526cb006bdcd029d25c822f436e60c662250e01cb30948f28d3dcd99e83d75963f4b774125a31bc5e08de298d57eeded98f071ff489f63435021934d97225bf586c10a1280c7c3ef3a279e4250044e8b6ecb76b6d26d4954a1ed7247b76cfa6ecf99ff0ac9336f74679e9a34496da6189f5a66f11e1854000f3b119748428c45d747f3d734065b1a6519a42d47cc7fc4c89645d6821935601512062f268a4b958e33378959320f5a1dccf43c1a73b069e89923e21133393d95b34b491c79a5dcb1bda9c869c879655ee4cb269ad1933494ad0c7e3b04688ca6691bddef467857aa612b0baf798644d9bf129e510b7e828fa2b20a6aa8b1f6234f5fa072f9907ee735540a662ad4931483461fe82cd408ef6d20927b0e7bbf821e10cb81837627624d76e1807e75aa681bc11a5149cb9d25db84f19a9a50a78ac0289fba3648c3b8c234ba03e7445a5fcec70bf94fcb75a9108a86ebcec44800d64835dbcf177bb96eeb14b2daa8dd9404212360c6b772a3fcae05f84eb7556f8e76a7cd4210ce665272e6ddfce023ecc33864d60c0c622f0449d90abf41078b3f4ca5de110badf36421dd5d3e050a6242301e4e84dd3b347dfaf90b8a74ede3d5087127e0f9d18d7818d09be08e8eb1925ff20dc30e0a87ec946e0bad54980c30f298b184a542ef73bafb569ab5e3d02be45a8e6ac9e7ab583d8c3759d401352c69ae6a7c3bcf474af506ea9352236255e07830fa6115ab1097e433af62bbc509f9ebb5999b405fdc78471c7ffc8142e4a27b76bd9dbd4dcfe72940b1ae8bbc70d5081fd1c39a2b4ebaf32ecd2ac8ef78838b81eba83bf170f5944ee26bb5fb1655a0d49f3606ca30c1412fdd400ea92a8539f4dd2cd3616e68088e802c32a21f4ea53825c671c23fb86cecc895739093f7d1e5eba303921aeaa7e477a1a1a66cf0f43599eead2ccbd6258fe5c33d1f5b19472eb9d595e1e8c1547f3496e1c85fd917022e018edb57b4b57e142bc8e16510067ea82eeb96372a7457affd25fa454b2ad54b98293e2d463d73b3f1666537a457fd8347e5f34bf32cf81c37dffa567a881200b13aa02d10f217f45673ad64453b1dc41657d9c3e6ac5074f32f16ce84dfd26fea91bb2baeac985b06f263d51273b99cc5d851e09b03e7f67bb613e23ef6b430613048e52cb129daebda8556a2e8707eb3dfdb38f27cf4eaa8aabee4bdaed1f66b1559b170330084de345f95a1ffb28f12879364808d83c0af94213130bab11321b08e13abccc697682516a18fe868bb0bd93bb6cb5b73dc1ed0d86831d6a4104c70a86769a26f1818d6954057718c77760b75249243c4bb11f568d9beec32687a908f3cb2055207ae45369f7deaf13e9f889ea2d29298cecb9e828810f85b856ea09adb991d0638fc53e53046b80724e92d18405e429666a4e78b1fe2b07f6f1a5c4dafcc7b819055f009da442e9d72ac62ee09d4d167a5c02313532f39a5af79a61bee2ee777166837f18d84a5d155df769eef4465f1d7468e164318db5c7e11b2eb80d65144e9084ba424a0dad061e24522b7ab12d19882004d70e4bd31a8ac709eb7d665eb6d804e0403c255aacbf2e1e3581b3a2a4d0d74c0e15687195db385b641566f1d7a7baf55adc8506727ab8bed1c93e5c3968176aae748acf1147337f219d58d31a04f4ad038adc0a935a309ad9a8036d893302ad4f3b1462804737845f18f32fa257843a7c961bee286e01fc1bb53d98539c4fe110e6191eb58d774d0560e00018a64328a5e68594e393e0e7fad133cc196a6f6e946b3f81b7bfc94aeeb6e59652ca94641d09eb08b5085cec0666923ccf1bbdd11b63222b76d33f673eca22074a077b38a7446864b25136ca46d9d8d97e3257fad9dc89c56ef22b0a45c962e3181b63b1586c8cfd40a6789f0ec352bc4f8761a9d8126e625ec29ca7611d9a4ea5789f0ee6de7b6f13d88cf9e8a6e3e1ec15a014efd339e7c14d54940828c5fb74ce79b074ed6892c3a9fa782920223eea0ee7d69bd06b854bc90b1653ad5aabd5aa023fdc52d56ab572adae1792a956ab71d55a2959c556abd56ab55aadbc2152bc4f8739cf2492bbf3fd33e525298aa228e21a16e7513277c0bcdc7bef85e5701249a138ae0383c1603023925e180cd64c68fe82ddb8a9034af13eb59b34455f7326c6c498181363449cd40ffaba888f5646c466757752f7607f4de9a29ee8899ee8af57cb9ee080bee964de3809863d4e67e7b198181363624c94b97e12f72bfb933c3f9bb9d72b36b65ca7badd98f8aa9e243ccd5650743d5ecc5f92d4b1574c7c6db3730531a69aa686c15647dcd4384e709ec8bcd469184593227293784a4236b349ea66e6b80a159b261f55a26aa5528db13136c6c618ccf58211511559893e6a5847c6242d25127892fbbddf5219a569522f930473552f95ebdef18e7784a956b079c449fd333549fd49ae12cf26d424f7cf9bacba2b51257b82e384852292a289926716b963b13136c6c6d8686138aa719ae429858383a3528de338429939568ca3ca088ea4389d334d3ee24c93ab461c15cea81275c04919211d733fe72182779f8add32285e4af9fe9933b3f0d2e7fbe76c46714ae325fcfd948897dc4b45bcb4a24666122fc9bf2eef1582c9622d4ed53471dfee1a3d9628deeb92490e96f275915eb591af451fb124f0f56f3d7692feda4ada95db660759ee774b1bd5a956711f8ce8c542d5f3bc504ccc94957bced524f5bbeecb8bad58a33867338b99f34d28df4ce2533549fd1e23b9bf7f3a917e77f5ff87429ecbfb3a7fbed624fd3ccf4f3ec91d6b99788a75c813afe79a51282a6585bb6cd7789e24bcabd92139f472cfa6c95d2e4a52bfa4b7dd955ba463677eb6c0491961ca9861f98e19c33ed2471f30bc8dbf20129635296514d1d73224cc7b8e77cc23c7f767834b8185f4e2639c63f974a8f12ccf02ca5c03e4c0cc385e7b7938dec673edd23b1654872645a453c447b6e5a3d061e3adc162e32d6cccb3bbba1f01bcc8f06af4e843efe696967453e8651a04f8309469fc360b435e7679e92e2fddbd5c672f7dc6b715bcd06bb23f00fecea6c9699ce4df4f24c99f48f6226e6406e56691bd28a11a49f2a691a40a4892bf00c010e6e6a5c9c8e695644fe21dc9fe35402345b2ff080c3db0550030bc3510e0064972d03b090da0896b47f60f0018866a70a192745f70e0778cc13048287fbe65761a8c5d9e0b87f4a0b97ca110b94524fa16d1c783d038be7efcb5606f350eff1630088dc3fff31b8d7fdefdbbdbb7998f565ea2016e729627c68dbf20327e18000d0978cf0770bb92ec50728c63ffbc2bf151e38fbbe3dfa2340d1a5f67e53763cba7058bfc6f7cbf0814cdf850f42eef9f88e5492f3327127de830d10c9148241281e18c777996af012c4f028170cf1283f9e8c6e567b880309e7ba9ddfb5f7c0d1759be8a503391b8dc78cc61ef19e235fe96961b379ed42492cb5767d7936fb8fc0c97effc8d0fc80c92cbcf707920337ec68c9b6f4809deb80186339ef4dc0c52bb90667476e089bea3034ff49c77bfa75d6038de06f592e8bf172f608d1813251cc7650efa13270e8be1a09dd11dfca1330fff16f9ac3621d7ab874e0ebc0f0d1a317a836b09afdcf2dd842c721f91a5124c80e5966f50b4009a5ddee51d3ba0bfe57968f9b03d1ff987d52573d41ad634c5f8f99d719a70f879f38c1948cc80591ec70ff1c26d66e33b28d14f91e8eba0667413926b907efed61191b6ad8383e61aa045899e247a960f4924d19374103d1012cb6747120e120b0b0b0b18e2f81acfe1f82c6a56a3d499e86b7cde308f1a9df1cfb722d0d6d9d69a486ebc9fc500452c2f4f31442496ef7a1fab21a241836445ca860dd1cff0512789a613d0875bdeb224ddb871e3c6b3320e1f76c608f0781c409ff120891ebfe8491ff591e849bfe2a550fa4844fa95f7f0933e2904f431be83c46393048b018a64401f04e861bc023e88278b5e87eb23fc22d0f311063b38f0fcc3ad83c4050c7f70ec03f430409f3cbd7cdf8d70cb0af850f2c94908f9e4040314f9c77879e2e1f230bedab8499e3619fefe80e040e3458fbf06d008fd39d0a28ff116d10d2f7148c7fbdff0897cca423264b9a40a5d98486633b8b389a1b82087dbeae388c4f8b6d9244d2b629b2cb6e5e4cd08cfc69b60fc8d1a62b85fc1bbf10ec5c34e310f4c83d490453564202d2ffa30480d19487fcbdfe801d0e02e2ec8b2e75dba05c7d7efdf02703c8e7ff9c221390061c8b97797b7f1a08fc64f1ee041621d3cef120097ecbfcdfcbfefa357daf0e73e9f4801349000f587e3b916517777b77c7f4880442ddfeff776e3e002823e1a24d885e6cf07d3f80f0691007df8f22d7fe3fd0b83d4905bfe86b77c32e3007d7efa7c0398bd7c32d318c07b60bc631ea218a0088bf0eb10f5ebf8fead08181fe87e0d8d8977411fc0e737ee64beb6449d71ae03b615e1855beb0a2a6072bc0ddfac1909e613f021b1e101f0855e3323ec18093b4ac28e93dc89f2f942ce0917258867916d780ee6d3f1393e9945fe64ee9e3b0012248867916d80f9ece788c00c0f024533a087f1304021301e048a1a7c409f402f4f316cf88020c10bb7d9ac839aa449027ddbcc04de8c77e9017efa40fcf15ba7f1f9b77c0ba041e36b7ce1905ce3e70e3cff440df0a7ef9f0fc62dfff942cfc2b3c8fe9f9696af5f620f6b3c7efb8edfb67c8c63995b64aef1c91ce3db0bbc27cdb8e1b2b5c0eb1cf1805ca0ff1fe31a1fe3ceea6edcb8716317da18e31b05005f621ee0c73806c356856040f15664648c0b0025df90d1d2528002644046be018612c84164641a6860f918c7fd3042a115cff384a450b641e33f5fcbd3f874f87c0b187ee1cdb887ce1fd203e077d27f3e20f86526bdc478661be08d1b1fe3de2e3a4bc45ec2200766c63fdf45a75962fc2c9fd3380a77631d5cfec63718d2f037404fcdf85c6583d7f21b0bbc96398629ccb20d592e3162ccdc931adf98f1316eadb5d653674e340fcc4beef900bc0c80cdb715bc1a6a32013eb4e3bd9e170afd8f46dfcb7336781f8e173862bcc64bcca3c6c43c3e9806185908cc8e18295022b867281ce550dcbd653ef2f7945bb7d2dddddd3b0795bd34f35e7912de727ebbbbfbb43e7d76eade7babbbfbf4d49c34f3e7ec18f7269c9481c49500276db5b5ca1b92140adee791fc31270262fcce7bc1f0871a8674e8b838a969eac968e601f12316625253831f5670fd2e1bfdaa8c5c5f7bfb85f5b52032b283a2faf214c449fd315e1ffc1185e7c3932fcf953fa48dc6c01039e485dc0d334d3ee4689a7ac858f340be7034ba5161ccf4b9150fe4f0c12c4319a3aed2e6c935c6d8e5c5c7b88b4bdeda08dd5292449ff614997e0cb611c899824c5d90a98fb623327d09b87ce24306e643c687b87dd73aaba6cd39e79c736adbd63d6879db5aec5535e2a50a72c07be525b1699e13e3b06d3fe77cd10282ccbcbd684003a6fdce3605f4230896808fe80e2df3117d6928eda4711ad637eda4b3052fdc52dd3b18beccdf549cb7c95abf85c81dc93ae7b7a9b6d496daa6674b6d44367023e2a9dd17067941c2539f3e8f3a83bce479af07fe8baf8d38893efeae717fdaebe9c27134f51e5871e70de3bece75d546366eeb36bca5b62d354d7d83c170537560b8adc4866da9179f3ce1392bd8b01faa8312c06f83d75ded471568273b54c04794763c69da3630bca1cfa1fc92e70fee43290bc271efdd73f3b9d73eec0c8a44dbdf0d1445c0f39d8780070cf2d2f921d9ebc771200f3f62f3ab5fb843ae31de5fbcf83c5fcff9a57cc3b4eaa5d6348c83f71a78afe7b577b2e0855b2ad72b03afa17889be2449e6d30d5c9224b3cfafb186dd74dff8376360c360b15ed117bf9a019492d43ded5e8061686544669a80983fbcb4f2d7a9ccf1e4bcf2b21199f1923fc55b4ae53fbfa9bc84f1f6e1c8454900607c38237f32645771cd90dda67178ebe81712a40dfa21e8fdef34bd78fc2bcf7d210fd99fc3dfa65af9b654cbc31f6ea98d08e6be95c05092e98bbe7e428ee8cbf035147a440509a5731a09a1a7df2e174fbf6d589e7ebf42b55d2c3fdba6ce6c2fe3a5f9e2bb3c644f03321c97b9f7814691e9bbf842508b2f7c91b1ca46c44b2b4f7f53d179f3f4fcf48042bca8bc644e85d2d58c975a747dd8282066427ce420d828206406a2515db7e5eebbfbee25e8bbc17bfa5c28e479a07b9f02c6f828a5c70d35d7a75ef5af735540f7d059d34091f60ee87e7bcf31deb8012bdfb4069ee739cfd7f9ee8311aa812764c889f2d040190a0405cceeee8971e8dc3dc538d43cfd0b75d371a6bb77dd6f4534af3e0d922ebc51329ddf299933539b6038c5ac7d32773ae863c64714f401cef8c88797401f3ea22f23e3254c7fc63d5fc32689fe4684fe463723996e35991ec9f4398a15e04a7c34a231aef916824d045b111b0ab614173cfae196caf465fac66a818827559039c97992a9f40f1b4aa6df99db982500ba3b36c0c0e4827637103ffa83742861ddc474f1cd38a99fe3baf7d11f92a594d71e862c7d5efb1652c70e2d3e64c9daa7c812e8b5efc892ca6b3f6569e5b5efa48e0a789ad4d144c22d6b0cd0d1a371f4db0f88f6f6b9edf3b1edd02dc0d0f3caa701c9810e428e68185001cff7f7c05e7b34afd97b8e7a666ed0fef33f6268f6c0507b99bbcf1733b590fb0b610f91dbc746ef0f9503355bf086ee1a7cd4f365e4e2a57ed9122c50d0b2167e95709206afee089d52984679766ad3a74f9fd24a09ca5a291823f3b2e961936132335e7ac1bcfa979c8006390cbd7200a35c7069ad95d65a69ad95dea79b5c6c948db25136caaca5d3fec0e20ee7b99ac457eb6c78ebe0ce36af66b5ce0f6a8e245162a35aad5632336ee96a358e63cdea4812252995b8c259e1e0e034ce5f2fe4a81f416688a5c4bd10ab358ee338e28c28140a85428d234af62ac9bf5ee85537c80cbdaaa57aa9605ee8aa5a36aa56a9542a954aa512552a55ac4eea9c7459cb46d9281b65a3ac53301b191dc7d16d644e66c7bc6532994c36933531f98b88f4c699aed99ae3644d71ae84f86baa5238a228ce26382f5114451147fc108e688398fceba1602e144a48a326c943cd4616ca63281c0f8542a15e30d40d8a8542a15028140ae52e99cb513247b96423186cdcd4387f9bf48cd512c7d96cc6c30f5ecf5830eb367ebdd96c361b45966b1cc771ecd9c81267b3d9ac67e3d833eb63cfc69ef56c146700937f631e8e2cd57a8dae6f85c6ec5df10720664ae6e05887a5623829d7f86a3549c564ad54cb52295fb52c254bb5cc4eeadcd56e3a2a1f9b6d44a86ca014ef73b5d7e8e3a5807266e3787abdb6ab8da31dc79c576c7c89bd61a1f2d624758b151550a53e394f2b852383798e0bef9b880efc3c112eb8162b2aa04b359f9c07b7e88df7de9a26549e815456be099b4d3cc7fb1cc7611e6e4e28f3c9cad759e62a4fde274f5ca7354df274e30447f662b55aac168b056bb15442d06b2f17c6696a99e6b3d296eb055bb1582cd98c0fb754ce562c17cc1b27ab75bdd0af643219eb084b64b1582c978c2573b1c62fa4789f4ec33e2b35f282b951d9bc9224f3c8ace96c3e2bcd41848142bddf7abf5f51148dbc6aee91dc301e5b89a2288a2ff1258aa2f812c557ce4bc479e1882ff163033ba9731e7cb59b944f52ffb36639c47a80fccdfb74776ad4390fbeb9ac0fd11b8f610fe774b2a6c971582cd6eb0563b55c5763b12c0bc682c158776e5c48327a497e2a964aa5523b5460ca2c5232563d494a894d931b556a954aa5c654e8a652a994d6d952a9c631623d251b27956a9c21a4789f0e4fea9cc7a666ae46d9281b65a32cc5fb7498f3c4242c87f125de9a6973392414e1bea3f29214c59818136362ac498f98492aa24a4d921524eb8675040a15508af7992b231dd6112f75a014ef437dda5858f75116f64ca7f3f3ecd4ca400594e27d7c7a7027d6749e5301a5781ff7e08ebe9a70b32c7254be09a5f3d5e47eda61cff40f4d7f3cd4f582c9a0c653bc4f87a73c32ca46d9281b65b7ffa6e648f7f1523cb25136ca46d998a7d5a0e024672d6739976eaddbcfb35349ada5964efb032ca9731e6ca9731eece19cda6aa7fd418af7e950f625c60109ec7dba4b9df3804736fc44c6711c31a539cdfa3add8fa27ce4436eed483133d12091164fea9c677b5b5f8232c5fb747852e73cddc74bf1704e27ee59c7582c36c6c69b51e67d3a5927756e6524c6a2a88e75c65136ca46d928f33e9d9dd4033427cf9734059472dd97171f2147f3bde756405f57f01158c42e15105453bc5752ba158a76ec7ba0733895ea82ba6a31cfaa619a9b9fd0f970a268b629dd6a9a30c8eb569d0276af99b1cbbb5d7dadaea438dd3e1ecf27eaffb4e723c0fd070c023ff71e3008243318ec58338831cfef742acf519e3ad61441eee3c1df54cd0e9c2829eb3c274f75fbee49a6e80af2f66da74cdf519d0fe4a1dffc0105bb57141d6b92e677ad3c5193a669bf50b461fdaa0da32e54666aa258e20545118b5eb2b535d616abaae4ede34ef5934ab86290fd9b591662572ac4ae10bb5292d4bfad78b4ea2ea816684eb7ea8cbc40ca19209161d783dc6123a40d19481b477cb8c649377b645ed8adba57b7842cd5958f2676cdf95dd7ea5ca5ea02d9048b314830832222ea144ed4fc8b5d13bbb0115207f5409e8f6bbc249570d9204fccea5ed5054deaca4bdd1255c0a815ae49691a466131b59add6ad5ad700aa3308d8f2646611a9c0a611eb5b6c02c1fcdc72e2f85dd7a7929c4d8c64bb809cd21466154c75acd6f85ba559e4670e5b05bae268021878d9a26bcc46dc2c350e4895df493b5052c4b0008e1195285d08658aa811612fa724e6e72727e77fe362f4c9e7542409e68ec74236c288f93ad43f64be6904d5c28f29c5d45be540aef4315f820a8e7da73ccc307fbda7325700161a4b58a6aed5737e913e0f44d2ba7612deb9c8ed24ff2fc4a39eb91ad839bdeded52d882cdf0fcdfb51271efd0ef1f003a594360ff35e4d7b35b5dddf40e4848da23f4319f49b366d4a5f1baa9384933458f9f3edfb68561fe96ee04d279e0f39854bd102e4d7af3ed097389f8fabf2518f1ceecacefaf558591bf3b152dd223e72d55579a98897a4a452cab82a7bae4a4a293d76458bc490fe19edfbb76f5008920d9ce997a010214392c079a293bf8f69126da0e801dadf8f40bf048390df7fc12090ccc86f50b405d1af81a2ede5497b799a73fbaec731f12fef30d95d572421bb6ebc8998ed73f243ea83cafbf0d1d097b606d21a615b604f207d5afba37f09b3329d5ba9f0ecc74c92858151b143ac80ac97f26995cc0a08da9094cd29c3f2eeee1a920d34170a81661429bceec55fdbcad65aab8221b2ac6c57546c0c10067845602824c3b7fd8b4ffbd0e7e2276bb2e4e9853c71b4656dcb45e99cd116554251dd9cd11645ad50d4ca376733ca9cadbc05adac805e52176db9fbbd9ec7691ee681c49d24fbd40a2fe5bd5bbde0ad6cdb4bb1af61fc1ca54262d0c7787597a9ecdfeb79f61dfb2052e9f450df07ee2b285279d151a190e789f7722c2c2c200d8dc7c56b2c9f9ca849b2bf22b1480594b9b773af07c4a9e08c26c405e8393ee4e49aa60b02e74946fb18af3299c3ab17b2b543646b43906dc5825dc974a4f054be3ea84ff6553e95a7b369aab2eb857e24a3b32a6bd1568bb6aa8cb6aa8cb6aa8cb64e3975864aa956d98a2b1fe3ae6ceb83c0263eb255860fbbae515efd0eeb501f48d7bdbd57da57790e7f15c747f655ec83beeac447b67e8cd7989754de7eb55f71ec6310080456988fecdbe0555a5f348a97420fe5a5fa36ac34d9d6afb32a9ba61a9324fb7616923516cbf6696b9ae66c92ecdfeb79a1d0ff68f4f232b3547829effdc5a0efaf42f191fdf9e5645bab90366c151e9dd9da6febe36fdcc3cae397b8870a6ea0f3ca77bf9ad656fbdbdb90f62181803c690ffa64349086e6f3dbd378fe76adf5b9c69aa669af81bece87a47bae7ae8d72aef0859621e2ba048260514d5ef78a0a882a2076c5b7d219fdfbe8233f73bdf018578feda91873de223fbb4e7d6b11f81fb36655ff42c4146b4f29a6805143da0f3dacf745eeb7c0b70c6f32669e5bd1f72eafcca49e5d332e87354ee4f767e46fb0e2804498b17425f035b80339df74021f357c05933f6949887e8019ddfc02090ccccdf3e08fa1d30887951994b79fbe1cd219d4dd30676eef578de27144af9f746a3fbf2c2b2273a9b267942a5b25565fbd2fe8cd9b74f335f93647fb626c9beb43f59f6678d976473a2a6c951da5b1bb2d65a9c69922759b639d9a252d94e55b62b6badb5cfb9cc6dbf7126c9763e796acc43868686a6619364bf03b66b92ec6f9f0ccd057b9c246b71e0cdb720102c66090021ee102ac41ce242745f0290a0675afac8e99479f2fbfd77bc0ca1fc0665a40e40e4cfb8cf395fce39e7045bcef80863647c482ff598263a844b29a594eeee3d5452a854f096ddedd6adec2692e482f22d13bc2967f5188e4ce65ebfae97be5ef2f29560a881f756cfcbb1b1b1112fec15735284d738b19e457122b963453ad64e381bbc1e3eea1c7cd478fefd72e8f73ec6656468d090b51c597b509a7c4c52bff6316429f4da7f32478bd7de852c09f1510f91a3fef045d6fe2375344d9892b507c9124bc9c56b4fafd4d1a94ed6bec399b5d7c03088b4c9db4f991e5378af1c7c4c53ab2669882c350fa4102ff5e8a36e1ddd6a1cdd3a5a49e3e876358efe2b03f802b43479250969a33f050c3de71ebdd4363e6a1ec8522b2147add6d14d1a47bff8d07327b1a2a47534ccd53afaa671a89c68716fe885a199b4d16f599e26dbbb16a09436c2d6c0162203d1be9590a58ea29be0ef6f1b2fbd0043cfa1cf593e27811cf5bbf8fc03dd638075dfdf4ef4cde7bb05e82790a3feee7e050c5d72376c6048d65e03bb6695e734cfcac778a90518760eb507a9f42c65a5e508f431a0efbfc1e205682d41604c0ad81f33bd4fe6cfcc3d10ba085c0534fbd039782903d2a687ccd69a86c47d8985903627241990363d0bf5cc5584e821daecacc0c997323c777737cc8eeeeece5c4bf74e7a7c24e5d370367873ce39a7e7fe02f31eb5b5d65929bdc14736b4e0f5d17c5a63d0a7962ef9924de4cd8b24f5a774a14ca69dcffbae66ab9729d8030f999ea80952a6b512e663ce39a5fc7cc8cc1d64667c50fa1446a783d4823b7c34274cadb34e771d75877b5310c64773877b05a79cd377c4d04aa96b57f0d1572a3fe2a21ff152786bbc249bf0cf5389177a8a88c7472250fae10bda747e056534ad6add9f0f992a33e3c3d6fae223aa8de8fbe8b14303e77330b4445d87dbdfe1235a41181fc5ecd04a160c294cd9bef49264e28162026d8c018eeb598d077666732a114cc60f64ed45d6b4ca71a3170a942cb1a289253491936d0e6b40a2817666736c4e0a931c8c41b3597c3eef29217f3ef73f9fcf472a71450f98e0810b7ec08ac2e97385fc51420919e4cfe7f33e7ab8e98a9f28647bb30d9efdcbaa5f5b740e1c56a40dfb97a5f261fd4d9c2a9fe723fb97d5a0575101c3fa1b4bab15bc2c1075285ee7f08a304e0d23afc81c3848fbb785cc7187c0b2570c696008239f943882083277effdf4aa5b230db050040a4508610ca7f0629143af4b69ad3f2d49eb2df04ac2c5841480d08522ac90e22a690512349c83c48920084185f2bccedfce7b5eeafc8a9740b9d3e9747ef40213d3ca9ddcf91e39ccf8e8743a4c9ae081dcf91fbcc4e54ee73bd5e9bc90ce4b5711b6cdc6004c98308429cb120d4c9a3041d60a9035adaa72a3a6491bff7e45488205296870c592278401ca0aeeed86bd5a6055186995085aa082051fc0e25585205c71b54e10b8fa692d1f8db53613580c483589124938c207479848811556d40e9314647b3b9d25b06e305982134b780278c2882a8a08c2134500c34956710393223c210c44c4729cc8b4e6eccb50beb44f6b69a3366a49acfd7cc0cb126beefd0e786b3a1d30bcd6e3b821d4184c3b0276d51549d05aa0f49830c102017cbf96a4fbdb29b1c404b9fb152f69b9eb7ed47dc84bf6bb87e1264775ffa44696f6af34c993d7fd98266dbc4388e8410c0b62280211d1750abf0a391c5dcd08ae0b6aa33301b5d14b1d2d09c62fd70a32c62fc34bf6f18f707d8cdf0a4d7825e162c1132f226031cad6b2b44e30de4b9669261b14d66df1d6b4cb46675e51d3012f0bbce26b0846645c793d1d64cfaf7809678fe761c8f0527dcf8f3cffe2c99e8fc1227bfe062fa564cf7bde87e77b78a9f39ecfc1f34f9258b2e4c9186ca850842554d030a1e20823d38d9c9314643a729dc211b9d6295491eb2b87b2942624a2faf249b65fbff7517b1227c37ca2984212a480831c3f7ca0052688b08680b2840a4e1b59d95a6b2d05c32873ccdc3f4507a678c2e6dd2b04210a2c282d8982128c8083021b1c275cea101f8c200746c40844a8200954e8d40a458a5c6badf556e96a2743c8f68922558a1630418a2b9c80c2926c9d18d55aab4aad5740e55a6badb5d6274021dba7511c91ed11a2a8e2e6f1126cd0022b6ee044112278c2551106289ec8f5697d020b7255c20b0d6921c1892f48411543c28a53f853c8e128db1a68ec6bc916384dd33450e6a8b9d38102054648f1a850285408b0c8a224337542092d4e4031c01335703d514500b295b112e8882dc1048a11e4d7670a277a906b8c8e8a509690edc3686fadb5d6d6ea040c58b2d4420a64e082268e2411022ba41092b3ee5367271c21d7588d5177e42aa2502811d427727d981b6aadb55e8f09a81b4cc00197ed87603c138090edcb58c2842f64fb2e5e3a40b6ffd2caf66b58d2843064fb3bbc248d90ed0d936cff062fc925d92e718207b2fd1cac8461d1a4892b5ae418020fbc70832184a0c40ba6e0ac604113213840ae7f9b5022d7f7784986b7e3092672900310a420053c903839f46ac80f23cb712c3c87e279a9c64df4d4140bd1cccec29bad57eae4b0861dd9be0ce5ab2497e41c91edc3dc20237374cef151cfb2f0ec873607076b413b8341d1c2e678e98259703249451252395001148af003169ca290e73b4a07a54e9eeff39d8817f11511a7f91deb983cd7344de00b4d384214523441093438cdef97972414b25ce2083cc8d3e6e4ccf8d861fe0f2fa5e4f93cc44a9d90a6494930ace00a2d4002054f38e289d3948295e7cdda6ae2e47e19a3213288420c45a690e2034c4439c5ccf2cc1667921a081460f181224874b085214e338a3c7fc54b9e3c45d044b6f6af7d8f07866c99c876c90896c8b649b6ff5e924b88a820db97e12518d94aa98346f6bcf47c45510463e6becc7158f0c22b8e31b1d52449cb1ac756cbe57abd60b963b0499239bc39d3742d984345ee3ced744c389e60823a85f63b57e4b690e33a756e083c90efd37ba52c8170f2b66957d4564ce44a23d77a595e72170a952feb8a5ee3a3bee0ad6179c9760e0a95430b5ed6152fcbe24c93362e4995206b4fbd54c326f6d31cefb39d81d8d792f8a82f6b92acd6d2461fb5365e719c5acb4b48681733bd82176a33e0640f6a0e9141881e8285e82153a345dcc06753f7900c3a7ab8bbbb8460ccf9d453c04919eda7fa49496a7713b480e54935f98402b25fdd846bd8edc4ee18f739ad8ea28345fd9e9727ee83e83cfe08789e7b0c061104fe8e3c350e0ecccb4b46c9508af7b4b1cb052c0485d7449eb75b22cf25dd4d21cb0181616744a703d901c15d17bc2eef56d3f4432633c3c738e779f77a35e2a3d902a31e862886565f3c0cea1269ae18d5f5c51045516cf1c9d38b1a72d1825138855138b542d15451d3ea0aa3aa78b52ad69591d5ca4815efc53c28ad291fe1ee7b3def87d452a867243c4f3df527cf4fd20cb1fc2747e6d054cf9c0f8b0ca17731e7bd9e3773dc2565ae1e44f5a789c2a62914f23c9a9353e60c33cc00d2d0bcf8ee69627c8b19e83849d3d32a28130ab9e83ef433dd875ec066f71d28240648e99093aa0bb950b5b82e404e86af4fdd2a25435783959cb233a2850bad2a4979ffda229cce35438c2ee675d3d402a6809df8a2135dbce86bf1327c2f1e8542a1429f3c89b96375630b27cbf2fc39fd2bd8adaaa45d5ef2401f7a5eb7bcafb5e5a3e9813ccf037dca73a0d64cf9eac23c52526e75b9585b620d2bc4477cfee7daaab585310d12fadbf7e7830f3d4c31a0b2f63ef4a04541a132fd90f0bcf6f52004aa072128540f40a050a8dcefe9000858fef38debf7d7751dadd8077fefbd97b807074594e5f3da6a9abad524cde975ddd74fa603696842efe2695e7c8b6e354d22cbc7c5773fe3e23b5008127f2121300824339e67f920f077efe21d9c69f1020cc2f32cdf22f4f9d0cf7c3e8441917ff79dff7c0567f0bf008578409183a20774befb0870cff22ccf3d7e993d197ede900c207e21bb2130671542a1b2f65d54a69f64a2841a3ad2579e1496b5afb138312b4f3ce6895b797e0b9c7362c1382c2086b987e5c3d895eaa6e9336114679a3c3f9fc2a6093f6c848d79c2266c9a66ecbe4f17e4f9218c6ee53487ce2a2ac7458b7866ced402f761d7ea60107bee9d26cef330151ec7757b1e775dd81981b1cce739cde38e6318865f9384713e2cc3b3499a8d9aa67aef6ab59a26b99aa0cc87eb8ce86a9067a7833c3b20742fd884c170f27c2ccbf33d7896e77338a743e5f9170a2fa439ae69c44b211db3e8a570863447d2745d87696b9a3a3f9f8ed3c43dcdb91fe3e234615463118b168bda9d5a9839186531aa511a485574e5a5a6aa89a22bbaa22a5a84aaa88a16a12b154f144591e6d01c9a13a398a884ac994a7ad621220100002000d3150000280c0c8704a2f168a02699b07414800d738e647256a548c3248c611052c62042882140000060044406b3710050bfece63556903f3e63784820549b34521aac99f78395f459e40a429659e44dc4954d56e126eab730b6430f8fcee3aa14421f00708308ceb83e1238ed08c3a5e4f15bc05e001a4f5411a8b849899cf2a525b6207652abb73eda8f97ed7fa7ec614573afecfd7fe1dfd36cf847a2767773a34ec8c76837250bf677284e0e7a4992d2da6ba20e43030a516970343434d4856c3e65d8decfbd08538de2740b492b0077f624c58d285b5884c077610d03ac222182f23f1fdd45a3538d911740347fa363531a798ca9567485522326962940c8f65f17b8e23b2049254d22e324e538c01c88939f371dbb6106a59c2357390cd932d079f20a526062b807c24161e8690a0c78a294ac84125393c0d0764a383ea7cb29ba595d105ccd53ae21292a54c5cd4419881ed41a53fdc385a59525fad4960cc184590a9e1bc1c8d91ce9523d58f0eab7b948025b568c003ab93685035a008ec46eb715e1e01b539935e03da97794733ed0245346ecdbbd0d5739434990a3975848aa9be3251760cec660d4167122990df817fc0f8cf9a2120fab29347b43195c971eccaff6cbcddbb61492f6fe6ec26f3bcda8070b7bee9b5e0a24fa9da385d8ffbc3f888c0196e2d4c025568428f867a48005620588203f48a5f8ea129f904f87520a9d181f766c8daa0185ef8de85d257a18025c396cd4ffd4bb0463dbf7120f8d99b2a99c622334f994d4123f27c51337f8274d4fed953ee88e506f41b9e2e9f7b04eaaea7a50487644d3634315571cd943fe80857981d6215744e29487a8211139d0a03547d1e17c65a49d1c290da26ca914bf841f19d020f82fc44608a2519d7d76a297b7c58960e9d5440d7df755b34b6990e416b136dad3e9b4cc4c2bde4f9f59a1498de5c9dbff51448629b5f92191c78757dddb9e8f22518086a36a01a4000e966cffae1c6586c1f8eec759befdbd967e808d8f997530d091d91d199fba70f574d9ea0727195c692debad114180a0703524f50c5ba8f96a48084e05807df0f254e9b6d96d3982d0902dee4c339305e83c046315ab66cd909998f801c3c847d279ed5c91ec3018fa5c2c97ca18aeeb2c5035f6f36a6e1e07b9695a100d30709cf489cb53a9f7af760c7ee7406362f487160a717c332e9ce946967c83699b5f1666d5f69fce51b63ce98eb12efc6eb8792ea6a7ed6cc42c8dd7e8d5860a4dfd983171dbb43a0634fa214059aca8d68df474c4448d543d72e1f687a0308235ce06da367b64d3cdf964ab0bb34d0ff6f70a56513a149afcf1f1b7fdfe9f5a7b86e9fd8d40b2ab1fb355818de06cd3d9705e145d96d8f85030609dbcd591d4bd7b713ffe82a59a6fdf0be3e615372152347b155c9897d0ee48b19dbfe989fead2ca8e377f669c748ad65fb7e38ba30918e1db8f562876e61285a5767e3d25f8915e12e7b9d84a0385e1022376e655a60aa3f360390303e3642695a07bff694dae82b7f345fc6fb5f38ee7043436c1cc0f275472be8a5715da83b3868d42b1aead7e6c4e5767a3a86f22352478ee599afea90d49b47b1e3b52242f45a6efcba30e843912f771b13a9c9bd2f753f65f608eee9fe10d411448ecfe5f28d88c2fc880fcc0f6242c4e3cee5fa41764ed7a221e42528a6a9f06e33949db3a15095959e106f82aaa0a29252b8327eb2ac4f639bd95996c04d3daef10b71bffbc8787dcffd8daacc3459d21400a0e8aa8f5786778e4c4b43a63b18f2439e12e2e9fff5979fe755d84646afd8494aa5a2a358dfc2e1ddcbe83716a044a3d85fbaf46e6b2a0ac6e1592b15bfd51fdca271adc6662e14d871726692066db119afafa631bcca7cbc25c961b649182f59c96113bb30285c9fe3cf78757d81b5a532cae0f2eb4f62e89975e608027a2e7081634cf7192387de0baf32dd5f69c34f55c0e8b385b75917b2716e3c9f09e89faa308a644dc242d90332c9ab18c004a52e569f606f4b13c164a2c672816016bd38047a64ef0b477460b99d456ee017d02379706b7ba41a3c8b230809a52427be7a52bf84f8fa61eb0137c0ecf03d09f0f7e618479a63e790d1a16daf29fb261e120579db46ef2fd2d7bef13571aaf4f4a01567f517395791b64d3f249daa365594ad8c1bd776349d85287da38ee41d1efd056420f32e9890e36d743f2d8a5478bda6a08c1fbcee61dc76da71b1fe53d8b5c69e1b3bd4af8d62510acae1c152122cda995ee02f9a344dda2fc779594ab2df63b6c89358f4e4c671fbf396f95fb3e2f3a87e775d21c1678563fed33b805bfb658eae668910ca57b6021e7da2b3c3fece1d9afd8ff4f645524ab39e0164f0406c1354505ec01421b2bf6362158b9f30f2839f0b9d2b9a427ee0dc5c75c8a8b0721a99d707792962753cc6d61b0f3466d46fecf3b0e78e18b040a1ea4f348e88436012501801d54f7eeaa5365f163cbc98d56b0c6fe095da3aaefe04e94545ca23b5953e3d499361a1e5e750b4511128a6cb9a82454bcded9d9d500624ffe6204b507ffaffb7875836c4f579e0403024af4ed062f64e42bea2e6d8af5a27e820878b64a787b7324338a84e713710eee857d58866da7e0275a991f229f3b1621a9ff41468021ba735f3ddb749b6ec763ce454edb5bf81f40d53e2d90f9db8f24eeb194a163140abf1e6e8f0361aa8e7d0e610e77211a036ed23f441287def8a3dfcaf72c0b1525ea105a981ffe0b353bf736c76aae9ed0a5f71e08849d0facfab8995e379f7a21fc8ee774dc1ef21415c6664c5ebf414c6b8c7010003b8e18be4d0e39526fe6fb0e3cc789c322b998d34f74440511b94782cfddcf9e14b9ce071c6b0e81d9fd99261737bbfdf93aeea455b67c8f8d836f1bd7a06eeca534034a7a799d9f1ee9a74187ceb345bce810248482935d81e7ef03e6f4f223a634c399fadac40be44e2fbd3484a4986330460ab2ab1f262ccd11c267f9fb42f2a720fe4f7a939b764bf2ed1bfeca9673f32a620937bd27cb4596cf23e9b2e19924967bec64401532e899406d66a3f333a581eb0635bb118ffb03b29dc5f5a8fa4cd8f8d50cac12b4794701e064ace12e31b5dd2815464cf943e6447c30c89068935377b2e854397ce4bfd22359466a198cb6386086353aa743031df318dc2cbe5a32bbf2c4ef5c8a469a127cfb96ced4d32f5123d067b223889adb8dbc91620f0c78bc14ea0c8fd60fd202d18b3fd2ff50bc830c6e4eaa1a5641bc6a993af29351119058572fa1b34f5941102a648d6b42d0864087ce862184e469743e8ad509ac75aa7443643c8886c7523b83c23e9044259910c37f0076205214e40d62c26d1251cc134e39a66ac6ad3be761921c80774946ae61e8058c464ceeb9161522b5f45d2488a151db7474502f7c041707cd4b714542d72d3a36759e712f3024c21f3311c5c4222f4b5491761a99922699fbbad363df364a7f2601dabdc3f0e04cd0149244e53f6181a496e35d8b6e146842d72bcb4ac303532c5215d0cd9f436777a338e757c5a9544222e2db2c8daa487af91b21e88265d45d71cd7be0c127ba41fedc9a51b3b5f62703ff65476c262819170ea936882038e3f7a3e4f4203141470aa583a6a858c139ab84306478f57980a40396430cf8c2cdc4163462fd5af685a2a1e080db023e60ba72a1eb59a9332317a0d0ae8c4be12e11bb2fed8d98fd59aecb0d3bb8a35499ceb487b89df06f9078a1504a21caa8d375cd6292800e5be609c7cf714966d6d4282d8070d6b4b4d6aabce35d2c26f22f8a09b63d8122c23fb3fd25247ff942f3b70e557e6096b1ac8bcfcf0c523cb5268f893b5dd66ea28261a49c259bf04d7a84df72ebdbc1cfea63e1bccb5cdda55e42748854d0b051d7503808274bafe02b73f73771377d7ab12903043a3f5bb750b7cf11c81b08490a3b2a7d1498ddabf8090f0f300b96ba8c8db1b65ef8f25bdad5b53505e84281e24961d9999becf041a4b3e5326bb479580b1b31c97870869844b26b96f1b534d2b72544d122190a0e12816f38e396730352d8f3656342c8c4ca2f242eb6d63049c89f9cc64d067063277f489b07f1b0bc25116a0fedd60b56f3ec318601061e031e744ebf17198579ac9a3e966fd710595931e1ce9bd01f248442c645731771206643fc2f687baa5ebc2ee90e2944883651a53b209edb1020f49f1c23ac6ec006f2a1fb29e77600446b84293fad83a9b1189ba9b8f1354d9dcea5df9b94050db27f1f7a6bfea8f8794930b04712be86820b61af661c58ab158e39c02102d9c0b9fd86b166833d82f85a28cdcd074a46b117eabb360fa6f884b09f2db03ca24cb218f42e0b19ca7d6449eaf12a1ac4749c672f03bda2d6b6a89b48c959ce884b4f2c10f10395225c81294b7089ef1d31deef7afb0c8167f6035680a990765147913e42774fe8f40c249d14317e120453716abac14268d58cd0357907f2cb414aa9a199d1c9370425c95b66baafe218098a96c46451f09e809af67292bff4f9180aa43cf41d8a357a4f049174ccdd849220896a9be5de0d3732e3246cad0ee301017658f6438275510129e986fe9111cbd700e9c6b80546c876402946bd7894d6f99cf3a427b647e025c86c168ce0fa456fd1c3fa96a871b4f739ec95aeba0545cf5132309023517d3c841123f0a686bcdecf60cc7f23f86e327af68bf64dd7722437ac94f6092504f91857efe650fb17479f623e5bd9e6446839ca1b978ddbde50cea8c3283c378c03be6ed5c63d8bfb2c10f1b27f1d8082f3d8eda1f28b60ac42056ea5ea9e2950117a48f1d653dd8e8698eb64ff18221ee88871e0240152d5ec065a20309e0bee8cd8903e732f736f867ddaeec756f583932d31a74d10da48fe25d79e5f1dbf4ff211d666a0d6b6e151f7d83cf58b2d4911937ff92ea3aec6a0f2b1874d88e6e44b1baba8550d99f2743791e46784aacca333f31ed4c59752b22d221cae6d192d24f1f8f4b8deae58d01ca7eb69cfc3e18b0d3706d69b858b2ddc837b17e9502f286223e9f90777bf3df244fe4000b77359973d4c17757ec83592d01f5b65fd1029c6b79256d6501a227ddda3e9c9f148873e00e8f22c509d97ca3b20ac0553bb74fa8360161649d064dca23b39c4abb83cfa6b1554cbdef63b1428ccfc42a08fb2bce66ef2e81566fb64cee05c13a7e82a6b65e932046806cd3faec83463c425e40b1d0d7b1681c801f91738470a353dec43e7cecbc19904e7ce814f41c0feafbf123022d3fdeb9f321cff31683ae41aaeba42c4eb26bc7741b1f6bec98754f49c0532bd74f2dd4e2bf1667b8349a092c3aec059d7c3e616bd5ae6ccf18417064925d482a68b7bd1a5970748c619ee5044fe7032d48e04f58b8dd327298a80bad02de8867ad5951626c7bab87a482a4c3ca1af87c963c6c3ed6069b8043de907e60b6790d02836a195f6f375b77ec2a45611e06a1969eece89b370129b4dc4a9a396f80824810664e3ef6e432350f476fb4074cab29a4c07643de6aeb533022d13b8b40d9f380283c76dcd02aaeb84b397cc1fd7a87be3218211c7db3cc43da26aaee5fc085ed0426f52d6643c646989c691f33f7d6af12294f618b643efbb4500148e7d1a5593136592226c547af18f621cc7d77b62fc787492ab260df001a8f0b46e4f220d2e7327cc7c19ec7a3cae36c7771860199bfe165eed4d9f440181c5dfa03982f55ae836ef93a4094722731c1d31aae79027f7e34cbc81e9849ca904fcb2c79d0f11ed6b6af1e0eddd95a8c325e9ee2b75403206e135483a373d7f974ece7172e9a09f2eb39e26c63eb4abad0d1c5c45d0ca3346b0648ff994d2844f063264e7f808c65eb7cfc4ce9e0838a7d3f6e02e7bd0db530403f5e7251977af7f68cbbeb8cdadd34774cf27fc7228680869435de26c09495ed8148ccd961ba4c9de6d2353e0cf4f465ff4de9430d46adb4395c301b66821c48a8e7b4a2747e910c7556853303edfb3ae7e8aec9de99a826b573220a5b151507c17a11c9772dde5a7607f30091be0e0c5c8ed1636a9fb32418311e871f9d64a42921835c3aa47804daa7f21d79af514e47d4c8e78fe45251dbc79dfebb819a8e6e076d8273e10ebbbbaa405deed04ee2ff1089b757559ee15510efd4e72b93eef60fe8885c9563b592f66894cc6e109e7cd648d5da2b439cde3e8f4f9b4a4f5c0679a20763cfcaadcf0e694f34fddc238bfc885b3100c319dfcf265ba89a13fdede5497decbfcd57630f409d164b3ea50cdcac2178c15a08ffc22accaf57ed382bc7e84575ea44edf74d454b26bbd6c8dff9999784e7d09d2b5254cd5d040d9250a476382125c280d23437223335d4ea2a3e6214c07aaf0dbdd077a9491693da6ffe7fa0d53840925fb86dd778470c0db1e886c18a74e0f9b350f4d6be7859bb5cf50d89b25aed400ceaaa0e1d650dcc2bda6ec222f3b4fa7ba6daf3286bc47cd18318c1b532501da68358636a5fac4e144b37a1ded12ed91304b001dd3276146dfd1cb6c1cd384ed92d6d4b14a5563ec1b432bce517392ba6eccd3cb680bc19bbd12478d3db402dc263c72e001a1674becdcd8669b1987506954e43a682433f39969ea042a7acb1c5c6886390ca4c5d8ffe75ea8c0d184d5cfe439d1c0ac739c227f0ee8f65b7d730b0f74f8bed64dd9ce9c3c2cb6d1ba9f44d04ef119a02a72e6b0d765ea1b5756e6003f6ba3b86827c36478e711234762d6026eea1f8137f83961a65e214faac5e43b07a9082358c47ed82fe665e2c44a4be9e0bcff3c31bdca63c857ad6c4265df80665395f1912018d3c50d2328df3996c379799b0e460228dc4d8eda410333d51ec0ddf607128529070c6060660784e3f70698022425db8c06745a4a727a9fab45f6f768f22751891b373e7b8570fef5a3749c5ea802d0020c93a9200737cd5917d19cab7010c2419a6808b47253061dbb7f75690640491374619d983729daaaf894edd2f592df020cb3e7fff9b57ce21fa016bd8e31480aa8a725d6036d9c1e3c5e01a96d4adbefc7532680f9cc0a502dcfac68474abf2e5bc77b96526efbbb194b955972775d75c8a3e8cf244442223195ac700ab11ee117e9f9a2a680360c59fc91055093f0e58667ea1aec8c478e45df79eb45f68c13e92059b2b95e05d77a225ad893ca9cb4f1e6058628024a4602506d3cee64e3dcc78a9e5f2b52b48513f21089e3277bbcfff30b5e2056bf9706d4a5f4a8be289314d2dc2a25775d0829dc4fe04b164c5b28d4f4919055318f93b55004216f6d7b5c90e6f6985030384d290d426a4cdf5f520aa7db9c715073c341aba1d579d0379dfce026bd05c4e1b7200a54f7b498b93aa802e58ff965781a767a9cd27d2ef157e9569fcf5d0482703ffeda8e3d802efc5746c433a3e116398b8023562682b5ee3556b210fb2778c097efbf2edc76982e0579cd9c008e0f7b7e53487999a1356865a07b1329d81a7c7a8791628db024ca15ffd3e8d6b618af5507dfad5834eeed3dfa4e097cf942f675d21f2aa9711367931b230f766aeeb2bc0c647543235be06d837671cae43b31a166b554c43ea86956ef777c8d4dfc7258af151bc28d4e44bbcc07003ea1165a0994460e1ab7de2d15665abbd70d375ff5b1282a25061f943cc6bc52d9ee58f42b7dc22acb04517a74e43170cb237af054e92c5b9c5efcf2f156a3304a4b5308a13c7e5ac8f2008a1dbe7c2e6d660e0f97915a37791b930260fa7271ed4a89f305bb6e87bea17ed52d3992a11d5bc75d54a212a151598e1ed4902b4d94cae424c816e8a6e031b73c95993186c02d03f80c04f2436a05688de5cf98032d00de6ce5cdf0d007d1aea5e46a65e028c544c670dd051de0d725e21103854e8fc1ffd954eeb0f4ddb4198760b98fa814b927f1c22478ffed45280575029053a6f1c1155344565add8834b5034291629d6e86764f7b03898c117d18e6bfcb048e16c43a910dfa5a100eed4a335ea12781c7958f76313e0c3df66b725be34c187734ed82c69ab844f434d8290ffd9832b7d76ad9233adacd1a21ee9b5100647deffe58ebe5e0baadbc6097e7712b5121eb40193f2b41e3cd01edef0f5943df905ecfd3975a78a86056a155ce1cce754b8d7e366b4ae2e7e7dcd329936f9ae97a241d531c8c50b361b1eec60846797c5208c8874fcc12c76f47d23fe2d9d2cfdb87c3252329f5c178abbeb2b8bb315329f6cec34cb450c45be5f0b43c18536015849620a7655fb4fc7b786970f9cabcb79f7588a12273f1e931a71f2c1766c277d893de6d2d4dd2211964f014a8026a82e233e4038c34bc68ff7df1bfd9f44b8566130e40d4f871e2e239b0d204fc3bdf6d7bdbec949d68606c07c8b8c3a872d3da0dc36f77b9921710967d0beeeffc8b1a38f1efdfe8b05c77f013c57018da3392e025daf4e2c2f29d7416f0bd4385d4ca8b0cca4622e418647cd0d7feeed30a7efdb410e256d086a223fa026a2633d0058e8c1ad272b023f00b714fac35734c5d047dd15546f186a26b0ff771da5490d61ca9c88870eb9d5b4d0ef78c42be7ff0ffeb3ef38073d056a53f54f8c5e5a42eba404076896fdb9dc6ce6a0a2d73c701a6ebbbb9f9aec3351cc9cfc3ed2123377122c06125ba5dd2ef4f1f623a500dab23ff177aab62ce860bf7b34d4e10f9bbcb53b33fd0b49c01f8e3dc3f32d433f085cc64824390d9fed8a42d5ef9bdb67c8f0f178847853e8cecf796d023a061948cb3f424d816a95b1181feb4140e2343256f013805e739ecade3f017102c242e6c40420be153bf6d02bbf37a72f27ef659eba5d5e80f297d05a1342b0c6f9ea2842206057c26719b230aa05cc684a70cd2df44daea3749a8214dfa40e7b44b2134d272af51107523fc31d271debc6dce6d564304d6ddd2c2b311be134fcd68aa0be4d8d59fc4a9906f239eacd38b0801aaec7feabab056771d6970397691535915292efc06a66a019c9af1570f80c12785124ffd79609347d05523e17159b1fad3ca8394335ef0563af2720c7899cc1c6ada3203be87e3e0f09465bf9c592ab0f2ff80f55bfd95c3c47b9a22b449f0aa222d71d5e72a6f51dd13f2136fa722d48013e5ff5e1f06b61c729b22b24bc99d65e3ae7d071f795d3e9d8f10da46528cafbb247f6db902b471dedff0f4864bd3c861a289bb488fc4f68aa1ec3835520350ba0700c93088335e22372d818624a2177951632d7470c4fd4e71221b61be6b1653d4dc1f07b6ab4d35f58e0a810a6a9bcf6e72fec8e57d233cc8f41e1e59f72e4c7bdc9278b1f55a8f482dd2a074a8b46c875120a7ddcce1a030aebaab50e90567a8f78921911fb5880b9a5867dbc419c6d2c9d67950db4ed7a15ef3c36a095f4db5b427b29e1fe6a5762ac443196b95b1c47e7d143e0f6f438d2fe86192da94094f596af126973ce141cf9002e79f8a5d4e19e7c4e9e0428752e039cf5759839273fb738898b39de53925bc281f7f0464420a1ec3b99fb737afec70260f7e23d94f600f4d5210d19d23cf9dc4c7647a0a8327623490f0ddcd60bc67c91caa7dfa4ef953d8ff01aa90c892791f3d860d0ad80bf8ada1a5539183975203eb64da374a0ed3abb12bcb37ff8c0b1b89796368cd8cf1759f0e7ed2769176da3622a6c915880ee18c7b7da22be95cd9e4b7dc10db2c37c4d192c858c3907cce8138e1b8fb8dd164e7a46d652512e8df363e4f89f05388226de7da3ec40f81fd519b4f000094af838ba8d7d4a71306c2843e260b7bd89092d46c466a8b06341a3df81cc07fbb7cdac599f8b9be3cadc700e86c314a37dce7c74ca5525939c4663261db4f33fd59e5e1383be7054e36e4c6acf6cce7a49d8f84f93a817462da5e3cfa20ad132d6082497bad1ffa62179631c947a80fb5bf0ad1efdc9cd2300f67f231fe3cc890e4d2340569fd1b9be94a84c05db2937b9be529f98a4176db71416eaaa405d4b675b3df694c1585c7b0fd9ccdfa35056513ce5f190979d7c17066f07cce3ba96d87efeddfdf4893e2cafaafc76bc2001767ab1f0785493ca2122a49e4aac6143af1ee67eccedfc3ecfd4926a7057afa9c283c76e5864ce38522d696c52deafa61939cd817791420c431a1578d8f3b7691ca921de8fb7016c9b5b0c42f56f2639706b966975586ae8a4f9ac72cdf10cb071222e932064ad13f41dcb5751e2360af3c28d1fa85aea76ef80ff5275bfa7e790023d946931ad186835e673f62504206d22ff9ced23f71d23e3478c184e01b2e4d2fd29913a28a5c3100699786e40ec5951e433fbff6153fd49235e8867c13057632a29a5b3f18bee0338915273038e704123db17c4db529919979d4cd917e84d4f9b5876150e9686153e45d79ff78b52fd7f3ba3f615622cca517a546dde02c2abf85fd0f7ed49c2eedbe3f0f77d2f08206bfe01f8c61ebe3d08fc088a07ecb5915e847b7c06870301f448badb4e2e63682ba590afc5f14a424fd807f7859e67ed22fd1d827f78646915165efc2201e154020002b066afdc84176cd90b3d5034796cedfa16266a7aaf3ded29b8179cf4663b3b325e38b2ed03781d2d96751c4ac8e9e889ee92785258e347b07498565cb6dc9527acc7a181998f4c1012b613cb69e2ace65514d0c8c1157bfb56594dab9764704b426dcbab275f257d886fcb17b691337fa2ee80f4efbf029ed80189ed1c290298de31cc030924f563a9c8bb014ecf1678a9791adaf8084d0de7894a0f0dcb4e619f5a1ba603d7f38160722608c33a4ccf2d2a00fded7f672886ce6d26cc2da27b073732331fce510a24b5410053dde21f82314a54d4e6d7bffb125dec18fbd245fa012bad7dc64af28815924e44e22d01b81219de736dbaec47dda0d82d4aa3beedd634329d39ebd75ce8f95e1a12c78f0d45ff0d0c83a1bf71efae1aae8a44e853e25cff33dc007e6ca33894911cd0668d600e8a163f59e8770484960cc6bef16122406ce519c5a8e90f61799da41cc912477d80966ca064bf094b3bc74a23d44b5c6f8d8f4e758ea073e5c48b5e2a0fa6243795530029077ddc01d60c81755222c094bb02f8ad93f7ca52575900615e9248f0e54e6b100ff8ba59e7792ca5ac42629a707d5d4374023217d3b45717a1acc6586fcf2efcb045108f30798355f9001602dc12f1c9e5870cb53bb4b1978bc8d85e455876364b47a74f722ee8921f9da9aef1a6716f737634aa8d0a295f12bc1d71ccbb57e9ff158fefeba1c53dc3d777bf4360fa4436620a7cee8594b3c2aa498fd80e1bc5e036246aabeb1cc6d7becd11ee4ce911d25237d726dc38237ec26b22e8b23199b861e4151102893b12148adb737ce98a9c8a226ca62e570237f632ae82a8d4c4cb559610741614501bbfdfb7157e4309889f05ea737a713770b5a87400a75aaef0d93804edd3a98d378c319279db9f41e286cc033182409135d2c075295400eae6025d1165e5aa7235cde7e9509b104fc8c0bddd5c98375bb09725d641f4c99c9685169fe84526b6efef3384bfe96b229b2e625e749e16eb0e277c22be6b49c163800e3dc97894b8cee8400cdd2a709840b7f6aecb3ba9998ea9fa34e2799bb5a33a71fd6e6b9543e009d25714bd4697b2ffcaafe576c7914dd6f2ad36667679ac113d58e6121f08c2f7736f336f4a1a32ed77f7ac9b6239eb97129effddc2171496ec7e10f91597663c50293808340b6ce4a5fea9bbaf618a24bf514e6cf72110e5e5cb81921e81906e6f24fa9d70333cc0e78e9a8915ea61e27d484c7574b1649f8267f6017f60a1f1d9e8443b6a3e4c7cbf2c982a85f6614ab230f382401cb55861498ef3daa7f0895e2395ded2076328868fa4f0f8ce02f941916302cf4fafac7408496e9428421cd689910be90206b519ff79cd642f7214a5584d260daabd3ab3975f97e9b62780755a0712a9ef7aac73506b2d2314863e592f6275ef25ddc79a6e80d20dd177d4dd21d31b813d9496434713f25f115043ddb72216207dbaa499c624824e583d1de19ba4afe503766185ffc4ad06712c56d06684da703fc219bbe246818f383a78042611faea6afd427028a664398bf90ad11531dabf9cda38dfca8d639afb4689cd1413600c00534b2f370de0109128e8e026e80fa11634888d060d3a4a673864d05092a385a555493559512bd2ec13300d53b17a2be23b596757ec0281b3556c972de3d7aafde01365c17bc169575bad464812303af2035eeca1804346b9d0463b53d0e856ba3a58b2a80df9360a76ebf5014a552aedac2a6661352070035e351fc20096b124661fe23ed9e3c67de070cda7744d5501c6b4c61c2cef0bc07398cf3d56835f90c79c3850cec694bedec8f90d17b1a9d60d0e34c9c1e737ec881b96750613f98811556d30f92dcc29a5d5ea701dcd7d84cefaf6e382723ade1be8ba6ca32a04e84d0dd0f6671d1e9353071a47cd71a3a0ba7adcfe29702e51d7e0e65582e3a9248a5eb7d5b05e6dc0bf75524432e842699488b01efe3429df0a73dd96edcb142ea5193ad3b7bf71026e708c20ad12a82db92f494638d1929163d089ef523c9759e4fd721ac0153b56aafb52c0c13380de998fbc9f40155ef74071b0c2faa71fc3b6701f82af0cc67114a2893c81ccefd531507c60c2ef133e6e30801af7fc7cea6495e917d82ef56638167e16285872d73bef56721823c63d84e95ea72c71a9ac1da5b281f2d37f52ec0d72ca8d78184bf8264bd07112d082dbe904ac24d3cf1579d86fdd1615fe792d1e310c991ae1a05244aeacaff63af1978f63c50a9dfa558adac546cfb4a3e9b80a543eb8af41de8ce149884de086ebb50943c29ebf167f6fb7b99efdc515d570cd9c40f43c77a33d27a3655a23ae7f3f5ee86e1a08835a2e8db5a44ee30e3c1c66a2daf28e22ce8448c119c4a87b28a658d141cc7fbfb568fb867af24cfbf313b1872a42853a1293a92501e4f8421640ace2102fffca837b8cd8d07cd92495138417fec90a1ed12984647a1cb18c50b25785d16dd53705dd5da77b794d41a4ae31cf5eaef17aa6a0957c6595185105d70b6ef4c3e79692f503b45b8f582b1ca347f2939254107b70a6abe092ce53fca136dd4c9be272ab20c41de426620a7efb56dba503341fb23739b37323ef078d128d039d4400a79e4a8c20be93fa86cec1f52e34925c7e00633fc894fa00a0cccbf50b7ad3aec35f9fd0f10b82d1b5f185b63abb1ee19396217b5d8411fc45cd11ae815e728d9d09acb20db0f4e537fb0746cd6385679242c6bfb612967f3008afa44a0269dfc064c95f88cbcf34d2b9751f06b145fde657446a7102fae0c7961be02e59d6fa0b75882e637c69c82bc2cb0232ccffd2964d8f91d0c2a1f7ee7754e0d0ac69646b210369d3feef9f68b8a1866c56469942ffdeb286d0e3be6eece122cf741165dae9de778016599ba5cbf8826fd1db561e10fd4f9c3e2328c64b6ad0b75c49daaa503cb3fdf7bc79f5fa91c3a59f545a969ac03c72a869dd1a1c82eb97afe85884616f011af2d9df656b8e652feeea2b8d026c79ee19d3f7d0f8cf55907abf368220fd097ed26fc942a46af35a5519bc8573f57df1e97cc507159e696322ac2581ac930954d8352fe7d4e346fa1cb15056a5aed412a19036d3c46212c726a37e2442a52548c27731bec98f5e500bea28c8608f3fe4f24cab5a2582b9c739491009287798b03995f891421e830a8c195cc92720e4c08509607498f05f6be99efb14cb0045b1621cb63e6c1c19743496f315d49daaa7094dfd32aeadf2510325b767070a78be58d9d0c90057598fed16fd9f617f5f5a53b7658a9cdbc510c77d17a757f6916cbbc7b293c956fc23f2dc7a6d236518100e715c68a11cea41286a0989c4f27c77f612d7ddaaefb7b715b4a1d31f09a8ed1e00b131db832a5dc7fa05ebffe2db5a8cabde42b3f2329b40a309e5e19a7a22f31843a932c89938e86b057d0fb2a9afef44b0c58bc879bd1f407d2e6f435bcb294192619f04a2a70923778ccd4329f24d0cff3d95a22f408ad046b4a195916844ffb64faef20677bf380fcee634c38343a39c7c23016c61cec95097169b0b8ae55e380f3657bb2a7756cc166d5287e948bd28d07fc782a75f20387592eccd0c0b146912aeff22d83d4c652c302751b2b8b8cd25e26c959a9adcae57a0ea75c29ad0a0b6293cb8859887d25bb4b331e839744847766ac9f98a4467f0fc99725ff98b17ff48ee81b9c71166e965e4d11f8cdb3e95890b2897534a8e1b8efdf39c847c5200c48ecd4f0bbe143ffc2382b4408dc18f84b723af4c0d9641726d5e01a5157ff2807110ceb7aaca8cbe64b1c380afaa957301835f11d50565e8962e18780c141fb53400dbd52236b5582709b676869488ad27b8290c4ef3f626302cb95c2972641a10e71a59589a9b3c4a611f11d6687ca66c40e5841e7ec15996451bfe937953ad7ef30b832c31f3f22518f3ff244e4fe150b2893e68d1c0461ceed7df57e09284fb6bf5ca142ad4bd9f1afa8e68eda1078c8c16623d21d1ae6a85c414524b0104886acef09061d7f91d4c60d77516869d81d6ce45dfe77a817af1eee577d0e06cfe55d953dae73710b8b6b01dfdea1ace9a894e40b60f3f4d5e154b7de9bdce416bc48151bf86e2586d8079290784245934148bfacbeef5687945b7cff578148e58e045fb1766854167bb16ba40948ac7a204a6360cd6c0e7a08b9072519fe51eb7111ddf37b606b514e7af064d060a175cd447f3789c86f2cd860c14a9af5d263af6ebe70235bcd7250ca7335d9561382f32c5a6ec1185137992fa93bc1e5cb541cc14bf26f3f964e86cd0b03c7a43e79ae4eb34a4f25e9db0c1583b250332457b0e5dde34da72aa0edffedc5c2458b10f1007fac0a883564699ac492f6e4b7bde19d4c955beb01246f07c98b69a3d9f8046825c7b8ee920f361d804941b56cd4cf8e618da16c9c7638994840cfa5c2790895a440f53b32cd0904393b5a79556b052e3f8ee48c45d274883bdb11168bb9db4d4d822d5dd17a21466fec066df569f4306fcb16f3501e6bb5ae9b5ef3c5e2236e6016d1e635e52f9996dd48fffaf4ccbf226b3eb9429287e28f714f463631ee470a3119955f78ac8b828cdeee71b441ac0ef5d31056ea3f463d032d98758c4550c72cfcd76e33f0ce3a7f703baa6a2e459abcb3bb0e6455226ac05712233306d9fbe3ea6d5802ade13f419093e502bb7aac29431ff80d1f4c82741823ef7e0392879e889123782fe324eb266e7334ce5de4af58a11413f996bf77da9e612f584e4436b0cc01b64e7b0a4febb8a902f3a636ae202f4b6add1fadba4b04bf9e2446dcac60195e33e1f4fb495fb049f48c20eba3f9f044a403a18361f4d3ef1f217793b9bd2ac47d5e4b938fc055b5012121b536e9946046c3c5d7b5650bb4b334441df26e35d12f47de46a78b3c3e7a7d417524b68c50d46536ddb821d9b9b18ceaaff3002c11998dbe007c6e5c6995be077def8c915f5b57bbdd3e72f4c9666d6e7630ea386b81e5cf16ff4341bc2b8fb8d8a8ebcd399c0994498e99194d9cf30e0ebcb04b0461e2433a1dcf4206a141002959e5fc9510155385070afca7fd23fe0b71b5fae2f3c3b8b55e1947caefee2988f187f69ed2e30b4360b8402da564c25e9791a0e94633f4e8dd396a82779503e0d0689a111a411da1968c7cb2ffc735c6e8c7012725b21cafe64a01f9a1061807fe4e0450edd30c7edf7410a1e60e4fbbb0816204e87cbf1a0f9bd664a60a6c68ce1e0a03ab644bf7f8c822b817d6899def7ff2777dd4eb9843cd4eaae0fb3237e70552d0c129b98deac2431510a1e99d805a577017b6a7e67085765da456f8dd822f7999a8fa722f96391c3a18d225bab0e3f70c262ac19b6f6e0eef107b15e63f3315a42c1c752d0fa46dbfcf585fb30b3aeab249dfff7061fc1487bc2e0da6fcf51bb7fac7b63f3c1e5311c97e0176562fbb503d3c94ceb47ba58a7bcacf9e177e733e29e8fd421f8e72d22dfeb778528092d937e6a17b86f6731f7d62664cdb7569ea0f50d496bbe7265825064bb5403de9a0fb7f5c71ede9422a2833c7daefda662d69787c9520babe6a721afbc0e828952170235f00115fef331a511f9bcab419ed486067a3ca6558eacc25f4c3daf3e549874acd379ced987b31898d43d7975ac440c6f3483f0009c343ad64a4710cb6228f65a2a98933af373a5b033e7601d3da6468c025f45ded748c26aec28976b331fa90731233d91c186122891ae68d1168857200c3ce45bf74b322e8877e603af28a0675ee241b6a8fad1fc7caeb9e557bc41e1c569437e82b652a00ee2c22860a07991f6d5f04d05d879f4e3bb45c877f1948908849f3180ecedabf1b655e8da9977915bbd563ae56b5e2a8333622a431bc0300e649e42d53645dfc03f0d7ed3f8e24181cbd61bed5d445a374459beafc7d58a701d2b6132159f4b4ef83c0f6ef31e9dff3ed323f8790c2449b993363f93d583dc670c182ed9ab86ef8c1e42ac38e85b5b644210d00ce5326675d99b53c97447e8d27d5c8f97fabef699b757a3b6480456e654ce9eb92cbef39ac522db6ca5b9a9ff86cd212cf9e0537451b7e0265c78aca6f950c50344d4992575c080e50ce6b0c3ad4a84161c2712e797241d1e4e0db1a1e9068e910a44622cd1640305e40c16cf1d042d547b3d4643a55faacfdb6b26363ede0e788a11913730e5f8f779907f8f8784996986b3cb7aa22a64ef4842c2056d18fc322bfa99601bf7f5fa8f0f1a91f4c10f456d47d978df75010c2150012c0c80ee251c5a429587b886f9109c6bd34bc8a6e21c90a831c91dbd3fdbec7809c93083a937f50c22e3d35c3a265d906eea91dad4b7436e58a2060fd03439d24dfd46c60db44c79dec4a11c86d7200cfe09f57405c0b81ad68593eadf711b73058a2a0e41c7b06c13fbe1af5c8d5bd6c31cf2827db85c98e11c7a4a2805c6f3a86c205ddc2aa662358395336516c90f1cda51d295b505ee41455d36e6f53ccf59be99a36989df1ed5f1590de14d7cbd8a31621c27ccef2b2887ba7f9d53818517b5c1207aa8f6d2baf8ce11cb3286fe3522fcfd8d7bdafd3a2f053f1e58b737ede73881038167048a067258239dcd11707d578cbe03aa5f7f6faa09bd4bc25b3b28373751bde5ec6cdb5525b66d0e699772206c0cc1ef57684d6f53529710d72f8b2f0160ca556d2b6c35a98606fb5282fbf13a21dd6fd3a9310fb4032a6862088fbcf65661e47792b53779079c596dba547ba6cf1e0bd1d76da4e2b63494d9b1aadf215431f254dad54c9513865ba08c6c255f6c97095c2b879005d906bac134efc15589664da56dfae148571c7bc8eef56bb7d571701568c78e97d891a4eb53bb2fd7ac4f0f32651585cbafb9045ebd66859cf3b51364c5dbe7bd122bfa33d9724313d4f50ad4743ab6662d02dab8371ab2cd6e8636d1dd431e442203a4d7c61d23b5d4c48ff3c5d892fe9e6009dd3ec27c282015cfc3ebf69dfe2feae9cd83555b44ae879626a09987e1c1365e8ac192ae9722fc3db22168d657198e2285580a2ffabc7b0316819582d661a15df8046883c7b9e178738974839cce4832a0130c4c7683aa1c73636e514dd08c19be7d525da975cf41db3d386631420d26f67037d477f7fe317a57d6fbf583340426473c516cc8797098df00c48449847b4743f6d3512989e8c187db3b9a02603f620a65e189b8d3ad80f77330031d3bd02d8a51d30e216111d79e0a4bdb26308a36e113e7108ac96114e309ffae04b9afa7e4836ff4e61c4a4019b9070ed6f31ca1df8d2e2f1f658af306ff1db1207ed31bf76fd392cea97f6d73bd7e1453f773d5ce5066b82a6f839eecbdde9e40564fab1b5aafe1646eece8e9e6a97b950e3411dee93c322c383d56fc1ccbf8fb88335e2f39683f7c37447bcdba3a982104c7d075ddff671a510d1563af16c1802c87c5cdcac0959f65323f206991618f3d9882ad6a4333a354518ce1d3fa4c9d6fd8bac19c7ce4628321383a298727327299c1a2a371105dbc66489808e6cf1e546e58f54a5048c1e8426dff8d7a536ae17345997d8d47159db8a9b374cdf74db269dddcab9ce7e638137aa6e1b46f08cd3e37dd12a3362e9e9e4dbbe004527747792a864e1a6943779022bba67b37221fb7ec07234af8e6cf4c51e263c5f9eef7bb6c5cb97183d3cbec83eba9477a9e16407f1ce4a77c8bd8c0b8b38654337f7378370a99c11004541b9d2137dff8b46b561a25a47ccd19d0c36a6f9cbdbf0057885124a528e86e946af909b29c0687f5147595bef449a7a5ecbbaab0b91f45206888079fa7e93ac52811a4224ea5e45aa91418ff4a36ac21161a013c4b2c63d7ebcfa2a7494b3d00b3027ba0a2f8fd4ab9d80e95316bef8164d4ad132c66583eebe1da8c5e339b8507e9d4c0a3721f13cb9aa8b844b590cd99e50821577396ddd7341f49d1bf42b1ed28d4d0198d6ad1b538deeadec5019d871214b3640b740253d9c49c981aeb6c4bf6321fa78e6a1ca70f80557a15cb07f354821a8f21c7b8ba903486d210e48a3a77914739e1b7637c216885f2baeb8492f459d3e7c8166852648e852fdbf2592e03ca4ec41dac14a09f5516596301d385c2d89669d4fb9b4250ab0d7f9315e5491ed429439fcac08d69443a77df04a657a0ff0b944e5bc3b2254cbccd2c5f676a9d64ff254e0cfe3f7477732c5b314a7692992728888a7babacdcf6274310aad8615d225239d0f45a592ba7bef1d5421d2f66ae07f40a615f0aa0eba05356e8ba895540ea8e35dfd7a09fdf11355a31da33982dec4ce0b75649ff17f9d508dcad88224246e1489ea2a73bb07aac44c93ac7b272c48ad4b6d0d0edab963c883ff3aa6ea53277857bc0208aaa84e858d008ab098f1856db1fe089c570abf5717302b6e428ff3f7179de8cb58677265c758592b4756f62067ce53b849e42b3e25aa85b352c45fb5e92f099db77ae8470080a0df9fe351a6949d2eceebad4efd9154af5d0a5595a18c82788e8d3fb44ee13ab601235b6592e268983cca394fb36e1cb43b28407b851fe438765c8f27b08650b7315f84cfa2eca79bf068559ea993064d69b788e2bd47b6f842272328f4fe6cea70ff512e6744c49802eef738b76dc907b8ed36b257beaf40db0f71cbdc3ef3fd38c75f0038da20a7d0c822e5cc46221bd478f630d3dbe9c34f30ef781b2b550a028e859a074f41d26fc6f0c2116847f08275a686eefd655f5b327c4721e22879e09bdd5ee4602db8be781dfacb7aa7147471fe4d437c5414fa5c06e16fae35d68d8194439ebbd5e7c862811d1dc9b8b515dc05ba636e6aee4a0752ff22a869f18f28e927e67e7c57aa54ffebb9aa167121d1b6acb4d670899d5412909d6f70db9be36b80383f1f8f7ac626bd9adc04a9aafcf2ccbe93ffe13e1877a006ef09ddb5cffac33aebccb14826dac9a801c922d4d04bef6283890f97753d5f793ab154d856735f9992a656279880c59bc97234ea621c06f4a010994f8a270f34e961dd0b40498dac3c710fbc90d6ee49d7b0962c079b06aa86953042f713fd5e0168095578ac4ca3d8b457771e4ee90e0053bc34892306d14e78469e7b392c046afbd3ac2699d0e750c2286857894920b1e156df111f7f4a42c84c0de25570cded32f8de8adaaf908cc4e34e99fd635e8f4724f85425e8cf05c8ea7e4302afa99a77cbe498b2b4eac0db16d9dc668608ee1c820672fb9211d864e927bb1b84e5cd107cc512a80f4fe054749b421426467702e504499330a7438ac2fdc5cd4e622f7fbfa6750ecc6e622e4539b0bdf940992e8131a229772a967d2816d9da6b62c17808475c710c5f4ca3d31c492ed6c6e88cbda4321b55e600ec9efb77a02dff946333ea50168e3f0a5894067f83b5a46b372445335cc4593e36369212fd43f76ae100bd4382e221029705358ed10cb33b1b137e424d1b4c96412fefffda10ed6a57cae36df1577361ae864596b44bb9cceb4d2706e4b6f8fd163434832611efdf39cc2eea35a690d8e3c9335b62bb27c917b09b1aa2038354248ec5e38423165051153d15096af7b0f9a91b245d4c72731414d9e7bc312e5371e9d1bac5a706d2a544eaceec8b8a958ac1ab8f58b6bb0ef6c4dc63b60488789f687c6c6908bc68bc56af801e2558d5d32f4bac9c4b714a5c82d9e52afa5ef63850478dbf256d872a786d2eb94b6d1970d8836aa0ef1dc11d652c60e13812fb4d0763843ffcd425738cb1ec75e513868f5f34180aad853edda3346e4976f215c5e1e557cf671193fc4ed9068ac463b4fd2e4a21842387c2ef1881e8b8748d5c8e5fe32a564709adf946a092ee42ff5b5641aa6f7602c500c71b91bed0fa03c0a171d18715b3e92d5ea83d85f1a68ac19b52c1808fc113098601925fb0b0d60580d346b46277f910aceb8e0bc88a5fa67c5f94d72199732cadc63a86a9cfb171e9c89d82f34377bb1cdf98b73a477b56d2b0442a1a62d262cd7d0644e06090c60af9a26da0e28f2c7ffcec886280e25fd225bcf1b77bfe8e4702b9eeaffacf85730e38f844a772504586f9831d5b98fa6687fe1188c647d93f25987dc8eff61243070bf0da8502a596bf7ba5cf4c5ffd2dd00f2fa2f4b69696f1e77c023e86c9e54b1f17b0d8b4ef9669f5c596499b744e333582b1e14e8553ab8e0424caf5d58f0a5076f23b3fe523e67bb2625d289b99c6854a287c538eabb31ce446d97ff88923f25927fcf6f1473bf609b8400d7261d7f31f1b19de1e9917e67f96c81447a650349629a420efab4488b36178cf7b640e58afcb5f3363c5207323695e1376e45ec1393a35528d40079f8e5a42d560d43704ffaf2a6c6980f1e964996ef3e4964b1d4ffcb4c5e44e8b4121f420a499cf3a1cc7e2a82f1cb4a04a968cdf8f7398d90279e97b027d1310dca10c3e9c0887eb493a073622acbf26961dced5c11a548aaff86ace4eb8cef16e065f7779e28ceb5273ae6a8afcc751d9842f9d874d215b9e605ed332e197dddf8da6e9cb58fc76225df541f5957b955b31d8e45ad96bdcdb8039e571d5bd46c1794ea30ef0ad9ed0cf7f8261e225f7eec68df5634d76d40578b30cc7c46f84ea7a8f71b08098fa6002a332a65a14749a503decd7cf7f08c2f24751f4a2606bbefeb4c7e77875d847e2917cc3c0982b6f97dfaaf1bb4e43bd69cdea172d07db72fbd128afbfeddf89d9f299ba1fdbee23eda6f64de17cc67d286753472fa16bcc2fe594dda0a8d0edd50441aa34ef73bff1d634318c610e18013e175aff7d4be742301db962e7b6d4be7eb814e584bc759953230bd655f8aef7d1d56d4139ccd029c8659788618af6f19607518b5a55bcd221d64fda7a859087b2f3144df71d4678cde3e13a651a49681be738a31ceb36428dea6d010058edb4be7400ec1507c7d81a226c6cd96ce46d962b05cf52ffc7723c887ba4958ad85ae703c4af093f791a73325ae621acf09c198cdcb6dbe164b82d9a666e8098ec00a97d4cc0b6baff09b53818b72d32b73312f6136afac602354af167bde5340a7d550dd6c6508eb57eec245864bcb3dc7c6086e7ccdda0b3d6c3c7369c3df2edc471115f526c576279a7356e8ed65737eb62ccc33c7114d2df4b35ab21637be33a9afab0c492a988bfb899e3ddd2e5379de129477d03ceddc897148dd1dbd287625d3bfd4999366eed5af5b61e91545e3088918998c621e04a89386b3993941b82ed63da4eda12710c6cc7131a85e9888c07127dde3c80cb213e2ca072495b40c254592bd27edc547e149b73eb4a138cb3a16a89cfab2e6a899e866c67926c9f1bf1824b46a712c1cd8fbb050830538716269682949c3073d936dbf66121f17910a77342d35a048c3c988498ab3a84f5c1356b4360590b65bd8cbf7a693c1f8c28139352083880e444a0a47cf840688fc0e7688d621d0c205da5070b1314a46340dae831178341e1c4a5dc3dcdcf9182e02da304d570955a36f2eb593b10aff9dcc4c467998f5bad023611498ddf6cd88131c3787440ad2c18c36c14287c81ee173fd6a65833fd68ab16ea5f4436f65d8c29ebc32be185dd9e53ccf004353ff6f85b349b518cd3133f4e29ff92a0147f824b56a33fc9357a2ba81ea7e44cb440c8a8616b50d5e9fb60ad125a9c2065a167af4974a6f854fc925ead008d933ba8427e8353c75ab816b7e0a7ea9c27e9751bf615726127a62b95198ddc7013a23fe0d0f0deaa0b39540a59f768f36c4d51363629b560a1115bb104b4fb7c11a36e62122bfd23b475606531a867719e62aa2b112fa291e359a324eeedc669db0aa97f8a34365324b546e5885532ceebcd7e2ac721303dbca47619786990b37aa04177512417b1032d295740fe6512ad98d945999cf543597e65f50c1a337f93782bb265654743cc295cc5ad6dc0259ae4675c291344b086bf15b9fe6f03c45780f6d9b57c9586421299ed335ad17eb96a7f72628a9e87f59f886950e3c6d6e24f12a66f3b11f0bc39ae37aaef8cd2dd2b4f895516f0dfd5f0c388025742759c07b44e099186c23f3af18b416d14a64a1afde98e27aa64b663035c540217fdc650b03e9936b9f943f92a704e0abc68d863973d7dbd3e1649d07a98ac900f934cc555a3d4266c94a28071445f54c5b9205bfbd65e9e247ae4282270c389be9fdbd6d17254089d3876ab5a6eae9c0a820c3f02acdd18cb091499039acd1309e15a5102ffcae26ba989a9294fa45b0d65818f48fbb1964dd1c4369822bc1d0c041bdafb5c8f2d4426c99e8d3f7bb3ac9ecc0b56760c3585ff30b8235dc2cb31e4b6cbc59297d14e15886380b5031c163d34ea325ad1a7bc5b8318ec3ac6f304871614183058fddca54f856bdad6b74f39e49f52604ec40b98e4c962f58ec7a107b543758abf5eb648849ab22f49822c99282f11dd48ab5b5a14aaa20bfa24b2216ba8105f551ce443331c26fcaaafd52ee4177646b8ea69ec26c5fa07f46ed9861001ca4f1d54e24d258a36f6eca9d821dbbc53354a1c6c1a825ceb26a6e24510535f14469c5b889bfb336347ef87c742a2c665dab3351e93a055d3fced550ab6b9cd404511c6d6fc31a0536f7d89e5201d38dd3c61f061311f8b42462c3de75849eb4d6943de42fd0ca28d670655a31e4db4dfbbaa9beb27e845c613f48ca587a56a7c59014d778124f7aab3810c9ea3db2eab66fa2e45294209cc7ae390c449a0d772d6e3a5f1ba9aabe8a4a7dd3442ef9ad104cb3695796e121f2744d85c09d95b0bafa89440dff04ecd6966d25e974162bd1616dc59f29ba084d92595ca7d6484639780163ba0eb2fa1db89aaa39a60b0e522f0dc9410381bde2e58214e629fed8807a1628f92d86950c51313d05f2b4e799ae0c703dd93db59669bdd7f541ec69a6059558c28676ddeebf47c7988e0b731ee679f76227efd111030d8bfbec7bacb56ac32479bf1da0328dd97eacce3b270907a96b293be400aa46999278c9a011a22e552ce2a4dcf999ca9d9c7bb7245f714082d0cfdaf7bc071292988209e6579e6f28b6654e3e3a726cfe26bb72f4fe48744acae8352b65f2ebaaf2bb420420cf23715559be9c71dba78f450540357c27c0bf762069c531dff8c151759d0868278100647ee4f01a1ff404ceaf0a078c92dd3e0ce3140bf7ad33f469ab0ba97f1956f646516a6551a05fb8d15507e494ab1598aded4058cecff394e914e8a291b77ddc524321da124d392ebc00b44781a5a4d1ee3c4423ff25df85355160671df896cdb04e13c4533e7c9af3ba524434763c1b85b414e2cbc97baa78429c9107026323c668eed2d973ebd05f101c9fa89897e7bbf3a7e368cf382b326a16fb08efb3fc0dcb756264b0c2f15ffd77477b435571ab16b8f9636bc8889b0e41da6e6d1f3db8c3a6c8c3cd09f0a25f5000255ea6ee5b47bd554131c23ec781f02ace1d429514b865dd94d71264a2af6fcdc7be07a8d56c017d601a0f810bad30dfafcc3fcdf5d70badf513accc2add68caa742d32cb6c2fdd28621516443c227d1069dc576992452b34c602ede2feb527617fc5f881c55b608ce840a4e03c14051fd99f857355e780a84cac0db71f63b840203ad5f4d2fc7dad943737d3e20a7b6bf8d2df712e1e64714adc0789904143ccad8d256bf04f6bde5b5d7d15d43363cb2792e90e6795912ec051dcb24c2aba172424902c2ba1aac151ef85185b179f1abf694eca0ff36e165da4f9dbbdcbc53700e5af7c2a8a576087834b6f2c13e67fbb570fa0248382742be8c67e53326897df5cda04a912c84a27e48e27457a251e8992dcd1e14d480ae3d29dcf56af2d8b8534e1c621cc8a42c21ee389c2b0678983e822e9741f592c6d24735995a6939f5112977390079b881099e1b43db80037504fb49f57ef8e4d745e3038f3dd9c9a8a0d734e7cea723577eaf992755f9e41dfd2420c45d9894ab4565a52e21b9f307ad948e6920b9265d661e52a3647c8ff48fcff33c0780450bfb0ffd661564551ec0b5ffae51b24a7411cbd51ded64d5fa3c50f93f5b3458aa0e5a13a39a32b567f47ba7c91f6b387ba2498950ec257d6638f28eaa07758feaa2b5e723c406849983abf5c88b71fce8bbbc4bf786e5717944ee6b2dde10d690c369572fc9bc3b388ece0dee35283be926dafc2b4d74590a5cf3d4a5168c65a3441a7332accef0ea7c2a86ad448c1d5fd5ca5bee03c298c1963389eb5176e71d94ed2f1f3d9e92700868d97250fbc0d608c4b6651b2ac8d496a76c389280898c6ef115daff0658b56dd4d21a931e1dba6235b8ee50e3415f136b9bb73b52f6e6a560804e60af0ed22c007a80c29ccc9849824c09d91d00e7c47d152202a6068c2ef98a58ebe1cccd8e5a289fe41173e694d94e08c01aa70b50c187e1b7955d7f4cd2286f26c42cb92b22a732439411b73b4a92a22bc3cdae7f37046d397a63cb7db3c286261b156b22dc4d74314ed02ef5059cd23cc877964dd2eeaa3b41b25c7881470d1a974533d2be5d5e1b4f7bd287ae54ffccecd03878ea90e4818f27c6fbc0cc21c7130ed2d1b136481d82330c0904b0031bd7fc72e5c5c3a96d4ce16660b2870cc599d54f9ecfa0fb1aac10b2d207ae2f44700316e617d98ed86e7c5be92ba4f85540eae7667861790d3fa4d5c119c5cf7dc541fd8aca7c0b6d8ee4006dbff4a68840ddfdc2908d0b76d117464dac39a0ec34f4e53d84bd3d6ded2cbda15d9e814db363e4e10b116ad94744333350892c7b536b1235d06ad1d463f0f78bb96f9177e866d7d478bb509631350f3fa98ea15adfeaf6fd806ba76103e4809ba47c596a0b2efdd1bca5cb908c25aac8c6fc0d970bef56ecac8164efae1844a403540ab11eef72ecfe875379eedb7c0c8ae66cd47e27bec5af035c10f26d4307758aca3e733d9afa9b1d2586a9c02d2e2bed5c907fdf6844b2aae7df4c44b5235d0e43dc2e9a4cacb2bf6cf7064b6b7acd17e6822dedfca261230fa9f401bc0442ecaf0958e3d7d4e988a883cdbe720027cf3fd5ae3e7888a77aae5d865caad16f372e4e35c8e7ef9af4dae4978b35d45e90babbe39016e1713830e841755b8b968cd97446af1c12a037131078c89a6e78e1acb2c40da8b548067507e24935e3b00c2daa5e78ec00bcfbd6f250faae6716cd574aeacef270ef19b3a466d7726caa46526410a72e47d77d2d5b2aaf100f5326ef0b8866b1b93b5872438ba3cf4b3da4e72700ed738d1f0d0687f3a5616f0f69eb8d0b255107d737aa06224e0685efd8749cac9c680e897866f040456d18ce1a7e847eebe2c9c38273c230b80035ab7c02a2b71c5dc0d3ec9fe5992b351653e86c5d5aa43709609d6bc07ebb33231662356b04a2cec7e2fe4c52bac21c34169fe336aac347d47dc8406b0ea02c355302ba9f04b55a22a0655bbef302b40c4a01c47f8659695709f3d16811e348acba9dbe8c84ff8156e885994531487124d5492d4e05471d4c9b073a5fbed16820ce4c7a4f0dc8d20a09c44efa10bb2e3d065c73b1d5820087019edda33a9af0f8fc91cb025aad11251d01e4b48b6529925508d88adb8431b5f839d85fee7fa25378165503a0b92262c7dcb663b1a899fcb945d55197655607659594734c365cabf3faf883c02cf01c8c06df433f1b2e241a09b51b8194c3e9d01f3800d8020c54908646697f88887025d5ff9dc1ce3c8c6f315500497ed0082cc3aaf9993ae37cea1b5b695ea060013f1680c995500fd6fdffd72a404d1b08c80d0982f7964182af53f0924420bb7cce33382b7fc74a4a12d1113384430bb929ec3dde9d5a776a338acf1feab609a68024605e98fbfa7774501cc4c3f5d21ec1fb30ebfc520269e0eef4568ab69b64625c7ea49c848a3a83eb2ed8b38b188f50acd72cd4584b30c1d167942dab9fd4dc1e22fb99f6de7ad59bdd63ce8d0a23b501585c6f2458d3b557a5e912b8d4f33b184796577ca4b5099c17e4d1c136a1a6222bda01331df79ce97802bac7d00db124c69c8ae71ef4e614fa54e59c523d06999e62547ba1cb6ec6e4160f4b40d507a15fe759d96d4988fd9d1d8d5587670f6cc0540e205793ab3a18943a1df410229f6e3dc33ae6200eceb531d038b89ff85e0a99f3deac0527c186d3e090c8650b1b7f5b22e524af9731c4951d62d2b3a0c34109d77c77d4aa62cfc58f1706bb1ce4f63fcf5f9cd8c5c980f9b8845d247abfc5e087d12aeee3a8f17fcd089e8b68d66858d8dd3c116e83765bd3a9a5f1230f42efd828faffc0ea5f2a2c9f4990d59887a50ed0864355fdccbef2873790644434659c18f0d85514fa980564c0459eed1d851e5fdebfe49fa41814ca4ec3ba50fa4a2d7ea2f53dfdb9086c77568048fa61f873626076d752731d50281c598d7d5ca3171ebc12f58823c8a21a4f4b305b3eb232366cfcc92113b916b3514535c722ce968d7846b4ac40075c842e0e85457a416d697947d7b3e0c8cbd0ba2a94f884a325522301501beeddea942decbeb63240b8f845be6b7e62290f99a93c1e753b39cb3eeeb8c1f2ca05f1b5f794ca3a11b448b4a55ea681e874f9684b90314bc3bf38619e3fcdd07ac4572ad987e7d4661b9634ca05cc1e61d4b15ed17af60b5267ec3021447521cfa9b0b8efe9c1dc86d4c3275642a788c40c1debdfd67190195906d482699cd3faacc3fef96195268d1237b999b4439d4fc960dbe517c07692d8b839d279ac3f7a91f5043ca96298ffbbdfe41d528ff0ffc906d7dbb2e41e7c8abab13dc2379f20d449baaa18b6b7bc43b89b69239aeb694c7369312908d4a2d018210e89a353726da4debf8ecf42e25ffe0fb1d5f39e29def4b2881b430c65f2aeb18e25de890081ceaa2ecc4258c5901cfd3042928cdb545b1f43a50d21acfd7cd1caba016f53388bb814c031837519dc0b1828074c22341f74a0317bd09c2f16e9baa5066da44457cb47d8627caf1d30fcdbc2a1c5ddf67a02bc4089f6e7282cbdbf1e4a56de5a58974071e857fec4b0c1926a02bc50c84377981a15c72d9645fdf412f9c8fa4dc666c70ee8dd323fb36eecd951973d41b66f3a0d4a1e6b89feff24aada4f9989cbc7f666d2a83d5392d1075f0896562a81c1acefb88468ae64774316743d5bae1e1f83a3a1541bae47253d91245ecf137513acc7062f462d9d0101dac3d5cc76096c135eb4859947823bb1ca78f74c9e2876c173b758ecdc15208918646929653e457a5a90e300016bb2e2360f143e1d16fd11894cb2fb98742dbdcfd21f84a32cc6566179f24b8c72388b507dd7903114b6f9b7da9b3418653f27ad6a51b5b89f8bc034c286a242df51ba24903b4bd1641a0bae8e8ff7cfc46fa339dc619382a8b3777fd67c8be47c3ac011115beb551f915702c5e8f8c66ace7ff426ae3c34c84c44cc902edba6cdb83b17a2e907628414e0a8ab00f552a9f119a975e823384d8d723a931be70150bbf9226487ca17e23be0c4ac3bdd4125a777a8140bbef8019911c0c20c1a3df2580209acb71d3433ee35bde16ae972ef1352b96af692bef5b6b38dfb492a06fc740c2d700d0ad1e111101431d05c4c84dbb247cc8aa9da41f46ef0db4f0d6fd2ce8012b9bb5a56eeb7f4e563ec0440f329c49ad3fcb020dca270288b2c880fb82c2604e98490eed634b74789eda19b45540afb802a5e30bd10729661a3911eafec84164017ddb7b80d8122aad7fd748ce37ec3f8d3a370df83ad4a529e7517bcde30c9166469573e1ea2a3981e256c3cc08e12754b8ddb76a34348d1492ebcb75875fb4a0ea21909bb9df84500355e6eb6885201b4ece4a3ca4686528955f3f92b8047bd43c68fc3311509222a54261d3ca726991efb3a2ed3af21f0c1ac2446d823b65ee1c328a8a6bfc55fceeeba594ff268934ce2c2b9c85f5f12cb88d1db6b4417adbae01003bf0f1bd309fbfbf609017b63775fec0e4424a46981c2a305b25fb58e7a11df880f15d0fafc2b0d5c7039301a0a2a1e970aa45248fe79ec4ab2eb247caa142b15dda38d025818cff8fd61b6f911fff74f7eeecbc14ca507d6c8837468fc38c7e43d1d2d628ade78685f63c2f8ca6c0a46a4714be8a014552550e26021e041f6efe28845ba9f30f2af6d44ac03a60440d794fa355ec49d6bab14ddb26efb851782032676e689a03b7cf77af7d0c480351f42623262056e6744cc38f171a3bf5f005d89e5be1a786245b8ea6d5a811abebc5b7e7254df7baa4b77e64d68166f92c5e894c504753e4848b5c02e8911565b7f4b94015d86c3df26ad6f9eab1d344c6ed22193e488aa460aee2f138cc79016e163f0738f9ba26d0cc20cadcc6179593213ee8f013fa4588af9d5286bc154b4b1ec68858f5ec90e9c7da4bf99aae53b43a71bfc33df354a897d05b9bb46ecba9989936dd00a533862a5531143023db6a509c24655d552d4c1761831bcb1f52fb7f4ae66b7c3c6404977aa419973c52ddb2ca5c1f0870a439402029aa5cf7f94c8c5f3f74e0059d85fa16ddf4bbbfac6c253e54046c14c86fdaaba49c98c99006f997bec2f2a82c05647b5d72a85d16f7a40886aa9cb57d7e88caf8ef8eff35028e2aa5588fedd21caafd05daea308d1446fd8744cd0766f5d89b0cfd98b0dca5982978f1977c45e5988057c07bf595bee1cfde1b9c6c22f6432340a4f82eb040cb270e7a1fbe1a226e576312b1dd7ff6de4345d994942c90ab977f64f0f794d01d588d48a034a1d33ae5830ccb0a30e62164c9a9f625db6e00f115a350495457651a41e611d5de8eaa6f108eb2672a4cd892f1dc742ce78200080b798d9d57ce7a00bb42b0e27555a0c0a46f742680721f0686985578870c91cf6665bee2db74c5206080b990a750a798c92251ef494a8d9f93380d2caa00aaa4d7209150dec9213ba9854d9f94184f8b1f38b308288aa267176fe14f8ea0b46808c112e1545b2c2b07e2a8fad7e2d6cabffe3abdeeae79c4855bf97417d0dea6f30826df53fb8bdaa7e070faaaa5251edd8ea8bf0d567ab7fd5bf49ea93e06beed54f81fa766ce3def4b5838dc361332a285fb45019a7886ab79a1c31ade620f69d4b9e9c737abb756150d59d3455385555551c8eea890a296ace59bd6dd234c772ab6faa5453585bc5aae14200a5c695206f9448bcecc86aba9471994aca6babaaaa6b585a6cfd3f39220b3dfd19346c50b177b67efd2174f0a0ff438811686cad9f045f835e7f0a4c245da1febb74ec72dafab675eef55f225a7d6d7fda0216a69c8f58b2ec9cf3dd38dc95283b3593c66d8e8ded0bace12463290e9710e20ff877b8813d0f6e489498a638dced86cc92b452c4ca9cadff47eb0e76201db9a6dc8839a2238acf8d44d08d0bced61199d5a355e3d6b79ba6a23267e7ffc9c72ac89d8f5c4e5f6831ed492303f7b7db8d4a8e0b36f8064775adcdb6d96c4f64fb9eed33d85e83ed3720d9b6ffc0570adbf61d7cbdbded3dd8de01bea66ffb106c6f1c0beedbed96d64ec8606723991f3bff4ece3e9b89c43e9488a1e7cbf625471663c815212634e150f303fecdb181bdbca4328ad1c63133b6ce3963508d61beb6d628b168b399a5903145cb4d500c4b5f1c3a6b6badb5988c9ddfcc59625f3b6f71aada3266e727ca36602fbde59cf305fbd215c6648b16195bff8fd65aaeb67e0b3d6d6d49275b6781b1f0b2d9ac310b0e1c2e37d648e5682201938f3372d02c2d817243df8a3bdb6c07304ff8d7095ad76c5576b6d96cf9cbc7d6595f6270e7d2c600e312214a5b8e5269ae0dad6d4d47cea48ee4716b2a6033529dcb82a4daf6d565a74c3f39e733c29dd39b17716b2fb02fa800984979bdc16415650c95af304b146c4bb63e83666a67342748d929bbc250565695e66999541b51a4c593125fba52f420d6b845d939a7699a33595400c8c2d43004a9394d73dcefe5aecab448d3742ce835e6a5568d1dcb04d9f92dd832cb9daa326960baf8549929dbf943c8cf01b9f377f070a6cbce9f810fbeda2a321d3b3f085f85c694bc948979d3e345d98d4b63678c1b0daac8f4d8baa7ca8c18335bbfa9b5ba75d598a5ad89d08c21e5b4ad2a4c982a31426a3f39a2b7d0e3b2e06ac61713c4c0d0d05205264b6e28cb85cd56a59452e5a5c7d65daabe90d03022aa0c9712736698b0fcfa01f58c0dac0da96578f0ceb39c858c704273e5e518230913af1fb0b6953470313393460693a5968c206bd35a6bdda569e72e533258b50b1caea58f99a4dbad2c2cebca51df6e719048b828c2c68a6cc90ff83136b0773bdb39df6ec833aa2c2b5106c02044e68dcda635175617279b9a855c62a5b5e621bb61b3e550d3a25835ab4a15952cae176b0fe83addcea576d2369b16d28a941d1e48d9a261ca0c2e5953d8646d59e11aaa59548658d15a6b1f1819255027aac881b181bd9bd6faa6d3348b4b2ceb38844b0945364beb0786242e69fbad7bba5b1698ad83704144dcdb781dd4343067137aa0deb6a1c7f180433ceb3d1cef857840ade3016b39deed66420dad2a1394164c54e07154e544ece864000d1812400607d4141439a298ae3035630bfa91a6555160b6c6c66530184c310209171113ca1270cebe5e00516d6db3b131612c79c128db3906164f8c2b61328864d0a0cd6cad8f2d8e2e96b48e2ebc84bd70d24568838bf0ec51fc94532a9d7c12b961e14804cad65bc7222b287c2da7e939c48a9e5322c60b374ada4869715dfc60790d0972c28d9030baa6cd8274790911727441ceb99673ce393f6dd9ba2b08920b20d0856a99e6aa0491ad16b92a1c5a6b7d7dc009fb91c5821f665e40a46879f2a1416b3d228518272c96b47101e5c80ff82c36b0f763b77ef36c6badb5e632c623cace5b7af4e8e24402cc490b903d3aa901f3216500c79e28417634b9808102d4ce39eba82265b8b4f5efe8e350cdd651def8256a0cd9171f4556f85c6da6f58ddcf4b4b332e90038acc2e40072e598032d8b97591914249668543953b1934522e7cc23cdd6578e36a8aedc90a1c108a9b329ca293425bc86dc1276a0766642913c3271b16dfdb59f1cd187516192f103ce092654dd249f2f3b2f0db7d6f6b844a5831c867cc575d69380704c0e2250b0c8e2dc143dd976aca17596733e917572ce64c19dcfe57996a6471a6954cea50d0bb5355a295ac8203cbc564881a32f0a3d268d8e161a746061b154c3a5393b6ae476ce369bcd4cd4ed6d369bed76bb71dcf9cd6c9b90e470a0d8f9897070d93907145886303dcaca74f161021212277ec8c8bc6a4b6db69ce399c678d990d2c046992e17045661a89448ad39e1c684adcc94ed53deb9b4edce339b0d8d4ac3894c8d151cd498422eb5d02dfd5897c476073b33cdd8d98ad1f6243554baa1648854c2476b5d26666bdbaba92d458bbede07ea07a2449d9b90474dc457bba994ae768e3243c50cae9d9f28e591f0b97a2cc9d6aa366118b5c4b8b1f3ef64aa186e76eed9d99a50ca08a344895adb313043e516242d344c5c24adb5d63c6d7d1c401966c206545765ae6450da295b5fc72652bade3cb9c10a582bd2b6aa311c61e921c72979f6236bce4d4dadb8f40e2da244ad75ce696a4cc3b55555cd75204e981671c0bec6d2c8c15d75ed9cdaf2063796b9013b971d68d9f935645555696469a1cc82c683000095a96ad651e52583adf5ad8cc679762ecfe569769ed9b2ba4c6cad35eab6e7d1560fd52a143bdb6c7aa8d3f48629d95aab5ec0cc2441d252a3a6478e937772cea92d2bd53e4d89780a2575753fddba9f76f97a55de7dad8b5561481c6cad5120a063093b361010d0f7808080deb2f120e9c8ceff9393cc76d660e73ce2a7359027a94b638eb050f3254ca665e11794b8438b6a9aa66d9d828a03d51e756d47e187cd36f4606b14625bd7747aa15c2899acb8c2d5e505c72c8ba16a556ff09c4f90ed344db5de5a6ba37eebbe4b0c06832bb43e03646bad356ab31d91a6b24cd47e722d767ea22309af9ddf42afc7ce9f4189323b7f013478b041c6ceff413e9af0b2f394e309223b7f87e4df65bacc6aee7b3bdbae649bad05112f172484b6d6baca45d3d64fe4ab00b6d66831cd7927e732346cefb4f59bfa350b385bff4e2d45cfa0bd9aaa69ca226821d5b148d257d1629a5ad9203f870f8440e0c0f912b628924fc86976e415c3ad07b0b5bebba4183572ac78898981963fc83993a9d8594dd507a228140f2dbea8ddbf5fa5226d6bad514f62a23dba49cae4d692193433e2a7f37193fb6a8e34bbcca3af437fbe79651abf98c4b37dbe39c4be112cc8f818eb9212d345e5770afd79b7edcfc74b5f757f8e2dedf3b1d257fbc60700393dc658992dd972e4773e469e8f8fe763295f737fe2255f83fe7cace42b857d3e1676d9e7fbd257eb669f2350c8c9615c725ab1bcf13bdf95fe81033c7c0871eeec13f7e75fa5331d3ed9a3bb8ba7adeada27cf3eff8ef90af4e75fb2f3af99af67e77bd01e25fd6081852bce0c252e7e679b7dbe17a57cd5d9e76bec1ba19424086589834caae9671644e769b86f6fde6e4343424240d46cdb856db3e974b9dc8f355f05240695a02022f6e9a10f2f5b736dfd83b8f5eff8aa61e7ecb465a36fa23e866cf4777c35da40404e4ad60a1a873b97554e2a2cc82a543bb6ef31036b0ffcdd06f628e4ac3f4759b1338aa225385db27d5e15216e5055a4cb952a2348c2f67986ea0d4c616243868c99211bab052c0a8f36594d5353d6006d6001368ca03d80ce0927c263a3522e9cca1243ce98d841e6f503be9a0deca1d9aa5f289aab862077bef2f3da57dbfef95a97fd53db3f3fdffbf979a29f27562100920eaa909880c1cee6cf2562dfb90c4a6457320bd8f6ff11fb61b2aba9656afd346dff1f16bedadeff47f8b3648f84b6ff4f10fb4ce44f120abad09eb89060f020fbf9edb2fd6f48ecb35f5d9ed84853034b9ad8cfff96f4f57251629ffd42a3452c8e0a2048c6c67cbd5b9648335fd3b3b45b945d4d24486e52dbff46e446bc15ed916efbdf86d867168bb7a7b125f6592c326441122c726449faf92d887d23564469a932c5751585e3e77f4bf2f56a112add967cf5bf355100b3abc9c4b445014921698f72db9f8211fbcc2190c23169c957fbe4ab25425128426d7f0a52befaa0d9d5443291d2c88294d867268d6d7fdb10fb46d4502aa5acf8f266cd929fbfedc9d71bb6fd6d44ecb36b905ca6cc9a989812f3f3b7157db519b1ef0226809181d2424c9bacdf4d22bb92befadbc46c4c76c565cad89ab6bf8d854d685bb24740dbdf16c43ebc04da92aaaa946dd950610645959f7fede8ebfddafe3524f659af1c56e4809942030bc6cfbf96f4f57a6dff9a12fb7a94806c2142e68b6ccccfbf36e6ebcdb22c62765624ad1665576cc54a4d6afbd788d488b5a23dc26dffda10fb7052897d56ac8d10305792a6cc40fdfc7dc67cf539f3d526f96a854ab52521dbbfd6e40366571c15e523b6fd7db67c903e497bf4b3b1f1b8fd7d82d867bb84e9f104489a3554543f7f9f245f2f96edefb3e4ab7df2d512a17c8a3ab6bf8f94af2a9a5df18e1d6964cb337b74dbf8c9ad1c30634e7cd0409344e6e7dff3e4ebbdb2fd7b88d857c14a8ed41b17295c287ffe3d455f7b8cd8378247d41c1c348c6cc959f1f3ef39fa7a91c8aea47f8f580f935d7109b8849ea6eddfc3a2474861fbf704b10f0b714fd231e9ab1df3d52ecdceb2c4d8fe3c693c517675356a78a4b63f0f111e224fd11ed9b6fb19cfd3f6df51621f05b69c52bc28333105e477b9b6ffce99150b43f5050c581024623fff2a42259e255fad310b8abdb3fd77c0ecea60603b62db7f676b07b9e3bf63c43e5702778edb7f27887d1f1879149320c93833e4e7bf93e4eba5b2fd7784d83701123eb0b89480b0d8f2f3df59f2f56e6dff9d21f6ed145733a62051630cf2f3df79f2f54e2142ed14d1b6ff8e94af3c6876752aaa34b2e5993df25187d867cdc6bec4d0dcd0f811f5f3579f7cbd52b6bf5af4d51e7db5c8aea4affeaa98ca64570f12446ddafe2a0b55a82ed9a39eed443569fbeb18b1afc253d70f3428a82e4d7efe3a475fafd6f6d7492ab1cfc2d11a3bc1aa2a98a2c6cf5f67ccd77b5c9a9df9eaaf93e66b945d9d070f1da9edaf434487a853b4473cdb5fa7c97de7d23f1df3d52609ad6c7f1d25f7d57efe29985dfd86df48c5b67fba95faa752ee4397d2aba4a5272294ed9f42b98fc2cf5fa3d9d5911c49a76d7f4de62bd0fbeba53ed34aecf324e49692293f90524861f3f3cfda5e74258652132e35ba4ef8f9eba2af378a5d1aa364d9428544096f7efefae8ebc54276f9aab7bf16f395c9aeb74c19165ae83eab7397cba411258841710356e6cd9c1d3f7ff4e8ebbdc2c053d5900a86931a4d7efe68d2d76bb5fd5125f659325c4d3f908a802d71faf9ad5a9a9d15d3ee972ffbfa9f31d89ce0f2149566ccd74bb53d023dd268512951a4eac6cfff3cf3f506b16fc414942d3496aed8b092e477a10895967cf5479bd021eae48f12418968d11ea5dbff04b3ebd5a2e514dbfee7d6893c93f648ca7da7d28dae92969e4ea291ed7f42b94fe7e79fd1ec7aa9a8d2b67ff6cfcbec9f95d8778f44ec3b89cc3813638c0a96e1cfef93ed16d995fcb19dc9ae37c80d92330b5f7fde3fe7257b745e223169bb0abe70c8411b621943fcf99ddafe6652897d23808c95e0fa51b544e6c9cfdf1cf3f54a2d9bcc7cd5396bdaaeb3fdcd28bb5e181786d4f637899866d11ee5ed4be65892af56a8642ea9d84e61fb6330bb9ec0f68078cb579df7c7487f9cb44746ecbb410772f9f2862a0ac5982c3fbf4eb68bc841028b96e254d59c9f5f13b63f1e629f8d7363868ab22461694b7e7ea3887abb6b34bb76c04b1a99af3dcb337b84b7bf2bb12f04f61130d824c17281e24611b39fbf3ff97a8bd87781375c66a83163c411f6f3f7a2afb7c9881e5e53a2a84a687de1faf9fbd1d7cb04d995147326bb3ec06ab170a13b07f72085b845bc518c81e5e777c9f6bf49bb34f3bf69be46d97500b6777f00fbfecefb5fa20f3f60df881c41946638515af230fe2ed4f62761440f2c5c4436675a92557eae44a8e4ab59b67dfb5b0cfbbe05ec8ac1f6ee7b2d898d6e98af2f5d4c18c3defc3cc916b18398648e8d1e4e511709853528906e82c07162f5bbc4ed462c63e7f6d7421c4ff8e6cb9c186f9248d43852e32d65e0b2d6e4d83adc106e68a76c3205e54c56da8fdf35824363244ad132cad6e95eabd1b175bf93a506ced6e52e60e64b9428655e748152e4a70a9658d67207063515068dac3426b66e4493a4a9234f6be6389570896c60ee6b4b1c0ee759655b5ba771b61e1c0e37e684c3a1f1b1756feab2d0c4d93aae1a0e87c3e17470382c24a2c709090909111191d93a32a4adfb1f5d161997adcb7a1c0e870b010bd943cd172b5e8cfc80bf7177c806f6360ec5e1deba692257e9a1d50087c3d9233c3474e6cad6e1703b381c0e6764e370389c3e43dc3a9dae4823c5d999e8f313e93e7f2f9bc841a1e8f387d02167329d0a9f3f05162409efd21d66edacb3f37ffe4b64f7f96fd178bcc8373b07edccfbfc57ec86b9637799ff9e79506a67ddce177c7e6791873ebf2fe54fe1620f0d0d0d55a5b0da434355494c7be82fb8e082aa1356b6909090d0d7706ca1ff114291660b3d91affa793c9e09377bb7dbfd5799206e0b2cb0e077850a3c0d3593448b8dc3e17024a436ee7f709f2b51c2c63d11ae84978d7b0bbe22a057545414246e9d4ea7fb9ad9d6fd8fee7348505bf7443a9dce8f888828eb6016245f5a53615b29c684f06421abaa215dce43391311f1803a9d4e67d4e95e48287862e370b85c54eb8d2161c28e303368627ec0bf4136b087d3e1281a7a8d129fd47e9748a79343b6716fe2a8e64c6ddc71799ae572462e4e3b77dbb95c0ef7b99c71cb09185c4964e370b9b3887de7f22cee32d9ea5ec5e970b8394667680ea72b52d9b95cee760e75e750e8732e8fc1c8bdaacbe97432865be84d21211d0f78b790ee9aa14b9072424257b6ae0a4f95219dd0ee3c3b974242a69182d08503c8c15af305864978e6e9d485097d8e27242414438606399d90d0ee829b2566258479d9d27506644899cbfda8e961be7ae86b857d7f68088672eb74ba9c6e0c0a1c4b51925cc46cf991e6c8e0e85ee8559d904e48570543ca42fa5738ccbd033c7c0891faec344dd3f40be02b859dbe1efe10afcac6969dcbe550a2108f49cece6f661c719fc1dc6391c83ab2b0ba826cf2f1933399939d73b95c4e0d917ddf5c73b91d4acc39e79cae19bf98c1c008e6c54eff27775bdefccb9dcbe5d23349a15c2a24b405cbcebde96b91cea95996966c4c2033f3c529cd39e75ef76a4e97fb5b8e779e1571bc072485396e694274cb48e4be17724e73ce7d8ee2b4330e97f3c964ce4ed3d7beee7c4dc74eff27cd6a6266a71bec34c5f574c9e1ae4eb74389699acb31c1b271fae62ea468d0a28e8712736ee36a1b8723fa1c8e0724cae5dace4ca680769ade72b10cb6ea22a68f1b16b7ae1d956c6d1c0e770b0a8aa202cd0e0a0a0afaa0270afa22d4cebe9df3d2b8d334282f611f4ac4a5699aa66642647c25877845fd80bfd31e1bd8db69fa1fa4699a3e4af41e5ac4e17868b1cd2d4d8382545425e1da019f61f7b2756b79efbd329637e2bca850b5be5a8b73066c64dfde6c7b8f79396c84d6b051bea635dfc47805d7f39573dbd7eedb809c2038c2dc888251e58589f33ccf145d748e0c150a375f29a850a89d6719248c51f4c032f4c3c7169b2c2396091714c8809da892c568cb8a0c193056288f646f91d58c61ec6c9a182335ed930a490c06245490e062a5c4910ef6f9194a8c6131e104cb0917461d271c2ccb5a28aaac58d3e2881b6791cf5ccb790ccecefa490df8fbdeff795ffdbf7a73f67906b3ec33035b4586505466728459719ae1f1e6ef9ec639372ee8a439bf97fec5a64e793def6913cf213a9590c06fca99aadaf1641ca5c93eff2db8cffeca76462fa4195fb14051143d359aa23aa8faa6fa36e5d91f8e7304400d8dd219d27291603a12c6630c128dab50ef99258fbe85c7bc13d55ebcb7f57cd9131445f51bd39e045046eccb93235a2b5ef040fb01df4bd8c01e8a6ba6355ff3ce536b1e10456b3e288a7ee67dcf028afec9437716bc77f27abcbfffd8777ff71ae1946d7cb431b65e6937c38534d55a00ee04f71db3c28a14343f5b80d3f4d99d6d7f8c2e7820d1b6faf369f189b1c5d671cf4efa3ac92bb6d50e6af7f2802082857dea1feff98ef65e0da8a3e33b1d802002057cf89c888c3ac6d7e61e6b3500dae3461f45d1021460a3ae2ecf57cdb2bb816773b9f3d024bb1be4f773971fdda9657783fcaadd6adef9692e5d4707eb64dd9f3b7f8c3d608c8ed898833367dcb3f3aae5511fbbfb0ab67e142842c5dd003ffae70e5b1e1086fcaf705fe3be497783d383f7fcf1ee547137381f25418fb842ef9da8c6eaab403bada477d0d74bbefafcb8bbbb3b0f68db69e1f0cce7815aa8e4bd7ba5ac06da47c3d6bb1fefd572d48068124d6a5dab01f140a061bbcdc7c6b3f178369e8d67b3fde501c1e63c218cd8ee1a7e45d04751a48da7017a4bedfba78e1ad130e7bd9b236744faa057280bf4882609bd771fefcee56996163c954be8933d3237061b1c75f2b0d13f77d8464d471b87e7f9e7ab44d848f33078753704d64498db45e8ed0b6f794000c0a34da81389da851f81b981e8d205b4c957fc253087a8d3beefe6bef097a701175e04f6c2a749d4cc1e99fb3edac61e4007ed06f7ef081c4a28685c69c185a2ea97b42f069ac41b0b0f44c9f64597ae7bb5835a08decbe789d4ed42f05ece196ff0ccd3fd061741f701abdc27cf03ba377a55b733fa0b76465bb53c0d307add9f3bdddf6e7fc10e78f70556fbf6db1e0025da0deedf8005d8b7cfc06fafc1d7f36f1eecdb6fb04719fced897cddfdedf7ed2df8faf337606fdf803fbedbdffef6da579ebf3d9aa4c04389578835e09dbcdfe0b5dfe018ff799e0feced0c5b67c0bd5eca807b0e5bc7825943936812fb4c1b2f7d7409dffc3e3eaf5e5ebe353cf4e70ea7854b4db5a1076ae19056b2b0e4ab05eaf044c8b0877840c0f80462fe690e0109a0e8ef4fd16e77778f1e6ef0d782bf9fe1512286bf185ecc57023c07c93d80b73c200ce037b88a8f1a4e6c931bf33c707eee519b3c77b95c729f8f77c01df0e2eff5b494af41aff33dc01ad0e723dcab3ca086f386d007b550fdd9dd1d04b4440168096df235e8efa3435f6fd00f50efe7b45133ffe7afce6f70ffd959eff59ccf83db59ab810e5e6d21d6b0cf2d9567bdc7c1e31d50040fb67e1d54398654c37f86f1f5e481c0035469812270f02aaaa309700ee0fc0bc47c9467051efc8a605e069e06ef9defbb9ddd1bec2cd869ef9d2f805d0d1b9dafc1eeb1d1f9b55d08de3b3f839d07abc1f945bc2fc03e7b435d157819bc77be6e07b4caed7fc1ceeedbaef701d8015d6807d45bfb3e86dd084c606e6703d1a4850dd44360ce6807aca004a1c7d350c385d917761fe86d00f03c80c19f69befa3cca62df244b8224d434f97284c6ef7a0a75c76aef9d28062f426f630c7816764c392133965b8e04e50441b1b5aed572b9ffe1897d7e550eb17d9e4339257aa4f0e2c2cdef22b9d059e11455a4196245871913178c61725020866c4b1397179314252e9cb0b4cfb750c5a3c671cb846114125945243d2376006152b606c6d79511a9f79fcbf957edd672beda8e5aa0d4f659e3849a2a5658644dbf33e85301ccae27185805b1ed5f61cbd7a2f7af80ac90b44716ccf6af60c43e2d746085e3f6af10c43e23272e2724c93753b27efe15927cad20c4be5de2461430e3f244d4cfbfc292af57cef6af30c43e1141ac4851dda0b285c9cfbfc293af370e11aa42b16afb5790f23545b3eb79e50a59d1b2e8ccbf48897d3a38b6fd8b86d887022559c8d24a484963f2f32f7af2f5a66dff2222f6d9b3316326a4b1ba1a92fcf917157dbd70b67f9111fb46a0205316f5244c8aa61e3fffa2a3aff7046457726afb17891531d9f59c3265df0716356dff221645c2a2257fa234f7e921b0c8c4f62732621f04e0d058b35c73e24dd6cf9fe8e8eb45dbfe4448ecb355b86851b16122a9889c9f3f51d25722242e3d6a0c299282c7cf9f68ccd7fb66c9c4cc7de8cf9f28caae2712244452db9f88081191a8688fac95ed4f34c4beb308247adafe434aecb3cb2029ba7074c951e6c4cf7f68ccd7eb66fb0f2db12f03c62d66826e962d68fcfc87ce7cbd6db63f5110fb503859963ce9419492faf91325f97acd844a444b44b63f51d310985d4f2626b1ed3fb435841c4ada2323f69dc3e171fb0f05b1cf8261f1f1e684651334573fffa1245f2f9bed3f24c4be1145ce0859ca61a1640aede73fb4e4eb5db3fd8786d837220619374d6678c528e1cbcf7fe8c9d7ab86083554f4e2b1fd87a484d0ec7ac6386308a56d7f2116673ca6c084c6a99fbfd093af4244ecdb50a21827ca1c31595a7efe42455f6f9aed2f64c43edba5ca0f206b6a44bd01f2f3173afa7acbb6bf1032c6f617eaf2b5b6fd8592bedaaa1b2db6bf9098afb6ed2fa4f4357d7fa1304264cb337b74011a1a0b21a1d0923de26d7fa120f69dc1a050d2f6d71d75c9b1e58ab315ba28bb662f5e7452db5f474447d415edd16efbeb86d897c7c6744f6367beda245fad5049b7e48562fbeb9a726076cd5a5a39b1ed9fdbca2173497bf43b2391c7ed9f4b5af2d53ef96a8950b9a25789ed9f93f215a3d93523419246b63cb347166cff2025f6e562716cfb070db1cf0256dc6cd1b1c4c8d9959f7fd093af17cdf60f22625f05628aa9609890271b3fffa0a2af976cfb0719b1af68c5172ac5b4262d3a7efe41475fef1964d09ced1f14c464d72c4448d3f60f6211240c5ab24715b63f509afb506290090bd6c051b3e2c70a649c9f3fd0d1d79b0452629f9dd3e6ec091c174fa0c4fcfc81c67cbd65b63fd0324b9aed0f64061465d70c23c390dafe4044808840457b54b4fd8186d89733d0d3f6c729b1cf04727ab8a1c292a4a4f8f3c78df97a97d8c7818a208a2c1361c6393f7fdc99af97ccf6070a62df10d51628683e8642a07efe4049bede314225a02533db1fa80907665713cdc4e1b67c55df1f874bda23a2ed8f33625fceb8e3f6c705b12f87f6e5cc8aa617c8263f7f5c92af57ccf6c709b1cf6a09e305d54309968c1f3f7fdc92af37ccf6c70db18f02589c1c8933e5842d27fcfc714fbe5e3044285cd1577f9c94af299a5d4d2f5ed2b6ff0fd9cff2cc1e0d29b1cf1c1b1b629fb5b2e64b18304aa427533fff9f275fef97edff43c4be1126b28a43c08c2d01c2e6e7ff53f4f57ad9fe3f46ec1b316595b403c6b14a141c3fff9fa3af374db6f9a6afea0743b2a0beb41787331f9344c18eea1bdcf62a6db94d33efcc123af82226aa0d8c2626b47012677915870d760e1dcedcb6c7245ad9041e3387c2e92390b01441c291b123cb2367c4a092f9659b5056db34f1a9bb882e87a50764070f4a884a8a4a8c4a8e4a904a924a944ac6743ecf334566aa37cb9b3e3f2cddc82a39d34137b250496e644f1f61de91444c58b2cc8e1f26684125356a29ec58a688c225a7eb292cec170525b482e2f101c46f608f67b902c84dadc4465647e5b05f0e4c84d8c8ea1db925456c64b503b23c5145399e4e5d36c7e908a6694a4962294a2c650c4b59622967784a10638c31c6d939647f23463d35070fc80e1eacb28ca6f51535636cf3cc2584103d2f77d00fc8104a1021b48c5a472da456524ba935a6b5d43a33934ca62e1c9edd8d6fd254777712ac24b99115eaa5da30f7f4443732ad14336cd38ad18dec46cd33b7a8009717ad1c593682718a4aba8a9e5304e5104a1021acb88ce6791b3605d152f5854a0ed68a5f132c4b24658e20736b8976148750820861adaccc94fb3493fc3c9bea71d44718eb19627525b94d3397504b6cd33f9867be1f4084a07245658b4a1715b11c95306e6477efdcb138423c357a1acfa6e86019cb2988562a929048da02a664d2e5e39886c899453800aab81c414410c7a9a573060ba630c9f27962538ac7fc800ca10411226c98cf5a129d138fa0246129820430d434d2c8e7084054ec760936cc4b3ee8793f80080186c446d6cc3c531d01fb549e354dd3344dcb4bcd117494354bd522a9967578238425f5cef41e0bd3d4c0312a6d479b2e325a7ee612ab3025cad32388385b04972388382e49dac05e50c76d45ec9f90e663daa4367596250e2b6e98836976f070868dacce5184dd6a73e846f6c98dec5e8017d18dac3b11bafa2bcc171907eccb5dcc9d3d8006ec06f78d70b2609b6f710149a3bd9b4512c9a1834d737fb6359e65d9795b2d2935315094e0b8628c1ca53068be1ceac7942133caa6b49066fcb092f33c93c25a7e8cbc663eafcd26566efbaeda322c3951bb4193b193610dc35281416b6af2c1464a529223992295d30d179ffcc17b219420429ca9699aa6d736b33e91faacb9f942330f5da1b5cdcff18099d7cb90817efd6147a85c1212c46c080f2c2465dbfcdc091994e708290d13a8658bcc152969bc18f9994430493a2c4710a1baa13a310f94aafa7892dabdbb9afbcf0ee60141041e10aebbfbdf1dfff949c2d7e469c0dd5603fba699374c4f61b4c6b4d9b1e4088aaa68766bdaab16729ee0c0e262f3e2ca8d78d8f82db0b7ddb4d65a9bdd4451143545e86deb59c132d374115c932299082a730bdb152ca416dfcb50f5c2c9cedb52099ba46bb269d313638c71de65e0bd32fc1ae324633636cfa9ace50332841284993424694cd0300e4a0fc80e6468488444ac7c408650827043dcc143c72239283d203ba461732449ed820fc8104a106d9646a6e69816944153a42b4dadc207640825883666887431938b38283d203b98191bd2c64b4af401194209a24ccc9014607a08cd17213690a9d00764082588b22e418810cda032614f564530d0d817102d42306eaceb071b1deacf12cb8f1247ac39f9c641e901d9c1cc151f4c3bb60fc8104a106ab89c9ed06a547a3029537d96527844f1c2d3c341e901d9618dd68e2ead7e408650824093352453d4b9d201c70c9a7e4086508220a3d2f1a249e7e4a0f480ec90662ac7509b689ce0500207c51c52b26253d69ad43ff0422841a4654b6e809d58ca4cf354cfb30cd4f2c3c9d3bc5d06debb67cef33cbf9665e34486fb0184722abd0a7862d73c3d9da68a0b656bb0979f1e747717fa0cadaa1e4bb00b57cb353a59366e5be317e36966b938e0c06e63bbdbfed67f7bc05d849d083bbf11c2871b183da8ae6c3115d1296128445de16367851734a70d07922964663098a8505222a242898a2b8c84b182674e137f85a79651610b9b17265c38f941f4212b54445911c34c4b28a3e2cc8ac8903483cd011c3ce0cf00ae52c2aa52826363c223748819a25c120708d295909c0d0c7e628cb1948d711069a229b08e56566a501b050583068c18b487cd9680f7e00ed299b15a9c7e0acff33c831462f8e9417777618f8e219693514e55d7128caf3cd0e016881d6b2035fb400b9fdb618c31c6f63c791a8c007e90f8a852f1a6899991201ce4f88204cd0c2ca28e2725a1b975c6a6a9edf99867fd9af79a585f8fb1db11200c0e172e38586b9c3890cbf3371def4464d3c482a18b89629428a539427ebc10aa663c4b236a4c513163a2c68b53091f69e62c599c49b2e26e4dd45ad35a6b8ac0fade300c4328278aa0c5800115c60983b9af89dd34cd2bc2cf7bb7e0a82a9264620a880e243dac759eaad16bafbda79b3c1132d8f6fdd18b690440a3e8e91af272fa293ccff30ca649180966d27082a38844c5d317950b1e57439edc9a46b4b042d4d1c3ca92162dbe230debea854f8c0bc3ea0896d5135dfbc9fd6c8b758546e70d0fc618fb48629e35395237332713dd426109631fa68531756854418b6a0223499a314d7460519d6155913031c6786b638c3146765d20e6be974106a26d8f4a259e353b72b452d998284a5f35a6a06dc911254e9c28724e5c006c7bec82660b6d7bec82858a0e091af3cc2911523b830446ed0a0fd4118324594046de1821b9ea61d162e39e236882562cd101e7e78410149d121839340a504c35255538a29022a821166e5ca0e4cbd011283a235240467edca21c09c3a0848dac8905283839146a121c6d744886ec2c619243235a51640bcf48160b4414665012143823304c20a82c14922ce1894224dbd8cdd6c639aaaae2b66d4b550544830ad5fadac3465746a9221491c89393f72ccfefbd43dc744d37edbd37e79c7356f29e15b248c226bc7783292041c40822840051334d5eced41fbc9701ad510f1d3884e0800f367870355c6ccd6c62cf71f13255ce12eeb14a0d638c638893d34fe1799e6710638c31c618dfb6cd3296d881ddf0649c2163bcb33cb1ef13c9c10cb3939ea669ea642b2d4ca9d628ba632299e6150b1ddbfc9c6942516e739b6ffe8f692a4d5329639bff63f66c9b05e5ca56b7cd8292a543a5aaf8ba756c5e7467f5695e1eb6d69ae6c559c2825049291b8a0d75fcbc69f74ec29621469c2d568e49a24cf01b653e6cf3efcdd5dc5ff597801591b7679e695e11198e6a7d059af8627c6dc6ee18ef601116633cc2bc8ef6bb0b690b6b1655a59382605ca5236963a32f124c61c6232f96fcdc86551124fab66d558e36bb67dbaa1c64dabcf57b2dded6ed655282264dca2a694e580999463cd972f2e68a1794176096984c38d7f6363f768a547e512dabdc60f2111cd6207b63748a7ac2c60a101a1724d93a4f423f1da3b06aa8a454a9509e1db3ccb03272311df9220a8d922c515a644a8fa7b26c9c216b2acceed9366bcacb0cd2059f495e74c484235a9aad6eabd584c615ad23432350fbde37e2a0a374e4a99a39fd149ee77906b5bbbb9b29948c6dfc39ecd8bc4a18dde0eab647266df4f0de9a7fceff3d03933087a2eeeeeeeeeeee1b34d8b63dbe39b1c3320cd57250738cad06f7cfb79a67efb69f6fcd6ac0039a6f1d63afa1dea07d6bd6e8faacb9adb5fbfe5d5203d6b6cdf9ea8e4faceb8f545454b4ec611f07f302f4b7b307f86037d0c232b2f19b1a631e50040b3be571b03c2c8c3da8aad02023e787161945d036ceaf73ee7dc0bef36215180f815325abac842c673c7e38c6c65fe3b1b19b1e1bf37a3d0e1d941f40f48e6e92f6cfb6c736661bd8c36699126a15856d8f672a8e67287c1cc1c0397335c6ece73036b07685499bc4499dc1b63512dca098297cc49893c4426275e3e74228a7e2ced34e93799a41b30142db0a27122d80c8b47ab47152ee9e6db59cae28558be213a33ba0083baa35578cb1b5a639c480bb33d87ae3a049a8c40b5aaa6a542a632420020000001317000018080608c5a2719ec6694ba11d14801358944c50584613c742c228497118c4188308208010000022c420a598550f6389777ab03642b97d0c65fd2d8822e250ead82d721010ce49c097ae93c2c09e084cff50df44d941cd5b8244a24f06b6551d6a70b4208bec481bd24f6fc7cc54555c3536d2f3b022a9039099155c91ce28de4da26f1932576da885646cff08baa2c9927891c0bbf269c9e62c079393a5727b4301d217562242151b055f70a05f37f9caecd7c1eb2bbe80a3fdebc08a83e5c8c63cd3ab52a55b10b6d27a20acad18689d96b9147684eff6e04aea5fd1a917089bbd05fca139453d1a2c1d564220148c1f63f1eacfc8a125a91a402f83f0c9a5221c678158664021542c07ee205bdacf73a1ff145db3394ffca4e53ecf076b38c382b25dbd840a61d4cee2bfeeb5b373c45435d7b96fec6b837ee9a2bf4d5e69f98fd172bd92b4de7e8dff8c471d47bf6f261dd1d2ddeb50711d0e47b9233e97be401b647c2755cedf8948df80e0c9f7d8787e4f588e5d1ed275361ab0620be358e8fd4657dadac4b08ca1df36d1c4bd70f6302d83676951298313b9de687af00f8ed241e11aa611e405a0ed822c665c98383f155189ab01836ff07acbe69551990d889c842e9e1f9377c390a0f05a7082c53484a6eb0bb3f9f2b8b0063a656ead696a6249aae537ec46f9d985442035b14c84d4e3d1d25a7845b5131e8cadc1acbf2216197f0140797b416f6c3c416d6c303f250060d6417c662c193a3da0e8133270cf375f06dc54a32d4609ae128d5cb4f28625b6da449306a4f63236d613b9b063021dcb6c484d549f5fec4414712d0575b90d13b5dafbd06932314f9a54be7c8c926879828f93d7c0e33dccc7c2ac49516a6feca24906c791d02f3ff70a5e4b45a164bbb3b55aba9eeacd580a4009c0949975a47f3d53ab9deba3604a04aca99e83fbbdc8f830870b098269651eb4837fda43aff6d96e28a50be49650f9d1f27e80a0432b84efeb15a95fd3d7b2ec03d722cdd6b444ca7cd7f6f019316c967bf22e576fa640bd80517d1da2b6de69eb0081b7812281312ee219a8a3d62e83f8b18545c4379dc72574e93ad75f0357614f6170324172649a97c72d5caf3fa0d55a5ebca01296a3d1f54589f2a5c64d2a80e04b632d1fcf62f8e3ed0a56cacd83a806f969d45933a58e20a3e8cb792035f999a2763929a9f89de6c2a524e811f2c5d3872a3e4a9be28e74d7757ebc8b5f39f9b5273857b37429099cc1f506288e1cc0c360e2dcc0284d82c12832ac1a897da6a7c981040c09adb08d0896c9caa9798e60384dd173cb82b5e4d353807891ec68509876d34bd84f7ce065d90a8a583007dbb7293b13788bf78cc5a44f06d80f1abe86f78812d5ae8be9bb867a3de4dcb1bc61148d6ada06e06e4a76881803c2622554b50d4d00f71c5c0bdcf048b48714979a3e92e2e0b995d849df304fc584e3cb308ece4e252e8281fecc2351183363443b129d450b50d2c4e5cab34d0a1d15cbb658959bfa0a643abeedfb20189a34aa7619fbf341e502aac88b717620c8cb7d71a966b6b52b10c0df8f3f57f115ceff05584ea1ab5420c4640e59d79e4c0649aa2c16d19a9f1e9de0bd37a5c898164c00b64cc7eb31231153938911669924d6ccd7412b358615d1f7ecfd38aa576e9c4d3331ad3805528caa6b7ec76a04dc32d97d5edcf9aa67471f789eeee74866d45815b0bf55b3493f27036e5af14973feccf5602c5db7600dee705e3ecb7e049c788ec6a9066194495429df36ad34516567d2bc97703a89e0a362773df611573a616e24b7a0a93cee6dbd785bf7b95546c700b029cd426a5a465b004e871c01c4be0d9d68d1120121f8d9b78f50b33dbb962aa6ab61d7d701ce3979d05f34fe42faf54430a48670e6b4f36f59af094f8ea3358090bfed098d456d937efebc7b9990ed7bbfc3ed0e81f36e186ac3fd8e6bcd548b90041a68a172c11d51bb0a32d9cc9d4dd6e3a1a4bd3c60b96c869f9c8905f6b3c30728011183c9aa010305e14ba11a2ab344183d64cc91e8cd26eccd69423a9a09ee441ad3947ecf4590ecff2773097faf22c8c5fe8a85b1d6d2bca0440f32b2c1d1216b19c4ed9a15a3025af13d341c2793c30c62af7afcd4826b3b64bd0892abe5df58c0c3618a144122612e60a940bd124b08ab7d04f1f78d44343fe029595b0685fc5fe0eda05109f94cdc8d10e8a015351f62249ee382d66043d7bf23b72a23d53215b8e07291dc6b64e167fb404642d9b3a36c94517ea93b04c4217091e68a3090c047bef06bb7834fa401a281509c1a805c93c4ab22e71f1ee5628c00ed082e128c22f4db6d2dcfe25b81eea5c15aed58ab75411df1bf300bffb8d5d8ac4f4d21c8e5b5e19a300a61cf2e161eb48cbe6aee2b08ee319678ac1d64b15b3f8248b0a36abdee014438224ed3ae95fde30e6e913f1c419482a18ad36e48c600afaac980135c681e8bee268481196edca627423ce5124107f3bab135fdd80c7a52662278afd6503ebda600ef825914ebadb1d2dd41d0179a708d600c988cf7f2e3221cdc576872d1d75aa21d2d6a7c70b2ee6a0af723a32e1faa9f40b6d3bf82a614f40a005069ddb3918fcd062f7d2e2a67a9c6a164c20df61af6d0102df4a1c698a84acf6cf33524f586d5ba62181b4ece2cd4ced29c2ba5624e900821f04e6e3916af104003830707658915caadb640a2ad1967b87566ea20a4d0798429c8fc9a900e548e21033dce9c25f464179973302999540efb1c05fb0845f863497fdc4d571896ea96072363dbb650faf31b1b9c278d3b60dc5eaa143c983fe6c1b84a9e14f22aa6a63704b0ebe5e5a2dcf05c9db19949b9490b111f37311623c84609148ddfc67a7db54293b38e8f8e9513dbe0270ec638911c6674e5218ebe656f55301904ae6132ddda6fa7fce187e1a6173b2bcb705a993b01dc28f20e72fd43de85142fc2dd4f9569e23a147bb1cc4a4490dedc97fa748b3becf319ea108bc5f7d56349d4c62a40c061ecef717345010b4c4cabbd447846339b3d8d95628f1037c7494fbe582e8a9b18e9eb1261565cf2205f191f69af0ac9874efdc411e8ce23626d41c87ff3f5c32f07e2b786d361c165e8a01dc4a024d87c9e80a503e70bf81ebdf8720dd3a6e2e56ab389d6028b38f44ff15e814cd6bcc1bb355ada04edaf7ad483fa757b571c68b60bd34a07cf1e16a27723aff19c1c92b7d9f7cf8e9763306d4738f7201e5147740389f2c2e1e680f557d368a70383142ea3d08e0f28102fbe709a4b5ebdc8c10ad7c08e06e66ef884d6b0f64266ed028923f288b619b3680099ecfd5f97bf1883b4173c3b119619ae611c0d80f3dc975b76ad7481834d0a954b50b687b20d472732ab6d9008e147e498038b06ceb3ec7dfab94c4acf0afc31bc21fe2fb397a4ea5781bec729e0f767f3ba49b343c5a3027f66ee78ef912b5f67065a7f05fa659cd9de2b1bbf5cc869e76b3a15c730f35a8cd301f00bf6dfbcfef50bd2968c871fc72174264720015868e0ec6befd3c345128b7f7571887df4154637ac3b6ca0b0b078fe46eb25a2255862d03a3e473cb235c72c1a400e4effd7ed2fce202dc917f8613c4277720612816507ce5ef63673d1b2b13a7217fe551a8bd743f4e18b5b9896c4483c29169b289399d6169c0ecaebe97de6e0ab2f9c76c953153d30f2dab0a381f9e69ea805dac866cc07ecc284be80adefcb5a2fad3164a50d1271a4c3c84650c0407ef9e5f4baef855cb53ff06e32afd2e2061a71688f3ac379f309e8746e3fd4b4e421a0bca25dc76fb3a1d6d438ecadf50a1508ed16ade6901324d395d20eb8e91d52122686cbf0eae635f636930c1448e314eac56b4c76f53e122f807480ce3ef4b0307b105027ef39371bbfb91f2ae122a0b5fa1afbad409deb4b10fa2bef512a7d90ff45252e1aba530bb49bf386288d73ccb731218689831f756bbd2bcec8ecca46b978bf1867da4cb14b0f63960ed08229f67026f859baf246dc2b20e46fd34312830e1877bc7d8e9bd9581ebae29b68a96d4f21df600d0edcd30f333260f1886aa5a0bfa09c075ae20b692b6148b6f702bd101d40afdace3169e675158843fe33bb951b05c1d2c2e846546c82edadfa14437148f8e4e7cd500bb0cded55b4b7d05209ee1fb4bb29b3bef63c354b75e893dd1d65a4bb3676d8c622944528668fae8dffb71a86249d7bfd7a45fdbb232120115a78c5bb300c45638d10c18d6d4e0110cd4f859a28b60215a282d5621bc9022c020374ea8891d5f6e8ce402782270f188c5757b8b6c7a32b2accedf27591d8f13e47c6819c33b2115beccc2ac9059b2a63a6f4d7b52f4b6caddc8588d879be9badac5f053a34fe628d7ff6c018966d15e303b3320e2b7edbf659f2c62373db9e7545e9081e0de2725a5b91d16a344e1bc5f52e6fca03471597257a67fdad4960f62fffffb895116028a1fcee66b317acbf77cc7ce17a38864274dbfb15752714dc4c56bfd3b2e1d8d23dcbe12027f65120ec0db797a6d3348df908524f6dee0ba41662fef59b0039ec2d764c413026f35f5550055849dc9b79c67ff64f1ecdac71449e26043d704d8d9ecd6298d30f5d7e43f1d8ae31efaf62a7f48fb79d9f93ef4c499064391080e210113feb5d51aec73e0b80a138ee2b7e8719e2310fc090945767df15875fb1708211732949af64b0a6192d4c3966930f4004bc1baa6acc27df308b207102c750c856b5d09c6f0f5f1127dd1d0d4bc591b391cbeed3f459bae89e9988e5ef9c3203bafab4938b790b6f93ac5899410c0e0c45c1d03202592b95c7576cad5aca010a71bc90b925a86230c9f13c1813d5000740e71e40ed0de963907108ceff183ad25a45b4cc8f579537c41a056e3e767dbf49d914564d58f27fce2318ea69f2aa3b28c7bcecb5269a2cd293776e618a34373a06fe81097aa5da61c359cc87402cb0e0a69c5c7b7bdf50907efcaadf2356b8eb2deee1dd95892b269a6acddb5f88d26d27f703a2a91c565ed89412cd948523289e5b8e4eb6870bcb03f9a832b88f9ccbd7bd372328281b4f99c9536d34c0d2c23886beb0cc2da7ac4ee6b4636a19f0d54026511e7bcf28b8e3dc1fe1417503f15503fcb8c213a040d035ccb9ec142908fefc47e81fcc346d21dfb5a113766dfa4161672582ba3a7ae2d0c76cc30a767f988f76bea3074af272934c60f6b151d1911afe57d58c383366726b1a4e2c648b2e8f28391ad80d149d41cd2e1a56af14913b57b8e1b5b5aa562cde5492cd1029b6b8b3e1a8e42a341d33ab27ebb02b3be893271d483e63f603b0e5cfc8b86b205f4fe44ba2eab051e5841f459a568a08ab58d929151206861f7f2bb2a90a211fad4005c8b4ffdabedd7f29ea3b459df03e42a942075400259104020129883aab050ad5c1c956b83443e4920ca3fc3b0b715f7c85d34526df55f9e03f63621232eff71878a9ea0de9cf1bc5b6dea466e11d4cbf536e53d077c9b472452393a59ce3c819003ba4fe53c71c0d0cc8347bf20f39bc8b62c0ff21e26974d84691876c8789be5a3b97a2431b9aa71d8e14f1415c0b8382d6a8d41d0158b6b0461b33befaff9aa7df60cc410e789b21b9f6b8064af2693f0ea1430cb9f82a3a25148b9cb1b51325c45d47ef841f28d296070625622d66b03f6378488274fc176f588916894c958ec897e8c2111c72441df078c5e3c755d80d604b1ef8d9acc4e86404419fc022809afcd9498ca9bfcff9e7e3f95af41d50f010fe7a09fab1ca45ea1370a18f7c5274af446af7d5b7b3a647425a8107e68e1d631cecdd139c9e0d773f2c6fc1c04dd97c6874dc8b72128729dcde0b4ddca6571ea15b6137b40ae70af64a77660589f1484ac5d6a2125e8b26067eb5e819dcf2412e37a42e592d58d68b054df642605392f853bc607dd13a6cc837266adbb011fc0f4943dd16795d3550a213598516603bb4fb5681703293df16b20a47f131779fa246df1efb00a008ebc725760ec7e953fca11c278120c09c94b607ddfe396ef51af3a2fa7c4c24f4aa128ee49da46ecfa3cbd9d0cc75f22a078ad74d30c1c1da30f22ecdc8348ffab0fb0487ce2f3d3d8e1bd401b51b31e0eb9439b522e0a32de3ff07f3407869896503873ed03e35a74f9c72c454ed5c40eb907e7058ba0513ae2e2d0227e1f4a9aed7b7184a0065a0b0881c6ff3d2b49bca0d42964075ba5518090289cc55142b65f1c82358819047197ac82a91f7abe48cb182f816450ae6627215144f0eddafa2595303dac161f5d8784a230b3ba99033c40488cbf471d8b880812f8a47c8486c452d8b08f9f6cb69136721f8b13915c5ab4f6ceeaad6f9308814571949fe35c416890a2a641b3d895f39ccb5fcf305a6522b9b554d689df58022e41cd5a65caf6f9eeab3ba94735c353496f4463ef0d56bc656931e984aad6c5635a1e9d80ea42f2afaf8738e182c753e9890ddd49c0dc8ad46a8394b20315d434cfcba5d1c0e05f18fcf699563645e940f4153687781c64e7c3af020ea00f43221b80b584b884239f4b8f748d652e810646fd8bce8b0268c14b30333e71423441c59d982ffcb6a2a765dd6771ad0637f713ae869f1ecf21e6d3a3444bc67ea560bc160f9e97d1c7a7d114c1a399e437ff06be71bb55f408692c4a4746489cf9aac1633917533c224c53d58287498a0dc82d54f409164b3f4b7bf4eb738cc9c8c5637db0f706dc946d1b9ad8afbcab45584e691231c9d3856114e73abbb4f89e93bb490a8b8ff0f0decb68185b5e5a8b3beec0f20260237b18a50742270a5cc0ac84a1ff39f43dad859d3d2dfca4b561aa7b8cbb4460ae41154a340513936eaee7dc36d9eb8f28ca0c73c95dc31a383fe279945e6a281bac08c1312d59d63b06f53df0181c8160437217cdf5e68dc13279cfb03d26e0d5459802f8cc2eb6d4cc054c28d6f8592ec29a40ff6b44a713252859e52c4a299678f36e8bbea9c4c9f609b468894ff0009e7ebf5f40b4c65aab6a0cda317225b59c96f41ca6a2ce17702cc84168e2ca41a4ff9fa2011bd22f994716477a72d10c9e12a2279696917901033aea0ae9834bb53b3286448a8c0c9749c6a09fa734d973d4cdf11d4e0eb1a3ed5bf20c2987097b52ee2c62ea558fea2e38e8ae57880afc6750d818ada6604c6f68618d8e50a6a029cb32843ab2178bd100d1634067c49a165059e2db25f42e0c59ce888b0316b1cd2a6afa1c8ee0857c87362e1f542ee256ac32ca671b460471c65c407dc3fb0cb8674d503f6d01b5a4b6ac62936bbfdba5e464b6ba73035a3cfd610aa7fe8bb2c41c521b440490088dc74f9ea7e5247e0ab0994d2c26771583fc1729eb8259cde096554e7f69ebdfb6e9d81a408ecfc01af151a8053164ef2edc629570f0bbf2bb45f95cb895f904d9e9842dd894c0bf20fcb8f34d4ca6167dd12c6c2377d8694f4a318d3075bdf1d9f915e7230df0649e2baad53f51a4411e70111f3959220ca21187ac097dcf38710d42ac4b0db4981dba097f439e1c7a886f1bb8067267c8fa7566dee03b0b66e6abda9f7896066904fa6a5c2ee9dd61e1d850727b67f1022b93030f262cf37790dbfc15959d4b4c863c2131c46b57b118104425c60183890b21825eac81827bc766ab10b43268c576fe34d5b937e7f23334806dc77fac4b586c56b03f59a0a1f8c04321deb915e702cd3d079b1a3476987618dc8c3327626d71c89cdbef3b3f3113666455a4b12be70a3115ae00cfd19ffd6eb43c486bcde1804c1c37e6e2f7aab96ba8b06b3aed3c66a330ca481dcb627c7c5d4b8373444f7dbf6d135c913e4719cbdc14923f8e0a172a674289a04dff44551616f9d81be677d5a79c5ac36565b3b9b7b75fb41bd90ed793391ae771295e25f669a6021a8a3ffb0434140a51444053dace985176daab9cb3ae556393d782db2b50221ae18e64d8ec5c9c21fc5549914f9c6b7d34e5d17a93c46c278344f5721511421438c22450d5708650938680adcbf4426084c4e410a40a7433b80bd383e8d5df08cdb2bfa4f375b648599ddf7b5f5004b5ba160b3009890fd2766ba486bb2adc7145cd49602e001910cdf542602ebe103800a91a511b8db33c00d8533098dff3707b33d7891f406473584f5535818abadaa694efc5b0e557d7d196232ca4aa0fbb8e6241114ffb7d4b8b6e919b1a4f627afbf0d37cd0e37ce48847bb75b3028a9cb9f8fca49ed779013032e040737de69b81b0ecef3c79e187a86f7f55d696a94a35cbaaa3e4149876a0cbc20ac053c0c9d035b194f7d14bcbd5e033244dc2c98557f4a9a40bcb250ded1242435d8e2335f812d23954882206fa6e2e45556dc606514347b71d994b31a8d98369e47050a8fcc9adefb0cf3ca3170a0e53b8c9fff1938d47b9d5d322eda18ddd0f7f1b7de79cc000360caddfb0be79b609afa12144db1376747993c69107f21cb5666a5b1e9c2c3ad17a7f728c1cb569a5862f78cde95b44ab274c944ff5b3add511f8fd60b2773b27e5ff5d3c00065257ee5bc228df511d5edd4111200701fd3314440c1c5a5ee24e56913f65c9fc9eb2748eb092925d7ec6cb84b9c6006a23858389766097818f287543f981f10402e58755a10b1b79ec4d672f05b3c1130a5aab430ed3d56870f846d11b027de2168c76ccb6335156e1800735c4ec8fb053bf9c14cab7167440f488f2fce0bd3d16519a7c2cdbb7fdd8eb832857c0cebbdafdd263d0774112f81eb744a2528b235a280a6e51815d025108f0d75a9ee58fa3bc767f038a9e569f7a34f9a8e85494475c84953a5680fae3b5eaccf392def34a4df0a9219b4bd75b80abecba06c1869b7be901ec4e8043b9a2bda1c3b50981683ce96c73285f86b1a3f5f762ce8f7fe96735a2742ad5c7125dd9cc0b3219e3ea875bd498c13f3317a29fdd02a4ea701f415cb77e32c5dfe559815c6c8ab37bf0227a6b01006833b9d9b65fa7c62460171311f23a71c816e6a36e4af7ce787150409666c211b56edfcb443084aa6356fe93759182d31c755a71490dc7697b035bc7a860294ccf75f8a0a782da27a72aca03cb146f084e44c299b128427db61f0ce1762f4f93881b8d3aef4608006c0e421f4787a0a46415938ca0bf5253b136becb17d8d018c676ab882ffbc707ff1cd90fe131c2a241828dde5dc5686809e8e98198a76a5a9f1a997bee8ec0d30847624202411ac8ed235ce629bbfabf53db3b11c39a856ce4ffab7236978700704bcab083c09544c15d2d63571174751384d0ff2111fc05a171b662052e8616931d3dfa83b25878c0dd89d8a6adf25f8e819bc3f53758fa59dfd4db3a2cd5fbe6ab122c1cf9504c4458ac272141fed9c242104d11ed13e3abe569e1116f018453c1d36ca344c04217a9312ad1bad9410c39ff1d76a41d8a47fcd4c6a36a184039369396cf000372efb8e6d32779ab9390a8871c5eec97077e199922ba40d1034b7639dd9e7801620de3a03a9cd4b233f32070334cc5ccfebd92a3c878431510acf220703e68c7036e3de566b46cb672f88b6e69d535dd4059e04d842e74699478aa331ee89b3e320486fd3e4e4e6869023badfc95389fe96cca1a8c9702a7a4be7fe39f0c5d68b333e97c085f33b01f0c9c33de0f28a44a997da133e8116e2c0fb6004442144503f3c189a4a105e18a9d12867c3796042681439ed33b61b6934b52c39bb4ea4860bfcdf9ed6c52ce31587ce75d80f0d35b1ae61d602bdd43d406701832cc28ae53d826a71555ed8192c94197a048e58733652eccef97e6972dff76411e69895ed7a83306ce90c89d9f0208b1a682d96cfdcfcb60d07005d37a264004539f8b0de2dc9b5ef5daf3af577150e53f399ffaa1153f488f8a47fe48c15a8c7b54289af411db9e00d35e48ed244723ccc40729d8b9e61b297bbeb89bb0a16b7a7f4d2a5bfad0b924a63448191b0c0c287cdb9bf05c0837fe5e16ad54adcaa26eac412edb91990a39be9ae4be741472dcce1542247b0f37def363349832ad760608ae87650166d8f0fa9eb988437737dcafd3c0d23c2408db5884f0e34b1a993de18e7dc20ad02f675cc678bafa17b1ca9067fbadd97a9655d2b6e009d7974429e06ddf122ae646bf5da628279029a019c67080e1f9ebc08b118e7ef1510c1cf073622fdb3a975020ecae2ed9180dd5e70e14167e4f0b2992cccc3114c88dbab22ac2087a00469f3b92ab11a06698eb1230b412c8290705644ebfc23c10a4083b423a0bb59c178a1e948346e7bb7b835f9ba77c651672f4e6d61ed0a9cf79ef21687f640fc92c4437ed0342feaac7daa5c1ddc1b43730a9930a0597d61dae353b49cc8899ecfb7e183e094540724d56ec20fd7583348c6443a09254e530d7a5394399c3284e3d64f4c8b920820433fa27db8a571145671d16d69177feaa3010ac8ce3e06c88e8c897058706e6db8efa4e144d36b34c28c726f57631f1a36c9a1b143376ca167304ef6e34f6191a2d07dc0627bdebceb494adde5d911077c305b7700b23f3ba80b91ef6d0d6f061318ff6e00b401d4f073a84d5e6c79ab79f7b0299dafebdcc8b1a6362da9e4c206f160b4fd84f4f7035c0107970f180e11ea64d02f557f2b828744a5e061c3099cf1ee816b9a41f288782def03c00cf98c993a7a99b10c2347e9c02c1ed4dbd627a533cfa1860124383c0bc7f302b51924187ba11503aae86d223c58e7c0a111bad99100a0094e5644c2d565b3f8b51f6322ce7e104b16b3f7a6c9bd7f45385b614372aa383e9741282d87d3729dd3a8bffd1a5de19ec2ff8e71710a0ee225dc7448af680799ce1944a6688136b0b732e616d7450e4a154f8130d190818f185a2a8e0691107a639986aa5818d2fa1a92011806656167ae4b60f6ca1e670c744ca2c491d77017e45536a5ffa3926027c68c5b1798da67ca0e6c96790ed78cd2983145821b8dd05a08ba345d8df887abf3c738ce034f82dd386edc0c7cc6b617d88eb9acdf16b3192ef07ebff2f0b4c20dec94cd722750c64696005edb2acc79b4dc6a112ceee53e4d9600f22f299b5adc9576fd3ad03831f424b4172c0e53ebc66b34ae7ee05ff250c6258d79995b549a07b0e887099607e38aca2bc6654d822735e54309b5b004cc8af9317ae96d6b0ea39791061a36fac108563f4cc7d5652145c4ab511599e692e61b8ec8823e5d9f4bae73caeb0c680e3a59f1409a7bda3742d061c5d51d7e3416fdf5835eb1a0eaca9f0963f7e47b006b5e6da37c35d481024b47ce263eab3d604ac43daeb976663c4563bd544f020cdb49a22278d3705d30139e86d932a5a4ed2519ed3c9167838c8b695492b2f6372ffa50d39eaa36788bc3dcdef6a154d54c02a199f4a6ecc85c2d9860977bb5a8a0608eb3fff2536bc21d50aee725302f6d8328e3ccfca0428707f9fd85a63a27b3819aaa0bc23307f49ea99d9505c9648502222c38849a779df38dab24b95ff7d25d4e202b8d8504dbc5ddfc9ac3816cc8a1b6f4c74267939315a1063b92d14bf7e754584eca455b0874823f1be30504b804148a113a1f607683b66732f2ee67d93ae40b7374858341a4bac7cc2daefc2d73f86623d34656f670908d3178cf7ff1539b60292fa279330b891408348384bd7268736b29a60e5900659621346c162df4c41f03339507706605dbb02e158fd3b42562b1486c0e172796beaaee6e9a1306e6abdd2c4c3f74cc5f79d9bc18d00ea41c970b44b941bb275f8fb8f26bf569a83656864355bede4a095843976a8526bc8ce934ee3862c8f8c9428d800fadf62ec259821559b08b8e3273f73b1d212f44cfa28be42d4c9a6a70ebe04b375b1040a7d824f5f63b4efe3d6b32040c62fadf0d2693eb9d0ddc6c64608ef6ac466ceb3048cf66c49d3c4792889a65bc8e214c1ddf043df9d270229f5f82e92bd0eee6f53172e28e0a05092f19a6025a002452d79606d4754080e8e9f3b6f04f18847f92113ecf29638b9447d47ab770464064a50aafa8b131a04a531215de7838b31a62a7302c5f26e2598a580162d84e28cbdda97780bcdb706c90e503da46fbacabd59832031a8b14804359161f01f952032f6f5bc7655c73912724885cda43187e4c80fe72f4ce377a6ab1dacdd420c0d09274195bb75c992808211f44ff9a1102959466d70aaf1f72c734ce887ee4cadb407b0df5b68098469d378661cf601e34fb171fe639ff0a602217ab0708f0b4091a76e590864929be395600b8b94f36c2a48e8f7bfb663c2b26028d6bf9d4ccf4212ee08e3f7fcccb0b2bf3463d62d0063402a13c633f269c8611176397703e9ac79423d01ad2d92511e81aa9959424ed3cc4525fee3cf7cb0e8f9651d92610d948fd9bbba8e73c2af0128fc448a2519ee06f9bc9d4e6605edf651c9388d56c651e02bdf8fb718d44cd9caae8323d84b8448dac6c21b7e38651fdb6a5b76e26c414bb643d0f2dc3473fd80e912ef9f3ad5a76bc73231ef0f82714ae49231b73afd0740be2f353be997f6ffcb32ab3a2a473a09c120e74a51333e6d71f012ea4e3a137e349412f97d02a045caf0c6f5954a92c7dded672a15dd65f647a6c35f056a5c8caf7fc52c5d40d95159d8a384016d615a785d49c47d8fd83624027965a0f7971ec08d156426658eadb5744d3af5abde10f9fae79074b76f6ab3f5fb612344633beda95ada8b3ae818938606bc208c33061c14839392b4b34ad42521af3ba25120d1ff0816604f326bcdb677a6909b7a8df05c7545594ba33321aa40851fd89c95695d7a1834a69e8dc13c2605221caf8df6c826dce2c020b099dbab68bb87548ef523bd9f55271ca2fee36f1690b5d5e3166673e724e45a43365f28b375646ea31f0166e2a7db5f747c510ba50e452ba11e174cd0fd8f39bab8411278e75e80cd99c488f403615c0439a68fe1b384b5b0cd2a51b136d04987d9e88b87ef1dc365a65dd37881a42bd2577f385f8f9dba2c80b3e75ef8bd7406bd3333cc43f95ba1c1db8000dca1ae81b27bf215da5ba6ffe2460f0f672bb1fa64a3ad3236e2d9e0ef90743951ddab8ce5f3853f3d9b62587c54bd02f6c638c1ee631cd1a4155a4f829ed933a082229da37f2d502258937d4951a3be28fd051175795f0beacf5c34b553ab02f73bcbe81b031e1df780eb59bed5fde1fb4fb50c2ef569903e879a32ff5de0b22f55836d37e7cae1d1904861646eeb3bae6be8226d9b7ca582c705b8c5cd450a5e2226e745601808d43e99305433f59f74737b6b09e5f393566388052e27a3aefd85794515cca02f24a1eb4b791ac804da23088ec4cc2e7a5093c5cd95911d2e1fa8a6cfb827f11f791ac8f56b4413a283767ea817820a6681fcd2c3484042734ebd530ce4c608aed54ada23574fd642b16887f42a7af7ef3b2be9d26f51548c11b8f4866a99b7b7c28468a4078ebd4516a6e2d0ef89f347949da096fb9f9d6858cfb30092e50160d680e3a2092facde25ba8d227c596464372cb624262bf273ac5122c7a9b6168f19a782d5ca3f30719ff092c7da632f263692e1c7abb910d7681f7eb8d3d80f806e78035c845148379bd26d3be443bc9c30c6cd88eb4f1e07a55b8ac7254e5d6da62ef9e69c562ef14397a01f68cc1cb20d914793793572fbe562ae99d3829ebe5da020e0bcb85819dba4d925e6d5ca1cea1993c0f18e0beac981570da71bd82e2f288c83c1127a36e58809fe7bbf26a2702e39f2422252633b1c780894dbd44bfce9f2a8279a2ecaf14256e890d4aa846425e98e49dcdc84021276bf483fe61bb5cb9dd2c40a1d1d7b75b9f18ff53845b7384d499f21ff33560ff751a348f26236b5102b7370e42d18595f4e08f904368c8a4e30d53ed3ddeb964d62db70bd3010dab0a8ca8f17758cb50ca35c59ca1395b2c3bf0c49595d05224f94d02ca6405d8a391c638b5a1a1c54c1c5bcf5f332ca1395d7b5f2b4a17ecbb9ac8cabae3b52e4b4ba476d473659626ff31edd66696457dc45bce02036b44abffaa7964a91f392eeb2f64aef1b188a557720b5482a230cb54e8abc73ae956a96a06ef9506f9478213921a1a22fc4a3358b089324d1838531d0d48590354c279e35a97ea1a3e838ebe9b7d97470051f91f095f9c802133d2c9dc080fa90fb071a2503d0d09a612d07be33125001f74472b11a8dce6fc4af1b26001f9789ec43dbe168576eb1f9a43241c5e82ba4831344a020e6488d1ce08778873e898842ec1cbef46a9b7730cd360da14ed1bfe345aa32a95d04ec2d10790794336a86bb86c089d28eb1f2dc8b824d09a2ffd985c22a9ea10a6a887424f3ba3fd76939006a2802182f8f0fdf3ba1a49d067076f22be9b3dafdf602eaac5bfe80a777403e6b70866cf51542fb81b494020a297196204fdc51acb9964aba622eb2629b7d9d5280c9f72c7ed372298db90bedc38096072237489a36c34d01cae3bc2a681ead7c67896116a8346e4b0982ca182d2a8278cb9fca8cfbc25a766323489bfd61a7cc8bb24465517fa23d85fdba024e86efff8565d6152160faf28cd18b73222d85ddbe05b02dfed9a1bd24785e57df9904c23cb3032d8a0854ac0b48e8e8d7710e55661bfc56519f5d2a333b5aed05b9ca8b1cd42d06c99fd60e3510b75dd55b814071489245cf14b7901a1cef367fba3b0944e1261f3ca8d42817f5a1d8ed172602418de315fd954cf2edb4a24244dca15367c8c947a909d19a90407d77c2b787ec385ef0f0cdfa0e3e04f22198519f89ad2f4a3bf058306f39b41954c8a438919d788390b93e6d9b425a704bc93ed88640b4e93a6d1764ac73f174c20c2d7500b8d2069b604f818fac107d330dce013ea6f2a0706230657ffec560fa58d52d7389b99a71d89e0c0ee6be5069d738363aebc29e4b966983e6f6d5c23823ec60dc3f06e992e9c14edf9278c0a8b1313a31c51fd59bc7ec8940bdb3be715c6a9225e12ce0fbd7e2e5e6e5651261cf201d4712a931f7742bf2210681fbb910b98ce1f068290cef31bff8eb6e150d0c8a4d3fa543a3dc51dc3a1398b2da0c5c06dbb4bcdb6b11006e9ec0c8c5a082f4c2246f922577bfe15a50dda391883d48ae11a2f5fc9936209ff57e660373d79e660337e6c054a00569e5b292d6efaf7c435afff55c3ed3c59830f9128625cb192bb4857f923e51bf37b7219c169f96c4fbf4408720576f12c85f0a667fa439a57868a94bebcf94fa6853d709e5928d3f1c8ed75fd528b372571a7d7d0163d8c44a445489a6fc65d31b9491ccff3868567702544c29985a59b4d08f2e21f9d5ef7913c928971bd42c9b54631a7213480e5f6e641b3a29c21f5a01c06db4fe4b48d854cb7d141011c747006ac34a7a6e3cd5e7a10400cb293deed742a3bfafcd847481c6c9b61e91a2b2e2b08014e888f698e29d74d279a29ab65a95cae7385858916de539fe8b120adb133d940bc875c0ecb087add8dc79daf8537434a824d844737b8636d4087748874eb6099593c7d038da9741777dcbb72c7062a454739ffdb1879fcd9ecdac9fe08550be20fd8cc5deb48f689ecacf86ea9e372cd6fdd42699e1d2473416042e3628afd37827f465a8512c109788d814df2cd9c69a12ac7d3410b09da840810e957acaf9c3ae863a0c563eb0df5bc988d54c1372be411f6abd4c99e336e8f35a5442f9d784cd109623f42f53c6d269d2a293bc968a87e060136c95b1ed621cbe9ccfc30ab1430e80f8426a422949f71b62145ba86b243ba281235f404a760c76b0413568c9468cd9bdedf23c1bf18a5317e9218af5113fff84c40fe5278c270bc51848c701c40a38b0bcd4aefedb7a016adab2e80aea8d87009c27a0665d01a3906efdf8e2bc9c28dbf60ba79abddcdf687ed53f618071bee3237446ed81f6d40c3784ee55a1811d101115d0e74aa77899ed4df352bf471bc9d368cb2c0cc5aa387ee4fa6e4da9f51760207d318f6d21c8a02664012bb4f17b406be0a604b9f08126e5713956f1fb723804e07b1479367e288523b0edc1869d406514ee9b94fed949711051419b3cbca77ae615ea1b28641c41e58d36d9b19cc3a644019ba87e324e23b0827b278f181eae32b085dc8f296d6c2d9bb205fa1e00d24d7a6bf3148a7364cecd3d756b32728418e61f623551d51e516f9c5bc6638c7bf49632735f036012c55979af8c8f0f2fcc090ada54254c801d074315978585f39a81bccd8907b08ede16c00505cbae9912c9a832c8563032888476ce301af40327d88cc1238b3fa021e124ac60d558d37fdbd5c0bb901b49c9e829f6152ea7f99ec6db67ee33f5d89afeefbb23d3a212188a7e4ba11f1a99e4a23a17d60dc67539b60c388d29187b027995f20ce4fd243c4232225a032fc732d0f2a4b7df919e6657628db7ed3ff274eb31eb8b35cda7c80d19eb3cea01ab94636b07c38acfc6813acfc6bfc743cb9958f3887426a8253b5dcb6bf4e43961d3a3862cb02b8df63b454b34c183148cc38f14534a4692c04fbcce549b3f92032f4ac27b5079687d3968ce087b459b102193fd685b87de1b92ed6aa771776c9f7740dc0a1e6b3911bb9820b781055e237f114ff085135146a439c0cec9fae6931b6e13aa4f802e1984243a7484d337a954789fae8c83c86f59b3aa6cf303d69bc332b3794819262018eba3f3ab264feb48d79c32f1da6591a8e9e09938fbaf176af9d12ad3a0f1450f5025407932837876a45b72ca071410e0b8cf4d5ce4f4e34376c50e3531218eb13b248cc4a9f228c02b30a6f6a474419e0b3f498154912c0645fa6a45deb45ef904a280f2e3921ffbee793489e7420a8130617626d5c6a25b84b23acccd6abb927314cda0035cb6b3686e1494d0040f091dec9d55ca6e8581971ebdd46a5f3f8a28428a283110441e2164c248a5cbf8ccb704c3f37815ebd8c1c223ecd41ffc2b6adea44e6681d08c462f539bbaa2019f21208b48a8881c57936ba2d7615c05cc2b7ce7d4f0ac14f826d1f5fbd7e679433b9f168fc01f5d8353246c3e7711ad62e584a65423cec88933b44e6d74fddfcf841c24f88de9d12a65fa995f518ca9aa1b18aa704d839044beed1f7c957111d69cc53630868c07a3fc86f6e9e3a7220df53718dc49997d7d7d499e6a1b319d5dc08c261e1316db88f6d691fa5415972f45e9d023d5ec8040e3b5f43d4d8533138c27c4f6200409d36a2a61f349891e029a2a66cdb1caf52d2da6c27c171f105286856a1403fb241594f61d9334c13a2749562b2eae7865ff90dc7970e510dc25184bd4872f652bb44220b4ce993990736613e0dc7d26a57ddd300a25fb95ad7a8bd54a393144429f5652179dbcc90f851350255fae4bcebc396aa221abaa9f952611649001295254dad3aea5bbc1c717cd1711bd0ec3573e587bf6fb2fc527558d864b4309d184022ab11baa74007908bbf083d76a47deca1420e3cfed265c348ff4f91595c6f5a7657bd7504fce5dc9d9f9a2b2dee6d895fa83e4581427e5b6690673d2762743a66fd71055238acf9f9c15e085e2143b846f81a1f680ed87436919d804c8313c77fcffdd1bfbe5b9ce6809483c2add440106ba0347497f75be33b986b3002d552b0b8e452d7b5587715d32ac2f02cd32656b0abfc993b2389500816f975b7f96116f0eb55cd86baacfe1442c1ea9e6cfa2a515d0b7605c2bd0f21f8730e35eb99018701669e14281c72fa19ce85e62d6f534833a71fe56eef20c46133ec123731efefe97e02ed0b5099e5e03ac7cf4aa2f5eb6755b630c48a3bb1a0e898c70d20bab8833b764643944e7201d0bcf13bb5f16e7c0c2e2b3135d464d33ab504964a8cdefaa049b638cb72e37738e903b56ce07cf4717f140dc1b5c486e8936867b48ba560f0bc62feba277612785a0534031a2034f7cac5bf66a04fa11753943292ab67d570429c129474e90e590fa65ec82e2b80f69745a19b2025eb9a306664a105bd91d5b7ec3abdbeb2258086de9b978bed8412dc735b97bd76feb6bc09cc3c3c262e8cc42aed138662913d84b2ae877153fc93f3fcb640695db9fc2e52cbdaa6c0336b5511340def888fb8098d345d99627f4005d4914ce08258e7a8bc62b47dc48b9d6aa6dd0331d5051eb6453d6450029e213bfd03682e1a890994b5f98f6eaa567556f767985523d6f20e02aeb2c76fa760c62da61141f140eb85c5142400d531a7cfb7a39dba09b09bfbb6703de4d94cb37ce8cf417f883b0dd72423e6cbf88d6010dadd769ef22739633b93a3207f0e0ce9bc4e1024543031cfcc3ef2e83c09e9dd2a6eb2feeca4756c82152b0c8551e3d218e3c4899253d8c24244b2026797761064c6f99b7c9d0c72a708bc4c2ed40037d677c80ca0071e32b526e5120520041daf2dfa74b0680190bd28e023ae92ae1485f1a8e4fafb1209606a147a32a77dfec622dd6e88a68a6c78d4f2074331700a3fd2100f817dae4ed6b983045fef01ae2da62db10bf5c1643c3362286244f5313e1c432845b4574479694dd5980faf88664e26bc4f12a1045121382700c818402eb2c9818ac314236a560edcb6c025b6a593eb7e104d915d53ca067e9055988c76036d60e94a9eaacaee7bdfca230e455c657fbe221f5542364fcdc515081bd3d7f5362e399a6d186d53ff09c0281afcab371f99e140b3e82e5261ed96cb10558e022fc44cc6c58435b21b5f685bdee813516f50f42a1f9b0b272346a1ae5ace321c91841ecd861c7e978000dc476e21b87e1d9b6a73f379a8e5b0016a318ef25785c15bf3ed36ecd2c357e93fcfbc4aca209456670c23c4d92b03d36e8d778500ca27513480b582ca472823bf26615455b927b7504e1f2580d2381a2b0641a5891bd05ba9a8e8dc386bf6d3050f6571dd941baa6dd678c31592ce621ad6461393f6e6355547acd00ec6cc5a40f5325ffde8b4a13a4c6cdfdc1f8c34bae8393773d56daece7b61fc03374bda500f20d4ee93fa2b73bec9fac54219228176caac834de07f5b7acda4cc4eb60344661f1e60c7836763558eeb7b47952fa0559c45d158998c279db09c89e40e3132c875e8633a316c7a975b9b46c6ccdd6d86d5b086ba17111c7da5a1d0f895e5140ec0c2ff605a7b5b13eab176c02cad39760313f56ee9e8113bc70b98eea8b0d81294326f14cc95d3870c585485383cfed23890768ca2902aadf5a4590a4784105e1918394a190a396787b0b00cffb79d202ebbdccb1b3efa7cd5bac8bfa9571e47910f9f525d25df350a68cc46fe7c0eed35d8504c3c62c139932d512bf48c2cadb339759223c588e1bab3d9096abe83bb66d624b465368f54ce878d18e043253f3266658bc4eeb45a86bed9763b93f491b5c503d074e0ba3e4dcf8a45eb59c41b5d48f564d82dcea7896e7fa1ffe5fcdbfb04f1048052bae7d55b12566051c0b70e05c246a88d59b3e110d0970641a963862768fa8b264c19282a35158a50c1cc72f1591e2ff4137fd2ca580b567fa6fbfa6eb77b687d8939eeed56c9d8f99fc38c69c755ecea264624b58106e618c92fa5a8aa1a60d48b52936a459bb6610cc75d6e9cc7d418f9139001314082d5c6e998f984b0d8655c7c603eef9fa778727d2aead4141e00edd44832d85d374c6215905caa4454adc3b3916fcb1d9cd5736f3769ff15c60a2ab9c9a848c809f2f565922b7f956598de34568622b8cb00cd46264b748f8b12e80c6f5493b62cdfb848d75ac1815712d4fd4ddea815602130dac57cd35f38f338010cede9458425d0f06429ae3a9b621b08111c20be373aad39cb59acc68f0728cbfe86dd90a4827d3c21db46721abe5e1b153ccf05b03ca150902066686776a225cc413f6652c6fd27dbc0cbf83005c3d423992db166a1c806a506e600e75ef801fbff87414e84f3fea14543c6ec36299aee9a3a00d399e7dfc292087a54e369032b838b85d79275583609cc7daced79781db96ea2ba522e1089e6f0f88675edb0cf1d0186f8b0e8d99c673ecc4cf404efd19b1d80f29f02198d33ea70b16d3c5058efce7594fbc17e1479d5ac6a83edf2de98e9aef392aaacf89c36351ec8aaf8716fab2ce5442e13962b040e7e01f8cec11e56fbbffbde786d825a9b4d6da34a33b43842d6287f787192df1bacf8c93e015c531a8750b3c5861d03c27331d9747ab001c8cf5915c55b83d84234e6a8aab181a8e51baae4191e5f1893350c6bd1f486e8185f0f2b0bcebf06c4a22daf470870cb5886a619af4d40452d605f3683aaa1ef1070243babededbcedf1e94cdc98f551843020b61ecca1e7dab6c84c539b5acbb103b364f3ca29ae377b6ba4386154696011d1fa2f040701358344cce6b82e3149903cac9f47df3af8c0737bf0f5828cd07533c57266dc952a9067902144be61a1aa3ea7a60ee03b1b173453ca7cd26b022c09713c15d3fd6d5d8f8afd5a0d93be3d0215246d483bbd57584a83833addb397267a23c548f60819e826dc95d3a9b1651edcb5a06d504d7b9ab2898022be0c3a3e0e3cafd88cd7715c511cf72dff9d7e94f9c0f14fe7c3f9faf8015ec106907335d02999626a2b2c92f43705082cf84990550bdca4d99bf60e6f605cc0043c7fb99e94c90653df9775708a8b3676abe218c70aae07f2935445915237362ea9283e5854e0878c0bc004ed5f87cf196cf671c222b35fd2b11d39cb908ee82c5a5cb3733d00be044b486533512208f20fd2984b9b68bc543786a10b3921cea2b396a30e0ce7560550d3518b26cdaa19b41e8a823650e4abec755c7cda00e6fdac78f9af0365b5c43717ae89090cb998772c62d14b7d849d51bb5da3b8ff796983a5ad82d33ba45b8c56cb7a806609b11bb5077ec4d302888454be2a48be30455800af5e1b2f67031b6e7e8b3662a2566d9e8c6c4e10b502710a90252345d2fab81128e880b4a4acada389fbf19d8570b6b96fe410d1eb62e691470014fd925855ccf3efabdec31e4265515b59f8976bc22b8a2fcbcced06103fa88caf64cedd81c4c03ef896d357a6b6457e41deeefc6b5e8ee6104271b50122c42007ac9799da5bc38aa8ce460bee018914490cb9c51110cbf79391c0315f27e02137df7e398680de56e6605804235a70eb5b6353e4c2037dda74320d4bb1283d238608e45f36107983b29308bf2dc8b802da0480b35804a82d267b98c459944b2cee470cac18a756b9c58789d99072807af8f259c19210d893fae5763088ff4161967ac77daf552de1fda207d7a30005b55e41715f80f3964033fc5d5824f1278dd687c2ca2aee24e7e39a02c5b0b8c7826c0ab9150689bdeaca03970b8e58ded20153491c4cde963a6d97fb8247a55c3255e5c45787216a3fe9483038fd9f7c16d8ec2577e579134270cbfc8046b124b677a97b8a19e47ad480a8903ac1f130773a6e15688906d49388738fb4c806fd1026302ef18484598891087d651ef8736f4fda290e6e446a311ffb30959964f3a46518f7dbd21f2dcc4b9c0862516225372814d6da3b2a9b30f091d2bc46102b24a5877a2f80fc49fdbcaa997a4c3cbf085aa4ebafcabed2f822837d2f9a3ee29dd00d3aec15e32cef3072f48d747ddce4d3e3dad89bc2d50f6c609438f7310f1b203acda4e61fa6a521552d2de60ef1efc05920a689923ed321f703075658b96c3ff698ebe4f14749e0c1e4a551219f6b982ae4a8619f0ef68087eef968e6d400e6782e5775b06829a9429f950054db802d1a73b8ca6cc6aad132f751c0ca54266afe69c3a49ef0c8e5640cb9b18d6c1548107f4495f844d5349468f9b9b10573fdb860aa6d236d96f4490a2cefd46eedea5e11cb6798111771d463837b485ed4cb71427166bb2f036d70bc49b672e6e4c64de73f8c7292c8ce3e9b53e5f0f5b920346651ea81dbf37191fa57aecb0f88f0296c953017d1f916dbe09157029d919cc4c322beb348614da718db3f947d206bed234d4a7a4bcf956d49a286234081aabd582aa6ce4bd01e9d8d41d14a4dffc908e02ccbc82c5ec2668fbee59aebb47fbbf4cbcb47215ec4a3ce901eb633c6c3ae5c0c5fe3df55ec400db1ba3e7775d42e7b9028276ad14414baedf816edb390b6dc8f3f1cbca2f68066f27d8034ae88eed3b69c5b58a0211105453b30f4373a0152e6c9022ae1b9dc37e6ce4566f49201b9569d2dbb9f9f0296ae17134aea3690f7737132519105a0732102113f68df2f313eacb0c003670517966f86ccd65ee0c8d4469c62e00066bad3258b55e11058925484ca7405cc8037163da5da0d3fb0d1ae552fe6bf93111e14c87dbb1362e45128759cf4db0e9e62387df42ff73fed9729f028db0e9c92f13c6651e0f5131bee881b6bb3e1ca53af79e58c04230afc1f19718fb6f89b8e967b1279e0335ec20689713c51db167e34e63579dd4712e445d27b63ade58d8a64ed54963e227d580302dfdde4cd2e78dee3ac1090a7b8781d51e8fc0403b688205f26c9175275754f356fb7ce67dc510cc53e7066d7d0618a1f242853096ea331d3a026ddb443d4653624895ea206707968426335a5f0220626ea4c3e65868b3fda162d7f37906acdf9a785c63fb740357c723e0e1eb23da55d40413edf84a531adb030483da47098bf3b974f445e45d2263a4ac9fa3f01a80f962c2e8474ea2e35d048feea24e6f58a055628548fa71cc62622045f746d58fead24c26bf07c690018841df7cca84f6221eed77e8beec78f5ddc4318b116305ded00cefedd2320518b5f0f2b464715c921b522bd876763f76c91051e4fa022c6f1b92a39ef69eee53f17b1d811163b6e2584bb6cf987513b7072bc610a889387523cfdbf84021a9fee1d7de84be80c9b0ad981014cdd6d96832ae5d9e9598d530fcc466a2fbbf32ace1eaa82efcb3cd8e0784ddee6481cab3f91eb4e832e6162f80ee57b3b9689223830f1f6185a4d136641d511188d15768e6d60a1386921e13259d3275a6e8dc5954a4305bf207893751544aff7a8c2072ff10f4508da594b9fdde55f4189cc3e2d9c3961ae50c6018f143b3eed2833e2a594af69a7ca1f067e36f81f8997ef2a217d182d89cda28612731d0349a39c55da60b4140e0e03f1b4e6c65c5581f94b0fee8dd5857112cb03c0e0d86003e8992c4d5024c8e9939591568d2e54540152b7b2868210e244d967337c9610fed7fb5fe04f4d5b621fd1ec2337fe2c612664c509fc31aca9e260f4783a40d21591e7613c2905f600723926b1b7766e7f0159c5b92f1e6828ccb6cd9b2e8cbbe5f5e56000385c5f8cc571a960687e53d303d346fb4ccb5925fc506fda98790f6eb9f29bed65d984c160625bbf2c54515257ae81f4f12accd947911c036ea2e1d7c8b119f328c330f8b6a7beafc26c9c3bd211ff49428aebdc5f73783714f3efaf9ca92a9615089eef1e8cffbc73c7139f006523c7f0f3941d991a5d9935903d40200f7849101a86d1b8a23abf72d335996630f2ed1cf4222d5cabb47b02fb5c6aef05e0cc4425a29e057786c5f1751d182c88af3722d7f0b32a599506c578bac798536ff30fad87aa73a0549548e1be839079f56088dae60f7c7ee842079d901038950ec5929ba5b8e894c983a79ecf57b3da7cf27bb412d1a20b1e7f990b661953a4ef1ee82ea2424905ec37c361c908303126beda63fd1e776e0de976b01e27274a23537562a1b4f219cc1c6fe3687fcccf73d0d5c28277f9c9518aa3723f99bfd31d7493c6835cd21236dd7a803988d2a92d2d1405705b6e33905a76930f5588f38f67985db33645efe4ccef82240bba5e2df5c012e8bc15990815060df4ae6eb15f28e159ab844c12ba205d24f8a5639e240c599c01e8a9ac504b5eb49e69af578a619004c8ccffffd515247e20c8ee9f32ec4a57839dccf221c8a7fe26fec2fa771d5cb504bf70241fb5c766bf8562041608aa376237e49d8bbef878fdc11fae3173cc44155598e4f2175f582fec2e36483b5b8698802a2dc33111da8632e568d924095820aa92031c17a7795cac7492be4cb71cb90284ee2d4f928985ab6a5d0110cf8ab8cb6bb4fc84f96f3db1915ff0111b63ad88de4be3cb23e0686badeb09b2a5b789b958675b262e1f721b62a2c055711a5ee315a584b42d8af201351bf6005bffca22c47ac13f35c47092e33340661032181ff452835cdd7849519de4a215956bc486ece326ff5c5b30a58d12b116b2aafbe15d38ef853808c87118e19d3b8898b2b900bc260d124c3812db01bc70282a67413dbc499fdecba3d82da809ff28a3aab3825fee797d7e841ed18295ecec55e0b228f723411aed7db18fcc53a4031b4934769b725c89e588224d3f3d988041f219cbcf63155f52ed331869cb6c7ed1a38738f6216fd80fcde7e87dd7c1868948e497a59f03f905cd09f8a546d679850392c3e3249a5bd083e72986c004fc96a6a2c357eb55810d68f3f8db8924345fc410b265363002c3f7213393a38a18f026432178c6b337124c4853313c742e8f60e18aedd8f7de908b0fa768a62214c2e75af28472a1f10a20d48d1465e66bd2078a7286973f97b351b8d7f37d177f6bf6ff281d6e81dc4be7e1be55ae382906faf8aca926a2dffa5f92ab125403cd26728bdf03f110f1d6698bf488120e158c81c10703c5a7a1a4810dbca7c349f02aa59d356f75d5bbb81eebf5de908321f2a6b6bcb04814b8f85596e3e947993b456c10a95082471f6a1a6f7df7b23695f4c70b991b9b19fde53a1e9c7401b6f93f2c74a0f9ed347b7bfefdbb42d74b7cc7110ab9cfda87a18e0d32fd8e2368f2efa27a0ed39ab8477232f75d338554ab0726edb22e76151a05e7486856d19168a742444f1468db9312536e0003321c1ce9f30edf317e38ca6f051598d4e96c4fea58deb2daef0fb4ba576df98c3e0cb6c2c59cc602ba32b0bd6f22bf50367dd7966e6ca4d33d7abb991c026a7401f74ecd5ea7aaa526c816743f6764a9b5e9be03066d54315e31332a2990f4c616c20cf20457af5829bb1b7287ec764bd1eb221cd641ba9d5a95d66647226e0879be1ea0e2c1919f55fe2fb95d47f799f23ee338285be8ffa18a38e454f8ea6348066d1862293d095f949f3d68f011bea87be23ccfa67f1885de67bf267ce9e162946d6cb0ea8ccf364cf63ddf4b90630fd26b33e6ace1e2d48f9425a77f156a2196b56ff712549b4208699c2b90b9a64bf1d7ded9a90020ef10dfe4000702a8564d215aab9a1dddd5a084a48c0a409755c8fc0c0b5ca4013a23b13f5d70c8a4ab0e8a10f3bd370dacb27bef37580d4618aee251e5ff19b84e088303f9593d7c4d5308493887feb8d2b8ba35a1676383e5063b364e318785c19cae911c305f082617ac5183912dc4444988adba48579078e1ba59b993944a7607d3031e04c803aef312a3c10c6a0056447c9a31e1b5147c12b2958a33a8d2bbd3f2492f8b06daa8c944cb69abba3bb586324a05e75c5d2ba333be401e78daaaee4e3552a6a81f6734b1b9bbbb3bee69896be76ff7773f8f347660dcc5352973b6e1b8bf4e7719638c319ec08ea38e2329381bbf05d8ce23d404495c3f3e7d61adb598b63ce433a34c2ac121a38409a6244518f83f7ded58208913243656453c21dcc9aa069984f9c58f8a39f6e610e32791827863c447d08f8726bed42c8242b19f7967a07c4940b921868ab73119fc706c209b4474a318b260c06670018bc160e8646544dfacd895be5577a77e20f2da898484929a02f200dbe910440001c4d8717246d22cbde724b872ba5646b79138445b8671d7ff585e3bb5623e6cc580a0d95af356862618956a94703e5820c522414c8042f52f37184045ac374b11ca9b20b210482190b49bac980eeb313a4a9a8ad74d7fb6602e66de8ea440c7965d3fde5deebaae38e9f1476bebfd6a912f80b6fcda4e8740e79c734616cdd8b2feb7393340bed892c18f7fa6bc7602c9177eb05edc7487627d30ae24dea8786256d4147250543ca648ca8ada0b40c7145b5a02471e1aec8408c3518fec8820c372821dae0c274527471a3f19e2d94f84433e2dc421a3ecc972082973e20eb5b327c5212ada109195dbba7c79603b8f257ec438f05cc6550ad6bc2a225c8584ab903fb4c4f83d1c652c91e99d5577a7ee9fed44dae0b16518f71f2c890fff1a16bd31cff5bd3ddf465640a3fff5a36c777f5e3b83c22131c7b8c5fff37fe89cb33b31bd5577a76e2053a7432083d2eecc9766df31d6d6c8a9e54d0e1124354f548c486a52aa7af57f4ed1803704922227986e20250571959824047d71453b9aaaee4e3542e4b51329c608b26625d1622ac74aea09eb486f8b77ce39678c31c618ff8e82697f9eefedf9843bbbbbbbebfcf973767777f7ec4a1c34b64e5fd5dda9449affbc1c34f37c6fcf1773c5eeff5701db587577ea8b6be7d63ae79c73ce9eb509cfb9ba5646f72a71ed4473767777f7ec392d62ef6f772a119e18223eb4e745e5a02f56f0a60959b5bad60c00a81029e890a24fecad8a430eb410b7e99599c11b2b5616b0603f63840c6b68b9c458ad3636a0c4305998281c5b8639c003ac8fccc8937aacb3fe796df92b64b7e0d8db755d43ecd038d7d4b5323a64cf6bcb30ff44dbe910bc0ba9f77c6a57e669667694372268cbfad377acad5da9eaee54a40a9ea14d63a52a98ebc3755d3fb8d0d2be4f240aa260cec93967cdebbdbcde4ad09b6311c3ce02638d1dbb3b05cc2564dceeb924e2855e5c3b6d9f835cb1e6645e34dd7417bb40c4cbd8135b01a4b19f312c84433b26e87562038e5577a73621f2da8984c43581c279bc3532e59de77b7bbe25eb929fa6e9d744b4fdae1c1316c744598119248e1c8874e8e9e124d5c387e62e59e66c21c1206b4ac88ee0d385a6221d2090ee5068fccc704a86452b4da292c67c90019b812c07183473fc26345d04d84e27a499221fe3c5f1a73bd5878fd7ce2022249c0f247e360aeb9e4f878e0e1e1d3e3a8278ec9583fce64db57aedfc057154c2133b80b79734d0b4f37c6fcf97032a87548ea91c405e7260c158f8b0e2e9abba3b9587168fad291ada14f0050686dc3e2f3ddf8ea2d74ea3e376b02fb926e79c5fbf7e1e97901afc7eeda61f5ab67c3a040f78bc76ed5abbcc5ca0f5aaa291937979bdd5c65ac1ec355e71edb4e9fd18cb60d1cee2daf9412cbac85ba4d921eb345d6063eb977bbec296fd02823382f53fa3a25dbf5a3f4ceac0cbebad2c35341454ae882920d0aa9449155298431e3d28a0580979348930b36a0a25c880b8440dc486b4156056ca2924125e44d69c2d5c4101bd6252cd90f04258aaaa01682c16d840ae1a0201e08d90b79102765790a00bd3add9cee331f83202068d95a6a837236d3936c4220587ebe484c482c3f13b9ec87162723463c1b250b26851164b8d1fb09d4e4d924ae8f759c1d982eb47e3fa21d9f2da4903d4bc2216ccf3bd3d1ff39ff714c1dfac5fce39e7ac813470a5adeaee54dc11616679962c69f0e2b2dadf381966679d1e3f5beb9a9c7bd064cfbc9ecb08628a5009349ae1b45c29140c7ecc704998228ccc7018289d9804d12c8125231fed365ccf27723e2ce8910c0a7101742127d9a1261b4c07de2e595c37b07037b4684b4cc007b8b6c800dbb95464f32e524ca5e29eb28ffddd3d63281557ced5b5323a0c40a3677f659d7366dfa4949d5f4d1aaf5fff3ff1726673de71570010121239480c111272c11d69737702b236f7ece96ea5c99591f6e2e34134e503071b845716b034b0f95d69bdb8fc884097961ae50918960cecd26cc5666903820a8d118ba942e3f0c35282921241d3860565a6394265f65bae7020dbc03c4688159729b00cab909617ee095139c584b6352ca958d0087e44ded9cf28893481d16c8996bcb678c170e36660f900038dfb240183866191202a18668209b09dec54138c8edce6640c603b9d629cf01a8f318c09d9c25671338afe3a1f3330000230098f5bb501245926092c0820e7ea5a191d8d20538d0a018841642a620100305aa4080238f044442651a800a5444e4d80716a229540a0907375ad8c0eb9227fb42408070d18fd3c09f46002d24d325990700c26af2244681236d5488080b4d6c492a098f020e7ea5a19dd8b57c68397b455dd9d8ac46c5a42702043d97444420327a2134e8b4b8d9f138a065a969cd816969cab6b657447d6494a6545c9e2944a9a53909aca51abc481403316954404a4b03f258e151476296465967375ad8c2ec9a854124196b6aabb538f84d8dd03beb7e7336e55c178faaaee4ead62ead73510def7f67c2eae9dbcb7c970c2adea9783c3ac80a963a73b07498829a855d368f6563f99c60a66960a05df860c8fb25cfc2ae88ae84ac5aac5b5736fa5dcae9a4e4e7e6443431929455aaf9d4b97f9de8a346f4656fc36682edfdbf36505bd760a6f59c3618fd8761eaf9d3e41b79788a8b596cd70799f857473322bad8351c96bac25e5b5730a08be6961e97fc78e3fe6408add8d7101707b345ea1bcb7244294d77b79bd7526640476a4d84289caedc87a1c5abd4e768c0269301088813aaf5df8beb7e71b8135426bc4168911eeaef5306b2d82a84514b508e30b8edeefa33d039bb876eeac3751d06b1c02ca6ba7d41410c785c0b2f05a53b0df7d6fcfd7f4e175d7ae9fe808b6ddb523e53b53223670e0d1f10244051a82339a48d068fdafcf4b44c8dff925047aedd4e1d138a14fce39e7ecfefeee3826d3baa6423f3ee6d83086d92dae1563dcd418638cf17bfa479a98ef547577ea04c47fff7f7f77cf3a75f2a8fba33492f2beb7e70362718004fdf8c0a1a7c8c7d09f7e31ffaa97067a79c432cff7f67cb80998283a43e5f14b6cfeaca8fee3f69cae95d1ad60d198677fa318aa8288c662b18f7976d7ba5444b5ab60d614000d56d8315c71f11952a0d28282c8246341d1d2567a8437565452302d48a1f9b847af2cc54473e9688b86228111189bf11065b2134da7213166b114eb051ac07a5a16b197044ce36c9f30265bd01244ab8dffec7975a8f0b843524cb44b3194bc0c951e229058063d3821444a967889664870b2f276f0fbd984d8a4d8c4583401d6db954b3261ae0f74d7391d781f269d014bfcaea100e2c4b229e8068ea80bcad7b056bbb20828b65fe9b5b35dba7f7bc2740856824f966cf79d71727659816b8a8ee092d9fbf378edb4f1d9b4d71abb9198cebdba564647234533b5ff517777f7ecbc9cdddddd3d7b8e6a25b7353faf9d415c8d506badb5d6aedddd1d8679beb7e7b369eadf3b7d5577a7ceb8334ca0fe4f95662ef746886be79f4594ed6ed8b061ff079359441ad8b402052b3cd13e38841177e0d6f62a835209b585d3a0acd141254313d7cead2c7af19305d142b5eb97a4fa315572948ed74e1e9f5b5490e6a1246fdfdbf3ed648ea636facdf26802d38e01a4d74ea81b06a4b6cee9291bd70daddb8d2d1aa0ceade5d17aff6760ce39f7c0f96f5db35321de4dd608a68cd09a77523575ba7308372fdeef8f71ae86cc1d902fe4fcd95926136c675bce39d5391937ddb9604e42c462ee3a84c17ebc46b3978f61ca0e02d1d01f3f603b7bb745eadb05415a361ec96e3ed87db380a972ebe1ce6e2e91a51252a1897a1c28cd0d7fd775bdc00572daaaee4e456a608d369e0c8628d8cddbb3a46c193b2015926d4f5577a71af159ba3efaedda4c4b80b60ca3754dcf36e14cfa371313a52dd3745cecb202a11f505942ed4cf3a7d1bc03c9033a3013987eacba3b95431047631c8b61ac8fbcdc73aeae95d16d10e2dad961c5ff6bff41435f7577ea0d91d74ea41d7383a4a1316086279ba520455b4a517ea327e6efeeee39e79c73f6fcc33173ad311c96be5d8c7ad02550ec852f64baa6b8f4ca79dbb04e66c4b08bc3f38e20886be7a6da31364c2741d0989f7149c971f878886b4f3592f031bb44323b91c92253ffff8c0f1e10ac8e550b6d2792a5b165a17002439a4f391bb2923cd96812229b4ac434c8629a5a0a9a31fc278c9fc3083a0ca13b6fe6a57d6fcf67547aed34b6dbb8a4bdb040584e5fd5dda9482f5233694dfabd2405612c54a12f62a631cff5bd3ddf91f1883d52d28eda17183449f83a450cf5574667a4f4dad92edd9b11d3b104e8ffcb5f9f4cead18e0acdb42b2dd2f1229e221fda6b77c9450c588ca1d74ee22d4611c8ebb95e5ecf25c70ead6528616dde4a1b32cc0a59149731743153726110634a4258cd2b69696467b724d6451285c662c1af1fc4942dbf8ef5929227fa774ecf648ffbea52933503ea71bdebbae6d0649c7375ad8cee6cdacea44d5033e79cb465dd41bf6b4ce2e769abba3bd545d4b16518ad5d2b07ed94010ffaaee40c513683f55aef1ea89fe6fa7a5d07d775dd595a9213fbbd5d4adb99cc917271606a9da1122d6108a5e50d8dd708026a11f300049504ca11f4063aa47ae8ff53d5dda9146051a0855feb17fb0914cd737d6fcfd742a705cfcece2e903717501a27a65b60b5d0dab9666bf71744b71748ffaf73479d0cda952b06bd760a6fc5a1bbbb1f518d7af6978350b2351196d74ead1bd1d60b870e4118ab1c289697508e0f962d24cc3942530635ec5ff0666519e499b1c11fd86d851b749112143caadc58148351af5bd0fac0d212239421244cb860f710e481c803d263122e588245af9d460c41168453ce31ddbd6c0daf990d1cbb8a18bff61da9161743ce1acc393be1d078bd739b679a9bee8e3b2762c2265a3c2f50e0646d2e18096d4ea682ed3ceeac2830918bbec6396ddcb2e5588c75ecbe0ed45157dd9d9ab4b46598ffaa7fa48b4673680ca8f6a7f47fcc612daa2462b36f970989270ba1502811d31dca540ecc3dc5f8750efd0860da9593d1c9685b74d5dab7031160d77487e2178b988cdf8b55d962e91944048db5ae95d105197aed2416f12d8811639a940c88bfbba38e5d0b39d89fd39c3353e7993ccff479669009ad260c1b51378ca4685ca091543289369aac80796e94dea8548c5e2ba70602331a04104105922009e35aea6414000914c85878a48c583c168f45616148500c0382814018460100c3301c444124869358ca5a4648157e107cd6319645cd8265680f4b706dc62f5b31a3d6e48fbc2bbae21c5f4609f6a39f0ad98590e87144692ccd8fbbc25c0eeac3380f6b0807dad017f1b0a89d710a2b20675709aef9e8b3dc5ab69e46ee8a1b0730c57d8044e3c9c80cb036631aa50b47b6ba320a3bdb9db0f1ca8bfba68561e6a6d24502b9b42a12283bb6553339804d27322e11982f9138096caec858663ba39a25f2263ac8f996cb0bbfbf21ae3b07eed5e57abaaf79d93d4acfbc2ca12f4bdcc400d2589adf41e3e625b8c57f25d23c30e71d06198677130ba4c47dcff1187989e12b7aa5bff62c79fc2141a1fee2a9c489514db6d376e837d8b3216873e25e2f5eb78486cdb9ed060a74b0a68a30711971e5b818c2b4a34c961a427723484f2b2852952316eab9bb23d62b25b5ea2bd356d025b3f2ab211b878c776b4eb63b4a709e7bcf418dada72bd9199658d4a153bc1d08aa16a1a56424e661af5dee935d772ce4bcd04ec0112b3460d3ec6bda53f45a7d33926abbba78f3bfdb15a7daefcbb0fc724c4170c6b73375558d1706ca042d771be42cc3341d83afc8bbb84c436a208e27d39938edad18879baa50c170ea0c824b876b96b8819b34c955f8cbd57162d8c1f64899c747a91be3c1ce6eadd38425216dece9c6363a964633ecc8e669ac2642a0969855ae959b87a36eca4c587c15c64cbd354eb9a2a690fc4ab423dc98196587777142313ebc34b8d8f7349d8793224924401413020d3b8acb791e8b1aa48b97cd91b473cd45b942974d034ad370ca85fe3b97e78b8b7817418ebde1930405f41160a9d97a4b24c3dea41318d6019a482441f1a4a1d362e472933e491a16909e867311b914e10a95b8b12ef726081c2b83e31574c4f046484cf53bb807ff65aa73017f4c104bcf1cb49abfde0f31c92dce2908d305b0b49df9f41413f4f2183e417f7163422251b8affb85152cdd23f3fb045d9a077c82fcd810882711b1c0783aa894cd587fe0a576a862f72bbd73225db91f1693783cd1d22aa06449d7903587b367685753cef12dbbd8e209841d825e43dccf1991aceea287d3bc7fe4959c068b0cb92c32b553a92b5c5af6dc009cf9bd0113105d1504ae2f601d284d6a24457645644744f55dea772ae952f3dadee93e54d67921f43f621ae5ac0af2fc32c5a620b6bfcebee293f599e09fcac249ccd0ab2845a3002697f167941f56779415d721f265d54d7de1a17a052eeb552b50102bafcdeaa5b3693e9d885bf6417185b8afe46220d95dc45287162046800a3eb552921c5d83ac394d76430bb730db9df042d7738ddfb64152729e7a04d4172f35dafeb13b993f6633e670431a5cfe9d9cc4c88196dd1795d101997eca744fd58159ef125a5843b46b87c86d9fb2eb10c1c350ae87ca7b92e91545b3fba67d172fd7d07036639b1d9ecbd575c2293db107e4fc1625bbd157ac92d515f5be983fa2f09a2980983123b0d05287d118d45847f925cd68348398a4ba997e15afb32323033e733b6a02d29d922e87bfb6c386a288c1f0332d4877f78ee8c11987eccc517bfaf006088259dd2a03c56b30077bd773fe7ee8a0d8d3a571752fd6ff94c2add28e8406eea57622f21cb78197c81bd1c79b13fa42c2372d267875286bebcceb6e64a0cab922724e35996c028f30f701e188a636f7943fdc3d7f7c43f88df6da09d4e80d5bcc907e54b13ffd73cbac62dc94440706e810e4dbec005c53522d44554e0d325f5e89c51b76cb5c21f3ff14764ac5b19305d1479273896aac1498373187272170e49cd3d6ab0470821c4ab28b46ee14ec577c19192f227335824c1eacc4e77d84b1535e11bc1a5446c5c4533bc9ca07810c2acde39ef88d8517dd74cc21537241e926b941d71b77ad0a8eaaa14ab4203a95e02c7a7a8ff51be424b92e5f0b209b60127709523fcedf0b9134ed5be9b2cac7e9a81ac9bc794b6747d4f66b564fc76f1bd03a87f5a0380930cdcc40d1bf90ba861db82f679ac5c3226a5bf13a1f45d4684e43f3da48ea74cc0788d0c1195c2bedd66ca5eca73d3ed5ae6901425bc2357f447f8a58b84dc105e586a59f8a19cb81fc98cc59acdeb3fd33aaa49211ba8b2cd5b9603a4908e61aacc892600c626e5dac7d1b4770348fbc1f8d8ad4b29153abcf68b78743d007ccf3b88f0bb94e1ffddbbd143d2ee879cd4f53f56fe5556f16eea4f2220ee90e81f5139bbeca837e06618cea280872c5414e57ae59e2fc0d116bd6ee70291e34b14b8bcf45199c2480934f8f2ac4b4f48b4050a791a052f95231672fac73168ede059d9bb57ec6d1542cf1809fbaf50897d7594bf6dcf88c4e2a3e13a95fa7e4c28ac308d2a290512035d3dac172e28c82b96993959361cfaba33883c7a25f8c5133b595aca8f784b80ce30c60309d82f857f7c7f8ddfb118d356ed4b4924ab8218bb3cdb22b5494e780310c516e8ad85b8d323a5802e5c230642c8cbb984a1752e6410b3bf3369e36a35de8ce7966166c63fd2eea5ee164ad9a8696734427ebed9bdc89bb86c963ed0f2e9be9313444d7995e64407b04b5b90c68cf377b9fd3c8cac0bdf87fc44c65457ec10bb435ccd86d519298be78c4c022348563df1489426f8bea5742acb8f047f11b2db3c44ca4ef8b38f3cb9ff23f2db857dfd38f4a9d13481fd594b8c8544f3421e4969b85733efead3c6529383971e419dc597c716a2c82e112a73d07d070bcb11fd5bb107cf39ef02ea3e30d6ed0c545bca8a1e3db9778335322e74df9d3cae4e4e386172e4a68d8bd30bf0d732b047999b0d7331f945e0c4306b18924bb817e7ff10c6c0b14dffb501d4d88caf7240ddcc4384290e4904ea26676126cd0cc6011fe67bc9fae274ef900004631d814ed890afda252beb81c0f205906e5bf9cf2bff5e07fc835a144aa5a788e933f33463219c5d72a168f878463dcbf21751e7f7b11759368a5397a50243121a9dff5a8b4fe6f4f1d227a509058ef283d074a8bf017a8eb2a6c6223e4f1e42556f42b35c7d7eb0ade80aeb83461bf5c580e18f2589c2b91f3c52e593277c35209117e35a0aa1eadf06f1ba4af09009a20960cb5a32b6e8d0671474f5fe6d301bb25e3f7b60b49589550b43afbe5c4d24234cac34c99ec80f3cee62c68c9394f2c1c347e2d2fbcdb1653ac8b52eb68e869e1ed248299ea0d9ecbaa290a7bdd651b0efffd5a146a8f9b87a3ecc615e7b7376a35685615f814806a58dd1c12329d7ee30a671ddd760998fa55e603c7e6a1257ce789be40ee86c00283c925450b02e92a8860d8eae39492e8311d94327ecfbf85d75cfc0afbfa48d3da1e8d6d876597da69310f7e5a854eeb510f8f986037c96b42416b8131c8725d3e996215c93b1508d3113630bd37652a4c9d8587c740c1b4f041b3359d5bfc9eac357fa00ec6e871220c6632bab2574d1da11163fac1fca9147823b0da8d5abcd85e222e5a8763b0623bc3356398f8db49b5308637f5f0d7ba2468a49da05f0e1d055c1d60f006c2aaedafa908816c06faf6dba62c2c3762f95df0d91baa95084e5b18077f6d112fb4e58b00c00ebd7e4d64e56823069d2980b2f3ddc107d6077059da3d705c996bc8ecdf400f1f875890e64a1140bac72413b8f80f82dbb81ef3cce5e054245744a126d4c3250a2f18126786ea178ac721520610dc3a8c271d0d5d02b2c9b74e1196d149c8753cd23a29f996c637d14cee9d8cb146f30e69e5d18810cd569db510181ee252242a5d62291645eb50b18e46448c98c2e0d5641beffb9c5fa94f65676f9564d57805cae735a5f4723270a9cc1f182f64443039aab4690cfe21081eb932fd8f484a89d42923a21290a31d7ca432bdaba4d59ebdaa77feb930628a40073fde135d7ab2f940bb39008efdbc93e6b24641c84743a74acf82a647176b121cd47dcb5024180440f51720572817ca1bdf15b5ba3bc879fb18ea1ce61fba4931b0f24ffe27ba526943b694c895b9221170a27784a07b0de2f6741a076a1c34ba727f883260e5792d60667e567dcd542c13a69599e0b0605e103f631ee09baddbe59ac1f2c9f66c555b79651cc0ab503439c4fb4143b386a914d13f7baf3c6d565b2921fa0e024d0bffb822e37885357ee4d71c10355fc06c3b3693697d40882acc147b8e4e423565d8c64c9e5ebf859a67dc50171d9172a435810c4efbc897974d73150e51e5800277a9ade1916b16c7e012dc7e6c6ee9c8626612a2f5f6c4ed698c0e970effa8df574b8cefd218b71d07c710e922d439672a191649683afce3816f89b8b8d357421b9f088b4c21c151094df6aa5ed735178b2ad60f2d5411af8cc5f05605ef3004a0523784251c179f5a457029d8312cd7f35405ca7c98681ae5e4e933111b721b7d4cc0c52339a6396d5bdb67e04d741c8bbaa3f19ebef20e10dd90cff7dee2de19dacb7956075ca0a2eff46f49f3d50dc27d5640903c4877006f7e30f67d0dabe59a1da4f5a865b029af3c72ca2affe8726e3efbaa4c9f036e613fbe61b9c9651ae3761f6157931b1bbc83bb55ec26256393d6702767bcfdbf66660bce79d83a5fec2f25e8623d0285682ebae2238fd4830b110e1c2621992fad3971c97d53d597060bf0d131df633ea9831aef9d0a448392402a0148262b06fa24015aab7b2b173549816fe213fea1095bb1d596abfd7a1d496f3a71e42e95b431cf711249549e6cea4b2971a58740c819bf9454abd0e22fed47ec0c2d165d39d158961ca8b94ab880d195b02b55efff0a444565805ec22e1992a8c302e9bb34982a340d3f45a5344b98d2b0136218f5e81c917641c74a41a488ba10413844b66b52674d269e53f419e100f511e090ba00bbe1fb1ddc76bf3d805d8c808bf3eccfdd70e5e88b0feb3faf94ab8cae0ea03801f404dc9989dfc3d4c018e133948d30650bf60f60f88b18aca92ec94df8753ec148817d4297d4e9985cb8faf66ffbf150e7c0a8f358f6ea5fb68e8a69b0d49e8fd2393e85706d8230fde3f88e4f97f5846b53642385b137cb293777fa4cdb0cee6e4904d68215092ae4262038a3ac8b9cd73b634503d7060b4364409a1c332ad29c132abad00c7c175615919bb0c6f1a7ffa1ababef6ee146caa3ff47541871b70e09d2b81b279460471e5f8fd591e7ae5ce7ed0a0e81624a22f75198b60ed80a7d13c742ce328fc02885b4800893a2a18423540aae20f6118d40e041ae12ba0c4e6609a5e252232cb0f9595920db97842a391b869782519f9e34c5d0c1fd8bc5edca13ad706c8f73620393ab2ab82f1013fd88603d81ec9da99e649b035143e323c2d258e9b2ebe45874a3d0cdf57c365cbbc9894d2d74b843abe7a23218fd9d00332b134a34a204c87016f29c13bc008ed97f8238a2ff01f11bfbcf006f4adf03e00c8d00d5fd87d79e1e5d7ff133e05bd8ff437c82f70b7164ff07e003cd1cd27d037eb1c6fd5ff790d804c004fe05bdabf26efe3b256a5dc85aca18c73180621935be6f2cc70d58cdd594c3cd2fa8e8fe2b82ad9383302d1fd68b948497ef57cb1d01e37fc81ea5c3ae5e68debc663c7ed307e7ce22e634ee099c1a84d062e6725b5c116e20a9f5517382be49424b766f52bf37a7856e89d5a2992eef6e430be559d309259a22ad7d790096cb191670fc550f00acf6cd9de04c24505422cf728cf900298552b3a98be0bac6d91b18e81081634a440c7cd3ad00ac3d1b8c034df78c6527f4844b1ccc8d9533af0bfac7a84f1740ac11783c311d18cb945188f1f8514180c5462d48705671c885da5eacd04e3420cef7c7f2809708d24dc849b11b1bec4bf5ff23943272a910b25a940081390f3043d5611fe73f11ff08763af368df827f3f38608be10e6b87d819e7316df5214ba239e4bd70870474b798fc0e67603d57d380a3caf8f9c22161b1eb9431091f31be793120e323d446a7e1481b2d2aefb6e918e9d751b59afcae35df3128869ce7831e4293b475744eac050d8b283de62686a00ffffa2c872e316835d06f06882d064421c71908f974f52700319eac478c7de52fb17ef801023c9aa079a3a6a9c412200338aa4c5d5d74e048a6900604bef3695fae120b578190ba437a57831cbda99f2cce8e29ea626278ca3049de33303e623b5972fe4e49f632c8560fd08411ad00c662732027e1a67f996260192c785320f661e334cfb52e032f195feba1b798848aeea4483f0826dd739235ce864ed7921aeb4b00055d872f5835d1d3e4b5ab51adc41ecf8db2fc343808bc39c17e8a0dd332df5e3e97d5f0748ca6283846838278770b73522d4a345bf3be1782bdebe008977643f0ca1be0e34581094754bacd62cf58933e6ba77a608aa1c1ff6d5a2e4da378334ca3eb062aad4ca9904764acef4e130cf195901f288ab682436dede30ab1e24c8dc9ec460445f986a3064f73016b3a81f5245a92c129a492b99ad8afd8da4689c1a6d26a8d9ec04316ae67e6d1e2a28d5a5e899bc527a02dc2bd483a9f7c6260fb59306553c94b548e03c8bd3a338f06ff61b371e2fc61773a3c400737e7c74ec3bd7ca75548945a725f9722ac619e83bd508db65001015ec88fb4a7899b5b8be8e1fdd0b4e781228a5207f7dd6c83e553850c691144583efa49c43937a68ce498c13e1b29e99a8374b34969715206695ba6535251af006e4d972494cd90c6e82ec390fced2dd8a21952cd93cfdc354b97578672ca4e4b9c036877576cb2ba684ce7e7cad4cd3579a1e67bb273fb76755641f142220fab6b2beed7101c8cc8f13a15c8df03cf204aff9288d418d2bbef8b725709d41b9aab34dd841273e2ec9fb9f57552cf7c1ac63945d0ca21fa80f20762007d0142a32cc25712ed8923af0b9e7ff9b3a4ac34a5a30a102c4c820705e6574f980fc375f3c45daed17201cfda6756d3c15cbae0c73caf724c3a604c0de94c9520598211c2b1b5da94ff89d864ead3c3c951a1b9b7ded45f1ca95a3d99a07bad5649973aa940a73de776373a63c1f1739e0095efcd25ba8f3778fa0df3e4d212b2f95077fe66c55449441095832e3285de93706c44df5d4944e2eed8d7ea8d18a276489194265177ef85ef2cd1cac0ec7ebcff2162b159e9acb45000698163c26844cef8ce422b7034b7f5c382000ba6f658e71fc04330c1f7027c3b90eee1692f8ac333c3eb052ee75e4fe808e0efc584dbd9295c9dc794a22869d6842ca92f82b4c4676b11e54416d7e75429a9f7c354e1c0731a476e7df8b26f393d0011c65e234c51b69b87002d7f7320968653659893f792a444aa92111c3fc4c018334cc9207165fb9f67ba487907ffc2c6bd86fcdf05a48305cf1cc7d691f292686f92e1ee67ad13686b6540ceb1012539cabf5f2bfdd1fc18a44843b1ba8e6a3306fc94729e21278ce9190667915e1489f62659568d73aae1c85c3ad9fbecae44e63f2feda8ecf1a4e466ce5e7bb882a0c0efa83ea8079cb6c21153d608e8b3f27ddc53ece4ffa51c9e6139f922b2273a399c813890146b4abe83e748bcf599a3a9ecb803a4caed970fec69ccd58f37e05c3a94cd04505a8751d4b40089689324dcf3d8c0bcec703c821a2d6be8d6d679220a46409a25a55ff022c9049f9d9ed281d0fc147af417395d39b853885395e9b02a8c8b753f872539f82a2ab16393853e8e632b8c9bf6924df8c17f65e80ad531f1551ff970bf1116792280afb08a88b3f883ff4bb419eb6ecd3815005b946e43bfcbc414dd74419b595e976f9cb6ebf296884bc3947aaee3d2bfba3ca90a024d7b756e8cf0c3f5322e461c009e7b17f041bfc09ee4737243255b9811f54fa064dd498ec812cb708758ff5c186301a62bcc4175959e8faa42608b6345cdf4573e3d2bdc36256d8f0ee17c30a0150408337d7bc5e909f70a3f1dd9ea4c40f72c04ece8652528374b008ee7c0f6c40ce1e2c19e6e1d83968f5dcc6915e5027b7a045302b15a72aedc136ac2869c453dec4f4b753d23c54d73a48767efaafdd0cdcedd8fde44a61889d792bb24c971301f65e8ce0da6c59e65cd625d8f2a7e98eafe3634b8bc7047744742d9d77413a016ca690dcc3190e00a38d97a3822717e8cf84eba543dd5c44697cfa95a9b8ecb03990a18d94bbabd7083de6dda00fefc0b21823877580a746e30d12f18f90d90a4dbc42db9629bcc96983a329f2c52aa2637aa2de2c4cc38c82f256718eec6b05d67987fbc5eda0ddb8036b379a7529b2728610a030ae3e1fe3c493ee35266e0551a228c11ca9c9e50bdeeca40ae4c78ce2040c214478e07d26c3936a4ddc8b061ba0b09065254320e4873a4c830ad81c5624455d843936b722d2848aa8e08858c0c524f642830e552160569ae040f429a354a5687a8495352ef2bf0f1cc66540f6cf19dd06fcedab0b19c2fc36799baf255eb71a9d1a96321e93e8327d268b7c9f649f71ea034022560c51ad9d3a419d372c2e5044c18715b885079c25c7f3bb3b986d16e95dda0ec89356982c44d1c986c4de7a452481cff88d2e716a98333f798049993b87d4e4f64fecb781f156cf7743d8d1e0e1da71be92292dca612d467555610dac4d4f587a801e3825b46d96669fb11a74976b35fd0cff6001866c742eb7198dcc37d6cca78a651eb177724024716312b9e6914c7ec9008ae6dbe7131bdfc8913f1ee2c682dca9afe5c597eb368f819a96a8c7c28a68e304ca6bc332b64337168afde36db052bb1b6b2f3f1c0b6a12dd8d9e16202bf5502e3a1b8845c941d5ba8e7d546007a7226ee7caed4f3634ab5f15a040f6cd73d722f5997238104d861e8c8af163a8fbf73915f21fd63cb86965444f2c25b7ce0aaf3a5e23bb9a50ded81cf5e04159930cf526c7d49c2891036b5c384479134224337d48a8b503168ad3f5b0ed472daec31aa4736ecdc1e7a1ccee19a0e59e5202726ee42821d10302e69f92e9bb7ba16b1845ebcfefc8921200dea7c1e5ffd2d887bb17cd3ae687c11ffd163974fa873a65dd485339b09fd409b9f39a78fd5328edba28ddc7290fd5b1dbeb80555afe9411b90db458213b3211afb2c843e81212353a1d442acf041602252cfe60b910fcdc72409f9262b09a4343e4e94287042c92c5d48f2b9df3b038d075165b336f016b6c46111c7e09ae9755ce138a9513067f34f6babed5b88ca7c3cab11bd93f1512c7ee94c96e5519b428a12ee1de966de7a488701863c9953296444ee8e143276c8ef791e720a1b860283f5a0eafa00bd92dcfd6e0de5f06ff1bc07753cc57895888db4df4427c86b06f0e9d0479e4f6cd1f9a77038053c6d1fabd5b8586c1913d2e74a1090417a015d53a64fea3ff4af57e5c10144e5ee6c0224e38750827ddd0e2cd503d2057099374b2015e43f1bf7d19c1f7b1c64ecceaca3579ca3fd637d08bb18687d0a2293081a02e26d88a8c44f90478638cec0b7728530087d8801e1b61cc6bf76645bd05cf0ca949419230dd883dc5080fe326bf817a8e2c1407b8c1e0234676842a093a7e2a0ce4e0f048d3c1d003a394a00e898a18740fb7a3a18aace1a860e408d3d35064b6766468d803a1da5639cd1d853815083b3e4fc11044ebe964b08398a8b1ce0bb709200c74d978c3cfd92f36b1c10be35e52aaa742d77e2c7789151c0c42702e916563bbd785623bd635283152b7fbb223ac5b570a56cc7ea2ba2a3474e68ab2906cdc8cb3f4a7ac4e95f667d5089078eb418517457f805b8d1a48cc559f29e09564eb1ca96719aa9a2529947d80d0ac386b609a5e0f74530ea60a73742bcc8925721168cefd24a7e1097d205eb40998e12a44921d51664e797cc6696f60dc5b775b9f1cab19b50fff6a093550eb84cc854aba2c5a110062ead19608734e1269eb4066fc597f20bf6e39bbc12c4cc24c970adb1751a8fd8ae148c3e825187fa1c41e262327261f197de43186e6efb802eab0f5f19cf28fea62454d0d1419e9628f350b19236c4938627c6658b87e26bb5f02948e5f95cc728935f4d29ddbed4cd062a6e639edee79fa9bf21d89aa558cb74cc250b31f2eda548bd6493be22a1c3530e9639af4e86f2c54375691388306776dd7351549665a86e4ccc4b13072c5668a147a4f497e188773345235c4f02a5c48e88e1f4d0514abe95425166f52b09091f413f7e3533a37c7093ff528634c674818158efd750b4b008aa6424c45919da754a16f767788a54399e128bff0341ed072a7ffe34bfbcdbfb4a7ee1ed594c27ddfabdb416466061d3fac02eac8cbe7f944bc2e7787223bec815d85c50bb313ec1fd83c5d1785bf2b7bdb973922826896f0db7c6c898045f2aaa73ef1a1c8d5d3b6b831d71df4aaf0c0f05bc0e31d5fa77dc1da9fed71c0187e62a9875555d35c50ef0f6809012acdbedbafe26fdaea8c46e891ad8e8c79b84a6a55060e14b1254a7c25a0caed15fac29a03ae246891fcf4775a6e194c7dd4698373cd182983f265f143d0a48adfd63923fdf8aa7b6be47069843c5bccf1b4c16fc3f73e3dd95bf442a045a3eceb8230358d4858e1ee7f89922714384b01c068b48e36423d0c880744a592a74b11642d558016dd4abd1ab8c4d694c1aee094721a2f70c0f44d5bba1b1ab07f1d3c8c270f2f9be8c04958267a562ef58e35fb0f76a13352a47293e955a8721d811ef0876eeedbe9d9d2dbe5c2ac8091c88e258aff75acbf4e680d2bd60bedf52a1e368fe8440ab44e07fb5becf8336e49012a9d360c42a3bda109ca025a55b563ccac5976aad4bf73bd863e84de65f74cd6b4c47a4f2f6ae758a743a9a8fa5feffce519d1e0a33ac375e1dab827131c6c656c1faab9daba8a1d6a65cb8b829ab5e5fcdf3f7038cec4a552ea9124b556ee9124b5560ef92f8d0da9edb3ca491b08ed741ef6167ddec8ad97793e613fd25d016569a39148b8557e0adf67460b1e5370fdbef79718306ebbd01232548e5d7ce620ede0abec8427dfdff8a444ca214bdc85c0a1d7fb9e4349cbe3479a0924fbde3b556eaf7aa788c2c1c34bab32b1962dc4c7ab7d915f30fb3ba61ae04ba8cf9883734315c7b441d24b4fb22038073c650139e004c105a1cab2dfad8d53da1d1359749135c4130dfa2ac4c9f296083295edc3ea6c556aa496fd363416559f7d5c6f7a59b3db76d53bf942aa29d226c8ebfae55b2a395a9641a27432cd845223198f079a1dc58ea595c2dba03b9d2db79e0fc593dae513064e3b02a5d3a40d78e090e595a32b6a9cd8d3e222844fa819697fd9b3e6d7ce13297cac3619cce9972f34003e7e877b58375725066e50b7690b2f0f2d7c14e4826630588db20335832d9e011b7a83ea38053c75f5f97b4bb68d7c82847d9e4f0ec439594702b203bf7dbe0f978404623778e4c249ee0e94e7cba60ea6cdedbc37106c7729fd56293510538e0bf9a4d36a3098f0a030511a7154e88490fa462bcf9b4c5d21c236ce19b5ae17c07c47870bebcc6807dc9ffd0b4abcb7b90b09c9d6b7bcc5725db7abd5f04677a24ecdd10003c0908402faf1c3b16cbd0595acb797f8d0420f2d01b19203302f93773c5ca9e3484a97b03e32d2639acf535b2b6a2205a74204bd29a1cb2581f8c09253a81fd8267e760784894035c4ee98f5b28adfc490122c5c0c17e9a0a6d5f9e2e478caf28299349a52ca9160b0f1d50c0cc9fdcb43c3c4120ea9f01b7c83e7da20fe7cd643e07baa2a99a14c842dc09a109a68754d463baadfdecfd65e975c36e23e3ea536ec83f239c6e24f9beaf2a73c30cf26c03fa0e9f7af3873bb127f57d8abba66b6e9dc6a7787f20ac9f1ed0f93b54902cc50034b95f644ce9a090de0fb1649400b05b818c31e82c20a6f34fa38eb160ec688ef73ca3018ebd10e0afacc5288c4ae0d461ef3a46a5aa7023dd7b276c283aea36d6003ac564a3ede8985d7779136ce442074254d11818ea5cab33e0cc617f0df5749b045d51112251df57446f4583510a10c5b1445459bc02ce9f02a132a71928a9c34691def23b4cad3ee5a32627950164d481d73bd7e45f07885ba2503e8967b621efcfdc1cdf7eee189ffcbe31c20fbbc1d509b381827089584cf90bec16422819baba88c837d2795114a871a74fe28ab15bf76d5925b90a8e6e63ed2a765d07209f7630669bc0b7a7fa40454737f2b360ab3477ee298533a51dde8f67273609fe27d3cba56458f0b437e8fb7860902ce10a5175c1da2711bb79ec91d96de52cf908a0b941c0e6479274b83b119310f7fa95cda8e069cd8ea8c10adc65202f90028a8eebc6ef779f728b4707d9922d89a6104940b1a1cf609a1802b936b5b990c171a49b1dca8a458039bb1303eaf6c7b44befc3d9d5091afbae3e9749f1d31edbcd81e3a34d5421510096ea76e828085f375be9776767e414b23f4f10d25afdfa1a01281c48aac0674a656dbf32561272685ea15655e82008de530b6a35511e5e262b9b8ae8474eba031c1645d841ca528ff7ee2ea0caf3a88022dd61781a338c0a692a090f5314292448b1a48f5bc37647de788e19d63586d36472d45bf1ef61573468d3945034fd41851cb11c12801e058d1a6d867c93eb4758c07f4a01e2d86df420dd664723428f45312612181abe28e8ab1d8dbe24535c2a0d299a35dc9418c4d1dac308e7a9279fb22d909739a208a8e504e42bdda1f19a8ef25263f0e914ec200c3b994450b75ec5c2a2f46ac0b93f3bd9f81daf3f721eb0de5d59e0e5f8b8d251058c8b2143731cf9613813bda810d0dde8eceaef0fc044921f7326c0333a4f27255a35a31d45a2fdd3879ff0b01009368a2395d423b7547f3edb32cc80a844c3cb6a559ec0b6575bbc7d02170d101ab1937100a4aa1f21b9764486caa19342ac7f6e5f6713784617a0f888f3c542a0e13c12d372b18a8955e875dae1d4ea22349c1fe90199ddfe059303cd6b7eb92e63d063b4bcca8543b84b1ce6c50c32850756a70d5996d671d9db821b30c941362dc846ec2f20a2e51c518bdbd8ec862d783a72d995f446439819c66be249b0bf8a236166fa01dc4838ef2f1a969ce6b7ed02b1c30d8e8bfeb1e4c7a7afedb0400488106796be4f0f6b210c16565fedc395990cd7ace118daa17860f670c5fbf273594207e1c717f7929155ebe166da74a765806632477d3b0b31bb3999af7638b2788ca8869c1de730402810cdda05bfc82c3ce2edd009d206ec86036aa58a855930181aa503d6191ac0b6f08d1459e927555182bb08a106da28d228ccb3855ac89f287574da6f6e7724d065e9d85870001c78c045de38bc742a43945462fd41296b142caf9ff7c2315193661b21846cb2f7965b6e29659249a6b308cf0724083ee2d6615a53bfcc7ee3f558f25a83969491b5b97152dad4a9c7771b5ff67b17a5cc22dd8b7ad5d263f428f426628c2d85105fc01f29fc063288a450a1890e3cb184c62234c60feace0c8c18a20929b0320588de828a1062482a4260714b97a9081154868c8c4cdf44ee0bb93be3c309f870fd674c005e5f22a1032cefe8c7ec67f24dd97fcd1eb3f5b338434357aeb45a424216d370c0aa66430b9f3dcab5a8d8bbf0a2ecd2722c4ee40179b6e7687a8ea497b716f2c47e1b3fe3397a0f937a8e34568f7a6ba79432890fec8294736eb9df0b9f4917bc2252c7fc4c3ea5c9418747e37d9dd1b099535a1df3d9b57897fb5df2ba24f52e2e17e8f65f5674af9ff2c299e223d4822fbdcf268b8ecd2b22df4bd29f2c1a02ba22a5e523d47f55f9b4eaa0d6abddf7823721171bcff13d19167ec5aee5a3f90bfb165af80c9bc9816385ee46ada1f15ec02ccd579cb871cf26fb24fb25ebd5782f2f789fdf8b664a1f29a594d3ab5a60cdf53a3af82eb4d0428def19de776930de873a7dcafb9e86f7ad50de67d3353cc825ce783636aa1cdeb762c1fb5627ef65bcef472b781f0ad579df36fab359f24c1e9d1995f3691790755d1faa7eab5b6dac6a757aad33b2c3c88e866de1057f8b1d3b76ecd89fcdcd0c20b39fde07338fc6fcebb19ac98dc3b1b159ad1ec5a57ad95f46765cf99f911db73ef79fcdc5b69f9a0df28b548fbed472c8ae7c9cfad7c57128d4f7f7c3a9d973de26b3a77dd3859683659dbc33bb136617a574066ec6bfd0783b03578a5530227349df5a0ee9b1ae6215c36aad15c34a9fa5be44b2f66badb64bd2ee90e566df47c7a01ee6e57df48b06e4ba36c3e1a1fde84dcfcde3f41b57bf46871367fa55dda91b755ae734266f46d7d52775dcabad7ea93eaa8ba9ffd271af603a9b5bbd2ffbabb9573632a31104fbf836fcf5f197c099a42ff4bc0b5873fdd6f98816a562ef02b2f85e5f742dcce80994401d14f7b01dfdb8fbb593ab9237c53d66609afe7e1b338d0649dc767e5df5b56b9e5ef1f84ef7835c6cd757d5378dbdede0d56620433527b26f9e29466c6e7d0178ebd0297198a69f865e6138a80d9e88d05aeddb6b9a80fdaf6f6ba9ddbe669d1154d69db8eaf5e0d73226fd6e9d915e9d6cfd936643adde3c01f7ed40749b74e1d4acc381b3ff65f734e7f6a37df6ae7de6410d07ecda4cb3817b8c9f6bb53915ebd87a6e774e6fed3584678906b221f633ec7d442c495f5d11caa62c73ec9ddc1713353df63e1a3281acec2bfd520e26efeb4bbfe47d6d6bd6591ba2dffad9dbeee3ee120dd4c72cf66dc07e108a9dcfb7da25b5fbfc4afb59ecea15b16f7ad772986f5fced898f85abdab665ef5becbabff4d4f56d357ef4b123d69fada7db0e74af9258926ac336be95b0c078a79b6ab1e0dfaf231fbd5fb82d8af39d8af3fa46fb0cfea671e563bbef5e53fd87331936643f6d52b52dff4272d870c5e8bbd78983d613fc22c662d36a7d00edeebbaae8b9abc2abfd46d4feab8ea0dd1b4cfbe568a3d567fc6c60457c47ef64c20eb83977e557ee615b19f24c2fad843cd00597dfb98fdead1b85e3e7dc8e4632cdeb60497245eecbf24f1662f7fca405febbc65a0de97246e9dfc17cd06ec8b641e7d182d87ec62587dc804b2b8da6aadfd4e5e7b2ffa368b0c7bfbe0cd3c1a0af0d71e01fe9ab7e4d6eebb6cf7c1fad2d62517ebf8ca854c608d7c1f7108939e06f2a1bd6d0d2d4b2f4f09820eaa34b901eab21541462021e5dacb394001169e185f5480c271d90a32ac184388323c40850647688113274290a5870857f81c013505cb1177bb3c850865e8584186969b5db6628c27513821a88928f40c1df156bb8ecb424500e2729785b6c0c116e96170f11d6915b6fca842179d1d9d263a4e74a0c818638c31cea672073666cf2d423dc3ad2b3fb60c4979c94965184ea464d10798f880131f88e203553e60454a920fe1ee2a90c17539270d2309528351a567d8caa505870595e57f80a165659950e1ba8618021543d0786448495112252188e287d614260bc01863680642ec44a125075780906286f18198165234a4a5c390293a4054f4849cf3baa49c0dc648d21d5a4486782042734005a0ebdfbd7980891339e7751921842c5e0011e5b24cf03922bff07aa488882042c084a8765fd709823005931d50ef48128f8c23b3a790f2d19118630ab448019614644981168f31c618bbdb638cd1e514030927ba09291ad2d261888f169f2d3e5d52b033278f3b53c18408badd5d0c2c62b41d5a448678207204d11145477041810eca694f2ac60c5e6476644849511225484c414208891675260d04cf6d77efeeee6eef29a71852345bf4444acff013a0eb49108772c26540010918287182284c100610a83042cfee6edb76c79900e2bab75379026d3686822a3dc3562e02a0400b6e4e2bc4d88991b41e29417777bbbbfb16ee125234a4a5c390248892284a824b149d283c44406184294718c18b2cae24f1c3b5f062767777b777124ab405452de0b284ce123c4bf4cc1e98a611588cc862841623b6ccd973ce397b7677b7bbbbbbb7e380933bb4880cf140044a14284c4071024a1450aafcd0b3bbbbddddddbd5d483f714d17f2a345cf30962c04f8d1426d07465ed4de93b6409371871691211e88b04087053c2ce861c1139e07c440e80454f8e04a932b7ef40faeb082e7b6bbedeeeeee9ef249a98f0c29294aa244892b4a0c2941a444114a092ebf5a8268ce873ab39d386db88228565065055640700113b020094b8031c64f0eda073bd41e994180e00a156038a1090abed8a2b3b8020745567001a2b67a86af34019618423961a204370c818094f935c495279b15e2092bc0fc228110095adc139ac06a8f8f0d2ebf4620a411408821206c3a4a90041882870845802652744a44435cddf22b082013d8d850c808981881131c174a581108350144d0e24a3ae808861539778831ce29b25ce18931c618a3b7b77b8c31c618dd638c31c6183d6e711d1952529444091843128c2e4c740722433c1099420a51746473e09ad73ca2a42889926b0a243c9112440e2a744b29a46508b6794921435a3a0c9942cb94eb2f650d9a4210210c2a30292078d55d8cdedd2d3bd216a6e9a71d690ab023e3c29aad031eb8fd366a00c1375b12bcea875e08a28860053ea953ead4b72dc6f810724d9c574248f3623aa5501dccbb96238554e246242e259de8c120bd51878476a428704dffd4805c577a9421bd6eecf8ca496132e61edc1afa68b83e6944fdf7373086ca8002c104751336a04e5ca653b02e4d3a0a0763c075dde866ddcb94924e0fcf65e5cb945bd22171893c30f8e30ad740dca4c0c0617bb76d3e309bcfd51d358fd1b339a5bbcc3a0ae79dbda96e27f5aa7f11ca3e52d1cb131f29b73fa8757d5eacfcd8a7f637fbd1be55755c4ca7d202aa5a28e054ad5493e6b145e9192b545b949ee96f9f17c448339915992f51ddf6c4f6c333fda90d073000327f8382372991477d8c86ccaaee472aaaa42ef349452d6fe9b96f7e6a39dc372a918ab68d1b6df3f3e1c6b734ebb0eb7d33a3709977354ada945474a578ec060403b11e2ad3cc1f9366fe5492cd2b5e58e61dadb56a41ae79310cebe455f180ea4ea72b8d64d65a2df3ceafa56f2b80318dfc2cdb32efe2c550a912cf9541d380f825150961daa804854bc9c9ed872954f61254b7ea6d3e9bcfa541d406d3fb5ea0b81d743f8e4e211175242e7126cafdb62a58b74989333df36d516c41b7534d7aa6b5e8a578b0e068e855bf86d3ab7e09e21e92541479d817eba578249388b8c74cf16053ee483b40fd8179a4a22be248cba18da1b852563bf8c3494571a63f45d28078975444ca6ac73fbce36b23cfc82f6941ae4bdf9a1a726c8e34df96b21fec23f6b2fbe1e17e60bf753f3ca81fd88b509ce9c8bd08451ef63b7a2f423edf8bd0025a006f82b8fdd64b898067fa47f74bf17c232cc513495d6e7f9776523c74a39b53ee6146a3972513c7d10b2a63be81557af5369f19a4a2bee1cbb7a828085c37013b72dce68c8cb987cfd9336864a838ade70299e2893c306ff38933fd9de2914f8bc84fc530290a3cd3df6248b9fddc603c0d46fdce0fd70fff1fb81faa8bd99bdd6ca6051774fc2ac6ff9e48cf34a7a771fa19a7875acec97b3f72499004e1ec9631ba6b41b8ebae01815260176faae3ba1f9eeb07ea551d0ff703b5ed10d3c1482d087747dbc893b22f8d1925ae237d21852d1d4c97ea503f49236ff366072985309dfb113aa324155d579ddf2a5b23f3cbff4d7aadb293ead6ff64206ddf56a328331d1e8661f398e44df926c5c3ab2b523cb737bfd97c78d5cfdc7ff5b2ad8ffdb7d201801ea4ff980a15335ca631605d04c0e3f21458c3ac1721588305d3f47f2e5cbe5a973dd60508ac0b290c5ef593fa4f70f591cab8fd42a66021d4dffd5fb77c5291bc13963ca7f4a422e9f23f52c96dc48ee431c3f0fdade1363420500a290aa42f98a67feb4852609ade42e2724b3ab7df96787a6eff0d0d0894323b786db7633f7b9b795156a689ff6feb8d16b81886f8afe5ccd85f3bd2969ee97f2dc8f51a90eb928a98a67ffe70f03f52d1dcc1deeafcb02b30ec6dfec89258a6e93405f40fcc56e07618c320bfd372e6f38cfc4e0b72796cd997a7d272e8db8b56cc6697765dd7768d3852c9749d5eae0be6ba62aeebbaa6f42b5e57c3eb621eb6c9de37dc2346354497541f7c0995900950b0b6fb1b36eec7dccc5d434563460a1503f372329548dd1dbd7bb46999c5ea45a7f4d8dccccdccccdccced757fc3460d158d192994b7f90097c43669b1ed3142afbbbb3f7a97bbdeddb1bb3beb8eddb1bbb99b59fe60ed54c29995f8bcddbd7b157bac6d8b43532038cc6677e9d7cea9d9c02c6f9491d20b5e5b33eeb86a36407983c844ed3e3dd831462ece7ca8d15462d39c333984c329715c07c71ee7a91833f3551901f507c7199f17bd2e8e99cebf286a4ec95847af4cd31e25325f340ec599beae3417a1c0c1f7a740973ff6f460a6698862e63625f88dc71b7ae597fbf42bce1863e4abfb988acbd3677b8c31d6f0e3b8dca75f3ddbb768e8cd924690bef0b692cb4c4304e9f142ae9069f8b3d0e171d52bf69ed365b7b05a310d7737bd6301dadb63cf1ca641a1aecb7d3af4588028441c976d6bcab942ff0decba9886bbeb0d6e7483b7c77638b94675febe325a82f0ba1cd3f09c537aecd8dc08d68b622a8e3d7d87538f1be1e8e895e446ed3e2337ea2c36f48c394a63d5ccaccd88337011b2b3d6bd41ae3898e66fd42847ce4c93f2d8d1194218bb3dbbe089cb62669417edc9ff75f4a9a35dce538cceb5e3c499186de28ccf197b26d136104208f982e16c4e8fcdcc6e6a668e5c936063e995f7f795d6e2f2b7955e35133156feaba3a072a296cb3838ab1bfb6d4f2660132d3a2e979aeb2665acb93373cfb7ccf1eabe99c3dd6cb20dbb0beee1096baed3997bfa4198c62ff7e9179d33468f73baf4f6d13c9847f4b7710af1bfe17fcd39f99bb9dca75f3de7847d310ff9908b6f8373e7e4befc6f3caf3a76bc7a05638c31ae66fb9cf232aa21c7cd99a6e7c718a3fc661c7521778cb05eeeee1b1567f8a70a38b85d7efe8c69207740e08d5ecb7ed5dc2ea6e18f30da9828a112acc0c1691c2dc812a8477d34ede091ba64c699ba6d09cef4db5b1c6e6ef357bdea24f152ead9503849a92b39eee1aa1bb7377d6c93caa3cc3d350f55cfc453dfa87ad57d557d73ea016f2c79df925bfaadfb64ee36e3a987784d2a3bbd6ffb18d35b6bd24cdda96a369048f4b25a4ee9a106647b98f7114b1dea37990b13f3f119e6bfabc2c0a860bc9f97a72f274fa6571cf7788243e2b77ffbd9994c26ef9b9f3ded3eae83b7d4bd46ea155d6dddb7e46e6f3f568aa0e2b23bb4880cf1e05345114a60428686b47498a2881e5a77681119e28188294490b1828b16710322967039123520a20a326844c113444881d204114d6cbae81e647737bc492490f81318401279a34703871bbdd8d16b2996652cece872d22bcbf15febe0f8af772e3fa402b3a0930f8ac13732cf0fc160167c026bfaf9e117ec05b3201458d30f250a2cfc07b960411f58f384cbd750d09417e2560bea5c81433e512e3f3c82593e90b8b9f1fcb00866d5006bfaf9e1100c450047000464a2a3e2df00b36c6caa70f92fc03d306bc70e242c011c2e6820a2e109a9ff7808c5df0066fd1fe1f233806f629e5f01cc928135fd08e01c98b55a65c13ad0a1634a0098c57d03b8fc33f0cde9f96ff81403df989ebf86592858d38f7241a57a99eed7bec437d9675f2371f9fb0866c128b0a6bf7da25c7e5204b3a01423f8e67a11300b32016b86e09bfaf6bf06e2f2c3289005b9ccfc2a8a14c8825d565220ab75a0c704ffc0e4329c5959aceb7a51080423a534464a237d6bbd22f1ad13c8825c3027100a64b50e14c8ea9d1fa00f970be35281600187cc0a3a3fec007145ecaa58bddebe151279c02678a61f0a2a2d2e0d21900fc8825dfad6d03b34d6cbebfe868d483710bf29fd96dc6a43030db5c6ece0133ca352ccd6cb5af816f3aea75d7d1fd147bf0e1d34e5a81812b511bb2a362b863df58b7545aea77cb9134aa58229bd9c4cf17a08d4f27a9d10e8bfeb3f08246fb51790abe415893f9fd47d400c59b08bfdd6c17aa77998300dec022dd4c9c1ed2a5c9700864ff03715b73feb1d6883cb847b401a340f644127a01521d5fbe015b7af1d08d43731567b5d6f63c61af610c87a9fbc17c6343ee747d78077cfe51596ac608e23f0dbac578d8af1ca7098664af111a77c77d92e9b9081e5bee9bcbf61a3c6e557d1989142c5c0bc9c4c2592c75de619e7f74dcb2c562f3aa5c7e6ef3ccf732e2c730fbe248a61ea7fa451e932765d198cd185befd2ec32c5ed9c08113bd2f753faec6ede7383a631096f635e1bcd09317d3f87bbb96131b5ea3788465994f3574fb2df48cb9c78c72f3265c9343d592a1536a976aa2e56c6fb92f7daaa76f485e8fae7cca3cb29737ae940fb947e418e6817ad26f3fea2ca94bf5748a87098e6403e9a73ecac6631df3cc8dfab3d68a65d7b3e9bf784fcf7cfaac2bedf48cf658c73df332533cbd4a35819a531ec15be26ba3fb6edc6ff319dd6ff3f9b6a0afd4c4d47da520be0d8a1cee7df496ea216d9bf492c82b3d1a38702f5f7a3d48ce3bf5aa3f5e59c3a069d0525caed2426da55b7da5b15cce542e9da2062a42378a1b6a508096c1e5195c7e11a241aa9637698dde76d6d7af1975ac56eeb106c85261b901b2285001208b06c19afe202b299edaed54cf05236df41656ea32ffaa16ac51f9408505b2bc09ac1961b9fd1488066155e055fc7e950f542dc8226db13a418cbcf8d90e4429a5dba8e110efe9547a7e1fcda3f78a8c9e7b38fa92c7161bf9e81abdd4828c3c15273554ffdc6ff3a90259581758138495c15571fbb729552dac0cac8bca9b4cbad16d6e7089861ce7956dde61e0dada61d7bb1e2eedfc8e9823a45d37ed60a41ddfe93286c78e0be8e83f2e05846f3a6c70788a90855cabbca47f97b623b9745ef760b020d7fd3070a95764fe9c93d239a9f7cdfbcd592a916c671b126c8b33463a2a5d1a81eba328a76397f6709dc254ccbd22f4a5f41fd58fb6ee27f5514e6bb3ae7fa06228fc1103735d15b8d8062ef5acaaa6527352eaa8dfba9fec890d0675d4fd6c3fd9cbec6756b36ce3b64bcb196ddc68f3bf26ad7c53e2b68f0fbbed6e1d926b4b5dec89ddadebe19678e533babb97eed645807bf9bcb9f41ee66ccc4e1cd9492573195a283b786de4ee0dde8e71ab16cb7c8e46db68e3462e7b930f3bf91cb7558b653e479352d8cebed1496d268437c94630333a1b978b2cac0bd708c13d5eb0f02690f52294e3857198648a09bdfc768b026bb6ae2f9ddb0aba67c9bbbd238511259224dc0de2a698a478680edce79525e691e2b129f1144873b039777ad1c18b9056371fcef33e1436afbc5b94be399560be9f3b75285e71fdcd11b9db8957dcc3708fe2fc64a4a947392bb6f5d6f9b66ddb16e9d6c5bb4969eade77931279641ccf6ca88c14e5a4f0ce996d1ddf0d09a9c3b039a56b5b86ca5cd892701ae544a9ac77f5e250dd8e0bb8cf3a9eff81f276b2ffe17f649e0bdcbfe45c57f2b8579c96c3719b8f6c9ae0361ae584c1e44e2571f9e1fab1f3c3ffd8f981fb410a8361e8274d810120433fd50e70fda830d0c934f2a796437f3ad582f8bdb4209dd7c630cc79a6f459572a19b9fe933d97bd2d956894b36241dc7256b791531d363b38d4d380fdb78a61211886efa80ec533a452c775df90cb7d4c77f10ce9531d0945e4720f4b242597735e91464fe256241aa5cd2ac6f195a5ee9b1f066efc1ec570744628739248249d11f6442451c619bbab6173920461cf1644cae4f6349dfe9bf4c2c1428e958e1d4cc58b9518d47f5c25c5c326badae6a50f1d032bc93edce815a10fa1ec08bb7f60605e7648e40fcac2c4e87466d5529445594a3718e946e3f5cda306847ee94bd2d4fda01ecbaa3d91505f42a12ccaba4f0d8873d4e94b2d67e41ca523a7dbcb392dcd66072d70af87935793eb7ea4162403f7f28ac81fcd97f9928e9e024bae9c9069a6447d4be90fdecd37a7733442e257fea47ed4fda85ea67e4bbda79eaa54311b0c50d12b225ffbcd070513938a8141510ae18af3f8442a6516ab41fc6a52e84f5a32f5982fefec936f3e75fbe1eafd71ef676eb737eff49231f788ffc949af138ecb1f0b97ffcbb1ba5c05ef807bc03f60ddf88fb5e020f00b16b7ff8b2f425cd34f83fd4f46c70e1a60fee32a3c4d84a61289abe242ce03b7e255a2e742989c58cb5a2770e142b88c70e1d7255cf89a960b3ff35612b6088216598ad09a167b6fd91616eb470d48ff75916e7ceeca33f15bb28ccc9b0f70098c0f7009c5d980aeabf6f4aa3b7275dabaee30c6de02877ad5363cef0887e357584135678caa8f9d91ecc2671658d086a8c48f31e0be083bbe7164d99db8ae85b673a05e4da25e4d2dbd9a818b5a8e96bdb544de073fbe119b3bb3cc86563ea1543628c746d12b28a29613b5ce9d20bde97d6a5d20cd7f3a5ef86f55f35f77e7ebd8b0f96fc69d7327e64ed39d4c4a773e43d6c6036be605809fefde173d07ea95070171d609cf83ba40d6d64407b2b61e58b3ed40d6e604d640d6f604d630e11e9b0998a63f86dfb42e2dbca6733bdb995a7aa6dfd2e82691ea513f8bfa662b82c24be0f11f37e1c61e1c37d6f88fe6461902d0c51a377637ffa97c66acf01fcc8d6292e1bf971b4737be946cc77fdb8d1b13f1ffa319d1dd9e46513761c06d5ade476f50200bfa300f289005811aa8b7282d4394dbbf49e91dded7776302b2e010ace967a286f75da59fe17ddc0def4395bef3be2f3de77dabd25befb3b95fed29fdac3d5403f2540ba27dd6f9d52e2d2703822cef81355320cb7d600d64cd2bb0a6214b1b8235fd3d405a12b22e5e0b332dfaf4d237cbb2d9790f6469453e3dafcc2bd08b24684590957d77c134fd9a56a445e6bfbe3664dec6679dcd8257577660ab801607bc9237f5dc373ebca6e5e4e052be84d3ec6b59438ebe65efa36dd641a6895f31c8bdd925364ed49d5afa26024c44e3fb67110d1a104a95cacb2e00749057f6a757243ef75b938ea189c5814d67ab80abfe9a17683613c0f46f4efab72730efc2e95be8b9ded7f7e5579b93db316639dadba098c5d73220f139cee4239abe148c9de2b60dfa6adccf067d5eea90c0eb4ef48de645c0e6ceefa03979b20dc9e6faccb08ec6683473cc1efa3acb9daae7c1c27f2d05e8ce76e2cef95f47d1fd9cd3ab1e1cea20d10b38edb3788ffb8c3607ea2b35be7a9308a86d90d5342dc70853b9d96b5a4ef6acd9a08c8a4ccbc9f156cb32a31603a7c85a329dbe55615e48dc68d3b28f9fe29b4ac5c64e23d2865cc06959b4a238d3b527cef4c7c06cd6094b4002145250a1e28aacb33bb0591461b67b8040ee2dd3324dcba931274bdf645e0498caad7d93e3fbb51c1e0e5773d458bd1ff951ceacf610dd7e167074b64a6757e8ac955ef57b9d6db5d5a2ed8dce62693b7425f5fda9afe15d51553143b341343abe336cd067b3dc7e8b65e91b2c7e13d52a51325b75d2ab589fd4279843973efde42f0e3363dce4252739e723dfdceb93ae3db5e7b613e88379319e75825dc2a9b348b050582978d54fea2c155ef5739da5c25e617760b380ad78719c7c6b832ce67967a3e899fe9196333d1b440507ffb341b7df02c142e1767442bfbf3ee949274fe616b7561bd0e51596907c804b3e062f5235bac62267570cb71ff2cdf59a8e6b1ae7f6ed15ee4bc19d502a1b35605e0d36540508c0edefae32001edc38438c270c5555b106204cd37f62c5b00385430e195eb8fd2ae80210eec1420d902583c30cb7bf6954fedfd765fdf707e24f296c1aa7c4a08d22a574a8a3a3a3332365d4c13dc83248e93ea7943f986190d2e79452baf4f9d42515cb321f4bd80e4f30acf85fe954f3bddc0ff5a1be97eb0f8b9c98c6ffabb96d7ae164c454a23141a044d2518a0089738124016ed4027764b4cd8c26b069ab0d8996e5d028905916b22416c3612b805519ac877aad502d705d4a28bdc094dfdf89017903d5377e6506dc86f7edaf71a15ec53de4f7e5b69482893776d0b07051300040e9408d7030eab2a80b855d744a1eb1e35ff1fd8a31425a3f142ac528295fd238ea68613b9591d78c9625b599445a30222523f606243a707e6c6450838f5ef5944bce08a18f96137ea92348a6d671cf7c71e7f64788ea422a5d9956ed557ba38f55cc73ac09221ef0028cdbef54883b708cdb5240c23dba0ba681acee72a7709bc8072da77e1351ac892afd34205176f3635f593c715c4bdf8aa24faf89b61129ce6c46e571837cb66e6f883c8e602cc42cd47f7942d0093cd31f0531a04ee4c025badcafa2db504bafba89aa953f74dac261c74b7a9d4315632a30cef437c7313a6d14e449af8ad94c632ae3420c33d8c09aee11c30a97dfbbee01af3a4b116e3fec20dcfe18b847f3c006b2da8ad08d1270b010e1f67f359781f0f50f6eb710897e0b4508e175691c69aeae54a254ec6adc408dffa505a193a464728d3f37fd39cd00f1cee75a725ace7c5bca4ca7785df4f4d244a921d2152172d2212286dde52931a90c422e704b0b45af858a9043bcf3ddafbbb750bf257125937c8f1ca7dc28c2b63a63c6a289289510e50f38fe8f0e5de8bcc4a36d6921815aa7f983557030e0964122c8e2600d7c864fa0cf0fbf80900bbef167c87365dca96fba79ae8f76c8825a2ec882451964c12d1c64412e25ee01c7c83cfb91f7f5ddbcaf5ba78ba016c88aad22c88a5a6c81ac7805d68cc13da2119806b2221658035fd392155d18b75cd8f19d819bd1bde77be75586e01417ea95950bbd0a141cf3cc7c2ed243b85bb4dc0a5ec197ce830b9f02c1b1dc21f7c185ae830b1f7e3402f7f02a98064296578135f0b5f01d5c28d987ebcff4f329173e338df4d8474b598fb02c93c4ebc3ce487669ed38e7385adfe5fba42729b1ebe157ac4aafee9e7bceeddfcff5cdfce90eb31fd7c325313a07780561069c1b3eb1830d91211e4c10cbb8317271a34f29e416428686b4748042460f684089400417236a3005238cd8a1456488872fb8702b08191ad2d221055e3c114215fcc60e2d22433c9c40cb93289e206b08191ad2d28188263cf94182ca882c4f8418c245e30912c068d5194610c2145a2a092c4e0079cc0e2d22433c2031841210e18208236468484b07228250021d69daa1456488871264518413c4e0a204a2d6a8246c5b696a0ad5cc000040033316000020100807c582d13ccd72140a960f14000e669058646a3a13479324c6411405518c31c418030020001963901933ce005d6b600113b6948a5d53b125765f3fbd8acfa910d7f928f7fa2d721190af926b4c43a1a0d85a5c8b25f3ab38c3551499be0550b99a357029281f80d2871b68ce785294e2e03379c8636bb4ad5144cf0c166d9b288b55e45504d9a25178fbd5d3bda75714cd1e291df9c1298a26c78052f74f096414b765e9d5ef0bb17a190aa3739624f5dc5a992f952c67ff52d01fc46511a0192c3b7843f1e0668c02bf50446b2816ecc55539ed877e444dca5d269623a7c698cfe807b59e890d062fa5f114e2905a48655aad88d897bfb9c1f76a2e0ba566e9ea1880d94d9b7f27783dcc207651a5c0c7ca0d136f127e6a0b3f2d2a128922b13737dd6b0451b204065c7dd5a768f2074ccb04149941f54feb1282d9e09bfec8923b566bc133924c84f2b34e2342e2003cbd762c4f8d60412a075d40b0b0b18044a072f10c19bef7598a0429ed0a0a64f197a04b76a93bef1b301a81353804a4e845a9471ba6d8a16316da889c8730c4689fe4fa15d250520b663059775ce06896bfbb52a067a4a7af526ed2b6d9afcfaa5f53643d1695b03d187dc70b223d2d51ef032a3922b514a7f490922a1a40a5c6d2c8d400846e69f3f1b55ce94a069586c59c417d466a4523b6ebaba9edd408b148807325d5c1921e8d5580e4bf4bb39a3bab00f1cd06f4c088a78fe301260657c8b6a822a6692006cbf6757a15d55f13fd78663d4e3bc8509167c210c5238d2439e765eeb8aa72d1b94834bd3ed6ea1be0fbc498e7dc43b27d2c00f5f8c85aad9087869fcafad08a4908a94d07e83ddc2b45ba2019e2359e15b983bd4f235852424901f88b8ec7518ad16810a0ed638d50ade2f0263e17e4b4d8780fce753cb63c856f5445b00e30c7b31b9925db3644191c6147f7e9e43735616828323f0a208c0cc51dbc80f33b45098bc51bca542973b3649b1f96f77cbf1923a4b905c502c0d9c403a363840d29a6dcbc964035a4ff08a05f398239188374dd123b68c5d54b714998eaa3e583f7a65ea14afc7b140ff886c053de9dd868142167f18fe68a72941269fd0446c31de68e1d903b2ace6d711310ba50b4c929c6f8947d649fc8bf9e42036375b93c5e39b3059da56ca52161ef1c88ea1cbb596954c84e317e52a56d12816961eec7e587c21ec2d684932e6f8b722793d10b54725e32acec528be112de63cb9a003a7ccc280ecddfa544d48b57aff3d4b58f14c1ec7d273b0927f6ce4c160288052f56f0e5419b29b2d0642bdc5d65f1eb49d65a5ac233d127e12d0b058892dd8a25d42c4e61297cec87e8dc1b3334f4c3a23b880aa2adbcd8053541bd93450585547af26d69016855c4a47f1902c6a044ba41789ee092a00952022cc17929a3aa148e99baa6e5b1f38789e872e53bb254ec19cf6bcc541fe20570abbaad4a9e5270415f633886722dca6a4ba0e582beb6ce3736816ceba25c48deeb9360816f14cc1ab77f4f627f7f7bb23903427da86084a5db9507a095dc859a82540e2f5c94400e58a4d09ffd1e31819179ebc86a0102447c00f61f08c2e16b0045a17ad49eb1dba02797596b43dd5a134ee3788becfceb03862d99ca4dfd7d025df18e5f9f7a738ba872fa34ad896acb015a30ba198a888ebafed7e3ced59e812a33e7a7a675bbfeb7676e040bd1729a1a2451c68f0e80d1fff4d9bfd163f13ccfc1fdbbaea6106213b23613b92960bf3fabc0a66ae4f8a1aa5061f702960b570c83366592b9e74228e8e970c2764270c335b5d54e54b1c2e9b1f2aa40aeca7bc4420a82a97546f860b1672aca6fa4504fc590ac4c486997307664d3dcb607cb0a1bd00694670183297f92631afb766e801219020bb1b74d5dea440404ea61203d1d532ac9f4d3aca72b9440a7910d2e14d134bd5eda95cac8e36ef4934d35f6792e94b4a514b38e3fd11de3a804947439fd1029def84d7caeeb99025ece5c7dc57f61ed299fe6b57a999e583a7670d441c5db9aa987eaaeba1675f475691f318b27e05f3e62e408b78118f0cf11852aa1df9096b2cf3a6384ff6028762d8375ec565f3b8840c3f432ff35fc45318a0d9521a92b6cb52dddc54e10a47b9ce222ede165e702b16425f0dc328ba48d1e5e76f4262538a7e2320015a946c80dc73a68d09d1c049379911f10f73f76b8b9eade49a538a3b2572133bb98b6aa1532c643f219e6860b60730787c9265422d3211184e0b0a52ee2c096d8e66b86b005e9dc28103d0545805fcf5d72458378fb424c5815b15695ccf807d1b2a0c825f8781b010f35ab93a7f58b1da353c6fa86e9328bfefbd4633d8222eb92e9e034e5f9a868825a767457e2a85731961301f937147159e0335f07260e2245d3245d13980d9924bd2fa323e63c60ae3d55d9bdbb380df9514915751ea6e1d455478eb9fcc8aa1b6390a13f5e13e94ce102655f7907207e9a201cb7c12ea8e6b309f3dc82ad0ee3a04291bf62393bc57b83017058e1dc39608295b8fa50fd38f00594d63f363b50f476c4456c2d1a65285bfa5829fadfcc8156f8a4baa17771f0b5dc673f362e8d33d04bf3679e6fe70ee58cc545f1ddb75dcaeddc899691b16667c52b7bb6612085c14088e41b4623e1337f4d8f56fa3e6c7aeadf9757ce665e2654783e772e5318798be9013a3b1b633833cbf04ad63d30cf9d8ba5b14894e66a6e5282dfbab79a6628b94b3c320e358162ab141609bdc3143a7853cb5c4b39c2e14fdd6fdf2065f0c18a1f5609ff550bb81e1c6125dd5ba89b5e703656bfe02523dddff52c8d7c3414a803820eb338de9565dc55181d2567182879081c0a028e8485fcbec69d37715f46f84d8e0cffb95d151ce43a4c3698dca509a684c33b6317128bb3fc0283b45785cde32051fe0865b983180af6f11d71b852bc97c73f346e106d839efcf57d50437face4121595e261f25ca9ead0fc69a0e7cdc69d1b969832da9f841102f773ba693b14ad4c2ca5c17bf6b3f8c14a83dfa69c9a71b869a3301ac451d8013c01278297510c70cbf93c16e7ebc2199a4dedc9e26fc586cebec5f24dc35c94007e42a2cbb0e4f7d79bf3be3f9c59f9d49a41ee8bc1755fb1e01092e61754e0c6297b8275b6d10f06aaeed0a4c09513fc905225ad1ec49266bdf94c9a607b4d1aeedf010937690a0081be251dd3541c09d815c912fc6f065758712d9a05c39108b7bb1a92865e07b5628538bc7cb631fa92e083bd88808d2bc3062a8a28fd77160564879d85b6744b4147c1089d24c073a567b2540424acb3e639cd6bdeb43febe4e087e2802a62c05c67a1678d18cea40dee191ed6a37e1492e51de8fefd93bf51d72b27419d47bcd432cebafaa966b82361e4671ee5466f24ab5d3e43303f050ce6cab936eae4c07cae37eed0c2e1d58b9644559b4d1482df03f32b490cb86476332cc13c1b1284a22d2e4b220dd42b2f56d0f04c3aa969779c8ebe2af60acad714cc33c05e230a721a77e96f6cee84746ab460be9d82a520c2e4c7244af398fc210dd70b7a64761060f27b64694494c801c991e97cfde265b9209aee69be1565db74b2488a0c30063517c1a622dd16e6e08765f3004378f6b5f186a930d3a7ea95478357e7be31e5b8840d50da637505be1c0853cad6d000a53a7657c897813045610dcda0b467750a5d1118a496d6a0094afaac3e15edb7a4a5370b8e6e2c91f199c60a9af842f023276a92b9b2c183403f87402690b07ad6f2c31c1b473fbf1b35ea99c9c74802a174700f3455b5bb807eba35e2f92b55e74b490139f69709799e807bb4b89d23f6f4cc3d35e21333f329660c5c1c8a1c8aefde349b65643445e9caab14598cd6ad8b8405167e627959c1faa9971adfa9d32e87140f610ec5d4580d053c57e7263149a0e8b41331c9678290e79bfe7cae4f29e56530d65bfef74e0d47028862907b345a3ce9b91931d822bad6e0fc65404f42373b89609d73d1fdfd93319a4497cdef98741b9731dc38a4b1c694329a29664f38f3a4a2af4f948d0ab9b1a2e1d17a9caff0538ff0fa6125b9f5f683ca0d4f019981253338871d98f6041a7c871a275c4cfea449cfc8989b6361aada97a9333aa3cb172e0c9690815794173ae431102d9d291ecad91df99153707b12da1ae4bcfca4fb40d20673d7a70bf04a89e2b9d72631292007870bc40415903e36af49c6dc0df23480a058cfa3e766bfc8f0b6a56bfd0f7a13b5b2ce8d6d5474f0e82744a3c8bee24988ed3a12b22c6626e34b21c9fa70d9055a6fd209ee8667c772edf9e7e7840183090d9e272049ae9f92bd51ba5d6d88190d9889c3aee63c9b39b551c4793e5d4982f54897822c44a100a377a1bbb8f7a47d13603988781a29a694da5a973435204776482ab0d1e8c37ce37e168af03b6d283f30ea67ed29bc9b40f883975b216ca5dcf4c89f5f781c66e54535838441054d1f1e0dad2a9df2c42a404178e14d6f1b322694e8e7833a78c676f9bfb6fc94a516b206c61001fd20e9ac02f97c44847b55a73211222909e141fed7a5f974eafea84826eb39ca1a6cdc1efaac0936b5b62158c6eb32c9ffd6d89fb48b9070f323578059fdbcc22c0a5c2de7fb4f418bcd12d54378fbfbc8e8ab01beddbe4d0200613908033e98848e9b0dc5c1f7c2097a4ec917e1dadc0358ff4b2190c246977db31338d41c6ce00dd9b38844194e6e0eeabe0f382e924752bf6391b2d3d185d1099a7c6eb527825c47a10a3ffd8bc58420712c3ced83ce0245c11b05e816554855911ffc8b66e9412176a040b1b15ee3392c10b85d7d2f268928dfa1665700f236168a38945e7912a67c8da459901ff1a66b7e625b9e2b8467febe43a1a09f4d213edc36128834b15a3d3ea556d24b53741f2d48bcdfd6aceda4d57ea49b137b3d0a24bd9d2ce1e3e88d011f3fbeca0b6f16876b876b51fc327e0f280805152c483c7f5c1875d1dc584cf979e1260d22bdd742ec85a26a7c241f9a984774f98e88b0b79002729e9ed58640f28280c2ac813c5f66add18e41e4c21477c0b44631ce2360662955ba6c0ec6c4e517c8f32783b0c5b60b164d422c290bae00a10859bd63a53a099313fbfe6bb143e72e20906b608fc9aa98c445a404114b4edaeb448d37df8e427adf90323334ae21082ca34b7f8fadf031fadf966a9a38bab25f1a1aafc8546370fbae7b2e08d10962ad1ddbd860817ed6045ee41b4b47e638a377c541cd56ff83dbf0cb35dfd9ab8b1c9b41ad4174d1bbbe5b186c1fa66cdccaadb5fd0908fb2b59016c9d9bd671f9674b62a521bdd4f026f431bc7b2053ac768bb56ed64e31036c50995ada9592760bb1bd9e978300260b96d962be706cc33321141c8dbc98ae82da2088b4f88cbac00b00272ac1f12259e042cf51c54afa61c182b76b2b26552a51378fa8359a28cb3043a9061d84e9b57c75507ccfa93a93b730c7015e42b2a77cbe7bde5d677a7fd283bce7ffb57e28849c12ab5b408c21e37e2b0c76f34e7bf27902367c9e156ca2e214723265cfafd67b7e9c6f9283871bfc62835933187f0a59f70249196fd2501fc2f0c030b3ae0dc9ee4da02e8d0ddbf9aaec6f26533343dae25cf8d599d2a39b7460bf232019f079fa8a6930022e6300585d07b15bfb2e97efeb649568db74c4d82abf7ad4616fc763cf3121f2c6256712b26409280980f2a75d1a05f07102377d9b876b713c0d435c336f0c3b69503eb6689d58df9c260a4456710476c95118c328bca2011385e24dcb03cda6151e7ea832d1fdfc0cce2eb151acd51ffe5b0fda282a18f801fc133190ca832d7c029f0ac81108b0e18010f5f6d9699730ac190169c907403e841b395aba282cc8b07db8912cc02ccd41db0168f814cca2704593095c08d6071f13dcfe644460db1a651bacdd81ea57dafa43835c12e615e70db06ced37bb6da2435f094a12a3bc44e294760163cb0fea73e57dc56a6a05312b2639f2752fcdbef6c2d876247d286d3c51d32003e8eb171062c28b16205bca5c05b029ed33adc313615cb87e726c8176f550110bcf686891b17d9b353f706e1fc6f0964f7cc7c06efc8823c26f2cb61878b1c3e46b7ea9e48c84b7f7e86aeff47c6dc808c19477fe9bf7b4e6894fb85497e30b4eaf74c9cafab893dfef86b41be30ba8858176e22b7a5dfa71ddf44bf81ed0df0db60b08f45ae0cd13fadc02d32470e4b133b78d67f74230637a32d9c384b45d5eac1e6f49225b4b11eac543e66dd83a2fd333a09409f38bd350d5e48f18b3dbb1d38b4c28303d297cd31de427e1e7296dc65301aed62cfb70d0856b3d53c6477447383e0560b652f22ea47da10b3512176b80061d91abf63884a9acf57aeb26e6c34abce502216ff55539b7c2e78f75600f3560cf1ed54340c867ab9b32f3e6c4a4e617b02be23cfa4f9e18e9cc60cd68f65c99d66f979a239cab1f14b3956d0f588818ecd6228d4c06a0ebf46a5690c64e20346bf4c2ae1ea2b00b24bb37cb42cab80a012f074287217c0c0e59b187a7562eb8248d838d1a11285c6dfb3152b866126838b0c73a768567bad34f05870685638144e5ba1d62cc3fb894a46fdfd72c626a6dda98ff8ee97cb3bec2bd93913d2c51ea6343d039835b67c65cec55d278788acd3b8ef05fb37f6108ec6e64bd3b875747f03500ffca984f8cc2a8d49dbda978ca33187f69cc57b49081a6252d079167ee40e1621cbe307cd0987f7455c70f79a157a1b181497c3bb52f73f087c4e7e4362a7e88035f24cd0d4f4edfa1bd368299483eaeb74ae3067cfccad1687842010fcd8b8364f411a1ae41b3df797a79700a07f118bb83067de7e13d6736532f4d856af60ed66fce6c522d85a37f75f10e97322c3d03817b073e2e23e096149da272ef3c7a33d8299b12ac61f780af2b2c3827b18b28cd3b0fef0c36e563c46a435ceaef6c6d1c8c13a64beb3608a9040fcf2408b21510c7ae44bfe2f19ec608aa13fe065529fe980b5f3b1a0d4f28e7a17a3d82e9137ed1455dc2c04949abe1c9ab79a0b9871f85c2afffba70b49e996eadbb41385c1eb4ad4d658b4a690c1d4ba27948c5a5a31a859f7b41255a055a8a9eca0b042764501e9a997e88e2078c02a107e59514c43bd34ff373a9ee89c7ea1171bbf94afa2dafb58868faa75d0f101b040252446012d2bef693c44563cc098a4061c324f07233cc34ac0f345391082dc58fd57f545022e9316ee92dbf2446ea93dac5741c1f2949a2dab6dfc081f0c22a1a4c1611cca7c3360c7dcff27e8ca3fd389770a6b4f743f38c38e2d64446a19bb2db63a8889c5d90e5750421f519076e41faab18ee66901309fb7df704edc8b52d2a291ac46f221b333bc8fb21a9816c17b6d8629b1f6cadb2c9e71b19fc61cd69ef216467a8f6514bc839f0091c7ae739c3f689b2f383a8f5fe2c80edb6ae73f53d8f3b8ae26afe6996e484a99a5fefb953cb92a231fe81d32247b669c94690db602efe7197229e040241288fcd5279641bcd994e6c303d151050e436038530502ed83d776cb34eb2f6d4f21fecca2a62f33a1744a5a5aeb8012d11b3d9f05f538ded0cad8574b12d633b3b1571bfe3e9890807a12f9037cc05d25d61339e73ad40f106814b86632f5a681526b903de90799c9eddd2385851de1beb7e7965a9be85d4e972d1526a1eb51b7d8a961a2d8afc522e750403720412600bf48e4556ca09ed9c1027c4246e13b0fc903e3bb3068e6073bf53940f2990e2c50eb2e710e65df9d1e63c622325f7a5a30e83d44bf803030bcc2f1e2921c3c4bc142e0c8a2441ae25fd0af8af2d198c96650a6c185dc8ba4ecc0d47b7a9c621f245c685cb3c5867051e45dde0d067d468aa8e50a753e47883fc59a95b3d9a093e09721419796868668cd05e6832bb435af03701e59a147342fe4d1e0bdfdd46e535e2bc0930b96e044ab3dbc0df350f325af89a0acdcf9e93629135c56b87cc65292ae2aa6f20ca9573f5bf73f302b33e19addbd63cc5979fa4c7459801e890902e36780c87267bea33de13bb9fdc36f73a297a910a4fb35936b4ff49026b53afd63d6ddc98d391ce248dac6f1016b1e4fc68f6c96c23923e1b8ca9d5a10719c60bcced9336c58da36153ed09c9bda0af8de8fc25b3fa57bbaf9dfdd53e136ac4221f34bd724fbbed320362c7927ca89ae962914bbd43b7c7288b8d8f7649bdf214125ee56d5dbbabcd070e77b5cf4cab974e5e306d19e35ca45edac70003f6655bb4f277174134c69b9ceceafd7c2705d021f7e033596931c23bb45e478e327bbf65fbf2732fad614c763e49262aec16d64a10de1ff81396410327eccbe3b3e9948966af3b8f3d96c96e18cde6263cde5fbef35b6c7b1ea3bef07f0ac0bdfe92d0cc481ec714de1e70d922d0f8e85c9cf528ec28b7295842c17a3c29392fb8f19c403a584c89b235e03b22682a62b972b66efb04974186950defe2eab463b5d1ece1c159222b862148246fb79dbe858b662655a554042361201896506b3e32bd02a6912ab1daa490559b35cb3a4fbe4745a52600c5a9647e333714f2170c3260fa17c34d86e4accfbea7823a26707e17064ef2927913cb97230bb98140ed5166da9bb3a6ab51c9eafd82073b2bff2eeac66c46aec55ef8571aeb5310aafa688baac8a76a15a548fe31631fe7c34a93cc721c6547297bd088688879d3d905755f5977c2c139f699c14910c6e847485ba4df58ba3296ddd6dc3a5f2afbf5ea23318bbff1984817b4b3beb6f71c3c0a365af95f5ed3a004fa81f6cdbabfa9ea462b86cae576260ba2fc8eaa3bb191042369a39301b7aeabba81b0e81890525e24b03929069f72d20593b9f5dd43d65ee6957be5deb566e0b9f514686bd78cfee47f25eb54303d97f2df4c0ec5a9ef4ff9ec15656317f05da967ffe2ab8c7cf8ae6c849caf2794240d68b82f2f025d1b5ca94a6fc71efde363c546f75eb8ce1340428eef3678dfe8fdf9035437cc34173b1737cb3ced0bfacdbc6b13b002ebb965ded3207ed652ec1d9c2f22d0ef157e5d595c311e80deecd2467e9b98ccef94aa35f6e2d1f1129e0fa1b085a49701b527c76882757c22e385d17c07b99db0a60001e1d793442fd192761a74d5380df4b79e06a7a82f4bcf3c64e23785c50c3c6f2051b4fb75984b68336d707e2d845458eeedfd6870e3f8873de7e437cdaff10f0d176328b25699f8a16afcf77b9a813844382bdfe211653c076614ed2b236e894fb7bc3e0a5d9cc89df3d9cb29b6403ca4fe60f9939449ab71cea5be05ee6a2497d2175973e072b04de5f3aa2d840bed7e4d9f7db12297facd437fcdc6275caca3d65aa02c11f47b1977b71e1bf2429b5e1bd27f9483bb55e2cfbacb824d723e461b7a13581ef8b913ca65f18c34ec947fc2873546e2a252b1d4fe260ff805f1b36381de30d8c22d696f6fecf8fdb7124218b5f0a3e30ced90d81cc6cd752e6ceb7a87824f89ee164bd3ea27266e80913a97e2d990d18f740a622cf6dbea3279c6d6366b54d45fa3fff74c0e89764b3fbf0a5a04be9735c4c896c1bfb11ec60d9735ee4fda2a686710c89d88523e9fb36b407e35941b888c3fa8a84fa47103af21ddb822607bb23f9872892b19b19d6ed718ae8e8a63870f7c9b4e60ebfaca83161e80454d47461f3e3226fa1c0c3c55ceb53ec4227af9a271cdd69e568b8b652a70f6ea1cd7e5dc8ce491cb0720bb874ff9d152dcca70648933b3579fb622637a113ba8ccd3289c2a1055de8589eb3c274361ba96900c13c90ed9a9661f2b12660cef848cfdb84b65ce8afe24fb636239c1dae5971f31275ca8e0e32342d98e640d8f60aee00f94143377bb3424a943bb1222883b5b954e1c445303b61fb9a9f8af1a3003dc5f44e03ff60e544e13d6a4bf540b57e1971c552662712be15df797508ad72f4b2fccb1b331a20714118ae103054aed9aa24dadbf709d6aad1b0e98bac9ba41ded2249d25b2ff943043bcbeefca49692e45bf668751c4e38a7420831a722831a4bb837d602c6ea4b6579a17aeec8a450f535ad63556f3d46983a8a8a99a64824205daffbfd3405c28a5e2da6810d4d96a15cd9dbbcfe740d1c7431a68c19a05d110a0f9c61f5a32093915a72852870b9b16a623f55756b7f15a8000c56289d8cc4a8985a8a22bc26e54dcf761614786af692c5f805d30ace3aa42854ede4db4674c0e3f90bf0b8979c150ae2e15ff75980a8581e1afdc410fdc9e119e49ae8cb0a872daa752074d751485f45e3b05260a97473777677c327ef4e85f8f4916176993e144d0d9cc7b8675c6092a58035326cd77fff9f400d1a1d1306e823b253182e314a0f2d480aac387390b3492a7c628e60d234e8e2ccb0ab8b99cf94acc9d70da9f84a29feef99202dab5eb790982e8e8b67ae114047e75e9f40caa66dc8b6b94580306093056824106eba93045eef53bd55d2f2e00d8927cd55466a158ce1bf004890036eef37c8969fb050bc78e375b266a850f24ca98a508194ebe41b4b055c66917c622124f59476147b982628d8eff41450685e592414bf706d02e4f553383e98b3a73d5d14663a5034f5efc3c6fe0209659a5e41dc720c5d7e526cf2438f349bada9ee6c14053ec80c4e71c11b74129648c198a4955e3cad017914beeae371be2f5c71d373c4d892f08191377afc2022b6705a90290703194cb71f8216e8c2806fffd3f7458516bb5128c2950252a1996024d0d1c23cfb01ffd96935fc0780d2fe5142e9df63c58ff8ec25fba4c4f8b0ef100819ee147ce0159b2170eaf67c687cbe6dcb90dc866c8a64bded579ca6fd20e53121105d15ec63bfa2910a833adf0984da2d02d6c376cebdcd9ec28c167b7598f30ca5ac106801b43e2d8f8024d91295431c0721f500e6242c8ffe7a9dc8f8e50317dbf10888a9190df6383dfc9965e0a006116c09980d8e61b323672a24722d63f8268ed0005d2bbe01eab6df3c7caca5e7567251e6ef98eaf0a81f03ae01be2eab27ca6ba3e0a4523d3f5893efe5464fcd36a80d1d019a8a5a1bee371b39e9c9f74878ec19efdc2aff739cb82ea507e1c6eb66e21ca94134864c392ddba81d01561965106157aa98a4de6d52b91bb360ad3d7d6372c41e61d6ad9fe03cd815a19f4a249323612480f3ebefaf85f43e71b34b1c64021e0a33d2b073698e9e1aba5c50e50c82c1195407b12738de193da7acd4aa1e66a73d1a8e7ad80a6e1ab95fd0f02e2dd754139f0e16805567fb5141d23b35f0ad71618424ad97f187d270584ed117e3ad3e51f7661b0d45dc33e44151fefe2d787830671f031248e31d871d3167b5ef0dd52c07e966580b95b9cb6278e8c730d3da252a1f15ed17809cb84da9c4584fd1bcc648b216f01b785c37875b65f929c652d0e139890537e85a147718544fca5bc3a805e43708e9584f9ccb8da67002753aa53fb9ab8e149f8cb11a041b3243f13c0e0881242765220f4e48342d1b33c79cdd54d9e72223c371af36dd8778eb1370dda960fef25a30d33508cb9e7c6d8824b0fa4910bb90cbeed0bcbeff1636eadcea546c3013e4de42c3dc830c5c81bf9426e9ab911d449c7070339c2fa3aaa6d4ee10eef1858b4ab3dbb39a05945945deab89d0fcf8328e679c95ea2c58440e6203e2326a8becec73ec39720d0371460287e26650d3b1543635097316cf79f9e27fbc09bb6e1fa1697f9d4ba5cabcd1ad80f90c1038ac0de4029c13f47c04f451e26afa2f17f453753aafe9a146d70c4a934ed9827baf10be5db0dc2ca4fef8f4d387ac96342a6f9224adfca1e7ccf2ebf7505ee8e0418588f692ef0396035424f735354b72213a3bbaea6fd14220e4fc26e5bc3dff79c85399272accec378624c1ffe12607e86dcc228dfebd5d08e4f3e985364173f6c6986bed6f1250fb643222d42c3129ee7d55861314ecc3f75f9a9c30a0a2f85227af63ff1bd629ff9ddebd5d0e0e1db0978fd0971e0bf0958a5b59bfa175ca9bc4d73ec00f49c22d2b0b2b83ace03c06df54266abd9bf119182814089997b67e58d65ae5bc9a9f9a5fac475e374cb044173f70fdada78796c00e66a8e3c66d28c05c4c93f87d821b4477c0800cda1b6257bcd21160b3c66e0e2b095c1d420c3af654aff4f0aaaeaf80e8b86ec40ce4ceec11dfa5206fa19e00f5608604cb3f1e1fa30dc8cffb2da773a1f8b1a0c174be9689b81aabf074ad913a12fca988973f87409bf977687dc9b2005a75235880750148ab5aa4e655a1408fa2191f15646975be9635e25f3fffd7f6f3d7e1c8f6a89b17df687420eeb12c19ee0bcd312e80f8a4da6b94fa8e617920d90e103135d7a7af99c7057049d490f53eec9f4137b0037c23c136d73d2081a11a696fc229d42f45cd0ca1c3b725165b2e0483ac3f8c07ee956c5f96b06edb19b850aca688e6c87aa39eaa5f991e21b075f07727ad56239306eac142b6f18d31e1205860a8cc7d971bc23d469180f1d78b27a14cfb611b84468e47473fe6b44cea99861a8fdd16f35d86897d5d0f17561a67d7854a12d42adcbaf9743b1bed6b958f16670e0fd0f642817cd1206386fd3bb445036e8ccf7b60fdd22e71f452dbbf0102cf26745db800c354af7a93a466699d11a7596903acaa736f3256438b6425854ee918ad94046dffdd9332a1d1b0f8082c29b48523a225567b892f89715a2a09a8b4b0e83a4ed2906f29d15d0288d0272351d2314b14bf5916e4e541ac82188ff654fddffb43c980dbd8003e5f4d3ffccde3c03b760031602b8f7c9fb17b0ba044afc08bb49b6336b622a5dbd0cedf5eeb41f8814f498283868fda1c4c233047d3415bed48724302b762677918364e7c5a8d45f67b93268300844f9386e1b02c3ebdca4f0a8dd3b5520872583bb52cd469afd654e71e9617e04ecd7ecda0f726c6eb5bd963ea30b5cd34dfbe32514f3b8395dfc42e3543fc7eab15a100e81e1d04bb47b22acec0f40f183b2ec9f8f162c1ce838f0899f09c46ef8808df877c0523ed18d02ab330f6a5b8dcfbb19faa8f849e0d805a62f89b6c385540e3bb777dc7322c7c54477485d097891228a76404821338f038c6bda9d78c4a741b232dd2d7b874d015bd5032ce0dc15f63fb5061c3ee21bf753adeac6ccf3513a0fea9f5c9636d0be30be0fa00711a8f106865b77f8260e2b65876f383247668c296727ec04ae1d0e14810003792ff32120c1740c9bfaea1e76a2006a5cc3efa6914683472ccd84c034fafea198dbf783006f87698cd9f04a9f8b2aff58da01ceb4d9a058dc1a281782d28ab4db5c5c7f452706826d604cd4bfe621c940ccd36cfbfed197535f15d8e45da1a1c137eec79a027063e9b035f8e1b73f075a8aed37e6b99d862ea722195f892ca6d4d8aabd6023fa4bb1ba56dc1b9d8c73dcbb2c446e7b78b5911a3a66832fff207eb61eb180a4c22624f60e99470aa0f9374b37be82a138f3ab0da69bb815e19a5afcdb2bbf05d5720bce807f820e90eb90f03bde29204c5839fef03b3d26b0f2bf5ad5af85abfeeaabff732d5af02541fd210802f4deb5f1244e1f927612ba25e296f384cb3e152b409710e4cd820ba42e523171a34d2d1ec2758151a325edce8770a989345db8c146a7f0d3981f259c87c1e698e3b0d3b9d0ea7b397f7ae05afc954bfe45d55b79984f3f8fb40005edb2bff1ce2db1ddb90118cdc1fb70dc159e7cbc90cd89edf1468af3422547796d2f7b59b125944c565a88270081a37a9e74231910f1db22cf0aed89bd32cc3688c988a93874fefbc5b3a887282e4d9a0abce20d0558f6250242b21bc9c1a23ac3d05349009c659c28528e5e958dded8016a8a383708c6d6a4b6906451324c23a5607a2ad763573672b2efa815351b5d3a6826183c757ca31e2c2d30145909f0d890529af118c5880367927fd932d70298e14fdaadecaab7705a184f9f612d3a314875818969dc4ceb4ea290dde241e6259e8a13ef9e7f6fff5a058995b74e7cb887d89b31c9b0da9114b7a613506fa0ee192e38cb0556ddc30cfd1bb5f756e6650ba2e3e73b42b4c80a130088d49fa1b4a816b83128ba9d38b4920b99ed44f8472902a56d94f79c806a7885a49ea7c85a3d73d84f6848e4417515a5f48996e5b67eb7870946c184041c6e2bde92fd4e9bb2ae84b52b930238351f92c3c2e9af2f45d01bf831c246a765bc98e5459f92cb9143ddc68c697947f5b2a6a66b3ca013c51090bc62e311ba8c16c467150c936bfae7e24c23227d33317fe4399881d8294d2014b7c039544eacebb3042e0b2a6e412c1dcf122de25804338c0ccb92a3953d8886157219bf44c21293dda7ed1f34a05e4dfe8d7f609db2220ecfe391afe87d7f5761656b3367909d74b09a083eaebbf069dd09e4d1d3107b51fe32cc56efff6ffe3eb85d0989dae8de2188437c62d376f060dabdc15a0f61c40f33b5ef0875b62e3e9f3bf0323975dbcf31ab05a90bc2e77d20b447d3048b09035d887258577f0a1396611a70640fc7f8d28585ea3b3211e585f4b194d6e67a4bc1a20d28cacb6d9ca9ddf25a4155ed01850fdf5226866dbc5fb5ba15fa697c555b6465e3d182792ac9ae9328fd01a3ad716c6bc657064181e262693d0cd02d320eb5b78e55f6b439c90d61a3b25a661e687fc2625fc7909b366458717c2a017fa3042c9b92d7eff95bdff8056caf86a21c21de992093543cdaf272c264702e508f8d32a97aa4471c69cd94b9534ca6232edec9571343513a26c498bae0aa598e0b956f099b6ff9b0124fa37da8c968a0fd96091463c222333d79fdc764cbca38e619b3ce2b272c28bb9a6099360889633630da42050de01e5eb1f525b2657278fbcede1625fc7c42d224acaca3563f059240551646ebf244d49538665b09f6a0f865f7ce57289a7790a45c7740593750119a9a8dab97ba2e7d5cd89ffbf397f0853786e28f0c11abdc0bd3d5cd04b5976460d289158cafd7d7d7c17ead7ad2128067949b6246b91b42aff8d80b8437d2c77fec238ab474fa04b3d8c54dcee05c52d20200cbb18e7d2ee5a1aef146dc5c10afce2117d8ec13365d108b074f84f58231671a6ccaa5bf72de619e38d7e9df12b7cd4cef6415bae09c1e0a0730228282b2359554347f616ce52af375b8f57e2440f7cb9b43d81cdbde1d1bdc845245d24e9a96f7462107a3248963e5bb83d257f5d4f228897db00f01a92ad56d3a9ec1fdfe827559d02296bbd2518e02d80ed0883d76114eeddd10b1dba463dc70602632137d42f930399b76785083d74e20d6de5c210538805e4248aaaf4b8f1aa79c7e0d52d8aba19b41f4d624f54e57fae44115a3ca1da353c41d72d565748391e11c5047a88ef6238fa028a621640054fa2b84aefe1d0159842c552c7c37af9df78d524e887a721c156955fcc723ab282999e5c677f6242a348008a2935c95c600762a838fd935b2b67a4e1c691d34f62e347f0de6365e00aa066a4f16ad6308dad8b256df02a4d0263e7433dab39cdc9a4c70808bbea330ecf093d3a0a04e95f4cad22278686ceedb9d28462147bf6cd88671059a06bdd2f719767b1914d2f520e5c55a1373b3edcdabf6ea6df2dfb611718069ce6dbae845632616f652e600f2fdfb558dc85401927c825f6251028a7a46f06959ca1f45851aad1ddc6096c044204c972a4c9acc48c10525680694d50036f92edacd738b47be6e1bada6c45cbd73e27df1ff50a87e48c61387ea9277335760bc77f74682406ec37cee853a644080899467edd458fe484a9f26c1a3e02c8ab34c454098af55ad7544a1aed05ae41789d00f12cf907e87cbafc6ea7a440ae2f880ed8e43f0b6a34c25e8e3be754d28fcbaa84312cb1a8b9ae0f447e258ad430bda172d9980443573a892b0e6c9167f9b20a167f94d20e6a389a74e090b8e338e9b7393b56467a230cc62f5d936534430d587945e814196fee9635114e2f76c91801a2576b4557661c789b2114eba505cfb62b2ec0977b1ca5399248d7dd7001795bac7cef590f01d027ad41e25e85ed997984e3919ae88b0427ce5f875680160271ab4efc9f0318abdee42b7c297b93de61212e6e2b9ba7ffc0dee040b5bd27fccec49c97e0b5d2a4263c112420542e7b46d3c2b967ab027d32833f75177f6ac440ea44e45681d37d727ea3a68bf966c20e348ff314a7b93b9207f80055085fad009e66cb1e5857fa8052357c1f88c1a20c70a20bf974968da8ed2ab30eb671887eee1aaea47a5710102fdd87955779f63dcd4451da141000b679101e6960121e1b818c31014ff8d2c2104a830402a8728eaea6a2adf06a891cbe5fcca6bf81c9f90beea21b42215880be247d3c8b60311a1570339c8db754d7c235443f4743960cb7757262e6c722040c4232eacb235263bf8f5c6a21e8cec385612cf91b89402bc8b16322cf89d47ee30e2fab6b4684c75f752726f42309386e31f2c60905ee03add0229bd8150d5171ab20f2eaae7d12cadc08d8683dd849fa79c6a275e501af110aea17c7056289bb54219cf52d97721185090df30252850006b2298fc92776ca1b4400255d829068d3d08ac2b20ca49db939b881038df31a7d8c7e655306e9542abdddbdb89379d1c079a00d8d7d0d20cf9c5f8ebfa3c82eb84b4e83a05061f9d4cc2299faa4a2744beff783ab134392d4d04d3c904173a5920462d7542855174122dc58bbccf309d985d0aa14f7230828aef20f8bb00b0c9121db2b6d855db51a49329eeb2e66849bd216ef8249c5895f973857613c908b50c198354f68fd232bb9c1f62e1c4571ccc64ce02e442b2c959ecb4624cbe214a8f0357b6f6bf45dc9657bacd130f9c045d53a5bb0313632269c044b831f4eba0590073284469dba183663fcf3494a2f0ad3899e71f656678bf06268dff61d4a008038f2c678232fcfe07d72db570cbc2f0b6946b86d422ce53e670fddf10a873e7429a3175feba09f6c5f94d5f4201e53f1cc4d804af329c0df0710b475cdc5f085114066197843834c0edb952f19946e16e1b378b4bc0ac5fe7026ce9fc8985746b1cd4dee7ae81b3b748c49ecf83f655f28d67795037f91b9ef5a07ee2353ceb1b34d5cf79ad40e790d1027055dc1aa0d23cda1ce795b79786a8283ab3526a9fd26bfcd687fa93df70d60ffa26bee1591f8126033777fa9347d0d292a91cdde84fe57b6d0eb3aace19a58f81e817f7bf4abe9e4df04f2a84aaa6c5358361654d3afdd7afc1067aabbc4748245904758d5bccc62d0369768bd223c932d9547932952b75785dc208714f972ce1c635fae8304c2878cc8a0409be53020bda40014634a5312c473510c84c7f4658ef589ee13894946c5670924b6715dd8487ff07740896a4f41335599da72fd1494d496bce383c418a0960845ebda99c75a226c822acd20b353c26ad29d0632a2ea26f35613951be9aa19ccaf6b14a18c8e25b10b6d3e53238a162eb3ed7b19fcfd0782bb9cddd5f4d2d12dd874f5abc04e80d0031ad8d9d6f086d5970b9675a0626f6f13d5237f2af8ff87d8ab70ec417fe205d99b2a5e9868d2eb5f5156ef4a4e03a2a28b5bda66ee8d3e29f6a2fdbe635d668a11e4753958450c844fae3bdfb931f71220b373509c474684439217c8136683c95c85da60088619055a3f4985e25f5dff43e45781523cc579a335340333da6a62b4800e4affec6e4e982932a525329253ee2356d12a25860adb20189882e2f3edb3ae659f43cf20455db0f9c84e4599ea4afbc6d2bd9172bbab7be90d8238dfbb8f238e2e1dd66b59402223c8e6a8cbe9aec97bc652aed164aa339b75a8eb526c3e015ffd27082641b4cae66b52ab498313b7400d25075b7e2ae24b4fb37cbf697d1c9810b72d3862648a31389959674610ae37efa6b7cee177a4e539ca3df0a57b5d123a34b9adba23b354159768615b7fe40102ff9c44bbc9781bfe1d756e3c1bf705657d643896c2d0ef425d5f7ae5a5784bfcad40c07d12cc3a1b0e60a7c2e449b285c55613700737425f4ba883d111ce88e5551424d95009ed85231f9209beaf00b241f4f8cdff30a1b6869bfd436c736e2c9d197544ee15b8e9896a4fa2b2262a9ffd3304e0180d212781ef73cafb1ae41020f643c6fd6e0f7357d42444ae882512243b9b22a07fd33035612911e989495f59a0a452f9c94fad41ba237d5039fd3ae2a2cb70a82374ee3d5cb24547b435ede87b459f212f27af9334b90531b692870b2899dffb52dad64f13556503f6cdcb011f4fff0d6b8b37f90ec7e43310c1dac783df856f1494071d8cf8a9677181cd3bcb2f7e20c3b8168b8609a5bec59ae98693bd024936a830f888fe2f4a8a65cf3e6da87ba4244e784adffef9f071386d785e1e64e3a2fb0deabe6246aaf373d830b0eb3d3da004245bd67a34efc6d7fd76fdcc9831de67ba0f279d926c47d2a1c1a736b4984ebdce74144bfa258d8a114b24905a2bc3be9eb0484f7beb6964799c789d54862b347f30e2224fdd716adbed2c10cf8ebaaf49bef072f0f21e04184746a836d1e15c2710bc7d0fabb675f4f2e037701b050db02e69b6e879aec7f842104c0f2cdc552b1990442c224a4f9bb5e0c37a520de432ba51596094d255b5eccda51ba040f8fe62126c2637981abb15290cf4ee9007b149c1c844e2c7706f04158b7a0f496071bf716b9b38ed25806415b00795616f27ae09a6bf9fdda67973674e04c412b701311e68a52b8e265ee4f8ce9d02119c8f2e01b564ddd405f0f2668d73e5998f4802f2194dc2d282ac4737976f8436a603d87109b2d747a5c8561a1062d7944047f833c5e946661fb03118b6efa891e1c83f2a94c5273d61b9d858821b007eed1ab88f9c2c2998fb1c31a88c40aee01ac1c0c50670c992e4964a54977bda8483fc4a438a0f62c4706e301859d1002ed6705366a04ef369d88f38731b3fa25141862260f6156b959c40e048c4a1e28e4751a91486bc14aa4653d964a7c90b825774d0c88afbb9ab07ea58c2dd3f42c29441ca147321674473abffa574fefa8d9e3558886e09d73acbba9b7cd4d13dfb7a30395db19e31ad60708215bbd9263636d1a43165b66e0d05361ed5ed52d42b7b4bd6dff179a30d27dbd3b1929bbdf4f7c2fd3b74c4611c51d1dcd2ea473dee7f9e287fbafaeb5f2b8e37489e57eca9e50df924fecf10c5c4958c439f2d3548ec286208f36df31fb0573bf7208a3e89eff3e4409c9b7fefba9d246e7ca03c7d23383916d02eeb65526d034f0bf13c15e2922b26e2bfc1976f5b1d71911c11f5482b9f2efa0e7bcc7c636dc2ff9c5cc30bda64b9d629656635670e57b0af8c7fe211a20dbb779096f99eae74970cb1b81e99ddfda50689b2d7daa5bb6cee7b2a2e30e881e4eef1363a34a58d27917d84359b6cb6dc4123079dea94e037ada9821c5cabfeea6583f59679d5c0a341013a98823e359c2f1832dc18163ef8de8a63a785d554ce0dd873535b15e9a3d560e56746579a16fda777ac0d2db48667e5135c578f596b89c1bda69a5c27ba11b09d9042eb297f475244d1dbd873d741bab7e0e820f8800615f8ec22808d763172427c246b110debe1735d1e7efbe41f2ad8e1617841bd21bd5c1b80023b99de97fddc10a7bace153d54d3e251ed255b6eb42df3adf12d791e6b573e03be3fd3381f41ddb1af9493a0eeb0e25a795a8bcdf098c898f8280338b1df40f038e69ac178349321414c2a775c7395c565c4a3451d0f3c68b109342c1cb2f46ce076df09256f5a017fcdfa5c3ab62e016abf0344b35ddd7f657a670bdc479e6b4d5ee0d4a79d854289ec4a813755f346e804234059b63bcbd458dd33d546608e90806c6e25d42565ace3ca234d48728a1142c32a7e25ad3d5e468a3b4e349815fbccd80926cc28534b825edd5e619899bdadb662d50e01486521e76604fc8adc370b8213489e9b1ed8b2e19d58735e1b66f588a3a31de63d4127081529f894098c07086a3072771832bb1da6da57b05961e6ad02226d0192db6aeffef845ef3d059917b6c15923e1195908a50cdd9f04fe8411b4b24ee9358f23848794ae2815c9c58c3c907fcc3f7084ffa8edc1cd830ea8cdb5e484a1317ad855adb037ab4738e607e0ba0c75730702aba1d3caabb69260faf9114a2a3d08e9a4b7d44b099db4511ee37ef7f6773ea9d3ce28c10722610675e71b0ad23f304feb1ff134b06014228d9d7bdcdb76d2cf81fe5f9926bf094cbd70f15a46fdb13d8143dfff8edbe8c8d651448ee3a36932e138c1060f4abd766fbc364bf66dc07ae4b6fe2f3d211e0036ce98f5401863b985a0b75d3b8b77cd205bbc1d821d80d5a4b9ac79489a8977a8705de73c3826b33adb136f672addecd19edea920f0e77198cc34d8d7f2b93dad4a932bfdea6cf75843fda3894d35a67912849419598cc1ce3c8dcc8c1c39349bacd77c9ad001f90625af4b98648ee4a661116ce35a229a49d16d285ecc403a8cb1928fbdb24e11414c09227f2e4230715170a468853f27447f665dae3483f88b2965abc2037589791f073a751b6261ef46726a213d208c6046b2422448533c237c13ca5fd4842f4ba417fec9700b61012070879e617361dab20d3e6d490d352aa2a793a86190c5c1f28966e5ce44a7c0218d1bd1e8c833a07dcc2ae86866723f65d95a3c51ae182a7ccee4ccbbd15c4bff2e397c68bb2a0be6d59885b86cb92e2115aee65e4d731f3db306f34c9f589ab349121c125cff220e3deb64458974cf5235cee993199c0485435f9f0ad5c51baa18c087685bbd6a780d925ed1805382dfc3ed6ccfb5a952426de56de376b2f4ab396fa8696568ff62308334b489437e9c9131c260239de3c80af15457e8debd4b4bf35792eeb3ae7fcf1d68db97797e49f055e186d5cbfc85b79db156880c127113460f2ac1ad8c670321a4211f4333d9cf725af86ddb30579e2823d5c4a198863e6f157cd12ae523b630408e09e4e205300250925923e0eea07d35e86bb1086080741411864c43027a9543e4fd729b5143ab5caf88414abe7bad008509fd734d391ee0a68422b7cb3b3ea5831071fea148eaee1519245ccea61489d8e2c1948aad89546c4ad38ca5d418775e42f67a9e8ebfed7b159a2cdba0daedee291593ca441206551a64330d0061b71cc2988fc8332eb588e30047e70382de13ca946a7b9743bbfbe81644588294b80c5fb8f044d2bfd46bca327b4d006898f281503d90d3162828103280f421b13541d5d0317e3370d0762de20da84496cde1e8ca28e3fa268fd6132b7acc4020b076df605ac9bb70d3a19bd173dc6f27d127a7147a4d4e13382d221d740931db1cb697040537bdad486de02dfa413ae0372a3edc7a5892f5577d11f0bd953294ecfdb1a6ce526437e7e3814229ba658aad29971e30b49a615bc1f27a61e55270f9b02c935d3a2c645a10fd7fc53acd904123b3b450c2d7fede6b07a0b0dbb13e40d0d69ee0ec164e402ea5d6aeb7225ab9bc0adb2833eebb43fc9b00d3797086f9c3784335b9937549e42bf92bc893ac244c4d0a3d7b40661e320d93632aa849ed4c9e64be1ea658ec41c11deabfc9a60b2ff02f8d5b0ed1aabb07f2f5923cb12b1ed592da3ead5a0aa761251f3a43602e08e6f2efd4e4bb481e52670a1baf4de27463429540788f81a54e468e496816859a74e5d7a1c89b9c9e4b6b2cd8389141e098a5a2640c8c5ce12ce1a71190365cbcef5fc5f8e26d0c0b51a0d0e8796d084db53548037026dc1234ab11daeddd88fe1bb4c120d57c44bea0b4010f1f7024292da80698cf2a70261e47bcbd9edb43a0881f8889a21097fcf794073d93e2a811430e1c956399e3ce95cc2c36114715132279041b4bfa12a0780bb3607a2b9354b168fd06c47b5484ae828ed82488eb5d8109b050a3ebb568729c026dc3f5a0f47891b45340ab5740127062ab101fc5cbd35cd02d22141e6f1acd2feb562be1a67b3f6b3b007d374daee529f32e723484e8d00c2e91832c8aff1694f4cf03f42c9dea5bef80b00b186698fb7629333318ff9c27eb0d56bb174119072217ab0573b8e24de732a15a78327d10aa543b149540bb0d6fc2268a05360bfa5fe703ada4ed019c9cb100b6e0ea3bf5d4323d363487b3e960e43a9e2c61ccea3312e5885a5248d1a72d5a23f2a51d0d0a11733704dd481f45f69a100391e6ed658b26be3bbefbe391de3ada7664ca658d0ec27dddb69281546e81239fdf536155910d894341f9d0946de6f31a9424b34a201a54bf6605063963cd0a7a762a494baf1bd7c9ba536cc9609d253b745c823e3e11a5892f474fb5a111bf8f40191d615d6216539242d66a0d8c2bbdbb92c31e184d60258774c0ba16b66455a6ffb3370046f96ec089b8b86d596a74420dd62bb957396fb101fa0523eb0930e067fd62cd9ef505d9f63d2b2f840f336d87bae2901095159eaf61417436b90639482907067e452df03376f2d73b727b7a1f421195c0a10e9cf3bf159fc8119c6ee8852a992b99bbeccdd538e3a713f993b5e8cb78fb983390c949f622a9ead5d35d8967264e2b5c8db85a9e8ccb8a56a1fbae09f3f43b568618ab2389f739e3ec3fa0b3bac7b106c1e125126088f24af26b6c89ba9bb87643ec15bbdb25d162247eeebf87dbddefb663d0f7f5e2fddc7ebf9750faf57a582fa1779d7d75fef6c0a25be68573bc2e3fb81b989fd98704e018e612c952dcb287b87eab4118b0543168149b0c615690c16f39af77ac936f29e43ecde483d8456deb5e127aaedf4cf59ec52aa5c3610449b86045157e85b1dabb3626f8d1b04b7012867b6eb457b3c24cf31d82fbc8ff4909622485a49b11d54d2bb58ee7a7c5e49ed1f41146a4a57ab7d609a23d8c8f99ba840e16859eea6eb62c8592e455e3984b4dab1693c43dd5daf76056d1b173303bcdb8b0c8d85b6c5d120e810e18edaf572196972c40ea526b96f9866d049963281602b49c43468559aca74733bd021747eb34f78727796a6ece86555b39d0121cc9e87a747fc4af3eb47dc4de95088accdd3ca02e4eb035ee1d4df6c7aaa045b596460d90456ac55369e03084ab2b2794053a95a59d8a5ed422d05b2e8aa65b64901152a074e8f4be90eb5232dc51e79a98fa85a3f1dec2e20ec47eba675087955984f63fab8544eb380107c2cf35a418c327098e53773f293e5239189870d6492d44432b95cb4c59d82033a87e983312a20b40bc26171050a727c581303846c45d30b770e48390166bed5ba7c9d3d52684e11618e543921d77998715dba05b4d3d1a9d6112f9eba82a75eaa9e1f3a1739980ed982da53592a5269258c32bf27cdc53e17cca7c9b729e95bc7b4744dc930ac7b36a3ae41ee9435d8688674bc8f724a921dfbc00e3549b2afa8604a660ab2df72b3166b1698ebc73cd2a6298977d483706ada35ad3a1f238e04d9bf74bbd0c2a9d2edd36b64526884d31df696f544962e78812aa66a0907ce7e9be55696b4261bc372cfcd890a9ea87ff8104632bd91bb0a67d950603665b061ca16042932a41804e825b24e7cdd2e4e9d25a417091f3c37769bceb3fa24b4eebb95164d8ba43054dca3e5ebc5dbfe5b801e53392a008c06e0da756e41f82b0704dd3fb8b7c1ec2517901492ed7575e75881ab9481e301be4fc3acf0523b2c12738b42fb28d4b4af43fee0094ee926d19dddd80c64d11f3712aaffc4625a936cd8f46486e9abb26b5d46a6502957d17912749b3ec649f9ac4dc6c94172f029df3283ff419cf419930f21e5e49ea7a66e49256bd28ea24cb2541dfb55d89430310cebd1416d9f1334c179bdc03b2dc7b8b03771224b837890e37e9a5654bb2066549994bfa32e86b4279c1aa4a3fc787871a8c1725ba8d280f08ea39371583413a895eaffca31703731c6a51a06ad478144f545e194f2c3af654d6bdcfe8ae7779fc067841b8e95664d536a0803d25c2817312638483a16f525d6aab89997a38ba89829014ca0708b71ccfd11d0812b4c2d045a1d37d8ad1eaa3c2a5c511332ae7cc0bd7cd0624f58e839713f8f52073d326280e8973b3fdcbe1c1f90edb4cd9445b6d7f0c4a51283dd143ad6ab9cc979b5b37c401908137c8c3d2545db7412728feb1c1fd5760fbda4267c27614c82efb8d9bb69591d448e84f1e1696c18c8cf8eb5c88bb09c2109e3e654c1ee29218e80241c19b19f88b132a88e87af45baf10049a379cc00caf57df2c69b94ef620cd18d310e5562acce9bb1b391ced2752889a7b61e2c965f66b84496d227edcc65116ff2a745f278816620ad36a3e26d92a6d02bd07f2d930e5abf37f97383eaa93d4e17e42cf22741e816038e61232b4bda62983e9b02127f572d7fa19b16d3fa652a41df3887d889d2c26dc1349c43a34137f9c91c92816bd5a5dfa06772d88750a663e47db860646f2bf325ae3615d15402966c3c3e460feea185da9d168f43b50e35982ef32d84b7cc467b5ac4e59c15c94efee86132edba27c6b15f03d11a07ce4ee2bb36563db9106683f06ac1fd77135cfdefa5994db918fd00a637b64b1627ec4675d88f2832f402945d8e90180b120528b7608a48befe272493ef7cd038fb08b8720f26fa79664d2fb3e90937c62f17bd8c2a01bc732dd48be7a98c7eca72478a1315bce841f155239c20f1ec91f2e73b2cfb3f76a2ac721f3105b3e0770f987c1f22524dbfff5928fde1c17110277e7bc2d1ad53a26707dd1d34ce6fb5cb1794f9cb3ddd70c1c5b061acd509f682db46fa1a18e106f6d23b0f672c13585510ef6c1fc45c397d5afc6358a55d2315aa5871f7c8dba8f0d4a3a5e6709ea5b3885851d9595e23526c407f1ce9225306b00da6001911d2d2c7509e024bf3f3f1de57aa11f56e4e52be2e84f503ae753b45169d0b47da9e202076ddd1b4b28ef3be3f82ff084f0b8748b7b36120b10924d574e510a7e2a1fbe2ef22cf250023829a9c9226ca2803c3231f77eae5431d251cdd6a0cd1f42756875187d9537d42c1c15ae33d97fc6be82ca92d136aa55c4fe43b28e597f82acce14c612f0a980a637213dbe5c19dc72ff21bd2ded52a344280f97e526f700b6b5f3cbd4febd125f05f09d24c033c6f783ef17bb92baf897b25c9123816c57f7dadca2142dcf585888a13e5285cc7eebe9664ab80ae089cf9d221917352ec6169707438f35410e75ec6f68e6728a01ea6e0529cc4994b392679eb9be4188ed7e81f2b6c3c8c7efde5a71411bf9871fde5a8f7c8d75fa6973348b2fe039dd34347f766c5b1905d60bc40e18926ad24673f7395764f7e9b3860a2e567b16ebe9169367ebc4e5b4715c0dc97c030676a80f0acfa1940774fae4e87f24cd55fd8ad20e033cea665c1854000206158dd653c2bf4f718bcb8ebd06d02d7bcd44755f8766c04ded14e41213ef5e0147ba271355005c6b069baaf1526a2542857b884868d1ba8ea58c85622086865cc7136886c95dd269797c72943acef72761d1ac9a9e03a96cba9d0bb5b5d6d452e2e1f67d7d1d5169b8eb9a2077092f9d7a8470fe29166382b190e0368a48378c5a2ac2742a3d62041218f3b53cc97f8d843e87b72144eb8a1c837d31a1218a3c0bc8488acc37dddd2cc721cf855345843bbc7a254e0f1784601371c35285097cc24e9c29dea8d6769b8b53c45a927ddcac93d4073b0230f9f83362ab8395489ca43d62da76500454553b9eae03bdffa0b21cd53e97fe0c0148f3b9a1f2758bcf484b89a7de650c8607e3492294eb7ab8df2159deb93e76ab3dc184123df26bfc894439bd8d4e27b757a92bcd25bc9311078d74dfad308b3a6338ad55839407b92d04a32e4006dcee911925d66f8eae6549fdb372e1f9781e2d51926a8f536e79b6c6715819109b0b1e95ccada1d8fb5579dd7d8e3d0ff10bcfef9218fb092d02d3878dcb5f96a6ee15e4fa8b83b806dae975feb17c36a619b276ebacf0bc6d9118af0ac7c106b025b85f0417f535a159c4ac85781b667b13bd7bb1c8c758eaa0e11795ae7dc2e34594551b9c6134cd5c2e9e041698a2608eb9658e16eec9466185d1b7801370bd987ca2b365dd6a559d80129571328884ae4044c8a5f4f9fbd2e909a7a2a3204b608c0decf761af67d8f57b4b92a7a485a7d3beebe075ed9c3dd626770ac71d1118f02b43efde8ac2c4201694987ecfe7dec3489c35f9cca3f6fc952daa4b1871cfc93707ef7a7e7018e5600b232915f6384ad4ef8b4008593a48873943af71188ab9112ea4f79b4999306c8045469ab2150eadcaf96d1e498751cb03bbbbe3d9c2e3954b36d5007dab04d64e06c20c6e021f0fca2b23f2253a46582fbb81cb8fd81c1ebb8a7e8b5c235c18caae3414e695783ce10f5a0af8b4212984a1637266c169651d705a5ba8d87c0ff69cc7280e0cf282b388bdc6b27dc64590442625520b5de19693a0ebac310bf8ee703f5832f862bcedd48106c50c1f12a8663a4acfb1461c4e1b09d25361f73dd79db2f92b3618d994eb2ed8c47ebc7917ab72d72444581f0b519799b4711250e9bed92569b70f62ecf002012077b4f84c49788c73d0bf94647c8457b31b7417f94dc8be635447bc92fb95413c2b7ef2c34908abd0b9098203a52c16651894730489dd3f60a390ba8de7d57e0bb2d3720f6f8589ac2de0d2f4840f25771d1cd4f6deb10e7e2e964bda1870b8827be561d07c6f2f564232ae018707f93baeb809d255e58a26dbb91ea8694479be611a9681ae4d204ca3734342f236ba10d101186f269572e202953d48e1c2219bc2f290db4b12e08561f2dd56f225ec77a9cb1768f18a96f112511f8602916923ef46d41706155911695c5a2c5530e6b93a8a9da3e26524b5061aa170425da026336c2cf6f840437afe5580e585b0d7e39501666b7d249762dd57244d56f12a3bd54667971546ddebe93038181fe74f06c54f0c2c9b47424a3f55b25ab402ddca6aeb4c1b8c08c33a25ceb0d28204371ba96e54d5cc8d80cd5f0d707e122926d5fa546d3fe1c7706473239303570b1c1fe5c570304c5078e87a832240d174f2e52982b50e86d73d885392d709b71dfd59ef1ae0ab073e9de7e029bbe5923b49d7afa612131ccfc44d5f9d14d4e1805b702316f1f8062e596c0adc23198e32441391d3f89a2bde3812ed9e027b75d10e2330c5f8d61d62ac55dd234d3b3110f85f4355568d69277875dc356d528a1767681e3b9e29ac1cf46e1c4283a62786d24731ae9258743ae8c398a3db32174b615ae5d471c015b2e0b8757b7b508e7df686e058c8d4e8954bc1e0562169df7c513ab1cd5bb67b9cad9cace20f945e7374b1fe78e894717df4d36e5918c6eb25ad03adf02f914305a19d544546fb32b8729bd45ee42616454993449cc0ef42893f6f8b2e3841f8a8c50b16733c782cc83c40712ead86b3c72c0766522b99f734cdc192a14a8b6f154977b438e4745d069cc59126d2412b2a926dfaf5b002302ea40ac9bd00a46df233f1afd9813e33914a6339d351891af24e14d55b2107e2e121fbfbe29f457ca4efb95f13aadf9dff4a97177aa3fbd9c5e110a28f34a8544be186901a6a943e47f64a34cdc4d51bd8f42ca799f501b3615dabb63428e61fc056ae86c266bc429b5cff38324dc4a4546c542db3b664b360319570c23104f3919da73213ad1910611b9144cfe260d1a0d08f71fe058f0bc9c98c188dcbf379b2a6c87cc4e8a18010b56559909535cd6caa919495a1cecccb21a5bc64aac12a4c2ed96cbeead413a08360bb024cd0bba6152f818e3a72416f0554ddb2ca733d8e6998d5b08d426c5bc603742483b2edece48543a3da57a9e32b0a7a5415baf7abc4bb1ca20848a4c1a4f4c0f8f8ca08c2f3e29fbf75050d3ed8272a5043550578f1a690b5d86e0d43323a24b58e62b0ebaed7442f26409b74d0015c0c06d90814f30f83f45599c3949abe0b6ac49fc3ef9e863ac9d3c87350c408caebb9cd7cabdc90b1ad34aa4fb9ec9aa3c4f73655e268b7dd4843193f5c8c5b050739783bc38a3a745153f1af312475ef76bdb0a559aa2d69fb2ce2315619cbc380d946e9029b320251812d4d8528b08464c25959ac7c764498c1164e1eef77f190b4cf79622ef5c19d20e1ca64a781cbd8654323d90310e0e8e32a17651e14c6ff86a1829376839d5b74b81cf55165539558ee873c34411cc55168422cca900c492b0ce3f612df3d0cc58cb44524ec533c88a942067ebd9243a67d027c8517b2e596d091ea3523c81aea40973f69e4d054e18bc4a2769b96e67e28c5156e4421ac9a6cdd4f591f763614c07b3192e2c343167d7ccd2f6e3e22149f85d345c500e95d9cb1224a0361ad0021eedca352434488fdde0fce9e943d89d59c8d0255a48622fecd6279a3cf94f2d060f1c76019534a7558c1cb066e4a8e1b4b4fe0f5b2dd435e37383922f36682aa9dfe7e4aa93ace41defb0590599153cb82445d25d7e36db128ae98ec6633485b6ae1417b5c8c8773f31f4dd2057af14ceb7d7854fdbc235ebf7edb0e4497796a88b8d6e4efcb7718a901b6a9e7bfcff5cdf8e33204ebd9da126bc816ee8cefd4d8d512f96297a8458bf376f271788d8402ced01147dddc791eae0f1d076873c22f2a83a0725570b7a08945f64c17a73988bf30a220f7124216b5d368e7b6c4142992c88cb9654b8732040c41eecdcc21681bdbb517a6591aadb834566fd85651e7c142249032813810fb9d80e47bdc0a4076c1302dab7dd5b5c300ec2a20efb0352bedecfc60d072e806f672c384ab77915bd84d72da43907767b34faffcd2c317f5434a277e3806c3696541be9d00f43308c74703de7d1100b524b9b091830b19139cef8f6fa8f04853775174fb6b6a594524a99526c0538069605389e5fa1676a79ac95f3d6bb13bbf55fa1cc31fb37f5613011e7573838a21058716a156138876724569465c01792155f431cfb375f43021de42870923d28e0c1a7748f7c7792b1203bce8c29eb55dfe3e4c009453adf90334a5fb157b58670fe06cd3171a42f8e8e23fec044554b01f45daea73821ec5f61cd39610870c681fd0b8603fbd70dec3bdfbc0a760383bdaa25024c64ad56beea8f067c9b5bce6c88c01a1a93a6a9c872e747dc860ef0000975f37480275311ca668a62ff2b8ea0953ebc484a296d1d02bcc97d7889c530ae36e98267145570c777fffe8a9ff4893183a77bb09c7ddfd7df5700707ef613b1e8ed4f45fab426a796d538ff9dbe9ce28abec47246a5a54e29fdda02af672b0e62269d525a49250e4f6429e78b524a5ba9ecc609583e2c26ffe54cccf2653da01c43cee894c97ce4537943ce9a0a0e5fb2ff0972662d15580d457a19101206a55721a764810661a2283185122370bd9a2ca2cc977b47e6cc951eb09c8180e6fe59bdae83f270a22a3da9a5984fb1b55f0c6b2d08d386d75e2af6b44f417018f2a795d34e298962d8b9ea967d1ada18b9bd641ad2c690323a6918c3ce6c5d5835cf48dd4c1ea98e2fdb9f95524a29f629c23f2fb63e2b388c707e0d6f9d3e3e2a167d6c524667f559c161ccb7755a2cd5fa9c33f4a9b4d63a9f7e0da94f51f679ca34240d7d6c3e6b686be85334e99c73569b5502876b52b23abb83e50117b13b589de541ac41930f3e34cd9e5bef4933bd48f16aa5d662caa2f762baf31f83c5603b206e0d398eda7864b2dff91d9e182cc67207ed0ea03faba9e9f57aada0710183a82e372a8aca92defc7247d162f48d2b84668fbb0b4d219fd2fd9f602ad981c83e45a1fe19030249bd408b130e4f7480a2571b671e3ffbf37c172046309167d30ab4d7d53f957aa0ebcc0ec51d948265a069346c3f062ed0b404f45b80023dc495205e43fdf90032829a262454801066008130f3c91ff64cc5c1f7b29ca6c91c867c1ff0060fbc010458c38a53ac408e58c5e6e1dcc028aecd9bb5d6396b9d5544613e05725a0d6c234605ea0c8befcbc605d6d88aedc5d7d29034efb41ad786ad800917e81ff9356a992cff3614596ea06552154596ff3591e557a0c15ca06568c004a79dd06498c8f267d40d2a677d033b8e834a6e3ec6cd7814a34b91fbfd89f626bc975d89d1bfe47eefd2331a1e97dcefb71914c379ee83d1773ca347f58ca96737474d3341fcd189e47e07d233d5f77b0a9a76c361f887ee42b3d0b413bc85dcef3d7a8663731a074613e4d5774fe56e2c6dc5c50cd93f80a6399310727f8c16ea59cdf7fff4ccf5ed231d4afff88f1ce4fe0034cd9f3ce8990dcd9db8e859733083eef7c7e40c6693b2b3021544fff8fbbcc0018832c16992c961384dde1c86cb2687e134891b5b866c41fff8e31e71c4a04c1cc1d807e2187b0fc4f101208eb23cc678621dc4c42da1c8fb1498384df61c869c72182ec748330ea565c8332e7ab95cf77ab27b2bba17eb9e3379caee2ea5dfa826cc5513acaf1a978d9415c961f8cfa822661724a7c9c96522659733892f9f941c845d93b919844730f6320794eb396deaec94d3a61439e5b4b97318fea394669c36ad388c332d63fed03fd386c11d7104633ae218fb97c98062d396336d5627c569b4494ad9398de270d38ad3a8d3fca1655025fd23c569130a4acace69130b16b7d2796e094232398de6724c4db20512e7341ae551a347458d1ec562456c5585380ccf7916a26e05ddc5ea9210a7cdcac444f677a5fef1cf1147e95f91e46cbe1346b23fce8dca087a731acde56e4d4ea34c98e09c4695b40cba43ff388d3a99bc194481e81eff21a490e87d79223b25535482ec5f5b803a03f6d39cd3a88e89d3a89427a7d19dc3d8a165d01ffac789d3a815a74cb23f65f95d61a1b7ccbe48751eb3c771eb448f9a3df2f1774d25f604bb86bf90a88643a21aeb55a1ea6f1802cff759e108335fdb8e14668ffc1ba22d8b60f6c85721025dcb1181aea96cddfbeecd8d5a48aadbe846ad50e68b43d5b3c22b86c033eb5b610e9959efa1eba60a36fc55e28e1daa57899e1323d0351ffe3e5c74ec3fba0eace1f75d6bc8b3d7ba35249565185c83725e4d5aa2c963da4b452704548df931e48c3e951b973c7353b91d11bb65b1557c36a6fdf0cd877b667e78ce7b9342c5ad89999b0d656e344c71bb91b91119734b8114b713dce08899288e88993ab284982348407124ea892334e81de9c189233a347184091347928439a202304792963862f4e5080b5246ce2861248a248c84b181912e5e8c10d1c508105c8cec9030c203cfc80d4718a9c108234d451859da6224062d465a20c2886d882252441569a206456c90a5c816216c14b952b1e45a6bad15df5b6badb5de596406578a3c09a2c81310455c00558405342852e48722427c28f282952226a8c24466064c3d2a4c4aec988c98c224440f4c5664c014450a530e51985e008509f784e9888e69080f4c28d881c9870e4b659c2c41d164e94b0e4bbc182cd5e069e9071c6c2cc920537a43a694524aef9c94524ae9ac4b4e60b0b484c9520b962cc960c312d20b9660c82dade002252a94284dd5a004c649894b12a5215aa0044583d2149cd20e489460c00225a71528cdd0a4a434831210152815c99054c52de9064792983092e4a5489216a6a4209692a82825e93c290907474a52e2449256e0439298fc2829880b4972c1832495c063401ae340909c7023a4241c06a4223c0548581c054855fc0712147f012906ee0252ce5b4042e24548469c05a4235f01e9879f00a987fb203285f720f2849b8088949780c8116e2392a50a223e9c2122e5a3824893cf0c111bbe324468f8a62072fbc81021f28d2192824f0a2227f86e30c4cc57a3c8b5d65a2bbeb7d65a6bbd7388986f6ac8129f9821487c500c89fa9e184283af37a487cf89213a7c4d0c61f2313124c91766880a3e304392be2586187d5f86b0f0491d9df994388ae24be228cc6783a32e9f97232d5d8eae7039aa82c45114de5193238e96187194a488a319b6c82aa59452d63e5ac294524a29bd73524a29a5b30621e2e885218e7a4495a981982c6084e88245cb952b415401220a54131a2cf921890f335859aa126406425ea022a4c7aecc14313d80914117295aa25c8152e5499028b8754d10b0e400490c30c38c255a1019415e2840901e426582c4ccc010a04b0c2d215c01a1ca00a2003581b14400497e66f0597a11240031bcd013430f59990fc4780006005d78b4747045ac1246f9262e967090a4c50c3b4b3a415800796105901eb132396270c0dc748169795db1a9e28a0236a9594293a435036b691504ab8c7e7c4627c067ae14b657bf502e33a645c63eb633696c06d5c0f2df323cd76a2b0065c3d65a6bbd135381e16132b1a1763e665658750c70dcc119267bfc47586e4ca994527acb4b635dfe6af64f972bb6f33cf7f2c4408c41ea329f11c8fbbf197aa6a14ba08b6da51f11f54bc3ea05d874e501d8742500b0e9aa7946952dcb265be6d31c22f74f5e544e051d38abfcdb69df8f12b3ea8f20edd6089e276fb59af9864858b98cad6e06d931b3473ede8150b1a8e7c9666eccec917f73d6e8e62cd2cdd9dbcd59dccdd99c7d9a41574aaa465da9cabb5255ea4af5aed41889f10dc4c572ff24d349f99437837014c56129b017a363de262b8aaa4638073ec574bfa351597ebbd923816e32a4378a51db1525066331899fb880381ced183c6f9ebb52525e292b73f356c7e8a2b2a4388aeaaad1f4a2f1dbe51a0ec7e6028eb17cbd86c3d5f77d342d65aa9afda70e2df2936c31bb1455610870c6ffed66d0dc659957cea2773ec99f34de3ffe2a1b0f279af54583945493124924c164032f5e8474a9357dc9254b24329705ac746c883bbabab4fcc83a641e92af33017ffa5424c1fc9f4f549b6157978e14732091e5935043090620a6a644a1030b8ec82308839c47537c61618809763002880dd2089d944c75725329ba211759cd8bbfbfe2bf8f459c85c6b4757a0e0e05e33181273b0d47ecb3bb1bf635c4c1935bb0a018b2a735044469845c3462af98cd0ce7e9b33ac8f2e4562b140272016c2da0e5a306984da8820e9c739ec60caae15ae5849d5f27480e4899cc37a212d84fcd57b7ada1336a9c58663a492df31f2710994ea84c739ec2725480f4478cc34e5756a50de0fdd91aaa7fc3f1553395936b1953bade7f55bd467154846e4ebf4b14720138d6f4be9e4a1c89be9a9e9479cd54cb68aac3945b979de4ac03939729cead6e6b08565d5f5d228fc9b393976ba658634d2ffbf76aa67e88b8e805f5c22267ff840925f89d95a3ac49840b1748583cfe55d8d986393caf90b0f8cbe2259327299b52de6e9b2b74411f60116813026d42f7de076a5d280bd464ff9cdd0c72551bb2099c4143c88c90abf79a026da00db409ed288ef7e2b974b367976345ca1c17e1a2221017e1262b06bc4f635e04641cbebe34c66127fadfafbefb4c18d0f98ad80239df125dc9cc0dba17af65e0b40cfafeaf3039ba9adeecf19a1efed50e4db6656a7a38fc031be122d6ed8545caa6005f512f2832e0f8e24165bc2b9a412e1c8a93323b061c71d10f2b0588c119f4f4816610ced3ff5a43b455820e7dd713d56ad7f06e259b40ba6315454f576bfdca4bf86a1487036df647d0f6e2cd1fc011efa8d1a448b3e7b66b85aeb721ced9b984668fff0dc011e3ee548d02c4d9b93b4f73c50ece8a1d9c3be51481fbea491ff15db1833d5fd13193a719c4e29d8994f9531603ca3c621ccbf53d0d5982b440cebb441d1b2e9a0f36e86aae27aaad2c14604e0eb4bd5aef3bd096839b3d4ebf848fe2844af05a8bfe2894f3e42a41d65ae28b57b34f8023ebf6e261d7b3703368477cf1b04bc4b544db033b8f2f9f3d69f0d75c3655ad1576cd05eb4671d16b2afbe322d03623f451839dada7e1af56f85a4bac818ef4270a53c4bbaf35f47d1726622ba0a4f1feb98f7732632b7236f25080e3d033a534dd3ff7a913a538d68d95bbcd20bc73d613eb669d009d03b159a18e8dd6bbde25eed0b1e1fa9ccf7189b60990a8d67aa29a4a676dba22945c9d4e8b13c6df0765b4bb010650bb253f86c037b77a7bc264063c2390f86e8f07e5f6c5deaa20b1449d3647436fca992d42380146e5762f0043bf9e33d1d24d615285bd4eb81ed506a5b52322cb0ab5a59b36322d282280bc706dd4084a92edf2a02cf5100308cbe1ecc509a920fbcfa050d3e8c9121938a9eaadd57eb79754f613f074432cbdecbde1b28c8870dd13325056ba1848914798108aabd9df3201f66aef26c5dab28830b340f9c297d4ec79f1567ec3f9add0f5567cf1c0bc72784ea23a0c38be78f7613758130c077392b3ce39efff929a4138efffda797f98d10cd279162bbe6662a7bc9d131f3b273e3ca0b1ed72f012db3531b3c253b6867ca438fcb3f92d562d4405c8dce26d1e56e4d95fd9bb2604ece96440ea4d3372d6c26635f10c3b8f35b27d1c8e40f9e64821dbd58bc7bab990fcaeb1c29dee99bf13fa74cf7c9d7046f7cc671176f7ac08bb7b62614bc9f3734256f7ccc709316dd994cd04d83821af461d79656323e6d891572b2729c3d9bf6f45ceec2371ddd6672b8a2f2ff65d61eb67789fc60cc7d71858110c89dae48b0706fc7cdfde7b5f2f1e28be3e8342b515760d8bf40831f6e4da1f5f575400151c782f2f72d63b229cb23fcc08c624835eb7571839eb29524dd985cc64cf1766cb2e756384c823ac283b4cc8ab97fd67159233c7bbcefe33f0ce69f6e59725c0f1c553e1dd141d829020336893b399cdfe9fc7174f059a47a1974c3ae4f18ab97193b690f45f1500fc3ee07988460968f3f7dd5a80cd22f4141872cdf6d59b14479d680ec700391bb1fbcc59b7ec4e2c40dbe7798a3b3e62cf3382a00df441ad48bc933267dde46c7cf172939c7df67fe11dc58dc94a0c41c315903f4c06bd78b2c7ffe2fbde34fcf7fe7dd60592c97c689280f66f6b68e55fa6d376a63878b2d4b93ceeea7a0b5b56d509d8df1709cf287559ea5c0f75aea853c2bca2ce7d9b27aae1dfa17345156cf88335af420e50dcb1037cd7fb13d5a6b8a3061baf1123b16191c74b24aad1e4c0eea1019c618dd913ea80668f7cb02694cd1ef934a1502adbbc7d6919e9c82851b54ee750663003852905f7cb91c932a6c7d36dd1939a4eb06c53bec0b0730114a6504e6f53addb93190ce1c1a6e672e0218725800027165052eabd15362847520db5c2678332a4099d9249caba1b6a2765fd550838fa6e278b66d0cdf7cb9c74227572c67ab9abf97e0925251639737ddb7cbfdc22254f4a2f7286f3fd524aca3052f6e4941c23a519396dd3879c85df3f8be60f39ebc048ce78e40c00df3f91e4cc83ef9f4d72e6f3fdd349ce04f0fd33276730be81be07f0fdd3899c81f0fd532767217cc7f8feb993d38a94463368c5f7cbdb0c62f1f33671b925922c9a2bc9246732774f8c30d6b217ff853b2d7bf138fc96bd9040b28efb9ebb3502ce571c391042086bd98b0721045bf6e20710b25af6e28142dcb2170f23a42d7bf10208bb652feebdf7fa849e7f426f591d41fea05dd6f945387a967de03da1e700840ea465f28fc0e4fbc1afa851ffc8ef191dc8c8c3897cdf83d07fb4cc8bda7db4db5ab64304ada365f25d8429348e96c96f1172e084be5123a4d13d7227d432f938610c9fee910f0b653cbf1383812cdcb296499934caf747910fb7991933d50b23e585e72d05b42e7f628e14f29d211423e3771bf9ca787e2706035919bfe377ec2d1168bee20f974552d63fbd73cc2aaac8d3a5d3f9503b9f372b48784f82a0744a1c949c8d1d25679efb19e034f9ed5872fb16bb04288b76ddd3dfed3b5cb7284f2a27839dd2c40a96265634463de8b64c6121636f52b92737b0d09b5a816573e33d410110b727628a620879b72965785145f5b3e930850a268eacb00e062832e0d00218cf16832e5697c30b567035dce82a1423bbcb622647e9ce1ac5000a4a9525765256a4fa3dcc749d59247ff4cb271d5bbf14228d724b5c6ea81e6de4249747e924f74fe92e2567ef61da77fd6e45ce5ab9bf795a4461b2e0318964bd26f898f473ff6a1281f2b13bae56a4547a7611bb70b9803daf862145a812d0f1e7cf55572a3696dddddddd6ddbe774fa7dbfb6b6f65ba755f38c3ab7ecd587d27be9a536c4c193690fb073e76b02b025ead8607dcb064eeb719ea8c67aa21a51ed9600e4e05705f0fbe2bdbcbca46a0f60fbe8515385bfd0ea869def156d6b0847b7e8bdf7c29e5e1185fb9d5738adf7d602c44c7136707cf15e3c17a60f43017ccfde1a02bf8648721e276c7d553deda732e36f8af3ed8b6097e98f3aa432a561fd19b64a66d994aae8c5e0d0eaaf7889f22a1cc133f8351cef531e618f63f232f8371c8932d8e2df5b22d03085c9cbff3356cdfa421bfa37f457d67ed35fd1bf593db5e258f3f76d8b849ba7dff269de8ae3ab52d17e553d15476a2180eb278a807f3e7dfbaa709c0ffb06c8c70fb0224d9216f46da81a41f5d75b10a0a28e7dfaa1ce4f1d2b8af0611acaf1be4aa44902b6782ba2201f8b28f45b1c93375e11c7e4e1803d6d8d00be15bb46d431f3cdd3887445c2ea6f68ad965afc2a6f9160452a65e225a18a93da2b449f867c4a85a4cce98f4233beb7c16f439b57a96c7e35a3e4acdfd2bc156ffef5ab9bd0cad5df84214d92fa2aa4fcfaf6fc0a6992d8a709e71629b3f621d0a2b5795815dbe63f1b5588821d01c46f13daef967d16344e73fc0051563dfefe5ac511c7e4e11bdfdb5fad26ab5b0b50551634497e86344ee0e4d59f351c572fbeac550c81671c621105fb9ffdefad5d893a66c631237fdfc1f72bf91f20caf65b43aaaf21fe198e3b4211b0d8ddc1afc29147fe44a43cc27e8a38262f7f3fe2800d7d9e6dbe10fc0ec251044f19f662388a4097611f86e38e5b86e5192dbae500a2fc5d14d67272c2aec14211b29869c128ee05d579469dbc5a612f5b4338646b888a48727ec72ddfa7e138793280d69e012d85fd0d27cd79d91a827d4e889d6021a639290b920fa8c4ca97318bd63945030100080053160000201008054522912048a250ce940f14000a76a2445e4c2c8f06226114c53010c6300883a0444000008000400c30c621c2030020601e2a9ee1a4a7b823de2400c56b11d71071f58c42fc010e1315ccab8c25ea7c34de400f54ed528812b331020dea9671e63394e7e9a91172839dc23295c5ca966e8c46a152a51a2057b3eacb163557abc592afa09390c2f5170772394d301d3a738507756c522bc0179ff1523f8c3a7598eb9886e0e124b934e7b690ba6c3dc1f8feceac465e0594db5ac53ac19d906a0d4c57c22e689ff251f928ec580e699efcd0aa1e1fcb32052202999c7c59fb756d19c231dad5027b3cd842969a852964bad8e03b548eb21bf07421127c0eb79ffdde2ef6d6dfe2f73e9dd05ecbdf4f75c6cc49a6691c8e8cfa6dc7801a18d301f1e3d8ad7d5c1d62629e9511c34d1e3e8ea99f3d2e199f6505d800b158d479a85b3d353f32b3f136436a5967dbe8b81c12e6b83df8dba03ad6999ce7fa2e25b47129b6f8226073ac9b843f62ec3d37b9db25b04bfe52c0c0ed4f68a8739c5910c5040d9126aa65b8fca92c9cc44c7481bf40a125abcec45d8d18a3e32d518113ffe7d63158cfe115be32c2ceb5a079cc2620da39dad06c603535321a0482b341c5edd9405e3f351fb1ffaf5e404172aeab110f11fc2c6f5031de247913b11156c8d622211794608cd8b7c90575281748557ef0597ec01854da26453e2621caccaeaa0d749b0b1aca0815a334e5f02290f1d89eaf0bf775276a48e933c596f128a7b518b532ae4ad7a1c9765786cabba6d03bbad4b2814114d21ff4b893b6ee9e018085c5d98ba49433304783365f0ce5bb8ab7d47770aa9f07b562a5fea3fce97c50573ea6b6ac99d3d779082676431f83674b7583821a389a16d4824adb4c01db785133b770f30e4151814db9bcffea9f573e7e43d271d285e311c54950401e7775841255af305cef351f1d92600dfdb4112ba90583eb76a01ee5e7a085913e6a0c413dbd7ec19196eda868a2d4691449f313d323ad1a55f30f61822a17f561c4097abd4640ac07aa724a9911162fcb045140c21a2308431dfc83fa102a2d1a13ce5d09961932f3ac70599eaae5d291386945897ad3320ee904a695778a5ffd21d4441824755407ea9bfa8d54ee1d8eacd707dc196f1c538e0ef464fbe5096753823d9c2f4ab09fe210753e02979bd0bad201390514e640730e5a7a998dae14186198cc76086608be2990c26654a94281c8fc222c193b359302f9218ad7f173d297cf2978fdc8014cfe24a0818a082b3ad32557a6b2add13f82b68c764a5f639e82bf4dac8af095bd9f60162387fa6230d840b64729a501e2e2511ebc00610e55b699ce627eace0f8da492e0dd3b86f473fd1e97b4a89585a5065681845ad2ba9a277f9711096a03b6682e057c1d5c620b24a33c86a5402dfb7323402ed81ed74950a84607985ca43ddaee05a46bd57d4d92478e18e2e53edf34de01d74c1259046bc12a2e8a2f625b90cdc3dbe4f8682001b2c2164eecd0f0c02749c0a757a011c2cffca00c8fcd016ba1370e64d9bd9fc60c9b219f622e5fc70bf46d794785e2fff333a7b014a9df3343b386affe83c1ef0db22f2d990eee036ccd49a90ac4ce87b9a897db42f77ee24a3718e728f36380f40548c0b7930ee0f5bdc06f927a8388187801ad81a894fcbb348532a22929c92a43eb42e523d00e2d52fe64a34f6a0cdf303656248084bfb88cd838256c4b8e7b8160b4bb347c36ad0f8385630f547de1414445421c505b48d4ea82273e7881c6edde94f6a6d4e90c883e2fa5c8230cf6ed07b039d24886ccccb4ccdbe35300fb44056a276397d50da1d5d9f0803553a63d5bc27824418da46aaa03a30afdc2b561e3c32efaf434905453121d45208c31ab2fb4087361caf7c79b8ec71de81e43b2fa581cbe6ef046f312b57047dd3f2a26c9aff05a971c991d842d2770b2f8c39f91043127b30092ab779a06a2e446f01dc210c714fd72a6f85408f1900e5e224c3f93fdc603f1ede5ff02cf9b0f314e6d3520bf8cf90f7ffd9bc7bc52bbfdea6a2a05c7e0ec425292035ac37ec11fa7747286e56859cb6bf02c81d6bd027db6d2433f9c0050a855a02e3d15ee35b83c7be37e571ffc2dc5e0c7b5b10a8bf2dc146f8fbd03a58ebb46f4804b9d6875b3af32484fa83e9d2daea382de3a6cd0cab45dcf018bacae65df06b25741b3c4933458195c0d401762921e4da690680c54de81e1bacc5c8417dd042d0dab597cf0a4b9dbb2c96fbbf80fcd59a9e158c5c083a86fdc2fe98e9a3266ee210a2e4aec2d0dccd67671198e9dfa56c942af118bffab102414a4bf1e55b9c578034cf661a079c70f4e8ca9c8047dbba20f2848987efae3b16c581bba6f3e73b5933ead3aa5f3463b08cab316277a3ea9573539aa357c7fe01c78980b7740bf23b98ce3a8dc4599864e760b33afccadcbd5b6f2acac20eb7b32dddb789f988ff4df588b68f79b177f0e806d09f648cd5028d6d76132ca5a885dde2f0a0c2efe6a634aec4b719fc1f6a3ae87e7649f1bbb98953bd7a0d552449ce22453673407fa8150591242311be9b9b4eb760c9fc2b286c00745b8c7597663e256bb3ee8177dbdc74a730c11bef856100c4226f28b5b0fceca7dc54422a416714d110a33038e5260ebd419de472d6a5b67ed9c391b23f0eda8d0e0e13c7c2853f8ad7be74e60b42cad5341048b7ce81463825221a484799850219533bc51875ddf47b4ca40d1ad12c8178032e66d4e36d40a698fcd8c3fd77b989e1904d78ece82c698671aec10050af3b7c70b9a90401f88bdf88c4a0597e5bb3350e9bd1bfe710d471a578a0cc25b9690c753d2a6b4c82f27ba56bfd27903c0c6e166d6e59733a7cb28d88985b4bc5286e81aadeb868f5077a7570862b9e5ae97127c0072e1c0cebe74a8150ab20682c8be6891675b7794ebe246e529075b204e4831ac836492f87d77061b989554e26afa26625ff930aae0749661ffe6da9beea606804dea0c0d674661ad46817105e03b9159d7a6060060b8ccab806f4877f8b3b2e64a5ebae89d66619accaf17e75d316654bf5bb19cb4df16d1112deb430fa0a1273bf84780bd64d0545650acf062fc76398f8ae3bc7aa98885b6033e6c6e662e49fa635a44c6a3ba37a29b4680f809814bc0fcdd0411a991e2e8b6d7cfdd05e7ea7f61128615544ecca3b7070796906da74a88d08e2fe0fdf6dbf4903918d355a6f1b1de434826a57faf2a106dfb90c193cf29889b4d13e91165325a0323df97be225f24f8cba86e0a9a42b2c2241fd53bcc1b2ece396b63bcd173f9d65e1a006393d69b9bff59aef6988441d95e75da2e475db7aad37a3cc7358877d8d8e1a0c5277f0f9e9dce3420e6d845312a55868bfcb1a325fd8ddb2ad9bd84b193705a998052b2c5a15d87d9a4e44a9c896be2c411d54f8084e04bf54851dd9fb75b2b00d3354577c8ba6abd7bd7e0af30db8c53aa9a6e9dd57c5f4fc350da8c85779e807f74cf6d0da5f5e59c21871c950560e2140fdf0981352e9e90e7a583ab001e8c778d6a27fb72541e0ee09b1eed23a25955ee7babb012de53d520152d9e26035ba940bd8e6d49584c776410581ba25e974d99908fc7dbad144446e6802e4da6dc7e262f850e8b1fb8f2095c8a21b94662b030da423c0a71954357a4478ae0be217666983b71943cf88786ac8140eaff5c5aad4506c4ba2578dfd963d40f59bfb2559bfb67a3acf8df8a6b8107673590112b4363232d5c9f6d9e285c84c3403fd1626504d482f389e611d288499ca2b507ddd7e4b53e8d605af32240aafdc5596ef47a032bd0b0b81a44f43e3c55e5eb239435a4add80f69b2ba62c94052b5757db5871d0ec21afb25b8af069451896ff0bacaf190639592c922e7633b89d95baf5edf43a8dd8420d1a83b52e1cd7396a4d5911ceb46e2d6c9110228fa1c8ec5fa37b4800605ae46042b0d64ba1768f4bc575d42048e88388cd3a41d25db6d0138a1525125e2c2104ac184e408c4d6684d50bd76c0d94738e3431acd84dd4ee23b03b498c2868d0f48dbbeff41a465348aaeaee8d9fec8d15c5c4978ef4e0e9e844f5340f3e6e51d3611d6c06feb3c58bd23580596c05287dc55a97542ea49f399b4b46ce7901afc72b5a75238dbb76e4e3c949d22e57d9d1b9aecada9ca3cd45a2bc5ce0839217f75c9eb6e2cce0303998c1248f74a56da482f5f0c83b7c843e40d22525eff1f91e89dd83104fa7106eab29711ee9362bfe3016423b284073fe8240a48754685fc9f236d7e629d240c7dc2809cf1f93d6568c81bdff14737abe50c2c5520c4f1ae0fcfd551251b8c83fd174ea32fa6d3000055629bf282a50332adf493dbb5b9c27ec2f6c8b511098e104605dda13916f2fdd0052367b9552496c84e8c16e3e80c5040e50795e74cce212454ed77ae72f2b3f415fc986d9453b71088f37f3c5f5b5d8a8e09715b3c17690e2ff764007aae5c448745daba094fdb026bfd886f4201c377fb1f537e0e6eff0fc05dc3e90d88d54dc46b5776b3113ae155afa6ccad3e1ae70ec94acaed9d56ae754972d98c1d991650789b1eb53c738350a1fd703eee8598edeae163998e7f0a1a0ee7264e9cc211ffa84b7d432850f650107dc0f82a79add6c3bdae9ff15a0841cd1a3f0bc662c7098c02f600b28b0eab2d49dc8a0a62aa33f5c461ad20de60d6174435ad1f68129741f2089f8fda9e16e9c83db7891d01f7939392ee0bbb84cc79255bc35cd67321db060d491c173a484a3799e45e747cc574c8b77ef43c3b36daa331bb7e66e3361ca7515b5197041b51466a9fcca91da1772e9b0ef666ea4ca5db290c16aaf7f89224f1355f152be8dc74bd3b39e357280537e95d46c7898b03a5ac58a68ce250b8a11978e0e2af23b964840cb451ce465a2c5937532dc0849dc7fd3045bf5bebda72ae6adfd49192c3f4ffc226a8c07fc304f0d9f82723280cafb478dfef2e2c44398be84c7251dc93aafa5081fd8ab2737deca65192005fb82beb9135ea747124979644638f0fd9a5a5671331ffda8d6d5c91fa33d1e1b68d9c3d57a600fa69f892005adfeded699b598accf5c752d37129422a39557cb8e0fe9a0076927ae408893c3c1e9a86382ba0049f08af8342f1921488a1e23fcf45743acd705ca3d86ddc1057ba8309d2beeb9deb4dd92b6e52845a92fdde348f03ef8aec5dc402127c6046c339e464af788723eea6c9efbb033a95ceeff8a2ce52f52e762bd5858af35abeb2e81821c9d1fe12739d27f4b3d5b49bd095e8fb0d78ef1db44b32ac3fad7b1c1e7a21dc091ca5e459c406db7422ed5e0bfda96eaff7bf09a262ed55828d1380f6c0519933ba796a1d4aad02a2e347a8fa2e920238d10cb1a2990b4816b14d29c2386d58ac2680caeabe030380094fe12aee8f191f16197989b68141c08c5cc7c370fe531208bc94c2be6a00b2603f70935aa1600bad21b0c3fbd48c9b4c3305a0187a5afdeeb7d20ee721a89d7f484cf9c414f4543e36874d3930470ddc5e127e7623017a35970b0750e28f0292396c278e1d903b822382e6e0e002ea17941436b8d567f0b21dd2fc6954e15648f9eb15d2aab68e074aa6dc63056356c005fee4b0183bddb77b5e301ac513195238bde019f7bb8a3ff5125aa0440c13a4c9001b11a8d3b2498486430b186e89d776e35022c7480d954277670e105c7174e08803a8ea58ef0d4c92bfade65b777e31b639ce0c84ee0e9199b9fa9729929e9705195320da24a2ad920bec03425acdb43ff6c3e3f45c4a5158706b9769e2539289b5e2cd4e48d6a24ba53762ac5f81ee8a9144f36a0f02904312bc15276d87615a262adaa04b37a13cff2d596213e10766c94aa831a7dd4efe596d5e4798b252661894c14900affb55d1daa845b4c137e8a483f1f998fa895390cd6cca76ca2c74e813b2f2174ef3fab5a4e47d223119696e8e412ce39fb79a6228e855a6f1bbcc1421105856cc8daddbb67978bc314f1c242c5b918afc452f7a6c255171ab70717e1ea0a85bd8ff6b628d370fc8c30b8374211edab7cb66c50ed826af644cb63180ef6e25d466c3163092198d4ae6cda31ecca72b12bacf94824211e0aef0be2895696766242acb361c5954024f125617357a4be428f06cff169c52d997fd77dea139d335d674b840863675ef8a054c43a180ca450ffc0d9c70fce3c5274add7192a46543466762c435bfee34dbfa7165d5f1b5988ebb39fd0d50d5681ed52f3efbcc696d3190f52695cda900528a2b8984db09c348fe15a47ac4c246c059dfd60acbb451df947056de20cc849a61520f5e44121c26bf5c2cfbecdb584085b35c3d02741058c295ac5e5ca789345091408cf2cb932bf54bc70572f6dfcd25399ec9775c3c6056845a1564443927d0c3adf87d39b9e2cab291e916df7672d22253a4ae34f4af6225988da017809c98f0ded72c731996002c429bd747f4009567c31a6738814e0f7ac54ccc7b1053d97446e62e9fe6d70da4b28715448322f0198b70901d7a4501150eb6fde39c50117541c0ed44418069cb374a57f897c574ab2ccf8e25fd76f27ab03f336cef42409c9d09037062b5001a2ab90bc9c11004bb40f8892e2ab433099c5fd98bedaec6ba60ab2a46afa66e6521b64f3d60d9abe19ec6f4f23009b3da310e110c0d4ff3547338040c445ada1963182ca1c40d260bc9d267f0eef04c60ba462174f0cd76410f8deee79a6ec05565bcf6ee4f26db01944d6b4d8c7acd8bf8043a3f8b3a988b2d6ff4c58fb6049aa5dea872fa2194b50651707332d7a8becacdc34d658f2433117b3575ef0a5daf4ea672532595dad0f24bde8625b7cc541c1d24c7e405bf41f923d33cff94a079b744b4d3f7432a922e38d148d6ad2acba6dd83e13393c974b10051577335a208280fa91bb25b17c319bacbceac87f683244adf25745e3c019079dffee58c8757ab8b3c2baee55632357be3f35ce27c3217207d21cc87a3055e8b020a918c5fa022e273415cf1619085547a36505de091f75492417653afff8298881eb41d78952907e359a91429053dff9ec26e5e5e379d2b04c849c159594711f13a6d0aa3422c4f13dfa74ced44cfc5a29561d8820546188d62968947c16807f426f3b65030e077264ab8270017742edf30ecc2981864e933b12466ef1a5a5f0e81f3eabff4227b62a4dac76549b1e58859ee124ac4737721501af323c6c2beb7f47778c0e1ce18d5a205a8eae214c8f803c95a4c26e49c725cbbd334f6b289498f64f7207a7722e44ffef3d996286420666fded94b2be52e5fb66c28989689a519672fdef99c64b4a62d43d995f0f4b0b2454a381acaf0bd84be006c5c0c735d8ed115c19d8f52f37056656655b1cedd34569e43c83ea4eb916ccc402cf52e82fcf9402f6aebd900dec9d6fd50d0eabb9b008237d5c294838d69005bafac8b04285222d1cc99033accbcd4d2bd20604e4168682a7083be0b7395e58db8a4ac925e5ab2bd4031b01ae508e078bde5760db4ae40965fccc6cdedae0b0aef19d669e062bf324dc1cd765710026ae02a4e80a762255a2600d0594d43d028a5d41c42ebd51eeb3ccecd828a9a1cd5dee69da11e4505fb9767b5cdebf405bdad229f1f64dc5941ba8339eaa5393c3f8d3605d9266554bc29db51aceeea825f7eaae273c728d8c2481b051f80f2b1ea9216ccab3164e58540473978ae83b7af95e90da76b1ab4cd3b5fe8da89fb96bdf37485ee181735411d424720398aa6a1db14a984868585e150b440cfd7f9f7c69c2fdaf70b527b8d9eab9b76aae9221b75e3c77f494ebb9ce6d91cecdd670dd2bb9a546b8b518aef113eeb305b73d9d2b53cdbd51e5968f73d562b963cfb90feb5ced146e5625f7b686ab34c2ad8be18e3f703daf735b92b91955aefb7a6ec928b71ecf35f29cfbb4c26d277265d6706f6ab8e510b28e1bd0b2d77498c833abbc915fd2f52ec8dccbc6d920d4abd1208fe45ce0b250b9b3e95cbbf55cb238771d8a2bf639d7a1c6dd42e662ade7da68b8cb225cfa11aeb873ee87329765928b4dcf7da3e5928f7369e0b9c74eb8ce8b5c5614ee0c0dd7be864b2ee0ae87e78a3ee692c375f30ac2a3815afe9a0d13dc8fe82e6d4d1569bd2b24f7b1e33728f2566cca3bb9d7b86cc8dc190aae6d2d975ccc5d07cf157fce752a71b7a17331ebb8366aee32712e6d0c57ec84fb59c1659fcec55073df50b9e4c7b93458eeb173aec3752e1b853b4bc9b55dc3258970d761b8e21fb8ceb8723fe5c075bc03d70917ee678e5ca7bb721d70e17ec489ebb41bd72177eee75cb88e76e33a73e47ecc99eb7807ae134edc8f38b84e77e63ae6c2fd9c0bd7c96eae43aedc4f39709decc475c4c5fd8c23d7f92a978dce9da0c17157a468dc55a420f775cbc11d38b4e61e6702dcb73b2f77248e9fd38ebbf16e9709fe0e24d2d38b138323af37a3e6a250f20ad4c10d1db8e7ceb386b9e74d0737eee896bbcf1be3def7badcb8833bee7c66807bdeeae0868edcb9fb9971eef9a69f1b3a70c79de786b8e79b4e6edcd1057775ca955ce65e19e7d6e3b9c68fb84fd6b9ad34ae67bed3eaca900c285a7d32bb80f40766e40460d041a37062643f43c9e30eac55394fabc488ac2e075cbd0374f89fc44d96ae45948b6baf00335e7ddbaf7e0a91e88ed90af046e27ac6c681c0755d964b34862b76763fa85d96691783eabed1bba4c32e0dd23d76769d2f5d56a43b83eedad7bb2461770dd2157fca752a72b7a25dac75d746e92e8bbbf4b1ae181d66ff0e68e680accec6aa7da679c0d733a5eebeb2cf6b47feefae8777e946bbf591aebab85b4fd4ad17cf551fc3ad17e9d645baea63dd3a51b76edc553fead61377eb225df5f16ebd58b73eeaaa1377eb8bbbf5e2aeba086e7d71dcfab8ab7ed4ad2beed689baea63dd3ab16e7db4ab2eead61375eb475df5e26e9d58b72ede5517ebd68be6d6c771d58bba7522ddba78575da45b2fd6ad8bbaeac6ddfaa26ebdb8ab2ed2ad17efd6c7baea23b37a750ebaeaba779672edbf73b3b9bb59efae2c5737dbad9b75ebcace55d63f2bcd6eda02b03f9e70a7acff780a1700cae76acb8abb9b9883b86331f6f76556d9ed93fc3bba6446f7322a27250e7c4d555cde4dacfb96dcb63454249da7b8550e5a9e07e1968763bcd423eb70fded1ac9f51432e5799b988b936d48e7fee8cc022ab1d45dc0825c4a6931c7312ffb5327a2d1f779d8266d7b76898486274b65c671eee78f39d3e875fe741b97818a3f033c7b780c6b834027e702cac8775e14c7008e20c7243e4388b2434f0489762df0f239beb30d23241e41a731e16267a0122c8a55d327e912595f0dbe95d22b92eca805f2ac82086590fa604ed2343459ffa3a406a552a2c3bd6d7566401112ad583716b31d0bb980cc86c517f288eed25555ec23907f9bc5a126bf14fa1184a75191e52ebb065ad6c3bc683d45c73649dda35b34668eabeaaeef6122dd6ded87b95404e01f931d389a7501b607b8ddfaa0311dc9819aa210ea0361e95b7fd701c1e02d5f802854c72d004377f424e12b55bb2a376a737dec44a98329af9e9f37ffe48cd1223610fc85e6b06898c25018d1deb4db9889ecd2858d4efc1f853070482af85bd9302d4d14f67c766881ac1cf713de6f713c717b7db0da045ed98f8721124e73e72b5dc395683810e578e946c81f83f0f31aa28007c2c40e35b41c9b828719d6ebcfd42d0a266bfbb5123f799b6875e13c9c5808032874a00302b802e0a30dc3fe95c7229514f5fa60fcbb2760c1a44fbb803092635728db199815b5d6c5402a7c6393077134b628501e24462ddfe0402dd3882917568a5cfe64bbbb92556ebec3874d6ad2d8cfe2d3c3a4cfe06b900837d40ab480d6571dee47ede586ec9822c81a222cdb994541b38b1fcac51d67465ecb2e7d340c31ab9d67146b127d010161b8cafcf1fa59d75804d3b2d7afcf85d6f5f351ef277d61e8ba2dbfa8247af355cb1a8e0f81894438140755ab222c3d7a1bb8215a3e897c41d8add9c99249a1d8196725d944ee2282afc698d892f7e8f7423e61029a533e467295673a8c7c11db0d79eeb4070f04004fa32d590cb8d77dccd9c8b0cd233ab6f0ec08ef4213785533da3191cea2df1239a270fe6a8e5ada0f51a61f836492936facb589d7d0f75946f2d976ab8ae1018d8091f3ba9a0453ee74e7e0c5399be1709c401e26a13eb68f5ca6032e5a534978c3926a4455d2384626dc7f4465222d29a39e8a88b6fe74c7870dfed349e766bdcfe5f1b2b66549572d51db39557594694a26f5f40271a5391e049d816a3d8284aaf6e650c1a13aca4e1c4777c98cc28c958b300b10004adf2357faf1c895ea1ef260a7b4cc2cf8739e909a15fffed9ccc93a6bd6fcf9e7c273d60b71093d94a53611a5d5d705cacaf988ce3f3cfade31fa7478b8c7a9d0ba8462678666a8c03dbca3e48bcad860b6358ee1c6a7662fbfdef192bc1337916b858c26c0337a22353d4f9233ae40b32b61bf84e58c513097ceeb619bc36feb059adca577fa7dd9de1ed0f9b40e318eda88697667c423a2273f479d0bcc50d731323d6c1c5151209207df97c42940572eb946caded622385fe4c7846891ce109fd95a1fec2b4de8ac9669a0c0db7d0c6c6e70821a2919f59b0bfe7ff5ebc8a3c541140014eeb2ee547279252a1744d92e3209d88c82d1c8048c7344d4eada0f81c07bd3381ea08fb9c9f4133b2411562f040e898cf642a099f02a0d2f2f299eab67dc88af2a2d9977ac43038c09f20c1989ed5f0890519487ce0a7c1a886f7999b3cbeb130861bed858866e2c5f31ece0595323164f02e0676516005c501d0f263d8376d2d51fe25420da5450d1aada8d7046da027ad0e5fa06d5b112bd88e6896351a92b86fadba3c84142b5d5aa3bf294900403919f0884ec9618671deba8ed7f9b23c30d7006039463f34b6cc1a01d9e3ea812bd8585540888324110f2b4d00ca2215de44dbadf6d1e8e2d8066759b572301fcc0b28b9309404829b2de02478bf597726c9c546b4110c23e73c7fbca9f420c613f81a187025a7e44804cec10c90c0c674301e4aeda6f5278e049e2e491a0d630f86bd99e3d46f35d59769d88696b0b4a968e43c86dc2c74cf022b839111ca503235dde88ceeb80446a2ed691f14ae40361854eaec05ac05df03ac15aba62270c699b6c6166428c24c6b93c9ec1be6f5eb058377e9ed6f9a8cac6834575ddb347d29f86da4f7d8db63e2a00a0a4e4a030db65a4e6c8e10f46f8096b4e4d00595c7892c8e2f33420bafac46949eea2bee789248be7960c438196724474d0bbc10189e164014766c1ebdb94e314055d29b8add437dacec1313c543acd76563db81fa176c9073efb338eea9dce5b572d41666c235995d815e5185ba41d8a0c48403b449c202a3b60b241d8fff46937fe4b983cc2d8e8dff5b816d577a44e9bfd6168028d1041e1a4c5b952dd3cf35fe3295fbebe634542d9c7ef00fd81cf4c88cafdfc9060052e69330bebf42a049aba8be8baa31bdf7c7ecc8b503c31c787e1581c8d598da6c89c705ffc1c222ed6aa8d57dcb7a290effadf900ff31de2c0fbb676895afa90f70258d0a71ec73059ffb5600249f98780373248ec27fa641cb14354041087718e7078576b11caa67036db36e53f846127a93187621ba24d4d61df20c202b14ff7c466f7500e11e4beb126411ad184e3835b930fc3926341ab95e80ed81df1610aa3e7057d467fb0d52806e3fee0ef9425bb0943794e6cd03bdc6a5056e8145af734d3927bb82e095c01fe1a0c04f6716c95caf647c75e84d9d2430885900184c396e48fcd9e48fdc8e00caa1248ca2b74d6bc29308a17e186b0c5bfc7d4b66aea236d217cbeea07557a4c954af8740f958a917c7ff860500040e64b8c0b62e35ff88bdbce45eb4839f89d4da331d015de665882f0ac6f6ee08d19776e99292191dc81cc629522939f6f2b9287d50076bb5d9a0e98e7ae9b135a0b9c6ac563537917716ac193b93a59241736aa79d33311447a87d360615b828681acaedcda313b45190c70151336b72eb1cfc265fe1d2594292ac40a597fefa52375de516e192c62e2684c4b34b7b5dbe610083db3d0edb6f553274a54c6a961036bb544c0542963f91caf1270f90d952692293e50a74dba8a83b461ee71565ed9c88115c7ccac2bac77a3b0e2c433ff7782c368b7bd986fb227e486322527243f286a4f07fe59712178c11584bec2258a312de4b2664afa1f24acdc5802b9a818c0b52fd273b7ee23e48d7de339c26a333d63703b29c3259d39b903a1bc44613218fe0529a48d14df250de03bf5ca2d11c6004e73ce0bdd0f4c912a87b99261c0605223112dc0b25fdb8364bd2ed34a2d811171ab75049cb83735106b15f46d2a8721884fd3f325828e424fd4af106d0a06ea6b2fe6401f9d02cf4fd49c95454b5a3db6cfb124270c6204084a50a61ec573af88c59e729ecf22664d030463157826dd8c28cabf32faeda8dca59d91a51dfb2e079ba0052835af5455c44be79b089c8547b55477566e4f5b060bd08ada47e5115bfda219880255e71040af662613ad542c26089b555e506b5233b3c7715421a48f8be85131b16edae47f65332310eb610705d085656d474fb04d8c30adc650332f72831e1d7efead11db5af7da7f17a81ad842f8235b6d0d8e229238942a4d59e6353e48cbfb7b2bda8441e4a3dbed701462e5a23006d25e29f03f902f5637c39465a676151b3639d11543ad6fd4f4e777404771404691acfef1e7a86420f25151afb8f136aec79f603e61154d903557a73ea403db29cbf00ccad6910e7dce5d2940012604fd02c06fd8ca3818f3ff60de0b3931d0f63ffd6f64ec873bb9a2d397836092ec94659414530c16e45e59c639b81ee6d1bfd28719b71302eacab1612c01e0befb5dd82276251e757c78ba5335ba9a5c312fa59446f46102d29deb337bd8871b7d227153706ee8078d2aed29be6c3af59b2abaa5e69490366769caa94bd8949e0cad9e7e8e8372f8dc84d4ee8d0501e8d6d7f786f9c4f4d887e6ee126617b44c3da5221cdf06bd198662153c165623142c21da84b33be1ed56c8e5453fc1d4405443348ded5560ab81629b5a91d9f7942fa1394cab3c5aeb6daf7bf0629831643e089b2ae303028e00e6f99874ab9c0b15296c770e354ed06062a9edc6548924aef9f4e372353aa6cb452abb627ed7c0b9b38a5fc5249ab0d65279ca9093548b43e90e3582b0fa438affce7d0f9425e55f04e7459e357ce13b0c5a86231d575df13051474c77f2321ec968e0f13295fc3b1466680acc161428199faa9b686238a89b173695baa0c4903bdb95a0d4e75f8aa91ba9988ea28b35ffeb828cf62d0e540e838936799828be6d82c1ddaa667679324d2d023825d85c7a5970ab9d8f554588f07ed252216a50650923294f19e34073304185e80dd47e6b20a46f422cd5fe5db19f49267c80d61ae5d6408e19606dc0d2c074741359ef1c8a58aed5830213eb68f4cc74249e3176104347aa6a26e24f88df50c2fd6e3a9bed2e6d951e4595482117152e8d8d5baac5763e29fefe3854059158354944eb4cf69849dd9361fbd6ffb44961a9dba68b9b43d2ff5d83548e78f108fbc9490bf321c0f82428180ddd87a5677f52e7352f5106c63252c6752669b831fcc6aca9e09f206cf581d2ddfe919e3edf3f821f5ad8d2a95e5e61901e2426dfd0be66aea15cc66e664c40c2d5d2f1140d4e536977bf9b14da255be28f1fdfa271fd8c8a120d3f584b811b5e31dd288f143e99390df0e93586a6b8506f963cf80c65e6505cfc9f641c73978497965ade8cd4ae090adab87873d60820a2370ebee60258673a42e983973617206111c2fd160a5dd3c181efc6b1924cf0b80f6ec18ca7260ebdac5c1cc13814a7982bc7dcea17ff94f6361250ec1b34127d4a27288d402805864e1a81cb6a1f97d108d4f20ccb53a3b2401dbc68a4dd213a70b9cade1e7584e55cfebd014839af1ec8fd78016e2c369799b9e1ae5276e8d9a28fa6d4b85d48e496613202416d681111d6851f847089616584711b16ff0aee35ea05581c2211bc7e6a084057d31d85ed911abeeffe8b97496a3c339405a60ae0fac7c9e7377228c3de62a43874182330ac31829b2c95bd97807de1f9be9546f81cc30e39b670b9e081fe176e18c3b027b802f30acfe20386ca6b0027e3964340bdb521b5b2b39f65af6ca236293e60e95921815d572af25a7c5526e48cf1b2770bd6be714bd50446c16f421e5b02abe41b953baaa13156828ed74a035c99159abe6680f2d080c1b310dc55d97106267cec57f8c81c4e0309a221bef785af42836197827682710585b2c85e28be38ce8509fb597b4997049aa7a0064909fa1bb8f4b7c1024c40ad344badb1bfa6c2e42e840a618a442a0180dcbaaab63e49f001301590c921bb7df448200c90af1972e6d5cf8229340cc2d3ea22746ecc80684fa8116a6e0238b287467b23bcd0cf498a9e33aea60a90b381703cc12f0b9658a5c8dac84cb9c3063baf6dc61f56beebbf5879aedc629d75cc5e8f5d659e64919eab78607debf878293f59e7d70021a761d979b5080299a06e48340b562afebe27452ad6851082f3d8c3c1697581df982c2aa20ea71569701dfc6fdc07599c192be8e0503939081d75ac0e64159a9a3b203f676c4b43fa9ee685a434acccfd20d4d355745d98a50c17d86a683b5bcdcafdf40afcd2e8d408a67cb3906a28b395031b6d79509400f549fde54b52077066a0ce86198e8a906c11dfd624a994ec6d0f39853a1aceaad569b265a73a109a8659a53ad4bf82d5b173604e3d9c1595ad18f7f3873abec579c3a6ee0350ca616ae436ffc20d0273a5e38a1ca9352fd10a87ade88f4e7d54e47068c37ebd8da0b30c94e85146c394ed2dca0348e5563119cbf4782135079092b51c046d58a5a0aee3e2522c88a2a958d282c9abd84d2db814d3005098e35286679a0c104b4896367df22a4b131ad26fb93042838fa5323ca8e31bb86ade7f2e2289a9e679dc17714f4f91979d5f90826ffb1861d7990d1e1cc9e4de0b808f27ee1bc34c29c0a0f49d9d16297789977e735c4b94db513174f5945e65147f771f9b6d7135333e91dd8df866c0771b2cc3a75c2948b2f6389d7e7442f2a95574642910bb0f42cf435148be4c0440d2464a0f8130e880b4b1e1c2b93cd09b1daaab771c957d70a587f2b33d151cae2109e078d59e0a1025c355d1c1007ae70e1a25a19ad15356d31682de88015276515f3c934be7422653d653ec9c0e73e5068f3db1c87a1b30c05301601b8cc053fd90e9b4f7000e228259675d4857180b5244e59cd16e162c10b404b09da65a33f88fcd00b00763b1133e28dfe4ba6ef6697a18223cd3614f5d414889f26972d8751fa4d195b242f862a71288b312602bae01b14e1188ccee32009e0967fc1747e31fb590b015e0a940d3718785669a97469c367b0b2cc5c16993d792fd6956b61788f603d43b0245e862f0f6b790e0435eab92bfb0edb0fc9d4fe62f8c614e94f6245223d85dde49d2067ff7e3a48daa893c2fe4b29564a81069515a6cdcc1440fe2741504e11d73f331d68a6f601d4676cb040c5e057efd84ba0f5110706544e90886b960a35838168eed2559560489701c925f291fc6f938144e8161c662150b5c4b546da5ecad90bcc2a7a66dbf956d68ad43e9461674e851f9de5415fd6fff13f1d98c94df6e42c8de72ef7d0f900f051035a18b6ec212b72489647ae907ef0c78d26964b94433dd1edc2fbd06bc2b9e92dd69c983a791911ea474d2e549a483370aee93ee6a4607f74b2b28b8e3a78494ad6e262cca481d0940ee3a22e6601065b4f7edb7a37997b399b0c6dce56e5666d89445bf1accab1b7c4d3bfd6a1315fdeaaeeb3a39b2261cd36874eedec89a6aa61d5316a61dd34ec738536dc471262040d30e0ecea26319c4a62dde83bb5610a4753fa4a01f529087d3b12ce9f570b200e6128d7e40a2cceb74484111d65d0f29a8eb2105cd9f5a41b044c35deff4c93148d676b25839190198e7cebcab9b7e897c445d701cb7baf1e917d71cc7753a13d6e75638ab9b9593d5cdeaa6637476a54df4c3825ca2ad703a96ebcfca4989b6a202f74bb4faf3d331f97e579b30dd4f844d98aea7eba94e2842d733b39835ce1a21f500ec9ac807e7b923f28932fa2d0230af4436374e348124043f3c52701c87038a17614c39ee492fff3a8c577cc4d44afc383fa3cbd0a9006c70b682dc99fcc25126c12e05609e2167f0744f123c81093cf884e31398a033eda4f50b07a6a62b57a55fb2154434d30ad20f3d746742efd3c844774682c0860c3632295a4244db696411462e8dbc00a34ae67971442de5b07ca56236e900f64377b97dffac8105739a56f2d6d629b507ca54e10f07c5750b2bc0aabac9e22853591e3c35d5ad37ac374c01e9d65a5de22cb10b2b04238b75b108c3ccdb4d0faa851ef1f3cafc66ce61eee4d8d38170e522a7f44bfef61e6d554b4b476bd93a5aec6997d369f5ffabd6edbd1904cecf3380f32d1ef4f595de567dc474bed26392aa5a995959379df660ddd54dffabfd67fc70dc5aebf2d6e9fdf89daeec71b192a705fe3bf8b62dd0f3aacd33b87af42bffbdf8b1a875695acfb2a68dc5bae0888efac53a0bbb9cdaafaebab55f2c972b33bf72d6fbf3b1ba2f77f9cb690f89576eb24cf0edcbabbd92c62b2b2c971f0e1837d509cba2e653f35fb9c9f4d6fce753f3f39f95fb90487dd6d3bbd79b5ddbad383358c6747ad32b0ffbe9f29b7caccebae9d5e5f2589df5d565dd68bab599f5971b714ac274eb596eb22a559ec1a6cbcfc7bc2dd6e757afa7b6c5bacb29ebf260dddece607ad635b15e32519be95597d40390deb33c7e3e4e375d99d35757a6759355d2d8f46933bd4a1a9f2e6dfde5f4ebb172d3e7c7a3754d37c779b3eba7ff4cfdf3d364aab3ae26eba6d7cfd369aa67ad6ea6b3ce9b39716efaa4371567eaa8b7e2542793759494687ab5a8f9e140dd73b9e7624ff6f52ef677b9fc7ca8debaab5b9bdaacbde0888efa65734c6cba8b3ddde5bfb55fd63e7e3e5417f597ffc67eb9dc883a0b75330d9e279b5b2f7d65ef5336cf60d6634c2311aa8f5f75b9b5372b697bd3515fadec51a695b358aff6a7bbd85cf112bc5aa9543753ecf2ffbab83c66ba58d42d0f3fadbeba50486cba355d997ad6ca59f52c1a5c75486c33abde54ed4dd6e52b9b67f0ead6f270b9c9a32393655d556d5cd9dcfae82a9ba5c0acc78f87e9e697b7ae92c6acc77ebd641acc7a4c9bacc4281b71cc64d99553fb7d6625f8e53cd8bc04bffcda3cc22f2fd93c835f3e1830ae929ebf5048bcb272654f937ec9b6e959bf660daea65f58186186238e03689a8f3d92a75fb2070420fd14d9d32f39697000fbdc43ef0b09bd3b749988ee6bc288003ebf262d577af35ff87404b7def4ab49a667b93cb358679df5d9d1fac5baf92a168be5f2d53d97d55d56b706383b9b7ec97ad331fb97cb0f91ef5a1e551c6d07463269f4f28592f47433c8cdeeac5fb2c6bc5c4dc7d984e94b934dc3eaa58db53609ad02e69e51f96ed26bc0f2ed24da88b4e5561aa77c00b0d549c3e4415b6f7200bedecc21b3a3c51e2f663877345c8a403b5438118176707ca809e019d470c37a9c2b97d0f4ca7afc70c4f4d40298b919379b301b4dd2b200e67a63aa74d61944988e1661f2311a841694000b2c536082083369b16301960fad00ac308830dc65b501963bc040c0dc7f730d5d75edbd71c2441c14d557f5e6aaa0c200cbd9d96092207736587e76b4d05228dcaca37426790213aae0f80431cc56383e81093eb8de441b9c07a20c79d904a69f338f703db548547852d6b66d342b81b81957c345e1a4704d38271c8dc3e1a070567036126803da6813a63ae9969677730a38594827ce03d266d2fa358b32e42bad4e6cb09cd23001c0893513ccb0e482acc0f23a3c4e70ae3b5892804c00044c2717d4b1587f815b0d388f308e9e451bdd78366998daa4617284bf6bba0704584b77b8c31dea45a2c2d502aa16af14d3a9cf9be56c6646f4d0b9104859bd890690920be06643e38258979fb4060d6093a6351b40b05aeb52a1d45b6b7b56bb8a33617f06f16a757b7bd62eb66baacbed9ad2cdf53783aa9b55f4a20f07a5d1575abf6674f59876b19587e672e9729b566fcfbaa65fb26754661b6db3196501ec0301d2879a00beea4f256dc2240e5a5f37d39d40c509ecd994acb3ce7a0fe87aee197d79bd8936e863f5abcbd72a8368c35ebeda20de50d9f8b3770fcf1e7208cb7089f1cbd178a63ceef1538249074217418d987b01a22e4beb9eee844d18fd7078b7f64b85e777977db17994446eb43a25d72aea1bb07c67bf5f9ba94d46a2c2f3bbf4c6f4cc719d7c147900a436d4a6a98de8d5541ba6de4c9844a2c2f555e2d119c088e7ada6cbcc0f814522d14d364b6c6229e9b0e582b82aa13b80adb7e64f079f6bcbe5a74db4f14b57b4f1629f3d15c41bd6e5990506f186cbe85ecb7ea7d6dec5e5ad24a6532715a70f205f4d4a2aae3dc0f24922ee4f47e3bf65ef7a71a15ccbb6b4de9d22d1ba4f42a1191a9908426f59d7342dda505da6a20dd4ead92341bcb1ba643db3b40ae20dd64b1b2d73332ce557f3abb3e8596d5ba67a4c53c1a4b36cdd41ec417e65ab0d620ff22a5b716ca5c2562851863cb5d3c62863058f9e30b3920e7f48ccfb247c7dfc84f4c3cb847bdf19d14510ba394f0c814d974216d331cd62330bcef5c6c3b9de6009da19a9dee410e7491b02cfcf481977cf9b9ff64907424023eb53fb247437d07746ca6644c024f4216434b2cef124f4799f7480097726b2f8fd68bb81be332de3decd249e7750d2e179bb59a80e5c105785d5e1dcd1b0e42e93ed76a02f0229ebdb9a8fb2ee7000e6d8b3e3c784c9783361b8a00893974011268fcf00069cb9a089b3042af1845a7a10c8f1228c5cb2c1bdbda900e7b75d35614d87c805772f0a7793509cbd28360e60e80b491a672f8abc2171abb260bd28ede9e8d83017044e2f4a9745b34212a815242465a1db12d1c8a8c8d6a65e80ef78265084f56bb8d7e0039c3b1ea0ed9e159404a0a7e3453103a8e2e200be6423b330bbbb95cc1cf34fc83bcc2a746ea60d8e07f299339f1ea09fa06e89b5f8136b5c57b91a0af578a34dcad117a58c2452a90482a615a09f2029bbe7a474e3644f4abb5048d4d5504824f2bcd1f7c912f8914a251034adb0d096138aaa42341522d5183c983ed3678b21e7b394f231f3724a4eb66cd9b2a594f16500336d1c79723caf44f20018efa4624a993ab336b39850261513a77f26a5dbc6715da5b5ce96958e368eebba5a43dca8ab35141289bc9048e479a3d1e78d46df472295a2fd6ab03c69462a81b309e8455bb145ad678a4e5bd151aaf414368dd34e7a5625280b2e7a7ebaa865b1239b482a248e8c22ab9036b289a449db3f3da9c41e1d12f3c8ee3929dd64cf49e9c6d18de3baaed690888a44b3a5a8aba19048e4792391371a7d1f8954fa48a512089a565658c2f07442a56c6ec1d2661a589e65068b178e74482c5b4e95d427d186a1ddd272c6b991faca308237050cf104630cac11668643c0d868883611c7c510ad91bef6ab435d285e7433c5b77694de1aaf7eb5119e26bcd8eeb5d95144bf9a5e197776ec903166da1dd18767a7ff63a731c891c18b30320b0e9ef7e208e31f9d69045067eb76fa6504907652e6ec76a49452fa35bb2cf0943af30bf0ad1c1df14c03485fc299b784d3aff9d24dbf66e906a76311aca204d42f6f67c2946ebc281386c526c2e64b37f371b2d8b0d8e0f96e7e9ac18b72c5f5a24419530b3097bc2878bee4a46162e359baa13281a28cf9336151a28cf9c382c3c9c0e606074a149d9d1e9f1fa0a0190de76746b3b989a2b353e3e9f199d16c6e70a000fdf8f4f0d46acc785d05d68e36e6a94dcf4ea53d383b95e2fcec54fa1365a7d2283168a7d218b453e94eb552266daeb31665ecf4fcbce0a13327405066948613c50a29b4894d500d884a152020202ab486d2e88cce78ea84f142052ea8411a707c4bb411e78c34ab6e40b3a075ce19adc5edd29ddaa30f7ae94dbf3a8b7eb5cdf6eecd3d775dd73d7e56eb5a4170fa445853ba43b3a03b348b8ec5532e521c9b283bf1b10b20bd14caa538fd8a31531c4a45bffa51c695999e42b9140a0e8522590066ba9345c7e816b8a90740da8da74f0f4fe705af634b74da84de507182b2a13854c0c435d8c42bb46882fb7416ea7e3a96a9cef4a2a7cf8bc6fa193482b8420b2e701f0c75d3677631a9f404a291d3c26b89214c0c1a707c9d9206d81f0ef9188ee3babb65774b7941a01acc2ebcc604154c2e80de109a7ea169ddeaf6fa5a2fad15a4afb7eb1f4186745dd7e817fd0c4a8b881d47bf00ca5831c77588867e9cc1ae06f7edf42c520f66f4abc66c06a67748bfe865b6d3f8910570b3352c121898ab616734c77d068d1ab4eb90c0c0dc7ffc93d217a63370ed4000d2378e302827bd3078db238c3c79a2d4642dca154ee8c215bef8766a41d0a216e5046d0869e1094290830a07088b1d2a80b05842930fbc4459c21374c25082d28ecd0cc430b2a1839316166d4a27940de70958dc98b030c288078b2b349d5d937772a1ebb818035002f5eb15fba663d149943fd18b46d28265133a92b62d921813c99c375276ef462c2bbd199736349e2bfe41862a1f0c707933921649eb57b4f1a480f459d29a489b7ecdf20c0c3ac3668967dc87771f0e2431b001de7d380cf02031a20f6f8b2406a641e3870fc70ff7a4853169666c7eb8d7b66dac154089bb091060d3ba494d4402cf4e46c90fffe1d600fb07281acb2b6beee8e33e1c3edc3380954efa157fb8011ed3346060d912620965c2e2f3084b168dfb708f46bc0f56dec800a441e331cdb2dda461f112ca84913f1316afba19cc15771c0f5e930031261ffbf1e5838ccd37150d8ba737ab6cbb40bee2dbf60ce22b05f1153f001e1effe241469e3ec6e86100cf8d0b1080e7c63262bc8701bc0001b88c7bb1375923671dbb72d6aff82c0d60b3c406786763a6017eb801ee0562dc74cc071c1a3ef820658c1f62607a7fb821d8aff89839c346cc834d42036073b300c70fc0e68e018e8f6173db00c7cbb0493a5c009b631901a1cb261dbb400ba6b54dec3af984f5c8ba52b4c8cb7b81161cba2daa7ec599aca95649bfe275a25ff14d20e9d871fc901d3e65a83af8990de4850784c50c4040e9ec0305d5e48d08854a951a2f19775e59d6ae839a03789b68009ffb076f1dadab4d18ae1661db375557c3dbc6d5f0f60863bb329e0f0d29249542d28ca49034570a49c38d241a52502388981a33ba8819346a04d1db7629bb6f16490bee445b100dfb70c89037227d9d48da981a528288afefafefbe627cef93ec8f0d7f47f4cb3be2c787a3bb3b9a00e617ee2062ba3bc76d31faf58af116793ab92b50a1127d006b4968820980634d8a0ff6628763b38623783469432955b2e1beb4b192560538a78094bedfd500cc52a7bb81b68f47cf704bb1dc61f2ca260d13e36d8206609fd24b4aa3a451294fa7d49132ee4c29757486d446b7358ab52bded0f70b2a94463a49fdc4c4fd98963a46883079f92a602975a28c199ca10e38c79e2b7c8173ac4d2e807d2918c0185bdb43af13a6b5dd1690eedc8598a0b05282d369ea837022d167eab9d3c83c54a509727abd3339fd19969fde37486aa6f5d46964b902d1c838cbfd7421a2d7cba45ef4d3659213e474ee51e6d55315bdd5af8fb256df1690d3eb859c5a4f9d09cb4f17926ae50a847a7dab1f7a78ceb6fadd55f75a2c2c9646d6627df5d6599e2b50ab9fb2a7148bad41a15910d5bbb705a2baad7e8c3648785b7dfae5f0e9421554e080339bc95a57a95a3432d5e9a29f2e7aae40ab202ccfa291ad52e79e7aae409646964a71402d2152c69d494e10d5538f3226aadb8aaf473d755bf10a41bd1e756766725a3f505722ca8470412e48c30c66509bcd64b496a12ec5ac9e04059c30d58449292618c214a6d005ea7e807b5659201a994808d702226522eedc0970a62c57200c346141135681865027acf5234e98f4a191852c8d2cea20a06647166552f6b233586400e6f8b3528219fb768c724b0118b3d4f1e29c72243f1c9236a467cba2522c7f9f706feede8c534e52a69996e2e0c49e19dba39c9511e651521ce2450982fa55a55f3a32c4110b12c401f717607b01ce0a24e74cb261242f1cfb952b10952b8e608367e0788511c0803dd944cada7334a2b363dfbcb2a48d7ac884d941a5ce953ad18611628c72c1085438e1091ee120c2489ddb032cdfc500cc922669d20996ef60006eff74d85c83e663342854059b240dcbb7d715a852a9414052475aa123c50a208943e5854b8f3d1ae2c93857ee106c02ef03a4947ec92b75b20016d12ff91820c4d7f6211d7b40c7f2926fc3e998fc156bb0811a98301281141c2d7fdc84e7d5d08086d9c265908916ecdd03028c9e67e7db2269c19ed7dd80b902e10a34616405f2ee9db335b4619e777ab1d737d360cf9b524afc913add0b685ff17305166a8073ac7d00f4de6ee89870efb8d3c838cf0db8bb2d212226dc451fc2dd5610aee53dcaba73b7e55d2052c63dcaaae84aab2377409d0993f167c98ef8137f7a6aa1104d9562a3d92802c080c5e3bd5aad56ebee6457819bb33af2b895778d6e01d330607a064cab8069e5ee8517c0d44b07dfb5e6d19936a7b3ac48a6c73967b409b3ba5d53ddf006fda3d74b67c2e86b054195eaefdac94659d728a5949abacdd3a1a7f43ab474f042a9a25f40a587a7a5b33c8761f8f0e0a1001db39cd61a86b508a30f6f66b112a85f3f567ad12f4a29787a09c4622306492058ba1da514d4508274aae8944ab4444ba552e9f2c351d2a9150455aabff4fca236ca7abebb6fad459441695010ad51f0a427c0db3275dbbfd3cb9b09d3b509a33fad45e947d9b42df0f351e6add81f3535deb9d78c5ebb36616450058368775ba677db6d994c9ff1cedd16f8eedc4d37489d19bdde16785b40b8770fc2bdbb3339e067e6b98337c8d6df24f6e468ce7e4c4719cd922665d084119d8e2e3da594d6a83fef805e4d4c18fd8e09a3f4ca8866558a4a23b9b008a0a4f2c7915eb069adcfb74e989cd20d9e8e88655f41072b6055bf629c5044386ad18406582565dc69a2433d1cb568c2634d386ad1a40b58f545d738ee8c600d384619dcf784bcc3485a1a65c47b029b8e04f40435787ed4b1dc38ca80518b265436dc1f492bb13c87a3164dbcf0ba108e5a2041047584a31627c0a9b5d650488b135481f38846d3a85f518b1b7c00abfa25e38d2d6b1578e6a34c56230846988c3244ca4bf0134b30e551a3123a148cd630fa62a486288ab245ef038642e2ed00a061803a63c25e3d7f40b00570bb63c20c99b09617899c4d189211961749bffa4cf494f2b2464a7939a36189635ada1096b38e491869232f234c2443116290e3843624810b5ac8e4e5908e49d97762098dac73ac82696411ec5e93b389628cc9adc2d8a6cda17717eda8738755b2d91f47fc38a225cecd662423bc7dd28039d6f0b6dd1faf8eb5e66932f3c0e89e62fae980a1ba02d8aa43764c981958505185cf5b01f87ec987dae38137e78f1d47fcf41ed1af8eb7e3fdb10377c76db476dc46e9113ed80d21e8c20c5d70f1332905429278f908234b1b3cc3919be1685ba23680386220c0f87a031068d650b8a08fef8aa913f206f77e1209b3fd39ce01cf96cf9266630f7d0110e98d119609306f06251018f528a3e100e608043a5189002639a261e44fc3e27b40022cc4d0b32e82b89052344dcfb913e2c15cac609d308ea2012c79aa09e354f766d60a82dd639ae3388ee3381297333afda6398ee3388e3379b267c2a8ee355def7a2bf6bbc8920e5ad1a140810225c4711c672a55903bc7711cc7d16f37f74de44ee7c2e7d3e9f48d3b71dc893b7127ee278fbb67658de36adbb94b9eb979db4639ca71dca54fa41c47a34928340985d6cd973627fdc2695b038212089ce837c7711cc77d49e8132dd39fa0b765aa1f9de36e6eb6d0bfd7884edab8d7da63ba3f4ab7455faab7454b0ff2bd74d3c1e6a1dfbb0b21bdda16bd6dd17a96775ff9caab6569d1b79e909846dc3ab65776b87377029636e08fee4a44597767728288de7da63ed4dd99eea2c7d68fd29588b2d29dc931cd84fe8177467452676b7268200052ff5d48fdd79dc9245d26fdee600f277b3077499b30e01d3261dc4b3e95f403d2e22862d9c3c91fcc4920ccbd6b827be8d60ce144dc435ce5de71dc0cf1e0080029663db521bec684998fb23a61be8f449fad60fdf7faafd6cd66c983bb9bade346563561dd3debb5a59189acc876d3fad5754ec028fb8072b2700424d8f45bdba3acd57d462783ee4debde75262c6f06f1c402b88273e48999b0ee1c19c056907e6d9b09ebbaa6e1ae072d6021238ceecacc1d2a297d81978446c1f35efd78646d8b29afe491b53aaba4b2d63151ec7aa90c121fe7a784ec81021831e5b0fc86ccf886489e20a5efca9ddb0ae2fdfb776746d7bb733661d3939f10529cb05690ef1e8dacbf20dfbd3be3fdbb71c2268e8c2d65af09a3a3ab9a30ead5e488dedc3638cb9e5690d83369645edc99302d3a3f7146a447d9f7f94ab2b236613c13e6d938e7ac86656dab5a98618695346ef108e57e28a6ab8d78fed8cc26ccc489b0d95d1c354c81b3accd19a5b60784ee58dcf3f6be73f3d1dd39b7b975dd6bdce846b71ea29ba3b74e13781146fe44331c432800e78c5267389ea7b6132794099b51ec066516a5a14c98c9836baa9dd9a683552a108482fbf2c321abf79ec267134a0198e7bf1e75a75fdc8cbbe16c381a10a07cdd216d3b3b554abfb6a00d288358fed49d8e71d19b4ebf6edd91b2f5bc01cc55677a00cc55a7ea744c4ac35459f74c98f88414c8fa1b940943371edcdbf3160577de746e122520dec420b90fe03e4b54753829a328dc280a27bd1004ba61544b03ee516d0cb83f0fdc546141e44c80475e3408bee3d8eec7f345f9ac28919e4ba58fa744b25f949eae15046d4a8f118664bf9e8fe79bd2afe6e918b791e8f6e9f4abfff1742c7fb5afa763f9cbe29bf2d5b2f8b8c0fdaff67df78917412bba273f21a53bdce10e7690892e930fcc8b3ed35d74bb8b6e4e2b5299674bf4031265f354f6d9f0c4cf66c27c5122accfa3fa783e3b4a4394d1af767486d8437f549b30232f463f5ec03dfa01a9d03180112791388f7e3a4a5fa483fb7305328830a308b361419c2f88b1ed6d831b074e0485500066793371c47192629411b1c019c614f00d964d4c987ccb228cbe329fcf941daa09db8cdfa4a434cecbaf07a61df1b66d32cfb77860f90d531c3f1e7236c33b58dee901f00d607fbe00eccf10ccd9c4b491f5b4c15b17ce135bd56074b3713bb8bfaa41e66ab8dfdc1511d6e7a02801823905a4ab9b8ecddbaa35de47d5036281035c55f3b5137b88b4612a5ce226c7d14d6661b333879b3747e7dcf9698138ec571b70b301679117b87f7ebe1eb4523380e0eb3d6e44bd876c7d7f40a48cc3b1dc4d0b8894d5b784dc7a391b9c09c34d69587fd43dab38ca4d6918d2e8e651d8223a77330c7a730c9c395ac3906e2dbd62880e23a46af1c0b0a6626f07229fbca26590236a0630f4d2bd28bbe983885ecf857282d48bce2487bb4144af2fd10b44f47a21a25b2f2474ef4cbc87ce247455ef5600d67b5f6101cc229f19b5067eddd0c107091dbc10d1eb6b94c529e324b5e49548dce21ec47be9f412c7b43c937ad241db92b7c55d20de4b17524f3a939c20a4d73329dd3b931c7a83d41d13d63168c8910b7095573bc0bd0202eeaf8c801bc7062ad3276fc299309b0987bb3826d3ecc7ea314daae205f0fbc1bd7a5ed55acf2b9ed4f3aa67e3563ad8e5ae6e5aea76b9ebb16ceaab9f9fd5cfea075cb151b6ea9149d5e9f8e0d54fa7d3dd0e6e7a49b426fd9af5b6b52cd1fab56ddb569a918248554841a42052958ecd3a16bb0f07c7956c9caca830cd4cb390a9d61fafda28f3a81940efd574d58a45cf609a99662c5b53b372f035a97fabd5ce6a67b563da9930d1b473b3371bdd1fa6db9237a96e4b9a1e04bc69e5e0e54dfd3b8dcc64f26ebabc41c07f77a65e9056b3e1c13da5d70b21fdbb957426de4b3f6ca22c7ab41a6f76454013d6a2151bf4a3c624fac17df08a7c26cc34f35efa10ef7ec877bd830fe21df44c2bd3696424d9f6fdf8ee993ceb79b5de7b907aeff29e77f0ce785e921c32876c0191b27aef2d21dec183b5561034cd5400763a67991346ca443ea7c7098312925a79ea4619ad3fb9441bd13280a593ee7d3fbe4b0bce306dd1d5cdcac994867145595181835738b8a1e0bcdac14dc2a20653c079b505eed594229f2e3ad640b84bb48e65524df483ba2dfa286bd10b44ca56372b9c4e27bc2cb725c4fbca572e13f0dea38c7e43c07ba79f12522623d5a28c7ee40eda48aa4d981edc4290946819b86373e5a9352b65b30860ae3f98524a2f69a75f2d02c25d75ea0e0feeaa5305508792763a4643a49d0e897ca28d30441bf27d911824ccaaa2016c839cc3ea66c27441a39b9957d27610ced4a6d69bfe01691784bbea4c9828dba9e1e689322f34ea50d029908257386a91021cec994c1f8e79433e8e21cab0a230c41efaad1e33cccd709227645dc5e0ae3c8eeb4296d36844e9e9d4221961b9d2398dacc0fd500a66596581fb31ca380198e914f79a803d0514153fd1ddc10e332c6f670230531c273a1a7768ca5028140ac54aca3478ceb0d78deacf8401dfe02dd1543f2bb582a00e9691ec0a6775530230e2d68f54441b33832e17eae61aaa70f879fc8263ad0926e06a2dd4258ef17a9d7e184875009e0e83c578758a8e39113ef52d08964e9cee7a78fae138ddd0e6970c92183895ba32218b540588240696391d759930e4d1f296bfd84c835feec5d81927625227f24c31ebacf0aea7ac4c98fafc72a8fec7af872a75737828244e7df51379ca121985b6e59e17da765de276f5e9a2eeb239860b74852fec0aef1a005692bac4f3ebb1e1d4fde7d7638bd2afbbf24b8b0d1f3363fa642396f8a5dab4622c084a46c2265b15fddabeb2ad30c6b6c2eb85193c1a48e4abaeb6b29eca66d55b41ae44ebc791b47a1c79115b835aadb73ca681308bc5fafc9278cc5cd98883b4ae846d3d09aba3f596d659f68745a27a128f1f0e225726891749e2acd4edd45f6e574bd9290430751ddd16315d8358d65bd9bcbaea743aa16e5e82510f6dae3894b4eb1c51700b391cfe49badc825d4759255aab873fd9273aacfa2d12d559aa1a5481548f9808958e1101da5ac29696cfefc763260b2b619f588255ff6175a84ee43e315bac92c6495c278afcc863fac51a69dd0b14f99177b56e0b1a68241eb945de7a09835a0de05b6f2fc093cbe5924862e053abfe7827d5636c980ad431ed9d6ca6c13142d7db2746eca98922b9a0e5b60287ff239602a39ee8f06fce000d6e7911d4633a3cbd75af65ab4ffdf95000a2de72d495697991cbb4fca5c8eb4ffc7ab4bc4878730c1cdeab36443cab9660d7979c088b6d8c8ded529d754f6559b6d24232a035b9d5267e40e1538f333c2afc29fc63bfc2c7ccd0b69eb25965338873cd4862e096b78ad8d61fde75efc53e89798b8df9765c7d3ad6ba11d72e5a3dc2bbce9084d05ee0e766fddaee56ebd7b665d1af2d7c15a1ab49c3d0681d6335617d4186c98550f483985bbba83e51b828541886611805968c69af04b5bfb43430b10ceb297cd63797453db4dc4ebf56b9e254eaa99ffebbec5d96d3791273958d0d731d65738d9929cbbacbb2beb2d9759692d9723dca58b7e572910024f2d2aa11e271032f5fdd4cf1eaa60660a59deea20198bb1a2dc7b7d327604763e2c85d577e01764ea6e8cc00fee1bdd3e974dbb83f1eaeabeed1d16d635510989825bebdeb70a20dd7b7c6433cc61b9547f6b07d88cb1b1528f6b07d7bf4b05df225acea31968807b1a9d37f4fba96587c955de244d898a76c90bb6c632e8042355bacc28e7bb4fea82ee3baea7fa6f83eaa6fa3690650e2b01b713bcf9c0eb70302d0b549e1763a5ae5e16a461e76352337f2303442e3b6e8d74684c859448e22f293eb7f058a3236aeb6713c1d73dd8dab751c0fc7c3d5b82db81a577389baaef2b45c099ecaf39de06b02e60af49900cc34d8e5ba5f09c05c817efcf88fff785661da470230fc6860f86f0460f84f0460782e802e9bffd491e7542a75247504046f3e72d5bd23b60655a04aa502a97ec446fc7d385412bb443f47aa004f3ff24cbd9e71743afd72a01e1ef9c91ef9701cb9f5271201aaee3afd7cb8ae72fd3f5919d77fcf65bdd1689a016c1da887bf3d3d7e3d50d97528243e3d75abfac9aa4e7f8c38f7e1d0e1c9286a92ebc628c3f598ae3cae9b759c47a659626b96dc1c1d27c2d61071738a90d161848ef350e978c42ad5ad01ea50e9d071eee3a1e3d29831231771954c113b2ca907601157ddca73af88225245bc88771f8f226e10b74ef96af46b7b0301ac3c754ac7ba2d442317ea9e6aadd29afca9e7d3e9b4a76ca5d9a4be5526ee919b3aea5e0af5a38ec10f07ead6005ddf6b155af81769392b7a73b6f4bc5849e19d2b2bc495b03c783b119b44e2242c8e216cee6c80b7ffb04924ce61733705defe6285b811bb6d8f694e8793327fe24eab080cd6c2bad5a763e1379fda45c344d9f6f885776d1bb05126c4066ca5d2b0ed930b6078216e78d7ed681528873fd9d068349b5aadd6d56c684d68b42636362c00b75c8138aee604387036dc141d7bbd6703ead97eb81bce0987c351c141e1aad860b6ed9b141adb9605de08f0bcd5f0b66d81b78da787e76d0adeb68d0bbc6d5b173e78a33d3bb6956fa66f6048f4ede348df4e9d6c9b4e6d0aceb3a6b7cfedfdb305752cf5f3f313e527734df256056f9b5cb98cb8ee161ef54a25b4abbb6c0d52b261968bc572c990c5d2854c834f0f6d3e118f79aef88f11063f83f8bf39fcea44586c63eccde1535741b161d5fb9e1cad54aaab64c3acb3beba8c417d063fbc5b78d4ad405e18fe14335d76f5d0d620258d5d412ed781823a16c33074dd357c11636b170ddb0e74577711aaa261bc28b1b873062ef076ba738638e01cbac1db0e1a6e700e5181b7d00c6fa12678fb5da1c4395467ed60201ec4137c78301077ddeb518b07ad8b7e7973d4b2b5c91fda1a5ebe1586f2cb81baabda48cc7a4b18b6c290f5d4bd54f8b35856e2d0cab0250c5bb7aedfdb58331563c5a9546a7beadb872305b4b9debab99e6e065da74b1fd3e57a68f34ce8b2aba36c0eaf92c6aaaf6ef551d9010ce003b8ea321ed32a5b3d2f88dfb03334b21bae47d7b5f1ff41dcc6fb43c2759f00f1f9f900e2413c89b952c4fcc61170fa13a3a471487f3a6623a65084f8765a058d42ad28f2ed54a76379082aa563d9c8912059b645c732119e8ee597291dcb2d19c78be0a26359892fe1d3b1fce34c74914410386cd529c2867064b60b1ac2763a4258eec70f21ae845da288b7b4fce5e544883c088f1fb1c08d38f122481cd1e3f3c7082f58402d2ab2a0f03947d6416b3a9677642047b2915c84de24e01b13c7f1585ee2437c3ba522480c05d80a2564d3fd7450fab5dd08cb2d6163bf96f81036f66b88336163bf98380e1bfb85e3458adc88911f39f24492e7c880116f5996cc2794067cfbac02c8b7cf2842be7d5a31e45b76406e655666c003b6e8584ec053df1470d5948ee5057cd503816fd9c7777ccb3a2efbf6d9458ed79bd0ace786d36163bf745c6663bf64f76163bf7c7c878dfddaf105d8d8af055c0136f64b010938036cec9792b36cec17abf52136f60bc985d8d8af0b1c888dfdc200102143bebda9742c33e05b6ec0c36fef2a1dcb0eb8ebdbe7ac63f901ffb70c8149eb588ec051dfb2049efa962770d5b74c81afbee5274bdec4b7ac8157e0db274ec7f213220ec5b75ca7a872286cb5d180ad4d2a602b95266ca580ed26603b09d82e02b6ab750fb09d036cd700dbd11860b929432c27c4725b70b5295a08da6d5a88983b436531dff0b725374e588d1d37873389e36618362dc412218ab8994608a7855872226e8de72abb5935c405c21702686bb2d1b69a6dd6b40a0d0aed10df5e9b744c886fafc0b726bee1f856c437d977dcc7cd2105aee366d5049ee3e6161d67e2661812f81237020f526939ae44a531f11f95b6c493b839089cc48f2bf1eddd948e05f9e6e39b906fef823ad600204f4097802ba053c017d02de047ba2137d231e0453a079c48f780bf743508bce5e6207047ebd8916fef9a74ccc8b777361d2bf2eddd141d23f2eddd4dc75ebebd83727acb5b3787adb36e5629b9b9250337c3483dc9cdaf276e8ee1c4cd345cb7c0cd3578dc1c4406b6e898129e8e69604ac792f474ec896fe77e3a66816fe7823ac6e34e1c03378718f8056e565de0486e6e4172999b61c83cdffc32e2e61846bcc7cd347afc08ae76c491b839086c63ec66336148dc4c839178117b84c95bf6a5034fd9d506eeb2271b45878d5857cac89b78f9104532e052925a19b959891709c281215a1c983911264688bc5c08263f2ac024090ddc5ce44698242192041326a9223727d1fdb851d4216e1455881f49bcc84c919b8f9cc84c1122afc951e266252ec44c909b83fcc74c059a784d4e12376be0458edc9ce4446ee4e52d0e70a0758403463870c4c86b725e6e4ee22d0efce0c0104264e04794dcc85b962c69398e252fadd7e43cb1c48925ab97252d372be0ad2513c0b15ac281b33ad0c272e23b3a0084021df081819b5b6fe9c0053ac072e2e61df7d101b003a9d6cd3e3a20378a3a811b459d00101f6f71a075f3cb591c68b15e9393809b13f009704001372be0403870435093438109bc26c7c7cd1878ebe5e60b9cf5961d75f5148ed44bcb4bcb6b7276dcece338803cb504c78e27fee2c45baeb2ae14ae78f59a1c0b20c1aa54117875a300238044955a72d406543a36b000096c40e6e6d4551bc81b406d40c70624f09a9cd4cd0be86a5dc0534b5237af8e5a9242bd2667c8cd432e81250cb899018fc0921b829a1c0944e035390bb859e6a9d5cdf9a8ab90dc28aa8eba80224e5fb9ae5aa95e9323e466215f808e9b17f0228ad0f19a9cd3cd16f8ca753392ab7efb07dc1cc59780c0cd0f806209d9ffbba2b8190287e2015f6209285e9323bb5174f8e6d35df8a18da2c34f88a80eb8595673f420e2889088300711b29b739c092298784d8eebe61e5d8eeb353910b8d90167e246511f703313f508ec0ab12b7c4d8e036e7ec08fc04cdc0c812f819958e235393d6eee71d7110fff1b45879f1801c58da2e6a80e901971a318e12731a71bc5e8f4d7e434e0e606dc0131373be0b21b058843509323cbf19a1c1e37f3f8c9889b8df81f3335a02403499e70020317b00012995c01cbc49bb04b9c0296894fc02e71095826ee939847c02e71ef763361db8fd8d38dd8bf88759d880dff624f6fb17fcbbaceb2e157f67455f697a6aceb52940d2f85800df2075825ee00fbe30db0499c0136c8875825be00fbe3426c1257800d72b7045825ee06c4feb89b0f9bc4dd90b0227c84e5b6e0012850c13d6c17051a1782808db013061ea87d817958ce0457009101ef88b90e229e031f877d127367a42ce645d82744dc9996c55c669fe03b336531b7266788bbd9f46b13e26e53f46b7b88009b69b0120ab8ee7a10f6c98d1d7cc3e600711bb6faf4ab3110af3f1d03e2e679d4b77b5efc7e330dfe43ebb2993ebcb9ba6cbea45de72883d8855d61f8dc825daec7cc2796e0799775fdf6890ecf9f8ec5f99fea63852e3a165e281a87df5e7dea8febd60043571846a08ebdbedd08e0995209c0330dc21bad82b76dabc1db96b726356ede6cf076162907ec198e38ba7ce102ef0bd9d343e300319802fce0830166f420a3777aa7777a07c64a1cb3121fc04a4cc3461cc346fc8395d80703d8c6337ab01c2e800c1b71dd7a27060106b0d9f46b7ba54db1d52286c1e6b6e1c8206af3436715e8310db31386ce266c3b0d687bdcc2ffae3baba0010cffdbf1843f7d3b0bf57c3a853f7d3ec2cb9cee7a4ca36cc7738cfa763a9d681386faefa16cc7e30a1fd35dad63fff66e8b8e673beab706e872b96e3e0eb3fc01ea1815bc5dfe6cf1a7100b113ca6e71cc0631aaa6297c7e872c32bf2c2cb76b57e6d1780edb6e8d7f600d88ea75fdb79b0dd947e6d8761bb9e7e6d0780edb8e8d7f66b3b9f7e6db7b6eba25fdb5dffc3d3186b3d7c8d31d6c38f626cf5f0608ca91e3e8cb1d4c3ab620cf5f02d31767a78b3ebbfd573595ba9f4cb75d7ad2fb752e9d796eb0ddeeeb56cab21beb6b7d83e437c6d3fcd10e0eda8e901bc3db55d2507bc7df506bc9dc506bcfdb4d8885b366256c42a1b712a840630575abda9b4cd0b2a6caf54c26f8fd1c60e16f8441911671adbc1022ee22be2f0271b371cd3de8eeddb7670bbc94e2afddabe622750bfb6b3d8e945bfb6eda5eda4eddcf66ffb68bb68bb8cb2fd3f5166ffc41afe6cec028f2c873dbb63bbc8c628aba06a0bdd59a55fdb8c163dd8529441fa66c12883f40258539441ba0cbb1265908eb22c5106e9291b4619a497ec29ca20fd64515106e9d4a6a20cd255561565900eda559441fab4ac2883f4956d4519a4b36c4b94417a5b972883f415fb1265903eb2ae2883f4907d9441b20366b931ca20f1f01836b7cbe610142c4f8001b808e04ef44b1e66914c20258c200c38007f59243329b822a806988707e031ed09c02ea9c287928ef5bdc0c8892502b01107c0e6ef3cdcd6fcd63d11bdfba418c972e8b580c5df456261dcd6ec7a00fe84417400fc98b5f244598f8f1251d60200dba297b296175425340bbaa209526c663532482665b1500e0c7610635ebd818c91423632f8811c417c49120a5a80e5ab0ee40a62206fc89a4f71022c9fe30d1360791601704000d7006e308017980d602e2f9c578b006a20805600681000160f33e06105c3090c1500640080d48dc1455918d8d36f1eba5ee0627971c1cb8a4b0b5c4c2d53b4802d16b44aac15b0482b15ac3e958d6a944a41ca43a100253a9de0140a9b8495c5042cdd4a0956382c25094cf8dbb00447106d94684904d106699242106d7c8d25fe2e6ba28dd1638cb089bf2766f0f7ce8b7ec99679bb9f164d01f85c6b523a762c5f7b666dfa6089049c6b50164c3061927a11d3d0b3930511d49830ddcf84c96f413f91e3428e389f8edd2b0f0468ba474d35264c94451ca7506f9e18a2c611f286f440943812045186949f30a2ed59c9269fb42e5bf766c2e84c070fc0a0697a1e85661d335d5e5b71fac693db06c5bd9726b0d4ddddad018aa74cdf64b99ee6b8e8970bcf149e2f45988ed6f39b9db18bb130368a31d6ee57ee5dcbf934d773e57d4cd7daad81b81677709633f90179090239026982181b5d5ece54aa20fb18832c885f5e1e238c7d8c2ff7b6d1fcbe5f3b7af7b305c91bdc16746913a6d3e974ae5783a60cea6c6647abd5b6e099f2241bbf8a83586b106510a73c0745dea837b2077979791983ee7600569e8602e61ae485661f8d9967d9249dcda5929ccd66f6668903250ad7d31c177d79ce47822bb706b862251e420314cfbb6233c52b0fcd64aef4a693787ca7b7bb27603736859f1f0e16ef5b5b95cbaadfabf7e7fb43c2e56d4fef5da737bf7cde1a7443b3279cf0ecf7f6de9f0f7aef9bcde0fc3fdb9f5fc8fb7769bfe677bfd049367b076fc4fdf7980edd3c1fbaa41e84a6537abb72b17dcfaef4587102b777cffbde96748f15fa8815fae8a13bd3ff788c1eba67e9c809dc4e64ef277affd93cbf72493d00e7f5714fafccfd7765ece93dab84e27ba9ed61e2616ffc5532b14b8e97be5c2513afbebacb5d51ca7ddf4eef8aeb9be7ac633debd73b340baa4292323f1edbf59cc0dffbf3b19dd43d01e9f69d54a736d28fb4bdc56edfb72fd3af36d257d474cfbb8a74d6bf6f1b85def28536b0f5516805b672ef070bddacc2dbea241b5167d195eae0a78caa87e9de3dbb8d48244a49f73b8d5886debb473ab5596627f0f63d9444fc1e7ae86effee2807e9c653eb796fbc794fdd0b9d14ba241f80ad1ea4d39348a7fda23ebe1c1fe9820f51bc1dbc99869ade3f307894cd4630f893cd4e6070d690d23e81255b8374009a9e6b509dd4b6e6b7cd7b9b666a95935e1b4674d243a025c50f079d69d18bbed916ddfebdcb01f8cdd047f6c9bc4a5a246b1a261fbaadee2b690eaaf44084c993a0aa0094cfaa0ace6a47859c819c0dc1eea70685a4983427299a8693a2694029244d2824c16007cf2bbd21ca21b68165f41cbf88b10cb18b08861b232f848f197c89311aab8f8f1163a9c7e6650f7d02e0f8db72c1316290185b793c907803340289182b11116fa872c41849081c1f84bcd132448c993a964b83bbab1b8410232c553474c88c4492fb4423f9e118dd84475646f4d0636474cc4aa580fb9ce89fcd52e0ef31bde1c949118b3b2b98a323ee66d1592ebf1c18c0f943c598308045f9c32c23960c60d137cc723b8045578603e58dc378f54bb451802863c67769886e8dd10d42f65080684308efe6a661053c05d3c0323ae2ab7db0205f35a22044b49123ca0842de284226c6b888710bb8ff892ef790cd52c4b8d1cd5260d1657f38bec78c6ee6f0e8dbf0887b8e3bdc6b3d973180e78b729789402bd384c51b6edeb0835d38d6de30021c4d9e9c53ba68c15357d37b2005fb85731d6db3e994eef2db47e97c8cec6e8e31c6b8c918ef0c1a919b0310dd66d0a831c38b17921873563983f41a53ca9fe28d98149637c5d8cae54571c658787952bc5144176f20913dcc97ec615e8664648d195580211afd9a31d38710f99a5fb11088af799365c236d1aff901cc178164fee51dbca3f7f4b61110e00c1afd9a87f11278b39c9dece215b0c8cee858fd3c8d1ab3d6b861795b3d2e141beee6b939e70f63a32316d94581c619346af4ab3fa35f1d6bb10a51e6820fe3d5521f82e1bdecc49e6c9148640fdd72ecc3cb4a1ca33f86183ee2eb59c0fd1abdd0f10a3e441b491c11b98858d8791aee72a1c1f5f272861717971f97961633b4b45a6568b1586460ad565dac54aa31a8522931a450a830a04e279f531882216461f902cbca8a17564c262e4c20d805b054e2428944da02e9fb7abed1480b23cfcb8227126141140a4d09d57a85da7556e838ae0a1cdebe23ca98dfee23daa051c67c12734ebc1d898e3226de7e44b421e58d51c69461b4d1e00848243f13a0fe3dfa009e1e5738d6d4d004c74f0a88bacb95c18bee3589446a99efa8cf8fc77714e8a1e877f022d4cabd1ea1402b1275775929c5ca1d1212ba93629f0f10a06853d232a4531cd3a0a5d88b2a38d6d2b0450f38d6bc9002e6a261dd49f2c3813b1850744eead45a40e8fb43e8a54959e87dc12135221842163a4dcaeae384c99e7e7552c0d6ffef523ae67a87faea9f251d08f03b10a04be25b895babef9bb2a565a5e82419d1516e6882238ed88b0c0063cd0d4e30f80fcc349804b62efa4e22fd13a9c0975e1a91ac8be9b15f2ee73e24445746f4d65b5746f4ef9fc85e962450980e5ec9cac1eb856f5df421510269f0e772162bf33de215fb840bcbbc3ce24ff4840bbf9cf4e178b9173f7b0f08b07bc5b44da4a25f8dd3afaefb7c90feddfc9dfb7c8017dd9cbf9b011abc225a79890509d5cda29b6e2a950e96ecca41db5070f28c0ce9a62b716e3240e343b422fa9000e6b6c1dd5bc78a282a95aaa3340bcb5c415d84ba4874d257fa77af8e586c66a91c4b4761b1add35158466d4547691d161e78e0218aee86bae8c3f1643eb34e3f1fa88b6e46ddfb5ea7a469bae866d2cd000d66f9774f7e55b0e9a49b0e926ea6a179fdabdfcda5ee4302bc59f4ec83e5dfb78f07e92c377f240104c0c6152bb197f391409810adef261122df174299f4e565224fcf6446de9cd2fbf4e67c07bf7d48906eba578af1f8f900c0571ebf1e2caa950be0f1f371bfd263005fb932a213009762d89ef5ab7bdb282380ed717fafb23d0070969b6930000eda3c83330f7fdd74182907e4e1117f02e0e102088095548ea0c13cdcd7a7c374189718c66df500c0ef01709bf6eeb9676d45f7d83025b86c5e74017c3844503a2622bda9681ceff57dafd7a74374dfddbb97d4a4d24557e27c2b35375481638d0d51baab70acb1e106b7410a5ee1586b030f267dafb5c10b6e746dbe5f21dd4c83492fc99b874c19a041a274d2bffb0fe85a19043e769f22688eae8db83f1ee045e06dd1c7834ac74417a8635fd0b5117b3f7ca21f443facac9c7473e94a2bfad57de5463cbb7b9efcbe2380424a9267c23e1f5d6db2be2380b247878b9a0f942e3a96e514b87bd7656905ee3aa9236dec0350f0a29bb2323a22b6b79f1f9028eb1bfb005974659446e2bb32df45171dfc6eb6275d3985e8de54e99d84428a520589f4ef2391482412e9e3f11dbcfc4012e9df77914824b2a52ba128692ca3f4abfb2d148d5beeb2503466b927bb775dd7b14cbae81de9a28b4cdda5cf673d91cddf454a1a2bf9ba8356f694ace4a25fdd3b2b80df23e6a263a50b45e3528f8f082cddd2a7e3fbaec4e9979ca25f1d141e5628b7107da2c70f878862d2b72362d155d24080a2f7d46e449de81fc5a577a677248b04fcb772928502c9f7ef2bb6c7c4a4831609f8d61312933ec1977fb6f1cb1b83f6e552806425766979c4df776b802d2d5749e356f80f87c42c4bca0159482c24d52556dd2cb1e8728a8e85e14b9f1f0ed107fa34534cba68f4d842ccfaf4d6c43e00e922b88cfe3bf7f1101df59849b2a5d39c560f89592e31cb3f9b6556feddfb7088fe59520eb8f288c1935efa8ea0c12bb7f4e940a16237297c4c77b48e919ad8949a7c168ac6df498d45a4970ede1389449f0e91e8ca902ebafc78902e7acc341f2829fe2ebfd8afefb3a52b494a1a8b44a2eee0670430cb5a0fee3a2e3a708b773f9dc2932934854235c6729fd49567d1ca556232891ed326d08a3eb09bd283d80302148117bd74f0ca7ca7d8fb6cabf64bf489bb23ed00ac213f1cb46445a4ef8a4e5b88d145afde451fb510de454982c8cf3b33f39ab0eeaa09eb2eef8c09eb3e615d5f89281b3dd7f01e65fdacc23b26acfbc88eee7d8894856c947577d20e7ab857bb5d7e40a2ac8909eb4e82d23f3f6a964c58776a5ba2cf8b4ecfddd6f728e3beddd6775b3f3829db2e65db47b7257a9fdebb2dd16d01e9d30b919f979fdd7be752f4f6c3171c67638449b09f789e376394948bdc9c52d230ce386953d95f80f194dee6b63370e74a95da3ce475290ad94fd83665675ff885e933adb26e4fe6e3bc52bc6439b45fe0862ca838c140e078851b7cf0937b547850447408a7f07cf056d3af8da3e12da85fdb56859362246609769d4e01b260bb91bbac9269c486e1ed6a540520115f12de3c83436a03a61e3343222fa87b130e20115f324a0278ba1773fc1bf0f49f5a3fe540615b815caa1bb2514105a26243a35d55553fd19ad0684d6c54b4263641280073f559ddea837acb5b2cdbe28d00acb422aa47976d71b98274bc3cb4e169c75013876fdd0b6d155d014a1cdac84f072a7e394effedd443cb4259d5553d66aa6c91b7ac11227fb1d51629f215d0284bec24c2d2f0768f882df2f0291bdefb72b8eea85fdb556f617d3298393f91affea37e42adfeab7eba25f2db0a552fb78595230282280860cc2c6273aa75f30c6e3da5a27da5fa513095eb777df5fc9feefde4bacc1f56da57aa7ff5d3bdd529749dc230aca1eb561b140b0583a99a8086c90314b54a1a87446ce476749890a4c7eae151a7ff742b503e3d3ccafa583dfc553f591eab87f79efa5557a954aa542a95da015d2e477501dc1ef1a9ab755ba05067a150a7c734cb763556914be4b25827141e9d2ad0e9143aa16ec7e36abdb870add5c3dbca21f12f8c4f81cb129f6e2b4763d114783b876fb9510dccfd53253403a212deda840e60ae4034202a5542b48e351cf0f65013a06dcb628aeb7a4e444f22175cae5ba7e8d74dcb5ba854bc8313a0cb2aa1f8f4bb5c0fc33054dd65918caadcd6a0d02c5413a2855a36d4b27d65434e44720073a5b91e3e5603ac88a8d4ebf4c5b91c079942330308000000b314002028140e880583d170340ac444891f14800e91b25476501c67518e42c818640c010000000000000001300000db4fcaa176643505406f5c234260b4b485e14121e573b8e634bebadcf8f5ba215d2b7c9cd65e2991a4dee1621e5c4b4de72b4d651d678b1313faacf59e4e78c9f4adce78f78cd24bf49cbd551e3bff28d03ffadf717b2e260e126441a9b226436a4ce75695fbaa47c81d0a30b13161fc6071d3c841d48fdfbee9ddde1d7b566b1f73d206ef6a2f5ddd64e79ccf948f5d0379fce322460df62b8d464c7002f7f38fa77accb8e3ab96d5474abed40b4afc5e61d11f8737359690e1418fb3668ae2c83d8209d9168a0e24234a18adf707d0524f5519406a612d802efa68c2f62300b0f7444f4c55d72871ecb53be85c0482b236b0c7a6ebfad4c8659dcd332aadc541055b19967aaa80d28f2c5c90fef7f1269f10c22494d7a3ad8601384dc850895870adb8f021854951174be0290150113c88307508431b0b33321893920c8a04720580d201bc7204aa4532174b611030d015188467740c40703531393087284c850620328501d0ee9dd1fa4f70c59200c79d45fe7a34fc7eba2385c788aa15f51d591b3e8cd30db2901dd91e5d08a614d7cb2c78c290afdb5188a24551638d586da7d8fd21e5bb20104a40f7b9fb12228ba457d15241b2d3b7f721a08fe3bb5a653a210df7a117e0f82b5f91f1cbebe1b8cf82c9493df3b06c35f67ba749f4950864c36ebebe18e8bd30893261a77e5ebc0373d28b76dcefa74bbeedf4de3eb21cc88fc2b4c30a02bda7d1df6851139bc6aa1fedfc90bb6a1a4278698930571b7e7ce9732b67a54a76be920e5fd52e12e8bff8f9bf4def34626f23173f8d4a5be6af6937acf431b0864a8df0ee310bbd276128f17944fa19fda4aa7b606a7f54649343769c1a05892892f987c50f65b71e95f8ee7abb1fb355636dba0584d80f7c9c73c9ff90384766c1eadce6f287f9486d1da91349ebadcf761bad1a41909a8593420033972729ac3865238549f49c149560e4c90f767472d72c462d2c5d4fb1f0223c344c8296bb5999802e34a1e80067edd6da3275fe885e66f354f13751e96112722777ce0edc4e9a5a774b6a66f58ca4a3c07f9cb60169d3d7e8a9889787bb4f1f67a65f54760a059d10c509731364aee10ed756d6daa37c3eccc7ca2399663010e49349f81fce46cc3c04cd7e060d4582c7373043b84a1cfb2d26c99f1c3088a91a1b8ccd7f6672392ee789b8a650bf81965d8e01f83bac1f4904fa73948ada1a7ff8f7a6f1d2eeabbb23ad162ba4a02bcfad7e04c94ce47f7aa057d80e3ee2d65fda708793835ec0324506a2044045b36c9d8312f2f90ccdf6924f388e6b5de3729995ca759a48e04f53f5321e48989a0dfc57cc3558914dbda751aa5f8f987741b04c8717d613cbe75078407ad7e8ddab044bc04cc4fd1158eff45e949e4b551ffc2abd9ccb7887b2ea3929b511f9565dfd44af3159c6d66faadfd36333590d04e8ba26d21a48021dab635d41b9ef812b90fb97001e8e7994b90744c2c574b9a5047bf75ec5aecfe9df99264f74696ee8ff8854fce95e2235314a48bfbdf15f98b71c09e673021fd274059b93cad0e374e80b42849b27968c2831794907a398756a664c03264720a0109e41c3b286ca92665709f4dbf520da156ae85d8a3ee7540257ef7a22382051bff1ae2637790c17bfbbabf837effbd8bdfca00ceecdec5b1be1ba0ab4558dec2d2284b8b0f1fbe180989a3f863a921776121c80649a9058be2540b35b39349210e2e0c41fa8ec0c71b43a8536d18b23186b8225897e71d85012434c0b7f239dcf08e87e15717cae1b46809d1f9823fe9a22bdcce71250bb6c6db3081a880e1a4b6710a7a893a4ed18f01a69d695aba0439216c2ac60d22c43b9eff82d5f5f3c71b3a3e03f58acdfeb6013912ea7cafc8a5ff58f4a3d6c2616feeb894fc8ea2869cb1009284357bff8a305b941a4206d08556d3394e089ace6928b3d085873cc11f7406c05c53b2f77ff989819122f05b98facbe39a834f6c8b5a88398b9d2c11e4774b0b37b0eaa77fda288955f8fb16ad296f62f01463e07a4fcfcaeaab5f2818eff51e28733b02121c1401d3bc157e02cd456e8dbbc1c14f39b8de27e55bedfad2e3496ccd48198440634c9f9bce8e0869f9465aaf3c9b458aa3146b1cbedc9fe9d311313ea30563bee0bf0f60074db2b7894bbb1344dc454ff3528139ff2123d3ac868f848dd5420ca0a91f054d5d1bb277d2df8761f691316822467500712386e75c2c6d655055d504c47d1a7572ee36d0b1665c2164eb0481bdd8116d7dd4ce20f4527742c85432081b122b9093fa6970c9b14c5577986202bbbbb741c6a500812503782a5ef4b418383d1414a3ffcbd146d85b1cc020e001cb174d2438f0f608e85b3851e0946073db8fe0957ad974b882ccedb65e9379e0b4c2ee2b54bb23c7341ca2aaec699f7569688cfdf9be006a46a94129af139d88228d3778c3c5b1e3704ba61201e62e123af05029442341c1bb77367f53ae9b9bcdd308e38f84b1b94531e2807a2137614a4681939b9fe453080fcbc03cdf1f0b9c5d85c25cb6e1f48bfc39794298f486975cbaf5866cb901f3d5506eaf8b12adb9a3cef8dd6ad0084bbfb1e17e7bfae52fb7de896344df92f3a961cd591bb0807303c7a67663e463d9e100f9dcc355ae48d61932166c42cdda54fc43be78b740cd3757a0e8344c0259de1fecb6faba9519b806296d9fb23901d2ce167b175e887411006d69ded910b621288ead50083a442f210cf894782ac52b715b938d07eb8c1f82eaa57552a3a60342e18c5ebf4e3e449d273ac1dae55cd8556954ca21c5155cb01ae5328e3aefa4eccd520987bd4a94a2f58070a939ddc4dfb25245175ebcd3b4136091bf5298187c316bafb24dacae5a6a3f3519bdbc0e01565e9cecf96641bf8f7214be89d4894f1f84db941c4f56d0760da7e4e0f4660558586f58aeb16ecdbb03c4d54f6b03600623b311d62f43266a9fb2864f4bba52b035240b790bf171fa0e024257732ac1a529fe13f1ba9130b25e90c9475d950107c6adbecee42b95c38c8a964b9f0d53c6b38a25c45925581aac04ecbd8d020c8a397ec6610db5f494513bde7e5fa91d8f2a7f29a29415802099a016336f5c40d3c65d41ec734123e726e220b627f1dad781cd0c44782bc177aa58b226550a5b9ae695b4e2777ae2491e49f466ad68f4157f994875f505440272886884b44356d78468efc9394b40b05325aa8a54bebf72877966586e38e1bcf84a12148403c4c4bcae00465e22c1dfd6c8818641df0bc7b37f2b1dbed808bbb803eea8dd45a76313421139c140aed21a1ade20b30c9ef08803bcf0e58d24fa1d3c9e1127db2a974e5f1e668a9894040210f1354e599baac4b68be10c117b24b9c9bf4dd8eed117067629770611daa388300736b43d7e840eccfdac9553293c81dfe4fdbb5f608a8fef130d03190e4686deabf81956dcaa4fea1db0d3f759448e6933ee6b58f1c65605bb6dcd007f5919e989a89e51071520e4db8a846ef77a521561dce7c7812583f165497441956e788cf0ceaeaf7ebc436acc49260ee7eb0798dee32df28e639bfeded452340809ad0a24e2809359272f8d8dec7846a6ad8a738ff8eef2f8e084be60a8d3afad6870adf544b5ef9cb6c95de00563b7a25f2e72ce08f790109f5d53b8062cab5d8f0375b391d50713d74f59b06de0df5ab1702a3065acf33d515acb520aab213d951d663083fef116045efd427899caea2c839c6eeb9cb02c4a4d7115823487eab1f441a4a7efef4078c63116377fd66986e1bb28b526c37f03b24a1408f2001bf333ed566d9c1d9ffbeafcd83c007adebe2b16a7c2f8bcad68f090fff4e3e9e20d0af2b9b92fca207ed3092deb6f2c9e31ed26ce20f02b1c7994ce1361f28b9cdcc7dfbbce04ef8b86891caef1d7755fa73dd563ec0a22ace772271ba908312c42142204d4c7a3528a2cdbf8aa29d58433005786ef35800fd41eda58956ef81f16768a9580bc0c164ed701f3df29b43ae077ae1b49dc908ef82712e09d71d2de66a679d2754278aae4765b07e2626b8c2229965cbe331880aeb55dd418fb9ab670b447f5595a6ce323a7b7f1cb9204cc217c851a7805db97347df6411a51653401984ac4fcd83817e54d643a89e105d8b5db5662a7dbeb499954b8d53070c0f46b7d853a42d4a24005f4d69fbdee295819afd5c41c0508ff6682ab930af3ee05dfa41c5887dc1e16b034361a150b6b9cce89981b4a0204fd54f3d5ae42b20e0514544737d868cc0f54075437e601822c3d2763e64129b0b54096ac968a9ac1003d207ba9e8d03d7f435102251365469fc165af9fa538506a10720ce1a5b4412999907d2f86411b33d59a7e9ea661df1699e1333d50e5ddadaf111c8d4a6f75500708f3dc2385585cfce06f1f6dfd8b898f066314e35ebf3e5a0226f1615a2b6037552e2826d901bd818b945ab0bdeeeeba95438c0be7c0e3202f5a2538e53713323baba220de3e81fde8c3a1c9b640c476141dd7e9c4ad623798a9c1499f964b5bd321d5573729478ac9a250750f9adbd1115017010003a939e381e53e8e32e3f600f732c2296d72ded70f6ae0f70fce929e2a1a9c5f96ef317915345d38db2e98d9e99b1726d63ea4b9c70b22282566827c1ee7540085dbadc3f365690daa03c300f056772cd7e4f8b22f69b81b57d8f4e91b2614f05088fa3ba5de3090a19f793df3590cee01c62e890743394c3cafc64d04df00fc371d921827f489fffa8be7499b0e96a3efdc296955c9dde7e8c98dcdc9a1962098a605342c9b210d4fabeb02f1b4f0fcdeb6cf32e2f71e8401784438d0214417d36ecf5d15b472044ad736f01a8327dd3bbbdee957236096ec2d13bdbba4b3b9b108076b953af515256d56f6355c1e2bb30db6e36fb265bbb7124b647f4712a93ea90655ce9438c91e4c036472bc1aceb6a678fb3a760811aa939f9a7035526eb521dd44fdda897d0186ad73330bc5b47029084a600001ef6c396caf114ea289589b04c91108083116c428d52390e22a99e23124e212d89e12891029c002132ea35c2e05041f33885b6166101184b891a64804812304ed3262b111acb1994a53113c03444e27dafc06bf3ad736bff3c626398ce4733037aa94d15bfb76cffa3ab5141759a2d20a11123fb318f58ac0bcaefc71f986fa81be547f1f3c5d90bb6889f3a0472c09c99ce901cbc949c72850c14397afe025e3026599f546d7687953775ecb69808857d6040949b0208375cc2dad913728ecce35b058691a16687925265eba07ba869f59d2d0810573a247794a1cda6ff073a5de18dc6ba887d901e06aef2eb98fca00b50736e12d5cf005a3a3ff9507f87e9f4538e8f66a23c0dea371091cef0e26d48830813ff5e48044ec5a3d6d182dff98d01971e0a5a4a22c46fbe241fd337df6a824c14a80ae67ef57a2e300181ea77dfb949adfa84936a16521a377c18285d829053799d039a2edbf09e741d71dda5f0f40b915b9b49d361c3f8e52ded90c9b173fb1f73bf5822b93168e297e9f6ea45f8d0e5d59f93345dfbdfa1730b3ea7167045f8ece057abcd09af90c9b96c0379d4997d9938a4b9448c7c933ed68a9d561a60c6d960a6f8f7f192c5d36a3089c7ef318024293ceb3b75f6b5d8d5efc245227c5a88c12d6df084d87798ba7a2340f384f17afcf595bc9d67bbcec87e1f4188817eefdcf54adfc334f5ed0a5c6cd85666e959cdee11aaeddb253e3d36a2fcbbc5c49b1cd43c39774fabfcdd76c27cc8383f51238bf28eabfbc2f10b216dad5a60fcc4fab1d6b04b31c50366dbb4fa082f7fb7554e12e2de02f9f2d73cc7f471c9eac997e6cf1786ea62da2700a7a460b915d2e1320e1b3e607c3736922d3a8887defbe35de5812ae7bf9b6dc0c341da9287b55c1d9dd956dc63bc334ef25abd2aae0fc8e74cfc08aebb880ae7cda115440849ea40820d00baffe117bef6909a82c15ad4f97cf0e0830c0330b478dc885a5d4961799c90c9646b679dc0c42232b1d982ab19ad47b4335c6b958ee4510ba4ef912040d1efdff63e8958e9cd84c08a6a724d190e5e0745de82129980983ba1120afa59deddff8af313e1c73ddedb62abf7304ec14e752f1fcdc7aba5117f7ab0362e0a7d9f167b747b25065f35eb1a8596c1396f74c5139bea553cc1bbaf335bb002dd0a1c53f5c20a73b5e61020e355e147715765f61d3ed372c131377dc075f3d8e80eced1e85762955a307a7ccb12dbcab2b551bb838985b0a845ea243a1739c65c8277baad1be802960239394f6b45ac77f9d0c38b11969d2328375133a2a32c2af4ccc637e0dd9e3ba6c3a975daa717f1d003e43cfb9c4b0c052590b8350ecc5ec78a946fdbb0a3d94b461560eb504917fd8d48a844fcbf88ed2526677e20ee6c631207622a2e2e5cb8ab515e2cd1424452df84fc2cb3e9457c4a7e2185cd1093b4145f92c88982a2a5df93abfee70b97d2f7623301cfb1ca942ebed822b0eba87b0d3c318c31e21be9a4a6de8bd75cbd462fb8b81495c31d9302622782e2a98bf7c8ae0a9d567d40ba0e240dccd90adc065a1c618304cedf2b4581db2d04c0fc9ca81d3c4df093ebc82eb865bc3f5e5c189158cfb6ab847e821fe44fc5ca51fb2942e527b314178ac8ca555bb89144a408c80392503d1f9a86448cf08386be1aa8628241f5c47e7c9d0dec0c23c7817b3b471b5bb631de38395cad0df22a0426fa4d66c35bcb368e1495f1656b67fdd5f7893e3877d3a2c68cbd7a6102e3f6eeb7ede3b68fa55f8723c9f4c1e623f19e0470992ea1f58580d278e0b23edcef93d37cd20ce84a2a6647760a31527b36137508418d4b1b7fcf013091d255a459d3b9954a6340a93b96b8fbafc4cec488ac4433ed24b7a58f0ad04e17172e7e9e378d5b27f25fb1ed1453400715c4a075ab1ad48329376d3d0fc6b5f2ac5586a53a9df153e990a20bcf0dadf3a70927805f0d634a5b00047ac9a3a755dcb3249949a87a924955fb4da4560b88187110002ae6a8e632b4d52a51ae8dc80c8af81302fe232efeaff4f8376053543e13ebd620f3c382bf33ffa231513f8b76b31c8cc4a1785f663a1b4087d498034853a3e70126742713bf653a1f25d15c644ad83159e443697e22ef403990d6fdf147ae110ebfd790e8297689469f75eaa890b83aee10e259ad05f6e18547cdc5130071470b0098b773a4e10cb6bab947c0559fd15cb46be94c72301c81f22ab64b039c7ce9c5d481de54488e05d3a811ad2f159387b937a5d05382a973ee675e3952a1b10490e840c5deacd1756fd0ec21f55014555092f7304fdda10af094bee0409ed8bf1c6280bd6a44ca523e7657c1d5bc4285a77747407e57030ffdb536122b8c3a180b7475eebd416e4426cb11c8bc0fe59cd02d1a1a14a94343500e0d64e87195a0095bbb4a8f34ecfb8c8b3a7d152f81bb3913ed21e83ba5c6fb4a2b644daf78f8386421a644d35ef868c15439b5ff826d9eecd13cd3d41939b6cbc355b7565e666dc952bd03cf218a86bb176adb3c4f1f6e68f6f5c46ef8f4f4e8a6136f36855fb7e6a7f68124a727dadaf00324c3e98299bfeee0f653f89cd7de525d772a1ef76fae59758b4b7398b8deadc4f6c36719477ea3911057678c6ccb10d6ad9fe7105fb1a3a5b4f831854651d3fed6b7d96383fee862535e2e8e58a9f8a7f520c4b9a5642a24088b99748bbe81605d449b11380857e985f1e6b21cc4cff47a262ec3e9478235548f02739954147575d4c759cd99dcafc3d9ce7da53d9f816eec4c20f2b660bca0d4f04d2df019c89b342011214cbbeb0f1129842a3b84cf877ce48240ec81d2d785909bd7347b3b93881d9670e5ce6516245a0b9afadcaa0a394dba7e513769e75c4e253c1a50af9304287051d15b2d64512a99c5a52f41d86a0306d0d0d98a8c0e6912c00227401f70bf22e566659e82b28c6ed56072227a913ff172a530bbd1e0ae8812b84f876506a854112300a5f597140b57ac01719439417b392f683e6ca18522fbfcb3214ec7360a095857650c42e29e8908ab89d068891947f63b60ba5e2cb36b9a15e5c98b9c1b53433d6f570081d294df4573deb4cce0d129c2f14c0924ee27170477a18f8c4a4121317ba0b69d449270b82b99dc4c525667d75613d8ee4affde3b1e295d948c87700d2e90058535f91b868f59c09043f79ed2d08b8f3d06f2d5abd6b65a50012ecf6d5cc8768cc9f7a172cc7545cb648fb6aecff112c92d3448291587e6abef683cf4c9d49c06ebe99e2124ab3dc7b3417f924fbc35c67acb0fcde4bdb24f3fb836b9a62a98ae57b1dd5579962480813d10320abe8c709d7df5d5375a922301ebab30f5c005e4b4ac585a0b6e1e85bf09be30c3610889e44956d652def206621601f44738692018255564a5d078529a193c7b2051c430e9a8b0020843bb58eafeabaf1ef2de0a1ec320adee67385ff19a9b1c1d4d5442a70ca22cce3e3f1828bdc2e0a6dfbd4746bdd7de26caa52d22a1b6508dda54133503682480c8a9038df764668323ffb1221890237af2f0eb984bb4da78d391a03d459e095e34e3e01a40244083046746c88b44f9bfaa9a84d08c018c7fae533d491045df288ff3c0c0fd5f1b8673410623c99acc1d145628636696e168ee9213492329fa2ae05d57ab86cb7a8f61f31d7138935fda5c2cb8ebe40378998e5065be19c64778d70777e172851c337693dd814c181415244137f817cf2dc9f456c42497c4816838b224312137630adefae87bb6ca9821004d6972c5548651a0d645212a65eb3e0d11b5413c9620dc047902fed5a557f7cb5b25913a5015c8f1bd52dc0ad076526570add1de05f77b9e65dcfe07f1f7e0c27d18fac1c57e1464094f414af76a6ea64fe8cea54c37b875bdf5c8f1599fb7c35bf5eb2934bd7810265f684e74c1218b4fb6c95da33296db6ca6df096c6f4dead10ba6f9b80cbac5f40923594580bd0266d6bcbd2666cf635f53aa09da0633b005a98ef271c8f0f27924254671388f518274858055268a2d961c3991920f7cfea12fe9db02945e8b968a66aa8897502cbd7b17a7086e118ccfbca67b7b0d0e78774625f3a0e7d18f714b508570b256ac8375944b2b71e7cc514d6c5afc240613d838a1f812a151e5a7bf335954d01e337def6637ac7a88faedffba781896713ea200faa242718a57d259a47fc19f4f6b2924ba635454fd1cf68e332e81ce55daaf3c60a8795311165d13d051172fddda6b6efbf7911de8b07a35fdf5735c1d710c4aeec6d9c7389db6676820ffaa6259f02ad48345ab5a7724707fe275389b3654ae0c16bdb413e853ae67e3aca6630449ada9aad37c1d89a92c91b1740a93c401bbff6c52e5c59766aeb8889950c4a864ce4b0a2edcef82e948b793d86528ced5b2d3d52f35564de6b67e7fd08eeb11daff27368e3b9af78be8592858207689456b748662f271969586504afa6ea2272585dde7000ebcbcb0ce4204064f5dc370cc755ff2a71c0d192b407420498bd2511308d38ce828a374e2bd782d046681b3d9153d5b5d221c14346bd33cbd7f5a3f9f4c2a3e9f38459824c99b559317da34c3e74caad4afd787511302143599ea4c9295b7ce7cac557461f36498923db3a5c5804525ddb1bbaa4b5b83319004fd8437d8332ebb96459a2d2ad7da72aa95a8860db73c96e0d71ae45ab3578e00de090701a01999c1763422ae9f5a1f8a91070f44e82310bb282ad945e8a4c9133332f1508096e8fbb1d556f2e0dd0c504ff4588ef623be06e84a161168b9d67bbe6d0c20a46dda9e39fec71af3e7a833a2d7e0c49ee431d5b4097b4187c2b179c728c78a1f15ec137ec163b465272e2d3dfc6984ee51c99970bcaf852afc253970314765274acf05ceff43eae4ad3feb5a2aecdb39376521b83f89164c520cd0094dd8e85b10abb4905346ee83c855b183e55abc467aa2004e4ab3e4eff88db89aee2682162e102cf3a7feb897608521f94bcd63f09b0a6f95436064db90c6d788f711102e520ef5076dd3405e3ac378217af1f7a7920c3788a4e61327c1fce5afa40e999cf15da6f1a409a4a1aebbe33cfc81f345e591bcc013f1c39da5247caf6ef2b47792346f8959142ea9dbfbf30f564448b59748a49bc8df3170fddf0ad9c28f33498de03fc7d81c1861e09b3d0e6066e904b92c833c778887e873f356d5f4f11d57ea255f400cb7866dc54bd1bd28e0a6c83b8599618306f592f80791601f6025fec625755ddc9a660cc435176b7d762c54ac4aa1cd843111f5433f7030d0cece069221e0e5156530c34583eaccc9f3618918cc6027171878209fa581913d85c17e50bee20279e127319505227792b4a8aa8c22141d5a62323c08577b07f8c4d569e8f148d7553669f7eb50916578478e49c806c577a154dde93506e63181e16d7f2418d4da2b74bfd49ecca8419736ce016f7e8691ac60af958373a7629301480848ab4dc81c1cf6a28d1445858174a528dacb10707862e6c12128f2904d8d03cfaed8a63c0e79e0500b250dcb1e82f61e3278566171d6c0a6400e574c45d303dc4ecea1ab5b72a472cadfce18296438539d286b1e5d73387d1c92806153df7ae0cf34803e41d188ec0fd55a580f2e9098a06d436192c5429a18b2abc0fa46997ddc0565a6b63d94512bf55cb010566c0f24f8833c1fa5f0ae49251914a338172efe48eb3861ce33a6e742b3033f1712bf40ff3684f2163aa2c085c6355a00b76b4ef0c11d765c3f6858667e0da0329c0a08408ea33318b4370ec60096776c6a451e88710d6320b1007464a57cd3fb2f44a26c664f0092f76180c7868264c60f3bd6021cb71a170e97e3f9c630db013356816d5f575fd54651c3453307d182b97e97744a00f8c0b321d25c159010b8f75a27f92c27d3e846c3c1d999da82c750fec03a550209f4db5620d02620350a07f63f0c1874403c73d600f9c827cb788c67e33c4b67529d50b1382d1104ae222c556a68ec017b7c3d98b93e7141efc5926f1dcd27270e1d13000395c012aa0a034fc2d6e25f9ad619150b06f6299dffbc5ad8ca75a677d2bb148295c51b257b84487b521c04bd3e1e94bdd983a810952449684a1a44a9dcdf82e59fa31e29b0b360ba70a346c5e7a266fb91a20908097c3dad0e658c4f6dd16c0d4b52b645f03790db827bf1ea3717c243ce7e5fc198e348d2115487b661ef7b750bdcbeb4145e8242f253f4abec381992b33256e90ff7812c8de4792b610d4cbd014ccb02b80d32a0720d7da33dc045a1503fcd22479904294943e0e6361437639026719e2fa8cdc29f958d50cd72fad32894e224e415202a02ddd9536b39d5f757911b7e86b450dba320e14274d5b2dc8a7698716e7bf787f9a7a9176b935d2bea6f00a30ad00bc99db4719d168b31b6cbe498e2c5d776203e703ebf2341fafc697cdafe434427a71dfc79bd6f79ab2ae212a6fe385360ec470b42ef9e0215535454578429c5faef5aed81f3925d19164a26b19fe56f050bcff7c5b0a0180b966a79fa3877a0427cae6aec07a8ed2011fe0c0804eab736197a5eae61820c4ac67c3cf7e1fd91457fae0a9836ad98615fb1c47db5245863e8d2a2dacf9d3be5ad43eeae810a5e922141c2f5de2656b9d04da0284186a38ea864bb39aea17aa3a7608b636174ba9e71e75e39ffc0b22fbd0cb676cfd23444b8ed8fb663193627eedfd097a819ae3c69a3b7a6a9c2d3d90859983ccab60318475a6b808bcb1280d61b57d96b1ef3efdb3c598fcb250edcab7e0eefb99c17b690bd2544a3a2d9c4f594f58398a673fef101d24027c08ecf7d429ae2eeb64ed2ef11c421451ba1b6e36637d93a3faab04ddca486becd90cddd990788984c93ef0b8bf31bbaf9b3ed1d1e9465dec30572c7cc1a6a2efca39b3edec36602453d71f43ad5151e6a33a09fe6ce28c6f6e6e9ada5cc89909d6e802ba76951dbda5bfd19b62cc71d791f0af741b0732f1d4c1296ca1fbe2ac3794a6f1627c9d010316fb083efc40eaccaf8a09934751122160672bd21625b1d2824659c63951398e57ea6bba2c3528429df8828b75f88976b91c7d5be51bdb0522751b4631881e9a0c211843c5a5fd1b6f90fc2a9029bc535ce83742454531d1e1c84938817fb4037252502a36e13ee80d817e867aca5d2454df530f312656c38ab1e854046469034708497e0b18b3be10451218d69051b23c0ecf74bf7d15900902f5c7caa77337595ca1c173bb809efc63fe044b2f2a7f0be3998beff1de184b719a835d52be122f7b76987d387be8a6503e7f7eb6de3aced92adb094924934d43e64a779f5138c50eabbb9da93538408c561516290eee1eb2c76105a83550483c63afd60364a3ef4249c1f844ed3ef8889d7121639efebc916737007775e0070fbbe599f596b97ec7acaa754cf37ef9420cd7e9014cae600b4a622ec4baf96da3063f4d9d07325aab7996887408207f9fdba03d92e7a1f6788f2ceaf8b63d6c75c9e49f096d8dde1a0c6bcd02b852040366a709a646bb5822031ea16b62ab30557fae310bc348c793e6e01f8c7e015f5581ad0523622d88d37a64710d2fb5feca244f4ec92149d71e610829bd50d9de6e36c21a6fbe9e071685d9ee3768e0a0ff5e4a0af7edb7716b1f6c615b137532d248b38e4c982586bcf9b2cced4dcd05f1618072b5c8dfdf60f0b98a1e0cdc22ee683475e8e8b86dc9f3b39e4b41ddb76e79211779e7cf081169210f35d204115a43924dd355b328bd2e4bfb9f6f35919e02402095f55bc6516d99325d30e5c0ee51c196dd8156418096ca94526b0d5b3f7308a9aeb2207cd5bad62529c40e1a1b643497f39c7d73ad70ce1de305f95b4e23e201c2c846314589cb3caa65d35a1517b7559f0915d292960da087588bd073919920d6bdb13a55b9074561cb0761bbd75d67c3ec9420f7829b99e4a305ea16dc3ad1ee65fe891543ca7787773b5c9d2a8adeb4ced68e61c3dd698565a6a4eb2ad4a1e6b2d12b375cb4372e29a419ef68914466691269ee2c1c85440378668cca20faa15fd10248bc55774e3d64c256d4bf32ca5ac3746fb969300e72016132b66742cb15da352331d0aa16b1f4bb4a78eaec520b607c4e3aed44b436754e3b0f8e2286d985d7c376ff76f01c48a0326a2c59e6f0129e908a6380c0955170e70260ff5d3500e96de725195c28f4e3c5c249925a0339375c721d4dd9bcf0b163376e78d1272dde8007babacf9a8178cb7eacf29a2830ed0d2f221a78277bef6b3ed3e712f09745e013af0413d2b8d907eaab6e7e8495ac5b97d63a95b1db3aef75c48ff80028846305ca44420e1434eec9df0cf57ffc385827df00d9f3a293155697aa658fd349dffbc7be0c42fb89d50d9d9bc6cc9f4b96d69060ec746b5f1803fee53677870c14de3d01fa52625990be162670cf3943bd198b34fd32fa3c5a61b38136e93344aa74b5a82c284d76532c9c28957c8299d557449f21363fe1f45470928b130359d5b433bd7fbcb9b995962abbfc6c54040893ebee177b63c9a0aceaf371222f0cd9cc813ea63377d18a1c4b55d541cefd55ed727c33d0ec4ca1e5d08de92f080ef8c80b52ebc95fc0208742cf77fb3cd85adb3be0863892e687578caf8d3da48d611ab77580bd2d442b631f7f7a002254204071515c550845eec905412783759e8faf5b1a19d965d14f72179051353189ca531139a5237fff69d0c05010832c90431fc250e61f9646870eaa02ba15a9f5cd2925aad22469b1c2ccb9ac0775b76041cc8645f737fce99c378c2e0540a78b5640f1ad92aa3d8a576bc368adc08bc7e992dda35a071ce487f88788075cc963309650749b81532a1299cc02fb3650ee8ff0b1e820085d7b0aba3719467d9c22b99233a64af58b959f9e785aed4e92702146fab847ca1699af14123564ed428cd9ea037f50615b12287b0ae365a9e1623c9e1e4022281c27323c8c12b29e9ec5936c80981053c45f6817bbad07a7df33e7c9ab25c42a0e735fb521b386b59471eaf61a38400c7d37ca5b08044a3b5328c2ba7f029b22a6d61b25507f995898d406ee187c5d4666a8e296aba53b612ad9db2cc14a21e39faa272751db20400a331953c00f180906c2320825b9fe5677788386e1e6ae3f297143f75927a8975ab524e3ef54afa6b4bb6e7af4c083a968636c95f1bd613d9ee9253b1a59a0609bcd83931832e41090a6c2aa72dd0e45e28af12b0b8d26a18114df8b1e4e3fb122ca2ef9f8c3bb7ddb57952f0dfaba44cfcc2ad947923344614473034bcae8cf0d2f8ceb240c9b26fc7cc9ae51476a4025e126eac5edd7ede955d38655318eac7d82ad1430d3b88121044c486c2ce38780367124e4cbc72b01f74ccdc1cd42c84eeee14e48f8f4d504392e27874b9437e58c3f843334b24369033598da7a50851618816c9c0cf2c88ed0f12acb090cfbff273c27c9f7095e015d4398d03887e0f79fc3d386443c08b0f6726115d4bcd06455a0da0987e596c6ad40721a5788900c95a8d9e80a52ea97fc9e4dc71d72ecc36b21aa888352a4054b6971ca0285d5328a498190d8b986a32015b8b7d6ab0ebb55c58e6e0c8153148cacb7a4d239fbd701387dd0a566551294cd2ec733d80a742dccd526dc43cf25043c2e7b18e2e22655c20cd11233a92d5a17a722704545e4bed2f2b1f1a59a97557fc2941edf56e4b88ddbaf332633f3613b062924bd4753edf0ffb7c9524536da137091b360d56684804a5c0a0b9154dc372562371cdc4be1140e0cb10d50c08d5cdb39e6299fe111ecdac26f035a1d305c3c1c76249e250fbf9592e83c2b7ac8c9540a94b307bf0d7230b8b57c5d7115801a5aa51000138989223be9a0e9f61952872b6b9948273ce0d33136285c78e90aa2571b9b08daa8458b932b2a545e57e86f8fc43b27d846304a19f642ea70c67838fc592c4a1f6f3b35c06856f59995857cbb996b3f4cc647b17708afdbbad39a121e01bda337153af29499cc4798f5b858fb63a7a31243e5299d3bdf79e5f3f53f2012eda7ed8cc11c1d314110c3167b9054066b85a5ec55266ab56a1c9b20a94b159d0c840abfa95acb3c14df87d21a6946ce85cdd07fb68b45035a5a9f8706d0480c0ca04da70feb5dc251466ac9d8cd741e821e2e379834a667d3d4e2bd4c2616819843eff445b47376bb10a4e7263e7a08d088773a8a9267122958abcd933b6e754a06bfeffeff9438f69692232bc580406c7c041365fe736aceda304ebb568696fcd1a7faefd445311c48454c801668926504020782d225e7d513c32e643786c92c8334c62a5d597a84a8b0f9984317c77ba25a046c346cbed94983563bdea7663af7fc5e5ee428397308f886ff8a7cbdc1d97ac4cfe4ae2c271e0d385ec71bb991b2c92837517b77cdffccf56b2d307fa866fb08cf48a396abecd0c0818babdac981565d9b7cd9c338f1d1e345097478d7e23d4daaf292ab7d6fe434783611b6babebc175abaf5fef043bcca6ebf5e342d3e090c666a83a3fc5305c5b9d457fe8a50a452cfe93b37634facc000dc5092572ecf60f9cf48d9bdc2be259f1c86ae2ba99a810fa10391b241e48f110b172c0b4e8d2805295b8f5fa9f1e2ba4fe58fcfa1e99a9cf19f9e397447b7a2a6ec053b78bdd14dd203294366b4b578c8ea310b481e99751939669004c69254ce0e16426cae728e1e4bd6337e336e2a75e91eb2622749461af96f95b90aa42aa99272519c661ecb826b987478be5c0098545e5d242b25a17bd31175c3f77bf9614aa9e608ef9612a34e1358b58d9c76efefedf6113b021b332c27a511bb26107981318fd253039e09831308ca838877260eb3cce3b1c8bd02ad5f1afafd8a42c16c2f88a11b066413489854551cd6808ef4c0ae86d6a76309c7b514af2d2bdbfcf2bfb8e6ab14461e4d7dccf70359b869263c237c99df1d1f6b4ebb5719983be2648e3e3b7a3dec314bab0568b21ea1809376f24f8c0f4c0e05860735d968a6cd26fa2cdc675d4c3c998cd7b2d72ca1a02a1be058f269a8b9d72c4945fa1e7fb5b77fd054791b9e865d966ffc93473576db83784c5c73717bf0d1dc84eb0346448bd87d57c6788c1b46847b0a3af991bff7331aa308e2220217e5624a07751c9abc1004d54d818d5079cdcf55cf7a955e51d9cd1dd1e17027d691712e2b0883619d1328e9cc8b6ec01c4c05a2a2cd0cc669eb6a48b96b9c234bfb283a42b7909be9075608c5ea4dff7a4afe15a3a68dcec4cd95adde15d091e272abef015528d5ebd53d245518ae1dc21b9bd1430ab5c153e848d4b2d7c6dc24d23382afd9ae3c7fd27987e3250ebed59a00b7b939c23ef656063cd44939e8ad21ee0d483796d149ae6053c45e9f2c0363f30e111afea72449f19f543da3f17b5969815f328b4f2082ec0123d342a3e9574770209d3d60ae5c7f30144b032768445a31f897a680d1ed92466f502e61117f124e363a0aada4321112ad368f5be241d186114b1743c5b2a8e616e6d7771ea0e0ee0ed7c6613605a6f0efe2cd4ff4f9413df1149dc163353c939d3fbcf7aa7ab5fbfd99790a2f0c4015451fcc344611acb16e37eb52dffb3e4f3552bf5bb369b69f6c6ef577c49b09c5388b436f6970983a0289b20c582f2d0e19cc6a03e64a8cfd6bc732ee3663c33ea54d197a1580ba82017510a5fb70d108bd3b90bd49032567a05fb2d9107f2e3d9d61e3107faa6a1e9bc4b54cfd8c109fa7dfff862c5dc5b59e11431b0396cfbc946d4d0a7eec1302812a104719af075502c3ce8c02e99cd25688683b2cbd783cdfd05dc8a0b67f933da70300b8c1025c94c37cceefdcee1390c8a25f697a1b478800c8223ddaef336668fae20c6694ade8d770f7cadabf2f1eefe6236ca5a4f049c2bfe2bc0c234b109fa16c0724089bfab15d4d9a210b8be6cd74859f707aadc8b44bc9edf7c41660eb9c874ac16759ea57970c32ab112a65d0cca6a02773be8a50722e92c685e421a8f1d83b264784d8cb9ee9d38569b56097ee4e65f3d3d6755e8d67c47d1c6f92f3eed68c8289af1d32fc5c55a858022600167a8a0982533f702825208e875fc383e1a3f290b6fc9b8a283bff48f07d47581e831db28a40b3eb1faa15bcf14c37df4802002fcbacbc005083fe9b061cd024400830213172e5487d6f351420d8a4f859b32c766af0db2fa46d3d23344311a2fa191ddd23c106091fcfff496dc5792133995a4494678748f6fa29f1ec8bdfd555aa15cb834f9274c24d117bb71a8ceb871e31a28318f62760f94e0d530f374da6ca8cfb9f8a16cab70f04dd505e696455559cb7461f3876b3b8324336204aab660be7be5e059f53e51289f90b93848161eb4a7feed4c8e4f9e9fee94488e3390d491aa5f3b3aff41d9132863552758ecc84958c57a69e5dd9aa1bcab414c83cfe4a1b794f013178c3c17f394bebdbe99f73c0b5d1d118afe3b513d3a4e9700843ede4cc74a8a010c0a326662f53abf6a0ebc3edc244934e0146c1713da735945e3dc2f0582b4088787b74b8579725d3b78cf1b76963782d1e41555d4204428a82a8c4ed6597220e408a9b9fdcf797d7bbbd8671c01cfcefe504af8fe0b8b9f1d14bd72c321ff913f95be3f51cab3d0e66f32b3822edc2247acebc7e4156f79b8ecb0244526af1a9e3b65d0e84c52303ac6f89fb812a2daaaa1a665fb7e82fea1f15c34e7c005dca8a6fbd7269e12dc88ef71ab2be0c4582022ed9af7c50b681d8e5b57e92155945470ff15a13ab566f217f6c44531cacf1452b846807421d1a78feb7a2c49742020a61724e2a9da2a0e67943650f300992be5decb11283578664cfa2f1671ab052b386ee16a2ff042c19f23ace3e2c592e912f4c34e2c69739d64ff8889260b7b58c8233d3c648b783b5f4eec584e6d830ca45a679d776627bebebbf8c28ac71ad03c64c0bf961929d26c28b4fdf6cd1e214b31f1524d0d6bd974a596fadda7ce3b0e01af508ae921c2f825ef7e8eb61676d4a862e53d6e46861b9328e290e685247513899578db486b7ca6beae7d02c8925b7030d4c6125066a19d0195f6882797b40daf04be4f2017ec8433eac4ad286532ba4f276ed9d32fafd7b79cc1f5f6a2720da917f01d1b287aaafa429065c1b583b1018ba1ee19090a7c1f1185247142f3019f427564742bfb53fc682395e5f8d95b0878e3efd239ab66f48e5483448c6c5c51ac75a9978c202556c47bff1e6625958bede753318abaa51f565e7a6898f63337ea6f5fd97f985ad771b3f96bb0c3cec6e3a9a87388e57022ad6aadae8b6d71b6b1af0833272df93773f96b4b2357471a76a8d623064577ea80d6d9fae34359fdda30961447b987a466f0ba01997844c3c678f404beed1810c9c6284bdc65a10d792eecaaef766f353a8a911369b3ce0f546678ada722eef730759e4318bbca4d810b849442924750d85a0cd2479bdfcb57cd0baf04952d8f93d8dc1b940d9fc8a627b96ceefde18fa7bd756ceff7e180e7860f6d5e397ccebbc982a09cc82c7b5a05d8088279e625896608c5c84bd30e7ecbc74204d63df1b794a72a00295b0d2654cf5dc20e97a9759fad8f74dcfe28c18d1144f7446318ec92192eb626dab4697a4573abb3552e4b15be75ae6cf4512a39ff39b3a94fb8a0e0778adad4657002a3b819d3990c3b22e5a922fb43f26d3144abab8d6a360848a7d5aaef6d74e984c9f02f425d7159984992a70543d56c7bbb9b42f415ee59147f66aabd50017ee0b3fbeed3a2b8fb234e845c77e275c9bd86152a7b64984efca4d3d6dea8a7ec291ef753849d2229fb92f5dea916d788d4f4b30774593db4193ba2af0a50fa5e456a9b6462f76e7d72846d3b8b6dc7ac3b7dfd18dd055bbe8ba106a2be04043909ef58c20d0f4518d23ffc240f5c05429b2f96825fdc1232c9ab136760e58092e340e1233e0501fd54dfb8aaad9447539a689a460c2896f871d7469919cc88c64291def1bf28e7becd538f1e4e2fdad1a313adf5aa9b7035fbf351c9523defa021517aa5e00f75c69323676dd73c7930bcd83663c7530fe7d47b8ae648cc2dbade91a1dbf08a649ba05130e278c0da65716f55b7bbf12dcd53b26d56b3f3b2b87dfb50d0b3d8311eaaad7c751c6cd7d9487d50d5413ea113f7d3847dd29054b35f468717a8d8acd8f03e32c66c3607201b4af2e89fa638560c5a4304509d1f79348037c23a929a84e28f911aa63281d4f2479dbfe6408ec6bc244c4059576a4c38b8dca819001a1f7d06805fdba9a6db8f1632342d8f7a5167454a65a65211af6278b3af411a4a739c26324250a03a0c3240411934b4b0f4a4c92acde6c7936f8c505c56b03ec6f960e411cfd61484e056512587bec0155307c47904342e89752c67f3d5cebe96f7a6380bc750e6abc7e0522a0a34ffbca6482b89c4cbb97cf524eacb519084f027d58a619bd4d320234c7adeccb1352c50beedc871d21800c370e3ddee0662289c0bcf24bc8723684677673f489e2821cb72a17b37d670d23888bb5afd5d57fde342aa010af39b888d8f9e0b4f63548cd911c686e923585f4feadfcbf2f374e8424e58b68090fe52207d9c82378e2187d854af2480dddec1f33b0db5bb91d30356450b00c48ca0346a1e2d9d8e60d79d11a7089e675b9eccb8a3c0a229cfeaa1ae79fe0f030e8e4c9016fdc4c6c3984a5b44c1ae2e080ab6e67baa53aebbc82bbb28f9e95459b0adf2c17c899bcfcb52ad48986cd866b045cefdde91c286580587827f3ae4d344eb6e0e189a59e0e62c7f5fc3b5aac2d298c833b7b838ca7796f64a5b61b7dc22e5dfe05d7a2311d7c257621d3e8b1684dd0ab7491d0b5b1cf363f9842d8e4ddebe1b981dd27491dce61e4fb9a74f496eed9d2451432993bc3a61297588280ca0d31765f204a503a02a791b5c03c42328555f1bd24ebe77fa2a88ccd63863d09e200a1b42a4a7d53ba55b9ff05c0e7583812f4f80e85670c5056dfed88aa7de6e2de7b7e4bc575e8a925180c5a9c1d8a3e51b836ac87b1ef15fbe08a4ca6bc520c69a31dedbdf3ad244720d957f959ce607521dfc0a8583c9d5f541eacda6630cdb42d6d9ea8584f1c411eff932bb963cd585dbbbb1ca779a63eff76c77bc5dc193cc3252ede948474925645965c18c6d6f763ccd1dcac17d47da49fbf5e272661a9ed51f4d8f649c271965475b351840fa1a0948284dde8677607e217833422153cb2533bfa143a37f6bbe8740752bed9d34d09b12f4c52b4ea25a138ebce0e8f7e7c415ead673c92bb093a44f921bfb2eab1666725a3b3895b7196be22632f51b172c00d544610a4bee255d92257765c2037d2428a62d492a4d3c04223c98a6a69d38379d2ea4f06a7a31402d159e6c6a386a152abc9a20ba6bf4e2f82b76f92250f358539d879ca21e2cd80a49bb6e3bbe1bdc65c30f02adbf1b9071b14054fedcd2e2351d5ae5f4188ff88cd3ade811b84d34f39876a2b76f0ce7adbf63f42eb57c65139817dacfe55bdda391e56d9810706676ebbb8bb1a93bfffe7e953c277f016acd3dd56dbc985d26d0b0c03d5403d739a13df97712af65751ba92a834002e9c01f46196d2e7bf0c283b39d61e453cb5eac1823dddbc039941118a48552f3876e65fc9ada2332ba820629704a169fcc793d3128cf89f008d273060521c42a0420b07f40709ed6c1686f130f6a8240a7f977a81977742918f37a9b6ed6e64e20f3785241139a30d79308c54a7e307fc9f513167ed190d7dde6099e3f64d8b3f44e3942430984c549cc6576e259488ad13547cc0318fd4b8aa718fa7781265f957554f844a8f93a16a58d2344d67c153974f5d9702f1a061e1c06ea0012b92a2531b2fb929a9b5cc882a732a6fa0274730a7a5a79fd79fb57b5c0869f2ded315817b5811c598faad0967af80fa142fa05e04e77d2e3544c4d1577438f0cdc9e6af51aeef47da3d04fdebf293b17e8366f0d022651e873e1dae1acd57148b96f58a6f224bcb57408c43e577588cb4138853ebae4a52e36f065ae98adad92024e694adf864557e4a9ac6dcab59f8a42332bbd3b7dcc6da1f1221fe9713b1e0af5937333cdaafad260a5eaf522872043bed4cc592b1b66238f245195a4138ce7c51b3b7cca391559f43524c49a0a25c82f34fbe7dd720016723bcace64b64be44ea314a6296b23010ddd00bf6ca8e3d8d8bf79722262f068a277102a5d6e1e5b0afb876b4954d49911e9f1e977766f2eafa3bf9f336245900e029dccc888e08ad9a1065ab8130ff07326d1ec9d41a032a79b6b4779fe7ef609cacc9c77e1f4b30df76e5cf8e7820870e7673012ce890ba9fd9f8d15db938589fed3eb3f721fc6c092e7841ab064a4e0b1795ab491f0affee8fc85069b836b919f7408c8cb4fa53a6ce812409bbb9d2d72b86b888a63c34571ee2a8ad30a1382f126974f934ddf4a46672906c7943bcb1c5a68435090087d1de8bf7f5fd036ed644e3d7eae76996c625711c1ddc459d8873869bd15a66b284ba6bdfd905b7536d9550c5e8c50762c7611caa44095cee670a0d00e59402d26ddd9dcf4c6abe92ec564197fe8be4ef1263c44855d083b3c7c9ef57ee96b5dff2ac4f538c887e103229bbede3b5d8576c4ae6fa4060e3e711bcded92708895644ce6542132f5bbb3a8c2df009559aff934307a72193f510c68ccc9d8480df26b3b32ef02587f8add8533f4d8c94e40638ed18b3523d50aa5b9e5ce203ea4470a8410e0859b01d63bbe8a29d29fb96008c0c45fa5517901b37f590485f87c35d7b6b84cb5630d0ce1601b0c2162361fc0ecee9c5720fd53be7ef53c66c8ad8682002092c9ea14e7b66da8dbff4571c3c7c86995c75f71066b5918ae9b8ed44c11a7cc80d384688fe9b385ffccb40e72ca8aeaee124dc05425258d8ae933131fa4d4125ad12ce08f7e31e92d69fccbc64ccf12ca75b64ad62e2ea7bf23e9bfe23ee243be9c6286884d360f2db3d6d2f6dd4218a6711b89256c716ba0cf3515612582c10e5f1e49746b983c7befc6c97f4b6e7bfdaef35f39b65d8010e70590cfbc926fc0323b544caa799088d89b31ed547c2aac4ed50bd8a812bbef0bf0fd50ce1971e9c222e248ae9416fc80816b2a4500b6b0fe2c496173d3ec2fbe20c878c3afe9c50893480689ab4d22a08a412b0741fb41bd515f6cdbea8a52329969d07294db78f5104fb19f86b18e84d02e90d001a2131ae474d781e32b1128162e77a95af80a6c5f33e290a2e628daa28eb2309e03a8ff564a8ac56da96f2860c1a87039962dd3c08bc3f7c8218e96fe821e45d99e50237d6e510f586ae88c63dc9238797257e3dc8efd5c8849f6b698c2b1cf179522bd486072dcf08b31ac45a9c800d904204b2fa8741b405642050a4638329469993f2bcf6b6f3ef36d9bc7ea3d4e3104e386a0aa83b7e6d72e6489c6e2568e8a4a5ace4d0c6579f76181c2e5180eba5b803d0bcafe4864133d7923ea1d6bd61c362c30afd796aba1a7240b8740542697a82a5cce3f11b49eaef42ffcc2b4677ce1e77e52ad38e5c118217b0d51831e0d9af55a76608633005711481b29dacdd313d455d6305cdc5caca52107ab2eb5c14e454de90c73bed0815d89ebe8a9d4938f3043b71b80627cda375f7dddc5062680acd532d14a5b6eceaf1492df3cb13ca8875a7fa03b88c3f819f49dd243430aac004d996638b5574d990dddd42830399f5d967767b69cdf3dc9551af9c1539dd548c42927d4118172e4718073a2a89244bde208499258d625eb59f961760087b049d120fe1250c91b284e9a1e60b6ccd4469cfe61d029a635b94d88d1c225edae1d283efba1673bcbb5a1fb8c862fe2be332748461839a857408dd508aaf8031fbb1136b3e8646d59928f875d9db03da5d8d51d07b6d8805d12d27f2606a912763134255424a39064b0db1825c52aa2118d4f9f8e56543f14b2b98d44de6cef25631b1ba7f6314fb423417c75424b560318216c24cbfba804a70b2d5c8c490265b2945e685957109bc7a8b1d2d962b9deb419a815cdbab0a1a5b24afba64a2044ee927ab21b1e72973543d3fa2c4f3bd138758b20ea4856695b68741435e95c842fe387df49618c202bf6ba7a393962b773c76e5e5d0d0284e87c5f2e27ebf8a854d07624881ec64b2a36277b66ac11900bbcd9d36c4f5d582006ce36dd8f1f353880c2bc64927825bee1086e45aea56c3b29c74c017828081c23b02276b95250fd71f62d1ddb55e4a728c3668e5f68db8fbe6046ae337c489643ac677c14e10b3cf74b06244936a4a28ba41ef9163062f0184be45b5ccc413a50a264ce64fda5e7374191e69f61b5318748885d00139ee64dc64ab8b514f86285278dcb30d7dae2c5f5af25e0d194029e001ee8f07d1b736065479d18b98b5a965c6c4c884e5cb86eac808d1772022399ee9cbb8208aea523c54f660735f34a00cf96280add0e7832fe9efd20826dffb217ae67961b78f7a9299cafcad3d848b382b6ff2531030b654c8d53ef27a054f68921113976edb34ad43e61d7a26742d3e73351ca1ce782e3c4e7fa6703890b169ec12df44112909120909a073c6311bc750d9a01f2c59c0e6c72d5c55e641e27a39450a424a70e7717c7cc718244b2023d48d024eaee388bc3986f963a20e1c09ace1fd43de426a8e9b9a1434914f5710d726c04a1a9c80135c8bac5f2d1f1f6fdc2a8709ec7481c021314924d5044ef272b13934caac2e63c580bd8b6e68b78f2622e92905a724dfcf1077d31487be192a36f0f3e6fb64a4c50db4d892c1bc69b4d0f107d9401cc95232d51e41db245b1244b1219508d5b0353c0cc2deafffa0dcd80c578dbee7bc4553b58cb6ec9537232094f3b9e7ee46b735c3ec0f4c4161c0186a3e7685e075e87944751242a6fc41738f873db8bfcb7d276f7bb3c32f3bb5bbf160fcf163bd0c17dbf6be0b90b014de6a80b0a6758c7ae71f2fca6c882fd736d3419d979b59b8fc70ed7551e3bb98c679877bd98b6eb3860f2fd4585e4fb75ee547ac6886620f88a7b0ada7ef79876c48370b5f605c266bf1f35182cdeb9942c5310b14813a6dcfbe34a2ba844a9116a1590cfc14b1026240d87257eb8fb98e2b1745802eea251d9610e55b5f8adc9a125578178a35e15f2c712ed3f2039a2dca0c33eb2e60da222860970b03b1c670dc047932b780b8e1fc7138ea2031dc9d1e512dcfc0cced812da6e65d1f266f3e2911129630c509bb1b9d748660d324e2f35f0e406b81939fa0933093bd939a7f916908b95ec614fed874389c6e85cc3a5621d66e7dfa015782c8f8be1e3b9410f5a15177dcff744082dd76525f0f6d9412dfa90ee079bdff087721fe40840f2b1198f76d79f3f64a72a72c81739a05b9573e663681fd7e74c819332a194968bf30a25f1c83c75b0fcafdcaeaef6d4f771c0f0aca75e632e730686b21c28949959ae49107ebd718e3433b70447de119c3ce33a7208f86bd39601d6388f07009efd28ea094b80558d518f3806d83e905caceb67cdb30c8e40fb828d8d2510a5387bed2917fd0bab58165d0ad845f643e092cb47c17b572d4716985609c97740dbbe5ee5f37108c4033ffe7a2469320df0acae6e9d02d4eed1509bceb818e64f14615e7d8fc6fd3ec5600fde166a967a8a33df4f07acfc5e7e14ee785946d66a4ee848fcbc4c70b1a419fc83c8e36891f54eac65641cdf1352adce4f4e83dd455914c3939e1258b05a38f44bd87bf96f5972a3adc9d7cfe59f11e4c69ee3f56156bd4e44c689b7d79d945f125ccb49a74392d0981e2a89a10bbf9ae9aaf7695a90a5f93ed96e99b2f33c847a7042eabdcc834aff35e6fb0eb3ecfa29a00a7ed10be520ae45914346dcd09de9378cbd64ccac8b3508119dfdddfb74241385c41bb31738a4920f3d98534a881671988d2351019608e958b913720c9043326020b98f3eebc2215242c7884c1e4fefe2e98698dc43f89e2cf402db2e71b682f047fe2fdcbc093628561a4813b828211ff7c78c36890006a35124601bcae7dc80e003d95fcfecbb6a776d3843f978008bc2e19d76aebcdfa52c051e31dbf0283dfecd60f274063d7d6a59251a663318d551ae674498a37199c91dbf4d6e14b5d4b14cefd31ee61fcfe3871329f6fd7457f31234aac21698b1a5ad70b8770e1728e9a04f7aa4366d7f64610929d4f6efe71c186556cd424a4946a537c2aa7507747baba11826c3757260ad5bd0a5e886a402a95623e4224162d17df443b0e2c061b98d1769cfee06e92b7ea6fb1c2031a126a4af7d100d1ed0ea8b892ffa3d4c8c8e86e26ad39397169bb0a1a4a3a8586dccff7b44c4e04e3aa9d8845bedda14ac80b0eabdb6798b647de246e0895e00b41e96ed479a80001904fa9b38893c530f7216333fe7f135746ea3193f7e1e7f78e1df9624fdbfae3e975e6e445b0e216c2492fe78f021d65ceb379a3a7cc81dd49d383602eaf32216112a45c8535a4a0ae39a9f9cf4a4935d403cfffe877aef7d9cf0f35db5f486ffe0344044bf3ccc66c3df22cb6982208a2602cfb371e316d0e8b33937cd6fed0129448c70b6b39a237d9f3ca8417ea835c9dbf0fe7a3f21b87f62d556fbd34763053b74d997091949dfb533eaa7a0bf4eee4ba94cba5ea64f51f2b751cff0373d4b2cc093a5836273c90c514e575666f4a76938555694063574404d4a32370a8d44958b990d9427563a432083dd0861348f0f18a126f3359a579f159e26248b12b39c0d5366cfbb8e3b5297399cc65761b65c4c699a1afb01e027be091dc15b39d2358be286e632e16da5e8d13a923d4d5d3d21c27928bcef39a6898043bc5b0361450834eaa5db21615f728dd2204269ff4edcdbe23802ef2f3c4e80699c0a12891e2203518113808070d88ac04118c4b58f856bd7d45a6296100f224e0634d1ca7ff5fd7f3c7987b0377fd5e4a7e9522a5a22e0797a9ec35b9178a0d3d31c282f04e27b41f53f494afd603c8164a7137fc8a31ce1a112afc2c74e58f32d770c5a9f9da02933e98de129f1b7e6897be34c4229b94b3e1d9ea392731c15f62d58e82de08043dfe1c1f18a858aca1a2555044a93fe227a917c6a61daa7c71095bb7089a333ad1c8b4d35dcaaee00dd54c78f87391c002387e32a559a75949860decf2c5ef129e0947fab33536b5b9331da6d1cf34e03b5e95f3938880c0b632649816309b69410365708e0860e0badf388b29227a056a00a4b9082f15f8e3193f1a9c8751875ec6d63a52d2549107d87f48d40369747aac38684fe168ff91945615515513bedc5beb8b77b537d2ca150edd150d1122ad96cd492d1a4c8e6cc789c72736096fb7c6d6562f370f540c2531eae4a3752ccd15b6920e895843a648f5e63dfb496fbcb0c8760919a1f622ed0bedc30f6848aa49606f2c6258feab6f8b5deb2fd7efa474a03965699e1572a169e7847a94cf6656e919a7963e82196a70ca5c06c594a83d9194b5d446e48d5b381a59ec0a8b61370529bb4a9629d978d89b333314fd321ad77bb10fccd0266d1de877d7f3d00d9c4cfcf979667b26e5cd0a34916160ce94e636194103f752912579c16a8241828a7c8bed6363dec6de76fc138591acf78b37dfcf4d03f8bd732f46dac79abdb40e14b6ff0ab9b83eb0a40785188f106a3bae9e51b64b0f4de08043a92a1236cb63ec620f67741e8675106a0842afe13f0f6f4892c6d79fd5715175910dd5406f0b88f7d32b8855cafe537909d482f4162883365216d57e4fc8819657ca7562c0f19668fc51ab40b00a06c41d08c499db54c4a6c498a8396da1f2e7f9fa53aec9087e38dd919cb8696c1b5f0f356cef6a60ca7b1ff239759a219b870efcd637f9eb858b59f3a08bc7bd9d60014e29cb4ba2447116a6808722a44f7c710defe8820998fe7221843a3b28341333e0b53471032416ced1f2101ccfab711dac2ff85eb3dff1293b0090acc9182a6ddf56b167438fb6ee58bb0059e21cbd7d7aab260d9540ad38efe68472d2e9408b364d20d308f0ad7a66e4fb3ab648984e104fca9509a9dd2b1d4725a1c0add30c9e85bff2326bb6b1f66891add34005f9f346a154c962262f6930fbe0553ed718cde12166fbebf858e89a9f0e21b533ca46ad32dd4f7564670e7727ac7236cb932c09074fa628461bd44c4aa2e0f40cc080227ed12eed308f239fdf488b74e6b82eb003e6d34bb6725275d45688ceb1f0d429d8db5ff6d4458fb303b9f1c55f0d8306c09d5abe65a2c705622357c29155db0844997e589596a9252c62663f5c414a43996d04d049ae1f2a0870f723d3f0e94c6ec4cdb235d77993f3d338a56f2bca24500482cf58b0ca480451cfa37c9b8d68ae328b4de47443ca15c2b3f405b58c278086c9c3742f2f6f8c17ed9e19147e2122069416a6bc51d3e2e2bdf1bb69633249608b7c1611d91466338ae58b1f0ccfecfabddf6cc68bec3a51f1cabd9db46113cfc05c2afa1ea703b482ca8c86af3605f5d21e648665afb38b00e229062acee960f9aae7f8d44d339d13ae1c0f6efbda41161c5f9140bc8a6fa161566f0fcd62d830ffcb7d7d3209d24d67a8a150c508233837aadd182f85950a592164d1efb9910465db4ec8935f066c00e14774366c242e42f42975aa7883f5430a35caa39d28683f877d28e9ddb220c59c2747d2e74dfcb067d764ab7725d4380b0a6e90f589e2258460804a2290b72212fb9f4a46f6ec44fb6736762b20ebf952232bac44888eae93bee7b26f60f6bd75955a19579653d253439a8c3e8db0f590a30578a32cfe11c5b4701b9d5cb15a31596f04814d2302612461d112841e39866c26adedd76ca0ad4fead06bab1ba1e269bdb5b3a4d0db663fb5d5778d4eeb2e1fe41419cd60a42f4fa81a591a4e10532ebe33a4e0f77d130b158370a1bd6122b547cb71ac42d64924ed975ca46f574130d75a864e544d6226ad638b9d584f1c75b54b968e210b3a981b734ff0a348ba8b3a65ceddf83571e96a1ce2a6c0f534f786bf3a57b4e88af2dc2c48045a9f502ba063b1bcfbaba421ad4b24f7e711f980faabeb15fb18b9bc7e1d3e9b8106441f72dcff752f9bc718a04fe9a9ef95a6999c3f171c279da19b04c2eb86721d5cb89e15ce206fb540a7d24a13a07b96a320b041e6d36d64545446034c0cdd5e68796e72f77f5ed20a1465e50bd837e95ca36cf714ab4842e81810aa19a87316e357503dd2dbbee4073782d3ac7b05b1da4bbac43fe5270e6e92afdca98ca62644e8f8d060a14d57823b5d57ab9105526c8b20ac5238b9d8967fa27600c5ef37b4accaf58ed06de242d2587381ee00472397a300314a9d9a098a38dae7544f4546a2facedc2252683fc9ec7053ac741d805a4bfa718d8dfb3bec7ab742162e1f46f15848b274144837c091139b66f69c95b6ce7c7544e250b89d574d05fb0abe45fc4ce8aea7af462668c0b5fefd06028e46a6fd031544abb88992afdbb538485c221ece3ff68fd1d7b2d1b893b188f2065fa9cc1f956020fb141f34315253aad789936781b4f015eedda81fc1d07f47b26a0ff4b85caee6e0e01e9f9836a87e7cb83539d15a2d86900bd40be6349106fe62c7289aa07b432da422c36edef195d8084a3194367a1c1b6a15e1edf0026fd1ca163f38c4611993ac9f663ba98dea544d74eeb4e2b48e6103b0724f4c4964b66bbb71c805b0e190338e0a4fe00e4f0e9b997254203a203e5790b5015d5ab385e6449d31ba0c42e98b04d76269235d1c4979715117598ba37d46b169ce61a770b17be26881820aff4f5b692796a57f14b3e8e5b201fa1708c300309cb6f9e9a89d3390d3a94b7df62d60575d8c044dc67b2b25d861af795ce15be826d1490c9010347d2a403ea492a15bb6a71423ab958cd43fcbab75dc42fabd3183f219a8937b251e952a4bfd0e55d01429587e4281609cc55295efcd67b2dd176e2341538fb7d13dbcc0bfb1f9bff0b8fa0ab876cf96b6849d3948581047d698a6862c9bdff8f1ce2081f2b80a648a1d3bb0f6bf831a9d7981e5eac24f8c9133183de98208ec136a52910723fa2bae34e75502be344371c76f154afdea2970428042fa7a6d398e73221cc437c4c88de607eaab84f67ca1f96eeecefbbad9684c01001031102fad1162ef374499962d9185ba61b821c76ffe5899e60097991639e2a551a1df986e2dc659af309d854118bed9ff748fd7276afc05c91d2bb3348fba98378688c2be00e9df314f01243a55585685f2ca1f0febcaee6ddd7cb47b94ce576ccc295a2234dc95b3bd0083b07eecae3206c277bc7c565f2716041f2747b4c81ca99469acaf51a330aa77993e2621b1d76ecd55bcc6720f973385389d0232bd45e3f23684d37dc63ccbeed0cfeb1a25702457fd907f74b159cac873c280a5fbee3c6fe5796071c88690a711c59fc032750ce351b1777424fd4345c8894a5927909705732b0ef1aa1a6739cb248a8e2a78c9432ad2b203ae83ff21c50b88d951c183b9b271dbf8b78bfdd76e1199de45a7fae426d10af9fb6455de5fa242e79f87046e812380996cc077505416774eed9710c005f7c0072e1e32165f90102956f7075a440c116f1918d21f523c52de14242c574b0f26ea6cb2062b024e051cdaf111f0b732da960bcb774b19562c5f76c2a78e485820026af99c70e6ace9171d45d97fe78af9e7916a4814d946f83a20763d6437ddc09f84e8c2791235d49cb030fe96315f563bd520670dbc2f64ce22758ac35d77e5fa1687357caf868e4839d8184602d73924a39548b6dc73f2f349f213b410df2363797708f526231c10420bb36582078fe6327f66f17d5356b1626b59b8f1dc5e7302ee462d028651cf1eefe2577e1dd85f7c798552189b2717f330bc8b56612362f27b40192c9947618d281abf2efa11980e1190ee78a5fcf85d3ec07e73bdb0e35fd641957e5131cd6f68c26052d7a47ab7fa28cafe174800dd0f96187bf5ffe974575c653ebac8b0929d06226b66797dd9ae4be51d1fb314550620041a9cd2d611e5e283e959e1d80c51d0d5ef1cc2d2fad7976a693e480b615dc6dd22127ec80e4b3271af5c840925a6120a7f4e2ecca86f188295726f7cdac8cd202f9f19a1d033dcaa6887f53b36bce41e931cc600eea9d572b2271d7643d4473b2caacd0568be6fd805a5aa43a1ff9cb92f291119318fa3fb2bbd519201fd6273578763193445e313a7c5a0b76a1d14d41e0d0a3080ccd3f894f157f21d00e157ef13b48f2a44dc1018e49bbc5599387e4ef37b650bac238a6f0acc523d27901c428e14f19ca18040a13160ddc4cdb8e55c6cae8ebe2295e9a13431972db7183dcc2f3ae4622a773d4d0a08713f37cf67f496dfd7658da93151a3a05af497b5d8fd504378149a23fc5967b8f82cb592266fb80aefe70d5a577230f374a4613482fdf6ec7227898712c5685c1db7559e4e1dd7dd9d07933f3ad6184f5389166d9c98f2706376e27caa5c5b15d8b47f48eeaf55965b51a3e1173d8bfb6101d80e8ded0414d811a48984011e8f76704506201823ea123ae1bb1408c0a5ce2fa1683881bbd4e244d4c297b73a0bb2c1a8cabdb894ae88851d9fee238316c10e6eda222580c740eaf0694e8c9d6aae1e55d6099373b1d130080569006afdd248863c4a92829dd843a6d6995997a93773d9d6f026e1f55686b09f3ea8c501f148faa7ef08175d77e16a7c5e108c3c79f2daa927510c367333b67f8bbfee258096bc55b7d32242849b6a030692d14dbfbc68ecdef25fac753f77d60f9ec916521bd6097f0264f8389e8ecf5c87bf74bcf12ddf8841726b463c5dccc1e8b42a6b5e90273eeacaed4cdf977c784d86338cfbbda2b9a7e9ac94a82c12f149d13d618c07009d8255a0ae1a8f570a62a13edb36113f66122f7568f29377ce0352a2c8a80f1c4e26737498dddedf404171f1c34ee8df54e23d77cf08d40184037fa26c73353b3be324822bbf111ac5e5abbe74941328146fb3c1c0a1d4bc20ed034c589037515ad974db2c54fb497a8326d3379c9f6246980c192ce19310452a638ede56b2610b052010147f472e2ac8d45881a411aa222007a7f4e71b7a3c2a30bf0d7de0110b13c7f3b5b071221461d603058042d4edc7fde8d3f952456b6dc15558bcfede06a20d806e6f19c98906c633f4cf8c226a82cb24c6fabcd8eb3428dfc415935416c0b63410c3231429e0bf2ee24809862878a701953289a39c92ccd107f07da85db714e767cbda7bb2156cbd6bc0a69763da824bd6841bf792a61d2d83acd0aa06b1193b840c02463614bcccede387eefb17bff2b95878fc0e1fc3f97f4e5ee81688c174abbbf7b6732126c3c02796a8855f2c981aec8c37880dceff6906809314c4b729b3d6f6210e474be3230684277994e3125a2e71277031c147923debbda03fed1f380807a8dba9c6dbc278750477bc1ad061fd8cc4499a639e19fac2f97c15ea91ace2aa722f464dca57183bddd212d2dea1f79b7d764056b84620328a0f42f5bc624d7a8ae824e7241e538f8562ef8219f0d59aa7960c9df5acd3413962ad133fb9f0e240e407baf72da7ba35fef7c6c6f886d6df94e6e54d2d0a5e7844368026e7b88bf9a547f5f39e0a2c82aa72182d47e7c89afed299e7cb4d233b9e8a2bf75d58a15ee4f62295b96e9491de4f8dacb391a33002d4ee87b5c18940e85621029dc71ff58530e71d43c0755a9de6279e9ab27d85bfcc42af14c207661d8bc6e6cf0061fc91c238b3a43c38d9c06a5e53e6c7b55441d725f0f28bdfa11840e3d541d55c1c599ab25592605bf91abd2022d8a4e6b30b079f57e728008f55b19c30f2355bde8a156dba1be80d9b783450c54b59161bfc6e5d8756e20a66989a6e4beabdefcbdbef9ae9d36efe16d0867e98ff70daabd9bf7c33e4469ffda898987c2269090141e57bf8c357887d144b51eec4ca3cc7a97599119dc63066a8227efc14461249c04484d1fd56be8ab896503a3b9eb56dbbf1a20ba36c57d8cf74b1cb994a8d958e6492871f051ccff4ab1dfa0032bc94cb6618b958055e5f55b8b4c72040fd5bd919b0c7b1e65335509cd9840609b8e56c694b24f4f8061872f788c58d8b49f9f23d04a164aa8c741ae3db3ff0202e6e4dd7ff25ac18ee5c3a68afcd88cf420f3c900f751c547cb730aa2b6217517c66a8baa657af540aa413b445f4273dc089c906b50c3a5b0f6bd7ab0ae6b91f9fd9d9e5cdebf21935e241e11c1856e86282e84b56822b910640154382b14b8d28e141f8b3749cc63e5b64663feb72c2cc99ee628fcd871670dafdb6d5f3358099ce90cfaa88bb3f44be90688a7988e6f91c743f2505792435de6160b979fca7df53d032d23e2d08cf98b31e39a086934b98448ba577baf801c84de2349d3086928f78973d7a59deee2de7d0c9d1020bc735d018e4dfe66cfe85ead10087614c643975eaacdb0b781efca5d0cc7707664b0af9e6213d8823adc916a3511bb45d8b6e71c315bfe51b14d7085bada2c07d12cc8ec43d2d41364f11f0e32405af98bd78da01d0daa0e549087a7c98d823eaa590bc4b5dc3e8b248efff002b836773f15773db4259e64a4f946efe7bda3fbd5a51011791e5d5f09fd66e49c1b4ec7094a03c49d0783654baf3ee980a7de75d83605f521c1d3c4764a0f9d05488f02d22b470f20a0eb0e60d74d20a1c2fc5d30c9b58a4cea0a2ca4c076af868067360996fa8e1d88bc6bc23470abd82e7b0e2a6a7fb535b30fd7d512fb3cbc1321eff16d75620610ddd22094f15ce6c0714647fd95e4abfad02dff66c47570ebb2684d969a3e32bafc7f3a9d43187d41d53808bc124c9a1402fbb8a714920aafb966962d458840de3cb96be7d75bfa74a9597148ab3eec17cd3cd8ed9ef1c452b2d7a21af3f14c9444f5a5896621e4e1c922e02eb0a1fc0b799a3d001e72e3cef939ad25ce51d0b741eb4ca86e506db7acb0631d46213036a3b67579ff2edc44594131a9e409214a1ce3f9b7f5e5a0d8663ca3ef696e13a93120e1071c6a209b41ba4cf9cd340aff12c7f5b109d0dfa81cd958c5b95dc365dc20f05a2dbb6ff26c2a025a6a463e35c192ee2aa93752a5b0866f368fae1e4cdc255e2500d3bb41b63416e181b2d957526f4ea7bd2228cdc83004f2597e8555a730b2587edb29917489ae094fee01ea1b3f996b1ab637fcdc0d6f5a47fffaef4aa487d11f8308e9935d752570395c356768d6f5d5cdd18a8fa52c13054b0e23e7350a16bf3c11fa885597b0250e0b1577a01cfe5ff44ffbdcb2bfc3a734ed65a2fbf3d6ef524930d7fc9542b7ef3d63e47183acac8082a059880e2ea2416509f4df0d58a45c9b538c03dc76eae3e3332d8f75eb148924135be88925cc06b0b1a6ccf09a3cee04ca5bfb60628f16306a9d08294ca637894258737fbd2d8486e4c5d6a98e6fb9264426f1d81ed14449e73f989b917efb03681dbfc39f022758929cc3f933079a80e0fc208366fad0888561e16c748840cef92a152aa4ae01e2166288d18d12ddcbd12c8ca5cdce933a424a3913da2e1971fc563a19dd1713d7c8d7035c13ef523195d0fe5f2a90db3287504b7794e1597385386bba9163f2e5514d04b8f9b8c8ed47944266a575918256816e9f14605af53513039081a3255d376105df853f38f49daced754559b6f40856e3c7c32976568e1304219189a6c25009f1385bbb5b07bb23dd2dfb4cc8ceac8f11f5d794e168266cf336a8a8d8485b7589a1ddafc51c7b0537b264e087bf74ebf45159b91e9793f69234f9c155db5d4235c07418eb644163168284e2668e2255f471a8fd222fc310f208569a2fea5d4043cdeb955462076a35d58dab934ccbdd493ea502453fffda79dc841e2155e13d4b592ff44c7ff23040c2f7f224034fc23fee87b4f096c3635f22835438ef8c7872cd3194dd24f1e5276647e056999b3e9176ed874c62f786ffa4e9accfa489b05d12846919129d655ed2326a98a6f925df02a3c74798aeb6d54ca193d7c1b9205a6a970e1e0a4d7473a1618a647e69178e4cecf003954cc8259fce78b9245b247b246abf4a74ed889d82ea00c2a46a0ac9ca2dbb94228ec4eeea0d99c2cc958c9005b04a73dbe4eaba8bb3728ce110b96a2d9371d1fc8fbd4ecdd190b20340860c7f788b0a9fe3a5b7771bcbfe1b5ece8048a4b7866f68127445cb892afc671591effb6032d2b2b7cb7d2b23cdf9434fe93bcc7d701969d9dbe5fe3d249aee8be90369bd9c300eba3b0ded522cd4b76073b0c0c2504b24261023210a4bfb2d8d979611d24f932ec918ea0427f72dc41b9bb32512b563237632906964b78373f2f188880a046c2720522217addb4f3462d74f2b1e6a37a29e689d81395997fd03ae0a28b29f2bae42404141b347945cd9d75530c23c972be3ddf9ccd70fe8d3f00a5c8c26530e2b9ba89f18b13b3c6bf50d04a89241355d09029fe9aa4d7bca724ea84da25fa73347e1368970cc06be1eff924a35f4885faed3e9acef9f0e8c33b013cd7e25b337dfe26e07464166e01a1e675dc5c37e250af79970001ab10ed2fb2c0044cd22eb54f33ce287d0476c32f0c8cc7edd7e25b259eb77bac104466e286dd776839a6067432521973eaac0d1d1337f202d2693368c49dadb9310a1e7b0fe61701859106e1fdb881f382bf39b8d991ea2c3b70db78686d02f3f848424d6bf435300c1a705b4104798a45aad066f7028e565ce2fec6fab06cd2ccea7ebb9573397b06e48e5509d213ac35271620998f888841da65404181700ae7e720bc46d63e3f2a9b3e6039a820cd60dc0415ffd48478261aaf1bb1a9dfeef01400ea737643344639861fe9197975f192400981dd58504160ded0c571ca21942da217cfddc0fba68bae6e6d239f4e109bc8276b83da25c9e5a273b053dbc1bcd7b054c9743601155c9463aaaa205a05c7a13cb5d53cad820dca95944fd5a19510c2fd60f890b2cdc409008c5e336635b862433c2b8abb0a6211f3c716d6184659635564b0d10e52960669bfa7b265c9b44448539712d8f78579bc27f73054d0b0a25ab01336346c5dfec3115ef85d3d34f30719a8e56c49f7427a2b022ea08b45d109850141db2daa85e2ce092b5b0adb45e8e2f971b531871e18c74217a9b33c065205073c97c5857127ce3fdb85d395a68f4df3e832d4e5e343f0eae0c6d1a3070bf41ab332fad8f9b03135972d1463a106f1d30c464a0100227a5f76ea4d325225efb52597c1caefbc34934a22cda1af28276a3a620bfc71f204cf64f1d47763053a1c6b25d0a1ce92e74c054f0a11feda3eb6fcd0742ea9b2ffd7bf1654aacaeccf9680436ebb2e4ece4c0939156adb71a529135643d8b6fdafe0fd20ca6f1a94445c93725ec6df5893666ec7d2ca724e47c53738238b21d9268ff95cd035011f51747567acd5fad5415158caf2b75eced42c0a7e76b11b87050ec48784feac7699f082b91791ccad48a91af0fed35f0b7af56fcf19a4b58158c1576840e31a385fbf59daeb17fdeb0e41caeb002457cd11373f048e90c25a3ae47921b7ebd708862d0615cc7db47151254880e6bda5685360e2da6694f3ea181503493998d468511e08f1df16a911ec3f34bdae59e171a8283a0997ff623312542af766e917d4f27e535628ed7dd3036337be1ef6829b334fc8393552d2a087df2083df132aa898469baf0b257bded7b9251aabc2a1c11284537d772c55ce8425294fb02011ee43851731732ff454402f7a1a2875e91ab949a76a9007275803a29bd9659fded874b21d8afa9c62130cdbdad321368cad0579173945ae9cbf73090461d05e586657e05dd3d2a2d62ba78085379f3033114b870faf4f8c61979b26fecf6d8be362eaac71a4fd746729201b3cf9b04e4881ebb115e21c08c785e979c23f668bfe3c72f4991e1149322f18247b4d2e33f20330864432c8ec8e212072cac73fce8e31be8981185cf12b7b08f2fef41c4ffd5df72547494f7c637d1cc78be138ea00afbd98763c6ecf40620fdb75fd82e40c7dd10ab9a86f29f0eace1f8d2637cb70e1aa8ba7c4a1f1cebf9fcc5a441d87f841066677518c632faef31ba365e368a040b4f794671916aa73d9a4784214106ca27c404860f8228c38a56600b4239225278e6b3d6509c9888bcf1d8e2797158e10b0a3943a33b22889fd83fe09a784d70472c1fe0426c2f1d0f8da5e74e8c1fe14a2c3f70412c3ee042acf4a37c44681556b5929558818cf988a08485709a471f284c73b7c7e7a9c33bdf9b1cd9db5d39d4f820280348f377e720af7290a915f7e3512aa13844194a8f46a98c47216c14a1b418eb00aef3a0fc88a00e2365ce44f9a540fc282771ff32672ba1b7607cdb5654f7e87bdffb7abbe189ec17f5ca687d5ca58281bf2688b0769c19813af455f954e17f601fc7225f25e94f2bb85981aba80bb9f61ce4da4dd1e083f204bf0ff0adb88bdc42b3fd896fd4584f05df9f296ae186b99168d2c2fbaebf29a759d5c253a6d4678696e245c3798c9109be7e744a9c14eb3eab96294a5abc09d3b719f0017cd67fe0fd03f6037ab6999ed8ec4795263ba560e7bd3d94423a4262570f16a13882455a06f5325e78502d0d0f9dfbc3eabc8201cf2c349fcf63eaa34f8c1e098fc3e545af202b21e2450f602ab125368f23883e0682a7da115046304dd03b7b5a68a610aabcc13701356591589bfebc018b25ad3884fe55298b847e807f968925c7a6aa44ddeccef40d6ecfe310100af39ca7fa1f69974298510e197947202536ad56a00465a8490d18c834d85c2b39be97de5c9482077d01324c62fab959993165820fcfa4aeaffb7b39d441b849c95e71364e185c903cb5a42f5c6dd00517fdce1834e3df7e67b2d316ad6f057656530ea0fc7ad7c0c809bbee8e776a73a8f7b11b1049ae93ae48937986701f5718eb924ca57f5defdf332c5db233761e24ccd96bb3858494b6586a331056827697e4b5571b03b657073aea54496de788cfb070bff64ad6572ec3a5657b43a5cb2425b269dfaa68971af83b7f935a80ede8a2dd8ebf5cb49a02125c7b8101e2731728febfdaa8ffb6e16b8b426baff81095ffb6b7c6bdd2e5a82ac2d1f21fd8737adcabaa6df68a7c00b997a121f72a83767bab59e21abaa4eafc8e2645c11ff77289e6e650b48d2fc983cbc471afdcbe06653f7a01b731ee355c5dfeb696189fd6fd0e7ce0ed6269140f6ccf48bb3e2a1f32298f21e16fc144641428b6ad87d341907deeea508af98373f91a1cf790a88d6569344420b257b00249cce58ea4e34f6844032715436c3580c8d03024a3495e2d7c139e49d23f15009c0997c5811536e190742af6ce777c8108ace0611984110a17923f8f972968835518257f1fd5df66ed24296b539162531a2d6ad3df29ff02ddb87e29adb66a8573c2be971f52b454248b07464baada29c1450ef6550c6ce619a3e192372460d2088067135e42a5f14e5cf8de9a81026830fa7d854f99bedd68e99dee9fd0cbe4cd734a4e6f500d1c37eac010f41d09842fce2d9c9d558b89b0683cf78e49f1206d62590a7b605c297a5207df2132d711d2fd1160fc4bf2f78ece18185a7c487c331d340350c9fa7f54406a680bc284282af057ec92a390ca295afb8cf17e02f88e3042959846f62bea0060191160965aec2b071da4c06b4c8b3ad74c64089c8313a9f0850f0fbdc09d43cb6fcc40d3ac16754e7fc0883a5b4ccb4286d2b90dd166761bc3d1d71422fa3c3e7046c27333f606f607aa667330ee28c3e63ba6dcf1a530b52aa0a6a3ad2d83e596b224bfe714853926f851ace0f1c12c2e19e5e801aa9f4841c51f3538953ef5b5fe4e4d644bb929870274e3e3a67708cf6f277202031c884ece4c65dcd28b4800a16f3e6ce63af791a154d58cc763d11469d9ac142c1e02562f8f1e052ccfbea9926cc60fb599b8eeac8054dd0be3f3f27e55d17f51a3b09d0fe7f7e83c9080df09f7d03ff2af829dc6ade99537e7f68222e6718844bbb67aa774a93b989b03dd6904e1c25e73e23d022fa58e0879be3db1097d71661924c445e6246a5686d440ff910284f98d3a24777c9252b4f8b58334324c1c4f2abd6c1f00332e0cd07df478199db8e0f9a51be719f30545408bc806130274786c3eddc98eaaaa1c713150251d43db6bac0fbca38eb35831a6d69a1637b501c06f0a453c096dcf20ca8706920e4ffc6cfb8a4cfc693d12b817e4fe34c12b1ae7038080b34dd41c7344cfa524e455b305b6356c0b6e1b3c37487e88f86b030f0282c9aecbb32ee7446291578453ddb5df31bcc03c550a4e2f0f56391b1819f44181a1f2cd111c88b64c83e1e24ce695da856592f14f58656734355ccbd4b795e8f9f1c10c9f10b5d0180db8fdfc710968b3ec7d6888076fc3c20715f5db5f44a531e06c217fbc478884eec9bc96d42cbc9e0162e803e94599f64a64deade03b7be8d7e0649cac6650eec8c2185cca5ec13fbcf5ce239d205bf922aa0659475270b67d4ec4f98d60889f443e8649807b2d44051163d4798007feee67db4c49d3d1eb75a2433b07b4bd56c126a4f25903534ccf80203255e2476017b2433dd6cfee3fcef40349c6787de9b001f8c6535bad7e282ebc6384fe34b9d6a6bb058d5f8bb44fbc316acf19e75696663aed7bd066c67fe255897e6950e9669872deec02bd34d4173f8d3633942cb77576cbd260e2aa989d2e559021501e72e928ea6164e3fc1c14e33cde840361cd70aac6a9bafcc057a001b5fca5aeb65b5e7f34d1948d566f92d603534b1974d2d860a08eb0e919bb9d622b5945f72391db71fe27c52e0ae99478e61ff43438a414cbc6d543449a55d8a43f8d45def0d239e7dc1eb9313a85c0d407ec7826609b1d8c1e1e084f2dea04f3e1d93474f1c595cfe89eff259450f47b64ff36a450bb611799204e02e21a0c925b8fc81e4c90daaf4b1a75776ee3817bbd6083c4c47822d0220b5e25b1c51ea1cb03297696744a687fb49cf12f553142e68392de1c504c69d0cad2250ddf250cc7011c04076270f40d1c7aad866216d25d1e65affaf1c9d322d68d644de8c5e2b21a447a4e92bdfc8f584d6bb0d0aa3d6cb37bdd818b25f872844622993f4387a884eba649282cab108fb4c3697f4e6ee4b8ebb7743e6f39949cd1468d6a9798390c9c25893653ee8b9983ee96fdf8a30475a04d07723ecf00030207e895bf47d1aaf5cada4dcc3c6643e85b307448f2ab6e2eb51b7a6403b77824166f42646404bad247c255209a59493a95e340da968a18feaceaa425c34315026ccb2434f9bea89292083e5f2a46624c24ce5b67993d1e0681685bf06cc37e88a5dff83e6ac0e31f1b61fbdff652aff2dddcd8184b622364374208d97bcbbd03070cd30bbc0b556529b65aad561373913b9dced93c047315366c94ebc6fc68ddf51eadbbaeeb43b0ca65b3eaa7ac7e6587601550e3ecde88364eda4f165551bf11772046a56e5a30df2c0c91ea359eb5d50be6ad9b8186549612e1c053bd0856c4ca55352c6c983bfb53fdc5660fabeecb79644c8ca32ccc316e4cab755a6475cc1533571303cd1e2a950e37a675b32078aa9f4ea7d3e9345bab5e755900611a7551fa05a1ce86314a848d608c528131150e3cd8a96e921a3f22716a5cee48ce60af1c52bfb0fa96eadd5bcf13b754e75e39cb1d85c06bb56e921aef5e69e743f5eeb57597f579cbba0ebb1f2ed739d9b2dd5db6bbaae39a344e8d1ad851bfb8268d037bb0962b038227646257f698ee1073c71ed35d1e117787f8f456e4ecc96a6ef054775d8ee3388ee350ad56100ebb5418ed7e1ae2653af4716fb9ceb95c6fa95aadecba59bbaae36e673924e83aea390887556fbdaa6c57d41d51e26957bd021c76f9a8eeb2496a5c653b248d53a38685b83bd2afd6ed90340e6c5d3a942df154579db4e793eb74d24edae9743addacddf5aab95aae96e6ba395ecbd5922d3a54a7054eae9fac11aabb6e8eabfbb80e31ec76b8f2102458f5205c4b65335cc2aaaf6c5e2919c2448823926002b7ac4f136e5d6533ec02a35e25d7b2a8af2cc4b033023e71d99f0cb76e8ed8021cce6e06c2aa1b84c3dc0abed5ca7ee0653a949d16699c1ac74e875c5fad6e56bd759e7659d8ed70bd86751d1102b85aad2cd0c4aa1ae7e9dab2a82abc0c3457df6ceb9a0d9a58f51aa71aab89a5ebb2ebe1725d9fd35daf91ab61ad08c2ba1ddbcdd9ecc453d3b49ba4c6617772dd1ab448cf603fd1211f78f5d9e590fa555dc7eab3cbe5baebabee487f2e4cd33ccf75085d37d7b75eabe55a963bea0ffbca724dfac3b8a37eb58e9d6bd2afd5b1556b05572aecdd116e0a8c9d3b52a930ecd3065ea6437488a948bf327744d42f8c63ea8e7448fa953af6aea85fdeb1abec947ea9240e7644361d3952546464c484c910760905bb8cd2924abf88609f45b0cf29a6119b5eca34d5c5a8c8940ec119ecd85b57b9be9a458d845302fbfb6c0e35e5d19821d34a8d338ba834ce449233d85dcf5d648aa6224689537066e118cf914abca2a9689cf944e3704cb18bf8243a894de21571495412a98853ac9e6391ccc2700a95241a873bcad138dd912539831d3b06bb804fa0931c373430545ccc2c8c7d16499c2e82e35d376bf766cf1661ec1349e24428718a17632261ec74285ec992f89826d4083fa143188b77b993297e355fa86e6661e79824ce12903b923842c414c714bf72b37784b177323db32471660ed60d0d0683e565578a8c1c6206249ad5efaf6d56d040309884510d83534e203c394d605293219a781309f208ee28d8a8bf29bc787925517f54fa33d2af8849a26e32624412b59ca2bf26ead7945212e16ed99228cb2149441291474e50e509ab58b6410821cce66c4aa16dd854363984114d812515b1833df0fadbf326847d13da68d6058ea74f1aa785ba18824214c5c8144aa53122385ec371c9513cb5b3afe82638deee26230f3ee381079f35229a45dc89b0a32ada88d72484359e263f2f472f59acec6a174e0fb787278481c158945de0384e4e1e2186e06172a2fb864788c6813d32a7b5da6dcf0f62b1f62c0b2f62adfb7433ebf19409586304a60899a8c5f15a8cd1da8c3ea142991cbff27a3a5d0f76fdaa9747f6e9d5aeb03a1ed9dd0ed4f1f364b13a290467e4bb9b5ff4b5932b99695b8bea2f56179b51d995b7d895c7af206d494a3c72469e6477969b592978e4ddacada02e8fd3bbcad93cb1959a76b397ddcc9252d2235e675c541c5e84f1b610517178748807dfa79acdb49b3588a53c168d502ba4ef9b81666d0b7b09dc360fc1da699e66cb6fdb056adc36d3b45763170038dfef496f8d1ce58c90ef0bafd71fec215bec2a73c2a9c2c90e27c623c4103cb7b9cc13192601094199909f94d21b84898920fd6a09a4bf968f2fe9e1f080f49704ab5ff236867940fedfebaf3d4fc5ca94e8ef88474a4bf19ab0c17dda5815555e7eefc226897ee5dbdcbc5f5de3ec285f5619469d80e55b09180858232f7ff96399b3e2045e21c70a3955c851caa142ce1472a490f324878b9c28e46c91939403859c27e43821c7494e13729890b3841ca41c2d72949093849c263948c8c92247369687714e2caf03ea48891bcb0301751ad6e4fc10b17c0e29633c3d59c2f005803b44441bf13ec3a5144dbfe4bc311964c978303415cb49cec1b90e8f8492fe5c360ac999a6b209fd0c5e474b25c7221a6ed773df4d28f64068c4f5f838148bc49d6c286a4a75d2c3ed4787863414b312e0f8192337b312cc53da5469b743ca39bb8e5a0e49e2644cb2a1b8439b3c240ecb9001c4611984c3b4021ceeeb23df9d9eb3985237499c23605252b7834ecb724f56186e63b97c997009d5b5bbe75f5ee7cb9ca8ca6d2c4c1d3d0eaff6bb439d76f4f71595e474d833f572acae9ea7939c58368e898969a2b221f9d64bd77a895886056a2287673a6658991c1e5f73b039cf3c877f348ebad96254abf5d938a7b75ea5ad7178a44408c71f3959d8138b240e91165222058e8f46fd5a8273328a45fa058faa6892dd4742424253f4e0f05a87670d4b0febf0ece1cb73dd0e1ba755d7e2b9b8bc8061b53cd70e35586a389b0d07ea0801c270f71f1d3848a5037584fcace0a0d50f5047c88fc441acb6f1fea435ef67aba0d30675822ad7f23e6ac5e5fd14cbcafbaa172fde5fbd7810f70275822666bd1f03c37b3f868c97f7eddde17d991930efe7007582583ea813749a813a7d1d68b8f777b0c1c38dfafe0dd40962f101ea049d5e502788c301758276a04e102a07d409c2f00cf274409d200dead4bcdf027556deefd3803a30eff7c00375e4fbe678100b6cc36e357633b2b5d88d682bb20d6d2cbb09598dca0e7673b2216d4dec76b45db131e92fbeb3db92fe8c362536e2c04355e1412898e630ff61f90ff79ffe8f9c302f2cdc7db421186ebb8f468465abf7d184b8ea9351d93a7a9faca9d2be4f36a5bb90ae4205fb6452e88574161204835907c2b0f71e18c892705fd6cdde0d5ae1979b7db4223f413018e6e624a707c160969b93e83c084649bd39098c9b836030bd3949cc7c06c2b0bc4ff623e3e60ccb1bb4c27db52bfa8b4fb2b3735fb8b01e9378b1c893716d0aa813e3eb56d42f9f972d5ca144091c8c8c962c61c2e48a2b8e8e9a3441ea97cf8654c549bf7c362755aa50c1f15b52bf1a431e12b7fc27e297bb15e1c093812365e038ec9cc3c639ecd761e3f8f0bab23c301043484808f7fce7e53f37ffe9e13f37fec3c37f6cfe63e33f18c89270cd31008ff00e87dd0e213d37fff43c0806bffc47c8cbcdb334b2ddf4f02ca7d088f470e35912713778789645a8f060f32c87586c6c3c4b22532ec4c60ecf52e8e506d121a4e63bdc1c04836b6e0e926d816b9ebb89494a16f0cb3310866b6ed00af7dceca31591928af609a2a34a1ce2805f2e4fcb227cf3c773f375dccc02e2fe50843523469a18715979c1f29898989898989898989832a68c49c62463127136940d6543d95036940d2961454a4a4a4a1853525252522a7a8161e1b6a60abba21718166ec38a683056f48215c160452c581187156d585153535353535353535353535353535353535353535353535353535313121212121212121212121235428d5023d40835428d303131313131313131313131313131994c26138993e33b87b959d339cbcd1e9398336192e36a483b17ca994ee7de2b95e6d092393487e6d01c9a43302cdc56bb492a699ad61d4a28bd49442a4925a92495a452861ba9bfa6d238ed8448e3f493eea267a6689cee28974790401d25a803717c4c6204698ae6212121e136d2dd799190ea5b4332e27257585e2cf27264ea2630376b2c377bdccdacede61bd99e409d887f89e366cdc3b9998565bc7cb83d05d4b9f98bdd0f1955aa54c9413038675b60ae878c2a55aae01f1cffd9fe53ff43ffb3facf7c57a54a952ed2afbe383907c2f0ebf1a561e4e364496f3e762e2bf3401da9f48b5e21428050d8e642821aff442a981e08c3360eb4c23f2bb87bac578810200edfb890a0897fa214dc1d68621e0ea4c23f3a707ddcae102016ecc385009df0cd850461f8271ee11e98fac5b170df563bd47c45fb85e30a8135a80bc1344c610dea402cfc2371ce95b006f5781c1b610dea2fdbb006751f6c066b50bfb11aac41bd07bbc11ad4ab3dc11ad46fd80a6b50e7c172b006f5ce76b006751b8b8235a807ab77b7637bb5a8bfb032dbfdeefbb3800cae1b8c35caf4ccafac0524ae77b14d485c2f50c4ac17183052a9548a476e29abbda65e6d6aa93fa64dbaacbed55a5fefa674b727324a09bca48da73f29e5eae6edd8f6d53386dd075b490cc396e4103c42f427b759851862935bd22be6f25b17fda271799ed78acc67c8a2537392a95fd9e56514bb7ab5476750c2700a181e9d41081f49918259eef2da94f588573709ebb013007dad599d658958b1ba59f5d5a3b8978120f993e12156eefd64d8833dd4c22321d8fd58b95b8f7816ccb33906e5ad6c0c6ae5dd5b55794159a88de2ebb1e227e2a0d52bc41c6663b6cb23c3ab9f6bf9eab0ab3706ab6fb131d8b79b57f727c3f1cefeea4dbd3cc6d2b079c2d8976b360779b9cc8c178b1d614d30a46dfbcaa5aeb62965b69b3d50a4a7d4262e5f35135cdf46417aca87ca698261af7555ab77cc06814918527f3009b7eacd9ecbe10a2a61ece67a2d084cc25b056012aed7677518af1d53c5c20643d8e5154ad3178808f578500b2f4cc196b0250c05633ac2126a0185a97b64dea06051b0fc17a6c03030d4a20b4e70c5322dbcb95a6d760686d42f999b2396b93c4ce6b42b739857198b21f5270f63b1a32a3c9967ec08634dced3592ec978964b4a1bf6047a1988e219bf2762c556ff7bd8abc5927ceab127fd4959d452c9193c8b5d6954d49f9445b21ebbcb73fd76b1a4fea412f6fa8c2561997b401c24f176f34fe6532fa6f42462c1cb58928bdd9e24499cd8d361d87915f5cde54112bb1cc604498cbd5841d94c099e901747bd5eb57281245eb9ea3f1976b939b5e2f263971b24b1ea2c56c88f13d8e7c565f94f86b19b51d7e5c6f838c67e8c5dcfc7bdcd76afb631a03a0b6eb192a93f1a2ed6fb6651c75e372b6405db565e63f713f1b66db6718d3f1107fd64d8e510d6c4640f9218751b935d1f19f6fe9361d4513747ecdd9f580573ff8955b0cb51b6e59ee50ebb1e2d4fd99f950b14718c0f0dd7a6f16a7f32ccf21736486296b7d81cb33d08d3386763b6eb43bbd9e55e962ba1e440c326214b82976d24869d0fd76708f9b17dc6c5a270d5461c24b1ea625026d61ee358f795cd3009c7bcda886558fdc95f6bad90792bc3662e8615325736e6ad980b9bd4cb6347fd82b93c86d42f9889b7ba6d97a70ad138db167046be0a4eb6f0a49d241ddbdce4bc586dbbd5660dd7bbbcae5c562eafb17b0114b18bcd313ee091cbb15717bb2579db937e792e39b83e08c349425c0e24f10e97173648ae5c09e5caa5fe64773e5c5ebd7bfff172b9909f7ab855c9b9401d21f6070343f0ea3576d526a15f59a09f0c3fcefeb6ad0b9ed54d32f4f5d09b35f1f29684b35cdaa40081b022c7ac1e24993620acc00e73c01c56c4acae0f0d6ff72756a9cf5b15f09355ce2edf8e6d10af5c8e5d17eb7223b6ebe3f2ed3e2edf9e6c49b1fbe17237a5fee4b7c3ad3e48e29ab43d691cd8d3af2a97e2bb3869b0f7cde69e82b76329386f495b528604cfe51c96e30bec26613da38edd18ec2b46b8dc2443ef61dd987903ef389587e09bbdbf581911831df66c4f7a46bebeb031d8578edd2d095b4ac2a7d49575e21554909e823b0bf1c76d5878f1f9984c4fc1d8e5ffc993cd98946de3340cf6949e79ad88e7696c099322716411c496240e960467e4b1252c651296cf8ebcec712b50c4212c02e0c223924312b060cac1880b2e64c1451b92b42c43d249dd5509528c8c502814f1062138210c294803172360431604d6085ab21eb5ecf302f5d7f1f402f5a7c9998677a25ff107ec44c71c3937364e34110fd45f3b41af134d489cd813a760a25f18135609b8444fa5d026e04c4f29a794114ad17a086d4d0a372c18675141082885204c7002b750820e0c81c83972e8330e86f701ee0c116dc8c343eddbe9856a75083d38c3fd855559ee41e2ce0d6b8878c372e5eb65f54f13f5373939e2ce176df0c41d967ccd3efcc034e5adc8af83f2c1b0e40dac89f246f6006ba2ec41467943f2006ba2e441dac09a286da40d5813a50d19e50eb206d644592369604d9434324a1d64943564943332ca4fe6006ba2cc41464943ce803551ce9051cac8285d32ca2ba3b452ca0d4b29a37c6149964b1150672589901f42056b627e81b30fa6f0a3f7e709ea713750a7b599ea1525efa8cb20d425216930f0985062e94889253099fe3ac61823867556467e38f06480600d04c3b079ba497410484f996fc649b19b845212d91d824708ba8494314a39958871cac88a505e26a2908686a59c1c3c394d6c84b8c972c42873e4d0bc22cfd65a3c9623e523113da3dd0f7eddfffa7e34dd3939fa15a3d69786d3be8fe630589e6a096bba45c5e1492c0f5f53fac0032fff321e118678325329e5d5a0c46ca653be61d29c1c3c394a4c00914f4246c9399945444e0e2d89f6f2049ab8352c89de81c92b21b5a94403e991447cd5ae4ffce9f29cadd7e655bb8c5af4112f776fa60dfce294126b07928412589cd9c4dabdf16c6e3e9978168c7ef54f8d85806bd22f8855aad355aaaf56190a7c72b9aeeaa460ac5ba569fd4988c48397f98cd37886b1d322397ba29475912d612c8382311611aa0a4fe634ae7a9d2a1b6566be96eb156a505b59497dd35c5636db2d09991d53bf529bcbf3b66dcfddd2e66267517f9bcbb66d2e4fbdbad88ea9bfa50e4ab794ba4beae678abd56ad52dc5c06c97d129f54b755756566ed694baa42ee9c9797ae21a396ef6b77a5db15c7fab7708bc95e71eb0bf95cbc1fe56373781b37625cd764945f0b6db4dd1df6a2aa1c28ae43ec4ebe155656751921a46daca53cf9ab672ed5acae838754cbb5aeadb6bca4ea359a4a43f6c7bca429c753bb65934954ca3b9f296572274443b1d15d106768f87df385dd22f1b1b71879a4348d371f7503e86cb3128704c383b3af2b02778dc11d67324351b36f760e33349e2d4383691a6938e0aefd8cd8dbdf34005c66e63e9121b9632e96aae76b347735772b8f63262c07049b91ebb1eaeb7aeb22d9ea657c09a139cb0af5a367b78e69dcdd408996201638fe9a260ec2f13896533551203fbc30e710e3377e5f0994ba6960bef69aeae7a875d95557751224a448768113ad45a19c13a60b8042a10999d0fd75756f5963da9562d9b6863f5538d5772a7d5ea5c1327fd61cdb53824272e0b71759d5bea576b758a12c357b675956aa56aed583981552bd5909bfe86b4ee4fe652a9542dae49e3ca2dc120bceeaabaca34aed531b5a6932a9f785fbde5724d26232e1dde5d833835dedd19c5c3aa1f2bd84775eeea606bd8aab253ca193c5494d22fd5c5b84f268e7b9e4c9ceadc398ee338ce08b39329fb8cd21f7625d8b73ba5f4875dbb93a93f6c32d1a2fe265dd22feefac464e70eb13dd65d1fd5bb437c8f9d5e017554c7ba2332fe18318790ab2d2eef2a4baf8035d8afa54cfac36e2d5dd29f84bf5906465dc6cd325087e161d4cb65b9dcacb1fee16c08deeaad3b916652bf56d944ca6652966576264da4e964224d24d4449a4e6652ad771a65b06bb532efdae9507fabecd5e6d6b3d34ad5753b569a153271eb024d7cc26e5ebd75ac3eb75aadab86fa6b69ad56ab7573adb62bea8e58d757ba1dae4e053915259242bb5a28c17650facb9868aad57d5455656bbdea26a9f1ce668ec9e5729d3a26db2df587754b1883d2cadeea6add93acba76bb2428fdc2b263ef98ba1dd9acab57d82909c1cb1d5112c6de1175537050323582aa3fec1b760c091e07258aea980aa51d3bb7d4af18d4218ef911f704632d974b753a5d3af4d67b0c5e47f154f5d4eda84254b448cfac5c970eb556317450ad7c5eeacb0b8cec5e635cad56abe5d3ca5cae5af3e99c2b6be5c6adaf7e23eeb87ebacfd955cfda0d3e9df36eebaaaca5be755d3647dcfacaaa5cae566edd7c835551b35af7e384571aea362ad56ffa85baea2ddd0e5585b566d5cd7365b387873c01c5aade26ee640f60d5eb5d9d47ae5ae754364bbc6279e56e137756e76ecec199f5566569b91177b8b75caebac12dd6e5ea55cfaac3ee47ebab9ba3aa55c4eaaa9b7dacaebaeab133627555eb367147f5d695f906bb3cdf60d75396eb7a6457dd6e756f441b2b978bea7aac5656ab17104aadb5d6eaa3e2d655bd5a9b68e3f416eb9dc5bace235337e2ce297bf6554a756fc41d555d9d7bcd7e70f746b4a17a7673c43786fbe9aa9feae9409dea7ad4fb78373bcb8db8535577dde5faaadbe10aaf72dbb6d3cdd293f5d16e901b1ed84fb711cb578ceb6c17f591234986a2903d52a87d98af49c8628b234aa620410fd65c570fe7b9423b1e3c77f96679cef518e23cdd45116f15473b2267e6b5c39b83a8f0f6d4ed23fdcda22dbc6d22e9228e082c441646981819d5a1a6249ceea945a628c130181e4d21c2b5426eb3dd359b3a6769f7885337e338cd6b67531948e1b05daa7beae699771f02e29922baef5c0af56be7f36d64048f6f291883e327c3a9a7b01db61ad7bccb1ea799e7be6383e44f865357439283648d4971356cd67638b703d75d113c0e14318ecbae078e572ddb7800bf79a8530f4f7950858aea899e36fa9f9a4e54e692c6c9b154d3c08427ad53e089733582e761ae47f03ccc55099e9b466951bf725381e767bf5274099e6dc0995e81e72b4480078fa608d50ed5755d8705eed170d81c318e73dd0e8f082d6a1fe6a3780f356a1fe673c43db4881a753a5e55adaa91d3617367d43dd3a2ee1a0e2f756aa423b37e78f680b859c769910eabe33a342052f866164ea5fea2db91a246fda2787e429d88bb8967d7bd66e0f917333084353d4814e03487728717c022613dcbea6e0ef74570e7f1aa7138acce7bb86a6352a9eb23c3a907499cba5ee56c3dd59d01c0a310e858f2b8f7388fc46121f6ba43581383e310a7aa8dc1717964b8fbcda1f39eefd89ccdbc8ba90f923cdd63bb8bfeb6eb58d81f009eda8e23a6de9facbb5892c79284270b019eb5013c7b3826b3700c8cc38671c4b387616416869163e3d9e6c7f347c4f38b786605e0d9c346e0d02239335938468c9618878dd322e3858e0e7ffd347bb8f1e1b06ff06073d896750f7bfe3e92c10be2aeb348c9f11c27c0cd5a8e0fe0662fc77c0b910e1d17c0d5f1235a88741c470b118ee3b811376b381e809b3d1c2fe266168e1371f371fcc7cd1f8edbb8d906c76b6ece89737bcb76bcbde766564b12eef9c4d7e16616bececd1efe8b9eb3f41c889efff0190b753e2f85e4d4f9cecd2c9da7aecebb6b74eebede6bf7d4fd00c0cd0d056f3f753d783c4862d89f8f9b3b4a8f241e57b5eeb507a7bdfb1036a871e5dee3f545b7a3478fda5279bca5ebc183c7d58270b8be8bd10e7b62b4cb5cbba72628783ed871f313588857aee39cf43793283dea2893263c0b34afe86f52255ae55e6d108e163d413baadb51855870a7a4bfb9a42bea6feed06e7704095e0af624f1386ee7b99ebb561299313f39d4df77ed5248e2c41e5a4495348ef779ba8432e9d7ce8de1d13366cc9871cf9ea8f4cc7cc968f7d47403ce7245e6a9ce7301b0104860216ed69ee26cc49acd37587ba55d0f0dd77b6ab255a3ddcd1a0fed3baf96eed82037187b10db7b6cc636432878fbc7d3bda0582bb4fb21a590c46923ad8da49113bc6662a4a404c993be026f4fbd43edc0d371738482b716293b0071696e8dc732789d84b737527fdb638e9b9b08dece6204754e6d8035f393f5ec8269b068b09e354c83c661d743497f537b9d38bc27b9beabdf79eebaface887a9feeda797ac7b624f5b7d32245cecc7737ef7cf5ba63e5ca4a2149a4bf59bfface4a0a4922f5b628f5375b8c30917eb57c5e0eb5187557eb25fdcdee3693d94be6db483b77d5599a2c69823a10cf57ca842ea929c9c58e9b8d736a9233f3b00ae1790e63dc9481977a3e35753f50a74cfa9b4bfa9bda0f9436af51a3fe9c78a9674df0529f6f4fe76619bcfde5386e8e48f0b65dc6b7e7c8d88e73b3b7fd558d9c9a248ef725e0ccf6ed3edcac6dbfb9d9dbdec3cd2cfc43b86de7e16eb7b959c342c099ed766606cec099d7383541c1f0d484da81f7999b27668297c37cca3615fdfa3e21fe2cc4f6fdcdd36031c2f3336c56e14c8bf0bc8ccbe64672ad90696d96b9cdb0890c9b618cf996cd11090c9b2394189b9b0886b142e68b25e21db1ac90c6f9d41464bb70859bfd3a71b5a3315a7ff31073fdcd6b2f542d2c4b1a47e354386b464ef07c4f0ba8fa48bf52a97bafde8542d563057d13f514fd5af9d4ce11c999f978746a426a623e3a894f1a4a8c321fa74cf8648839275764e58ae1a7ce7a56c59469b77e12e7d4063833ff018d045e4d019eff240eecd1bc79d8046ba69721f19e4f4d785e2524715a92608b1489d3620467e693582d52f09c93852776a98a48078a384483220ee1b228c4829a2920312c4e68f3949d2910cf23a9f53182661662180fad4601fa4aed94432830e7b1e6a4d5e0b388bde3a1ad648821861dc582e4902c4a2a35ee3c0498c5c4056935862d486eda17639882dbb2b0aa086efb02b744a1014b142c326eda549427e0b630b86adcb45e14a68d9b76254a1b705b14468da072d376648001c74dcb5581dbbae0da71d3d62c70db187c52c26d57705de1a6ddc0a06169db7ab8a6b869332c54166e5a4c0a6edbe1dac24d4bc90007dcf6b8aab869a70c705b15ae2fb869650f56dcb48da5855a4c4109b77dc1d00bb86d0a57c8822fa83ce4a80c4b1822e33c4295171284fd07c29a79208c528cd2c7f8381046afc52a58d678f313389e474a2b6488fc91187bb4193b6c2e7f34369eca0ba287f140345e1ffac949fb13c343c35956a1c56c86023ec26358c668951d0f8d5a88212624c678997b404cfb256f9054c24d49a06957b3dccff6d38de1a14df9aa41a803b7e70e6269f266bc0db1dcb5204de67a0d0b24494c64e844897e65c884914a00028c850d94f0ece9a60c99ba737676e7e358bb3fb10a3e1da87efb0f0686e0d34f16a8423c04c72a384a0bf110ed9bfd396d0792dbf591e780e4b773975688fc0f144250e0fa2e7752e3a171f6f4ce72c744f4ab76b78d74811bf737eef2dd65fac55d2089b96fffc92e77637ed473e76ebd34fd6daafebc275e66c1e857f6bfde9369700bf9d1be3dde1f0c0cc1da8de1a161d4313004030dc143f08a6673cc116f9b8552caee1cf156cf5dda9f27f0f623f116f3435bb1b9be0a399dee4fa6695fd11e24b17673c67a68187598d1c083591841c2492e30c27d181fcd66218edd8612a269f727fbc9b0d43eafdd208933a8d91cd33d48e2d36663baeb233be9fc68000a0c618d76edb53b1edca66d1672f62756c1315a6bd7073c82183bbde6bc5dd32ec4276d3bf6cd67bb769fed30fa6b567f3fb67bf9200c4becd6423c6d901c828a2b66a844a2f87afa44b06787504788fdc1c0909a5bd10362787fa47c3c66890cb97a4200a5341056e418fa2089e7b14bef4f86e7e74dd217421e88405803e1070f450f91337ee188cd4d8e4d1315387f4e3c916d341a9b1b1a997e79c7186dcc7a2b19fce11865e0f882230b8e5588555c813a018035fd7c4aa982d0d44deba4f022dee20e12d1463f8900401d06c09a7ecbd193264a7167092071878924e24e9068c302b0a69fc4a49483b0f7c79baf44dc6922da5822ee0031116b7cdd4c9ecd1cc01e07b0779be81729436214f1ebbbd87802f8f557f64503f52315dddda9db94938967f9fbe5bdbdf895548baac5660ee40d60ec59e76362ef558bb05111d6ac6428223ecde0ca537fcd2c27d844a36d5976a1a0a1c1d8958943a8e4907a8aec29783e66f6941a543a8938628878279808b20411544b426cd66ce9820a653207736ce48c3cea45057a0a562f2cd29f3c27d4a9cb09d5a6fe5a96fa3bb6d462640a8e88e38814f13246a50906060626e61853ea3227c7c6e6fb7ed8656d83473a5e60bc45e3344e63a3f1adcfe0e520b7634bfd49a6edc926b33783e5e6d4b1258c29f5548c9b5932377b33eef694c5981a83d29fdc30a654ea624c588b55c2d42fed4a4d6a9a46a70ccb16c37279346679ea18957e3586476910ca846436249f116553d41c91c7a2f40b1ea1a18925b5c59c7e491878536d9f8d832d6d37dba46c4e2a757358965c320eb5673df038ece85892f48e1d4979b86439a2fe6491e6e1156b05933dcb25b9a4c5f03cd6ffa56efe32236fc62594eda92b976451ea2c874155e1a52ef3ccc2923acbb35c4a5d8645e6f242c822f39657192b995a2e41914ba9b75cc642bcc96da35bea4a23298b3c2c69c6b5f80cc9ab545c6cb08bcbb10bcbc5250a15611e79d7cd5a8c9bbd7a999b59f5dacda7c1f52d377ff52cb03e75734e17e1ec01250f3cc1f575729572d562587d95dd9687782009d7dc46b99160cf6e491fce5b120c9b4f4cb0fc8bcd27257c6aca9549ae4a5d84f396942b152c9f11c1920a97076c784119a298020a310083ada20b557c21338112aae842ca3a042738910202224e985a09e8a42729a5944d4ce0062cbb264554c00a035e619885932a1a0db029a40994a8e10d2b56a0609e9454210a256600412d62c50cbad093485ec592383fdca00b4a4f588212d10a7a241196ff686c907c00068c6188e4832d6c66f8d6a0862d88d0852500010d28485aca64087630e944a2b196f4eb2298ca5ce18614f4e0090886c0454f4b41837a82364af50fb0d411193a09c3304c08656408275c38fac20ea07c400945b248a2a28a2c7c210b1ba8400a2c30912690011638c8820b2e3035a8921085123314010a4618410950f0634a1429b088c317a2808404522421c21796a2a862065a0c11691c0e16465a20f4821158a1821e39022950a0699aa605090292096e50c59432a0200a39a59684c3944862626909265ce0d1239680242101642e518c6a2e5389242696966042d3b22914d3b034745436b1e48414202730cc0432886284318401063d102a8208aa64e1449bda520bed23a400494202482605048a7c800c57408219e0004512a1dad4304dd328a651259298585a82094dab5b7c485f8802d3300cc3308c08043290b205138af4a0880c01129094d06289084b5a2c29a1d106588530a480093f8872a4081204534af9032c3fa53c02487f518a2154f080085d00c2164a60032e7c2009485168e6a5f9ba2b6474327d13c39a90524a29e5c4e69c53489640b664708525537a8083a319f4482984a511964920c2524e79c41692705892a685a008509a64a16dc1051e3d62094812124034ed882d08b9cca46c4a1a3a9979a10a9d5e78036d62a9456b299914448e8440840a462888f2852a23d0e20433a01fceb4372171324cc334fa84d39a5872420a9013f3040dd00209b2c0832d443174a467c66149a314cbee8782215544a10940d0810baa28810470f802b6c1eea705912969472270c908484b4a58c2029332565833b8a04a1c92b082303ca162ad08585e5aa7d4ca8e4b8c2589d12dbc297f0426650b41d27904124947203174032cca1534c1e445a3540a9d5bb6841a80807e4c2c2db1591a8a65588a664d683453e8a2c91996a4e0a2066f58c2d00d9a5832332a8589a52598a8629b472c01494202080d466970ca1aa319869d4e2998734e2da420c247359aecc2f33b5a830a56687713fd499933078cca4b690268ca3e6178b486219cbfad59e27004bef6500e0c613fcfa8c1f046072e0c0f8d60c02e3289528036a20075221594fa9b382ed1957e46857e9402dc8954e21051910ee4108e97e872a6df9876941542a95f309624ce8e4825ee606863b66aa5c3191e2de120604dc7a107149e76fbc2997ef7b3aec216c2d067b0c19d73300face9381c7517b3283c81509b1c2bc6ee3e95721ae900d334c2641af1ee032f7b73a8c9a889323d6104d3265e4b26da41f0e43482e534328dd0b8dda03e524a29eda64d698cdd54524a29a5b169532a9b36a59452da9436165e379594524a296d4a29a594524c4a8949da9452ed09a256e27590a692524a29a594d248af7cac804fbc43b0c872861d3044aa6204bf67fade13bcac4988b57ec5777cbb008737cfd57bb0c7536128a594120b298ab07c902560865d6029b7eda7d3cda930282bbc6d6edbe17673e468d64238934365fca2851f17bc9e2762c5fbd5f1ce63f92c0b5ecf393de8119942f25916bcf89652c616d49347c48a494fc48abe3670c209e1612c83372f350dc2579c1b9e380b1cc01a887116338033f06e18e23eec22542883c3a3979916bc0c8fe935ec5e7f53051fdfb7de8b963525abe76b4ad83b0d618c5105d43f74b07ad31e2fcb9bf1aa4f8833158677f69765c18394527a784ac586853f56d20790bce4079ae0b6812232e1cc714d56881d2392c470094248437707ed4fac828fd4a0b404219c413ea9314e29658cb309cb7b534a2dc2f8592a160c6dca39b198534e29f37d87711832524a29a5a473ce793aa5e47078f209222905c720524e299b302905334929b30c9584e5853948963423cb15590e3cadbf960287b74d3bcd39e54c67746b7a8363b3b249e79c9a4e4402d64c19a881493e524311ee6b1207366e25dcd0668726e59c2b546b245ebfaed89c4e373936dd8e20b276b70d0d3c82e73a016c3d50cec00ba3eb777777eceed81d61b44cb7d2ed08b202b946e23512cfdbb40ca3de949ee7791de10a2a0fc9b20ccb329a4dd959ccb26c85d24a50bfe3c5b3427004f739182cdb6ec0fd20b2a594b2fb408dfb2a51a9542da79457e802e90a508831ce79052a1d8648578822a5a4940a1486485d14c12c4a2986217581f4a2a40b251586485d80215a0fb33a834394dd9dd3ddddad2175b78c1c11566084ebe1291eca8ec7e9e6489d20d25f9d4fe43824ed7c57c4bc51e86efd2e168135152229f5bc7cdc228e3868e2d3399bc53b04e53ad81c67e3caa7275f338ecb1ae25a330e763146acdbb172cf5aa1713edce52b0eef07721cc7752ba79776d23b7150c4f3dd57cead5c25b222681d0fed2b9f9d0fed2bafb23342bbe43ee19cb47ba694d28e7694527a73d7751342c8dd0c99bee8a4bf38cf5999832b42de1c1f7ad4a7cdf33273983bed7eac5cf248daada00ebb4ce364c05988e515a2bfc8598961e378af9c8dd8b344aca0f492c670d5eef0faabf5dd03af26214fb1acaff5e374eae510fd1dc1bdeb66d7ad742b5dd77dbeaeccb93227ac5df7c3a6bf89ea7c10d15f7ccc8feef2126254e743bebbd109576305d25f3d7795e8137119268f7b77f371ad1cb7c27de53e2bfffaab3fa2562072a676af287b447ff59d1da2bf7a6989e8af72dd6bfd11f52829cf5d9bfeeae30abc21fa9583887e65adbed6fa5a5fab145c6badf33ee46f64eaf589462ba5382dabbf8e305e55d78218638c37f0081e71200042fc9473b6164bbec08282334b3bc27d561f46d3acd4787b22fc7c8e71fe641048e2e8435e2089bb1ef2e61e10471bb9458532594584db0345a40fbced9a0dd25368aa0b7283e98431fb48101576710982b7d3137dd5361b4485b50aa830bd3e2df701003b84384f7ba008a6d7b4675c78da46af8ff69c2b30f6936673727e6a5b888c6844fa9bda90cd8e23787e783c3a9c4ea794d26cdc0fa739842f239ee9b7d726a1009ca8cc2a748bb8cdab000ec46315ead7a989da2ab40121d41f958e72a7a62a746abaf54485e73cad7714af75b70ff1a80edf6c3e5d87c36ec7779e3ed9201cfede51bceff9d454858c929e30e9d70f379f4e293d9dde879efef0c3bbd71f6c0b9316a32546a7b718f5ab5bc2e487ce680993d36d393555a17e613f8011d191ee6e3f3c9132a5e63f1c5dd131315252a44372a4871b3cdcf7702f0f17c85b9abacf9c1c1b9befcbc7dbcececed6750848c015b06d5b06ded234b796a6edb945ca36e544a5bfd9d2d47ddea0e181068786e6e6ee2d523adbd2d43db748e94ed3c38df370b3c7c3716ededed9161adb32a5a5a9bb2d4dfd7db345caa9494a4b8b51cb9216a57ed5dcdc9de6dd6b9e6968bad33cb724f9d0d4d816a3fe686a28a4a1a1b9b9e63fbcd6d816a51f6ccb665b9ef4377f78cd0f37c7db5ab6dbc264055ebf720b9152bf5a9ef48bc6e75bbae857129f6f216291c222a55fae9f7ed362a4a45f3e8c248ec7a45f2b57f4ab3bba71b327c3628483438b4e4db68db05a006c568425c26653fa9bb71180cda2d80c88f9d6fc0f9b7561b36fde86cd74982a954a8531c644ac8a58056065c46a5b05b192596946ab1c72c82187989898981f3060c0801123468c18356ad4a8b180dfbc87df380fb7b98d6b4616b8cccdda83d08cbe69463742337a006efe5e8466742234a3d75c87f31c88ff709ab7fee3dfbb9fcebd9e9e9a4e330824273d3e87f87c062caa0aaf9bbc1e844555e16d97791041dc1c6f0b22939235f56774f3ace1173dbcb8d13cb4877760e11d8278cec1281bd4318a85511e46bd5033685c336ae9d0e8603a463a5f8e2e478e1c9c0e1d3a743c92c1833903ce623473a07b73b386811e6ef684dc4892383f3cdcac35716d6ef62e60e3669605eeab02b7889bbd2097889b593ef7c7cdcf970237dbe066e2e61cdc0fe2e61cfc4fe0d6dcac4940879bbd08f0581c5f02889b5910b83f103de0d270c055e2d234e0b68c684b120fd60970330bf3f877338b87006ed6308f9f8eb8dccd2c236e8501b859c32c26782e039c5e7b0c61bdfee83d9b71e1e553d39d5985a90f875d0f1f706cbdb98bf0f61defa8e8d7e973a38da43f009cdad45956c8e461b30c0e9b611308251289482294199b9b08036c6e1d36e7b05946c766d824a276d08c9ac8026c6e2432b009ccc1e6b8c2446ab0d8dc35c1f3346c1236cf975580cdf508cf27c0e6ba84e71160332794b923781e88cddc52ee840e60f3dc617317e54662005a44b7d4350b0021ec04c0f5a18b4ed76e8e47b4580446134b3bd44ef3c4345504a35e6b3d678d38a9b0766af3c4f410a70e3b0d5b4085513707c14154b86b24dd4593d2467222f029a5bda8944bd74a633dcc50d10800010002d314003030140c088482b168345144b5b60f14800e90aa5466509da74112a39031c6100208000000000002002263040c0094ab11b0499d5e1eda6a110b1e51b2f445089371a65e3effa3981a11cad072fdd2ab7113d24cef18fe0fa5f0e205d6abc0b17b5853db0ec5ed357c2ebf3d45811cf92d6848466c0c0c07e8b3328a9abac96ff88e81d23eb3f6dc125601ebd6087a28d92fede6dd99f483b2c1133e87b605e699bb5ebd792113b7cbcf8bfbcb13bbf4ffe9be4db79be9f9d06251ab97325932dfaa946d2dd5c6ff993264c1d5b0656e71905914f1256a49bf5f9109b1e82b76fd6af5fa4fb4b40b0b9f58681eafe494bc6bdfc8f4537f0c77cb251d5fa5922e43b4f67d7af47848d88dc3dd51cc0409c446427978fffc5c3dead1c12415bcc8044cc707956cbb65456a2071c83e34a7ff455c29e5d366b03c17161bd711fa59d2c2221d0a95380d3e066ff75af84e0f184589d39d92c7697b2f525c1b615cfb8d18f3c06a3be11745cbe8947e58f001e63507d6121de4f1b017828cac68ff3cebeeb163489bb6c08e3d200552e9b4a775b5518f100ea7204de34113b6559fa93297499b2ddebb776dead501a6bc85ce892789d2a59c5f2b04dbd71d22d0367e8d2f787deed20594fa856cf27687fe741e50ceffb73634fa59833010e2a9a14d2995272af2f9d3ed5a136184809065fa35755794532642ab0191c6799eca374cb12d66a9ce1de1fb154956b878af459a4db548fb4b350df31e43af28d0b786e91a72db4d1d8724f4f3819017f688d72bd7a50a4d8120636dfd08ede4aafbce1ee233264f3fd025bb37324090f9205ce564f7bd8f45f552e915ba57998e040d41d919b0afed208433dbac7fcee4dd4de7d7beae943d161abd5af221ff812032ebd85f6772e4b6e7d5a8d25bc76d37a203d1b430fbf3bbfd672b8fa0b15a83d6c5b60325086c9b34f0d8c474f78ba2c81d62474bd3f51d970151d342d8fbd63fb95f9c7f14a1ec1114299958e55ef47d632a96450c779e5dc6cb1b850033413e1322d2026313d4af46fc8d55cbe162c330c22ad9c9c027bbc2ef232f50feb37184968234261fd12407a3c7298c000f936bdca5fb60f15ca65dfbc58ecb740e3467cb9fe98e70037ef56ff71faafcb5a3b9896c40609173a4d49ea30d894b81eb10d73311372e33a61391d40fe7cf9d123be18eb71cfc3f3ba841f887a9de875d225b4e9d444c727ad708fda1a540bf0b7a9f7e787961120d8b8df9d8bd53a32dc50d3f8d3c34e508e8d574b4db83ca82ec6dd86761a18824443e96ab40199bb04cd9e52c36354c9317e809842e747ada0ad06ddb96a798d9ab905cbadedcc763d38cc94c5b2e92894d3a6d239810ce9361b98a540d07508b8a2ba09803ce0ae106303ee7a57d20a00e47b1a92598103838b6d90df92ac894a2831f8c2e3076730cd1b48410459a425a4080d28ca2120e22f14c18ba9e8dc3169a882d9d39ca0e22f0d3bf0d91d6417610a3ddd15137ea253aad6a2e9df68a12c8d76fe26bc63c7aff2fd3d1c61fccfbb14fda6e3a1e35c01095c34743329268a3c1d8513fb682d8830e9cfe4cf584524740fd6c5fb321121541b5438f6f0ddb178706af5eb030f1698b525de765f1df36fa466911dfa2ea5fcdd0c0f367c90d8375e3f4a25cfa3e0242dcc999e939b577b1c036276602a8bf1f27721b8db103322276afee75fe2c8de32e15ab8efbef2632ae075ef2f2304aba3c7d30eb9659267ba2c944f211e0468536313fe9ae3c4c56a959b5fe5c96b9e541ae9883b5a7e68a042b6a3ed989d2973eeaff0ed051dfe7e6ff473a5c9561a0da8e26990ace118fb4660c497d02e0d5fb4442c36161806caae601b92bcfccf80e2612bd416d57f6646994e6ba5e8ddb0c9cef2be1507545a61a31ec91efca9e5c634ce0c291bb99f86e8c4e85efd485d0226820eba65bd4f96aab47fcded1238b3b5c5530790725dfe8054d48e6fdc3b8e36ca91c4836dc31d1dc103e2ff69cc1769ea8ba5c8240a9791e2aba98dac2ca1599942ed6608e216db7fbd41058b9551ff07451425e08a70a780ea200eb9e422e63e1fbdc433605c70c38ce35b0ad897ba01691290c28165d3aba2a70e0dce4ed97b61538d3e9b302405b4a314c66749670748179a4d47db90f2658db81d4376f9a8e1fea7d88ce59e4a19e01a8f27a7283cf28d471931697bbb31852c85a05ecb72d587ca818c19d244d4aa1e197576aba308b032f5e52822b5b183bc15414b4b88f1ae42c10642fee8294bde3e0ef210a7f891d5721ca4b6bda319f4150e176c499dbdcfeddbabf9eb08a343b1dbc71674e96f92e10445b60f05dda677e36fad99f9cbd63b8d1d0ee8aade41c6fc3ba664e4922ce038aeb84cba9718617191b271e6eb770253b2b5ec54a162c7cb5f920be703e50d9a588f9577e2a92575a7fd3dce453bbf94da97382e6894494f0af31e0beb8be334eac075e67cb43e527b27b8dc1544a85149d865174a167c9c62a8edf3ccb963e3f9b37ce50aaa9a82dec910eabc73b0c12ec7c5928d329043dbf2c06fe0b6794605fc8c75509eccee328263387d083f95765fb0d2453cbb48062d70060219a4a762ae5adedf9069d42f7fa88511785d57c13a5738da13496d60dbb5b4225c5f19391b1e97869afac9b0c30b2ea416c9925b90e338197bca2b9027d5bf71f075f7d35372a34d843c658721bf97d814de7f9211372820d576dffe4212ccc69ced04a6e643d346e9b585280deca2a343229fa34abc07e2a2d4c729838547c69b72516806981e523e938e26b12da305c08fda09e418b2077ab0bdb08cec1181f60c313ae37323123e0bdcaf00123820ed6ee59c73f08dc162856741607d3a52ac706df776f323124b31852b315c9e257a6b24613b55412eb3f9d7f1ed40ff29c1bd526e92918551563d786e096ac29257654dd6a11bc5a01f95a03609bd2a0bc8f909b7d4b6f6d3cfde3379fc47aca82b579b28e0dcfa93236b3e5bb264148c5f52a6404b50c5caf21126f77660dd524f96c345e1083e5665ac96614572ff0b683c9dcb91491e22860bfd49d7ce73f103fd1daa5a2d66b80fb90ab6220515568d07665190b41e707008b4fd81c2895f6adbbb112db3a537bcc8a43b90683c4a79b5dda3ea704b05a2d6a9959f0986cf8f0df75fee790842cad8a7ff1bcbcf47c630697db024ea879ceb9a8a62acac2e11b79903f4a3172829284658ef5e847d8e9e73c42e1e967a57a2eb98d70874825817ea97e53754c4ed17f0862db5a715ac9615cf7c05a9a22b86be27619d825fdea8a1a402f5bb77b379416058bfb6972a922065a50863834fe9fe8b46ad18859616802e66eddecb7073f522c50229c10f4b73dfe65c80701eefc8af23da36aa77d7c291bf79512b8c1d8afaa9769898e4e9038cc3561861bbdeef96365d5ea48d4196ffdbe50cb1f871c2e0681a7b5712dffeddccf9f1940915412c104e2556f6254a0525729a654ab701379321f18f6afd80002761483f180edc06b107e38d673b92b0db8a3cc59f3591faa750c979f116f8650c1e54463e1da1c418f671b9e904dfdc2c5f284bbae51015d79552d2ea655abd127fa502d3147fb9ae27f075f5784241903507075103fe045a0b080a8bc84c6aae1d07d308b0ceb1d52c2c04b0eda09c4d3d438ac3140fac86f69d07725582272548ed2d0cd3e4a2f20facf85beb33aac7595126ec45c1fc6e5bcd8c3d5337ebcc00fb2d32a754fc254ea7ef472582869c704f7c1b728f5fb086cc5aec93c1367e1af5b8c5869f4cb1b61992aa7f9a2d6a396a5e9e0cb972d4b3259d1faa8327eab763f60129f6788dcde0431bd53aa434614a17acb32e7e80aa82c8016a39399ffb642f1606659be533fdd9f7d9efaf94fcf2416545ca2ca43677c378f90b2d684c922d42da84067a8bf393da9cd662c499d8e3689fb70b48bbb1e75b49ebebc8ec687571b937dfef24e1f1056d209ea45bf20c603eab081ad6250d9cbf84e444284eb8c6e21c6dfbdc9135c7702cd8b9622d8165f5b1bdba8250198975a52f2c46c9023fccc3861c541ab3a0b1dba992f296a3c23bfc26d50aa383c6f723e805e2ccfa756ca141eb7948a1d40120434032697d1c0017f56292d8f598e1736cbe5721890eb4ded9f2ee9d750d185ea763963a9ef758e24e81fa5be69ce355676f5722d4c526569169b8a5371cb8e75ff07aa6db6bdb410d62931513a5f62c5dbf6ec300be65f98f46a21e6c829fc65f09a2b0656bbb68bebea64fb78091a171a46f8d670a642856026cb1c69d9578c94431451422b64248fba4dc69a16c9be048c633aacbb0c0362a57abd8ce07a9ed5b6daf3c7986ccec559de7ad9ce69b1f32285ed300364aef4bbeffd038b3773799d387f8b3654344bbff081a720eaaa4fe828c21ccd0599bcde90f350a3217dbd64b5b88fb586c47d852530d05ad532271e0f03309152013a2570473be7c144afc0b03f7195d3b1d0511ed110460a5bb843a29d0e0d8ac47dfb48f569137735df7b70070749a16a2a2f11adc65dff7268e3a75e298ccc7ee8667996c9f6eb0920b2ba1595a0449b1279393d14917976ad56f873dead3cabfca889ccf349827d43c0ffc9428fb398790407813ed1854d09b9cb91ab3cedf59b25a5a48d65917ed5c29f7b547c4fb91834c2efdfeb44fe1ba45c11fe473a5049295668c5a1e540eeb66f0cc029a80a484576473468e786b34dac2d3b7f4a4ce753ebdeac3ef27c00a46963b2bbb1afa370f14ca24773b069f495300005ad916e15b7b0fca03f415cd225a94a05ae6412c2dddf4829af57233e849948e9887ac015082f970806b13e1af96c02a6f710440b735b56d1059fa048297617dd269370ab87f0f54778add9759613092f236fe296de2a49bbf0a8f446e3e6ab3abec04e4b4ae13a8cb440af718f29b423004a8f606db083576f20aee6be22e5df3a8dd3ef69ef088e4ddab848f8ecffb58b881b1d752118449aea06c51b1e68741ce447fafe81799655c57d78da14bb137f8b1a3c4e5ed40d26a33f4c98b16993c922e7a58cab97953ed07907927253681f3d1c70faeff9f4c1f1f1c5c0d680a13f572a588e0a16427581a258c2a096be6660006b99bb7e7dcbfc70604d475b49f76a44b50d75e288f972b53587e9755c058c95d85ad57dd3d9316c568d457400358bd5a74cd55a9d2849746bf6500d6aa937d0e299e3d52b5259de09e4ee580f6db93cc7c7b53f80df59cb99af6e02eff458217d6d789afa1b633c24a5fe68b1f63405562df22fec8e5d76fc213ac20de7afb21abb8878b08f6417c79a73178d00942c5af9740623444e21f51c9eee7163882436aed3b6c8c298098f27dd418de3cfe156be1207cbb42c8140e93258621eaf6bd0ae1b590ef77c2e78074a76576389af29a01cb049affc044e3b363e8c59a52e91d8ac040b1dc867711e5d3fbed2d374c001e24e3385da09be08c31676b68b00c9e679569acc5008edf14236ec260f1584d60f779a57048ab165e299b8066d50256b3a9a98d1375985e23fc18b0f879b21fca81d88218795c9631a38bb9b2d85660c4b15b546a1144a007d20998bcf9dc4aff028685b90c0c78ce4911701418c70a1c29f9fa66acb1153bcf35f781e70aaa23b16738bd7107d99ff7de6727ff19ca8bb712064fa20fb31b13321f08f792f4a25f10fd7c1ffbfc64c1870c920adb8ffd156509603be6e0bee0e71c2f71b6e41694ba93730df2dfe7839d66fbeec06ef6fd46a4a2d1fcb64781dc9c3f4ffab22c6f916c6aa54870e68f698ef6d61180af32ffb5576793d814042d19149df90eac2736f309d184920d9e342f0b2d86c9466e6dbd245d87a2b690890e8aacc12a66e52aa5c286779ae7ddb72ebc7b7f053b41d9bb5884fadd45474acb1879fa13ba5556c7b9103a66d00d74ce9930a22dde3ddf112481752676508e56bcca756dd8ad0e113abd724c392793e56aa93507c1d8cb3400bdfb054cc4339917447eb5c35811aaf760fb98353209029680749b701e2d71e2aeef50abcb0ee8f66970d53b62144d7bc0fcb45af39b52f90add08d0c1082685d4da3306077ecd82845053083bef80368595a76674aa9bfeb8f5f0f8dad1ac0f65142032a87d5f7fa94418a22e0e46a9b55d8d04b4edbc8849bcfdb65d378d3d9b573054258da25025dddfee217a76304a7b718a387df32027bc8ffff519032b541208a5355ae43c7b5eb41fbbd7cc4b6b4bb37b6425ee6ffa2c162e4f7c26f70f0187a4f39136804b31bb7b7b0d44c3372690bf97cc061af00c24bf48082f96536bcdaf433a80bbb5f3118761efd6013f4fdb04512c66543d708abc15cc957c89e34b112081a10ade19627f00d0d8b163d762a2dd1d0176d2889a38c44adb201a77658e6c3c9d4fc290db5378e2b1da3e729ee92b5f33aa08c6548e75d933dcb412a92506d53208eecf77a5d733b715dda46cb8826744b4b5e0d655e0df309e291b086eb411f514ca4d634d040dbcc8d3634e111f7feb6c0893941887aeb6b02ab3c4a2c702ae66852ed0a630cf3af8c7f65885d52c6571fd5274863476879fbf1214a6037c0b81361000cfce0d1d532cc46a97c371376964af86a58501c588111d61034c6ad7fdcd9aadd9228772bc53e077d08001a679d160be213fe306c5b8f060648c0a60ed2715952b5416dce3315608462094f6cff0978a4cfd723d57bb047ba7a77ca509d13566e4f68ad368e254b8ee02d0b29991a001a992f17167dd5052050f7f6146ecb1f76244cef9528347353e0d3bed92ff37a60e961ba4ad238a819ec3caf26646f047ec92e419b395d03a074b922f94773683f6e49a301af82a27f3034e18706014a3643c0c83aaebec078201b8f9c2383f522c4ec9841d0d524fb42093e523724bac320a1a9d3c3fa028932a0f27dfed8f4e49ef63718825eb69bbbf0dd033901d9cfa8f7212677cc62134602b7ba0417c0d7316a6fc7c760e29ff59407a03654a739d382696ddad2adcf288379adb612710570c0a2e0f4648ed420fc5dbe7a27b75e25c33a51242ee52172ef58a7e35e176c0e57f1aee63dcdab77eec0a1d540c29652be609d0d4910284836f6071d101365b9fcdf98887293fdbb0e33cb9b412f2d59e5ee952f883b8edbced0f860942acad57631c03e75688115f5af33045dcbee07e968c2035df3d5702c6c4e085b31c6e46b61932fa84ae2d19b9b44a07ba0d16a384314c0039155edf5fb385bfb5b8bc4e0af8f8735ed4baf6011c8d193a7e2f71e595373e1eb9e6e38a455ad8a57a1c301ea10e7b7a33abba99f9774a13799f03c2462f152e7e994af41c1f0b2d4c11f6f85b251393b87c943f14b7a585a60f36664f4185636dbb0eba3c8bcb77b3f104ed90d3581f776be689fc0c913edaca2304bde0228d4993c2ba524ae5f8bbbe7f1a32a6dcea04f9fdca0a70011d19f29f95c2c7deeef686cdf3f05371c73958c95c21cd041be4f5016a62c041733bee64bf561b0d6f447613f16975facc57fe8bfe8a8b0e2b830c96a8b132d2787042e05bef76f655d1cc2b493c476df0e70d20b2038283e09101168f47c0100c7a38d271b051f40311a16827f1587669cbd772aa79e4dfdc4e905991e55c45f291e11e023f1e802fb8b92d39ba5ffaa0cc5da0b118e2628b4489d87d82ad93fbf870026c44e5d48102cad19d7792f1618292e1aa1361d648006f221c0352566dadb56e2ae93ce403d3f5354191acf5e7be64fffb380fcaec68743cbda0ab75e8be16188b29fed28581a96fe7822f411e5a1d9fb37bb81129c1781669700f1e24a526cec9a88ec58906b73ae352bbc987296e98dfd333128606e879366d3c61009f867417e92fc0879cd79f64b9abb0a3b2450f9649aad5f1230705c4cda9592b03a0780e8559f355c956f3f53ffc4db1dfab5dbc45d5bf7c1f04f62674be87e9acec8d53845b90ce6697a44562aac0e482f161f3d58f58e054ea890c3e29ea08f741c6ab4b110c82b2555a33aaa483624f48b55109ac6783c04c72a3455bdaf75981aa32c6fa8f7bb86b8209ae1e74c895ac92ab692fba7bfbc7faa53dc19addea720ae296b1604e72f921b2e241f4f91f49caae18002356993e76421a4a37fbace2b208878abd4dab0974055b5cff4477ce8e67c62c169c2b2faf44fd4d7c02a528597f8339c5d53a3ea4620f477935dd2fe4b4ed30e34468c9a5ea12336a0c0db722332a0d0a08f551064234fa69856883bcb0d6b12c75774adefcc6332ca51b7e82fa86b03175b1fff930f2545336ac00a0c967f712185631eb15aa1455c47dc35134735f11dc6c59992efa9367140622c74c2ca7954c38f89ac4e4cd033c6c3b954685376beb37f2c3ee4cd20cfe8278b8035404f15412d9efe4d8b00efde0227c1d8c03fc47d4c6c20fbab1105f3bfda30b3a3685522fc8e235a36c91dc88553afdc9788891c68d413a0c128bfac31b982cb6f371160f8fff813675032e2176ed3235474410e0d0551a46b24d798c071fb12087c2ba2bb4ec59a12203dfcf6c19dedc45cccbf0de34734f2af04346ef070c9689c5ea81e4e80b8d294973c60dd5d9a4cc873b327c80266f2cfee27e502a2177eaba873c0568e13fc2984057ee1bf410f3b2df1c167b1e78c9f527b62770ca457444317acdb68baf172a43a2f846e44697d8e4383070f4e302424945023250ad2c0b2de973f87d9a2c87c226bb65293f3e7f2ec03a0ef7168071cfd8c4a5bed0cd2ba9e2776de7f96120960676ebb2375c4232e17aa538e1e929866d7554c7b9cd0681e818848a926d279d5e81620d4fc050ae40ac4800f27d31a32516b4cac4723afa31ed20193c5581dea53d84411dd27c5453623d90a064be70d8d5db9039d84c0145d37f696ea55fbcba7159dce1991da7a2595019631bc0386f31fcb57ffdb1b5bcfdaabc67f91211198d375a93c062800cd89f5e8a464447b750f8ac916b56ba08e5149d39a0698297d57358f4865e73167041e11eeaca8124cf39ab0b4ab1824a3d05cb84bb5d6d8661a8e688cbbad30b918385bdda5a0b2a58a7cd65cb7a725b16d24d3f8fa6da1665d5d55ac88ef9e9ed95aa14dda431de6a1f94533f90b9ab4d7beab4cf2ba0aed27ca452b4e7ce489ad469077a6c0bff72db96bc15e42fb75dbf04927e0e5d422ba38942909ea4ae3122e8302e352cb8fd62f885c79b07ea74147459af4fa46528af1e2d82990e9807d18e77ce77a35aebb4a4280bee6ad859df365c7fddf1485613d25463afd59af382a82067cb4e5f6482b8ecea5a07c38ff9cc76fc849be69eab1d4e5e1355cdd6c91445facdd02a09b231baf7f08a0c72a8460a4999ff26c3b48d4792133574d3da8b9e75d9b981c6b4da7618dbc46a595b73e8c02656645e1876698a735b0728226c309561a4b9838535308d8dcd592197e29b89dd36df8a7f20ede46febf18ac0f18be0512ad0c0cca8b460b7edd06098caa5a4cfdb80db8745b187a453840201643c6149356917de09df4fcc76e440a04fa115ff780bcff1fd39c60b5d31800c2c42ffe67b657ae690280e63b8070f6215d5c52bc2c90a7cc6c8eb00ee420c30c10f18b8bcb52892ef4dc22fe43b7da12653d080036ee988504ebfe321ebd8cae6a4addb4a6f598060760f078590cb575a42dcd740a741548c1e730e2d50ae9a9a4faf450d84f58aecddcb7e297e1a8ea00fcfc7d2f3ee4e7deefc833063bad660ec1af32a293100b8553fb56f6b277ed155ee0edd4ebe7cc829164cddca0f298e103bf4cfeada492d7834ec3a2cb565ab07980720a30deaf9a452c6dd8912f13b544a7a63571a97a59f9e3a99fd8fadd339f58657bde9b5930edb936ac23a7ad86c17f73e2f05c1e8e698dea625a071f1281ebd8d5bb4b4cd26693d2cd6cc269f7b1fe616b99945b748f6fb08c386550c1cdc18695a4a900ba477dea07473bd7e47253d7e94337731ca1d7e0eb59257529a666813d052e28c95ccb04a2aba9c36bd4aa32240290edbdd59f7d4281839bc6a88b02316a417fac95fc0d58f79f36fd5093e92c448d63d5cc51084b6bb4408d63fd4f4040c888b8fe18202e536d91344a127924314e43c97ab360f0400565d14218be9a2699e362c8ac7ca7da633d62f0f115a05408cb31973c4ef8333a35f88d62bd8126fa16be1353f791384aab6731b2d3e5fcc8ff7693d593b36f6e1e82d31c8d158a2a0f00ee33ace79813688a8f50e8b62e93e43eca8ee0097cc0777cff23b9cc5b627c1a3da7080cab0a0010b8813a1d739a0ad43bddb177c888bd8f8f17904c006cfb80022eaafef2678d82fe5a4bb7a4c7b4b42e9875c786c13c3154401fac989bda8e0172bd7a78f5e952a19b40fbd1e55182d97dff7f5c42cc30359e680e0f78d63af1daf4070567f623b1633c3a60c6dda6cc32930369b68ed507df9555473e8a8ab9e8eb1db765218e36f3954fd81d58785956a773200feb22ae23a0d4cf5dd0fd020d629a265eae72e61e39428f17952752771a2e6b8222b9324a2d49c31c673a733c416c4be73a4034f64fd5a05698184e0560fd320ef731f4716d05bd6e0ad0c3d35603266ec992ca6f0694d4de6adfbac3870cda8d1f7afc6e0f22dcd455aeedd8933895955f45602cdc55416882c729e67e2fc6c34517b51d4334434293fc802e6b1074b486efd079230959905c6f0ce7ecc2ce080a9180f49de71599dd895a3662be0bc6c66d2f51278b742f771ed0ab7eb2deb48c570b99c0bcb1d13a55997e032d821c039908095ea90245402cb36c2928e671093174ed7742b66a4e3b7c3dd061496f7b6127d0c60e96ef23cc1e39f75e9f1b04f979c85acf176598816adb9a40886cbd9deb0dc5841aaeba6f5f37e9d39f7e8f4232b91a4089f9a3bee2a9cbdd554668dafd16f7818069a49697783455e15d7dae38e9556f86d2e4619985fa863ccfdfdc615ebddbae0214dfec3f30dfefa322405d02a4b442f38fd0dbaad2b063e597434bbee29d2e2935831c855df54381e0665d278850707b5229f70cd4dc8a4cb87aae490e72dc8a4cac121eb722d3c69f99eceb614d51e402376f769556a57a203897c9e3221f508d620114a296636907371f6cccc13085d14c871822712802e5e66887048b8bffb651f0de6515794e087ceb5fc28ffd6e4fc4cbabc13245caa3380a502666ed56d4f1cdac9ae0a3d2594ad98387dc66994f4ad693f5c5ebf65f58d062197dd9fcb71fa104256163a041e625935270ef2a757957bdc8e826338d523e8a884c862ee7d6b0e950900a02a8cf8b532a861f65b82585fb69b763354ec8928b1d77a906a16df014a97d1bf5e64e85aadbe9fa01559901c35533232a66ea2d261cabac284c7158b8f463051ddceb058113a1ab583430bf36a272e500ee348e6a1abc6082845b7198c1d02330a41a0c772e249e04bec4e337ec5ec61ca8e32437ea3609e5d8804988728bb3e71376c5aeba62e62d429129e6c8b1698d7cd6a8257f6ef7b7119055c67100c56374d5ddeaab386f162b14220ec353cd8bfb92e62c13547331983fe53885ebc9ced91d616064a18ce6f8543d515c20ca0edb983afa53745b141d3b189f992f9bc809a4d5ae61c92f2382365195385605cc89f409373d8ffa1932aecaf654112711d6c47f7eed6377d2776a02a3296a0d96408eec1de6f07f165f088683c1cb87dbb73e8a2a60d27102d397008cb4cab7551b5f61dc4256837d00e86b0b5d86db79c952a2454e3b3b5c0c9c99767cdf8643511d75e924badd1541cab48e667b0fc907428328e8b6ba12fa24f5e4aba74e6673a34c587da244c09aa3821f284099ebc9bf1857d7b440d23e6d65c5ee171056fd14186cd1ae1a896e90eeaf268d231c74d7496dea7bc3cdf6793d0aa19ef7b24fba802b89ca912432f34c63ffd3fa06b5ddfb7dba0e3c64eb36f23bc43f4083c8b179545d3b4e89fc52e3de32904f060e74a7a620fd0edd0ca2ef68dd19f85283ce1b154bba5d5b0ec37f950e346d4c8984ebedbd1b7cf03a75d04c1ac540471b08749e6cb17833140c3cd92aecce7395ff74630d49d976be682cfbf6914bcbbab066e584a96fec0514c7a30a184b13f297f812dc7760fca6b26e052ae8289d868cc183d07d4ce00ce6e9d52e1a529605c4ad7db74ff9cededa70069c515e877328a0fdb26117fb020cb72851afd461baefeabb8b8ace35dbaebceaa100151746c8b32f2764afd384f2a7ac0f426d078b50ac3c7ae2049ae68e96babdfaebd64c6f17ece3327da9639fd10500866b4d122175402a65624b18bff92de59adb8c62abf38272cb6ec186078a4f8a62d10654c4c15cc00bbf0023a83d2a5dbd554345a8d5f2368f3059e5acd1ef2c68d6c4b5faa5792274c9ac8276228d3089e5d0bbe45766f7dfab919e0c55da455296517530195bb867ffa2f003d54d92a3b4f55ac87b8203f677d24253a1727952ad59b41ae8c36dbb9e74b8224ff2b9671d07dd60cf8e3715e9fe93626f55333ed54f4c2193c87a6f988adc20191ce85f5e2867d229fa3c9dfb337c263cef4740c73d07296a8b7c2ca4eee086a23484549772fc541ce15210bb9906da300223e26f0dd27b8287c4bf91abb73eed60be6b29715ac3108a6e52b545ad8d3c70ff8d1bc9847058932c21e962b7ca4b9076c02925b62b8a80becc52d08d1965090f07e71d33f55c502b33dd1a66c8caaa558d1d85602bd1fed0db5fe7cc9064383ffe65147b27558a209c0599a19c77a201e036615189dd0d060b53014faaee85e051e61c7f055b0c174358fd44eeb2bc731b994110abc25ba0585998a5f630860d488a1ffff534afe3473136c9294660c8dd87286eef39fdf24622b6fa00488f0fab7ebd1c85304c6ff715aadfe7bb4f4c9a2342250364347b79b01b492e5b72f390bb36a0cfd1439b8e230683a2d70fd97842e7ba6b6ef22e1593f73873ff7c0a80a87ebbaa41d9d78fa1932e23f2ba6fe0ce4665278644b3c2e9b4b9d238e10648cde3bbef8b610549706e629986c21fc5cf37dc396a672bbed6298a4287b493a922f08cc58ae61b84996602d87bae8ba7bd7658a1eb1adcd058d7cb265104f51dada1216ab68a64eb98389bb992316908c9259bc5381ad92ca2ffe7d7026ec186093ea27d5617d621d9f68d690890a02b64f2ada2160dedd857c06867c5fcbe5233faf9c688ade3785b6f80920942fbfa6a058d451a51e58c03069abc3341262240a10fc7ed46db42ed8e12e6c29b388a1e3f861508db1bf6c51a644e155c23e9ea44d57cdf0668651937b947df20964afdbf7a58f2aeb5ff345f9ff092e4960ef89b7e168cd6b41071b7140a60318f2d804fc1d697ba747bd1d5acd5b8c3dbc37b62330701251d1965329870bfdef9ff05e349952952bca82df6a60fac7a764bf8e06bc60784ccdf9fa94353079332ce28e27b60943dffb155785392fe01963ac01ca087de63dd0994939d5d5096844a15fdecfc45169d84c7d5ff5934db291dd9884aeb8671a9272c4cf59d9572aaf8ec0900da669767e7553f5f58d31c1dadc48d9d39721718b710e6e064af23555e2ad096d0a3a3867a81ec492666d82e2732b9c7675ad8f8525266dc97c81f1e57d5acf25a15fa454042d3cb087d852b104ac1344f15eb00787337adbdb0a2227f46d48652904b8d90aaba775108705162672d645d23c21d216d219e1edcf99ff584c01adb2cfbe493d33aed139e862bc93e61b2449cf32e9eaa168fc8df9b338b0ee519fb5614816c5e3dfd714d3761b6b06c78acf63d1142767d2d74ba567c70dae9dab8c24d151fae1e7da33e8fce5b43f2d233697faa7b39b237b0c6468c571f3fb766363938d9403e7f824f1068d8cd086d6c875c180df131140c58fe0bce6d9dfe9dc1679bfd6aa9a029d218592b69c839712a7a48e4b15c2ca1a49c6e24266b4642db86978d3f942bc9531c27c10107b1983711d894a65811f9092eef884554083ba45b171333ab4148f120fcae882176e123f06971476eca7e71728991b13dd4765f57fbd444281de87bc856340dd6628b3fb2ef6ad2dedeef1962ddc2819a51256e2468b90bcdc930251beed55d61fe95daf10c23bdf702121949e1454870b308506f412d6652844f2c5cbf69384e6a49068bee92c63df1baa7b2a5df4fd272e471d6736ac59e5186bcfb50df0267e2b99cefcfd1b89352cc36f1c9ad9904b347281131ae8c22a0c00759a3a464039a49a0e692c88b41bfcfe434647ae03ed76c983040b8202c59c774dd018ff75947bff9439c3dff5af1f1b8c20c1839dc66821e2ffcba29e1cf22609631b71627a12444265712b8aac4d476829bde7a2b4770a551d361c97266a44ebdefa025f90a6411b44070c33cd40976f3989ae82d2d75534c7d8e544b22f94c2cff0b4a3b13bddfc753d68ba9681b92105dabd3383084198eb230a5370aaaa605d7f85b0655c0b20f7eded8ef756a45483f5dd69bb68baca18e0b355935be78593d9c2b320d819a005c54685c520d19e9e43c0857fe3c7e764dccb95f437aec0cb0f997b3022bed8d3b801d048d6ea28544c800dc97c2264ed94570355c1c54a27f4b22a10d1be183fccb1ee18b18605a04ab375b9f1dc2ad544cfb914723838e98461549c8f86f3e4fcafbbc24d41f1ed55112fa1a255a057074aa284a605c7fa8bf339fa43a5cb52544889d51b34fac4f41ccfa354415c996702b184c166079b090d9785fa26b8395b7284da2234d6eb75e0f390a2231e6182ca001f934c567385788cf7c9a114e75d65931b13bc7bf481da242a02302fc908082778079ef6913ef66cdc7bb8246e704aa21a97e82583e625cc525a14f92eb5fe61338cc4fecb14606cf444e00d207cf593930cecca77061a85a8721ef38eb5646eeb70a6f7c78b273b5a0388a247fe3c9205be7b49f774f7e324f0b088e9b65eb12c4d64ac3d41f5e750c49415f38d8c7fe81a74116d8634e4fd31aa83572ffa81cda8bec604a860275a7cd6a0aef6988683e40c02b8928d1d2b1bb9f4588aea0be29ece2ad20b4c9a7b6645df654bd5755363a56958bce765da3acfdb19774b824169ec0fdb2738a80a4dff71bc113a01448fe4d99d98e522281cd6109706c13a97bf3202d281d20b7309014c554b5c21f893f28224a9a26f9cc06a611bf1ec7af9d557a5fd9a2c9335ae437e3f9dd012030b0bc3f393a2e2a45ead82ddb0297b92501e2cd9a06e531c1ce6e96daa4434e4490f6806727cbd52648a5c53952f815442796aefb7fd07b69d34b4db6008caada9fdfe835b0f1f9992427a0a0cbf417b7f81219d1fcbcd58baa881b09551905bf9796c5ef08b07114aa72927e59b1d2d2c94255eed44b09489b58f4b5283a387dc368c25fc592cd796aa2e196acf55e0c1b07b555b168442019243646d01a9741fa1babd27e4a7e9c43d5db71385c354d1eb76691f711949400f9dccde0602d0d15564f2a0318d797922bcfeb006a5f72151ec7e876b7fe36dcd143931f6c2842b6e9b5702ad863317b252c6b6e60e078eec2f4218601cabebaeac742d4b26a7c52bdd1b30e477f76ad74d696625a428996ec67e23dc60f4b1b16a1120f03c8b943210a1890ab25027c8ee7bbcc83d8d902995ccb0372f023eae087ba2c228296dbaa95d8f4b423f24036aee51c8926ef28e135ff2e3953beaea0b2eea32d12c11c2f112aaee7754e56099806c7b54aafe739fdf1989eb7266f22242a9fbcac77526146875d6c1155066c229c9b28cc699fb4a9752a5283119216250050801ffc5f617695467138605c5770eaaa9f7c270a3a4e0a6ed772752505aee083f0c0e3e9b0f655538ed4ea063e1c10bcc4d947f37fba3be3e80fd313122c7227f2f4e687f841c6c1ac3ca6e7674b4875643b468d06565977d898fd39dbf40b25e4410b6f25de4c61b15902114caad0d978dfc58c1ea7eb41e79c063eef8c6cf276682cdbf89641a49d32035c7e245b8a8aa6a79a16f191884bce1a6e0d5b732323e44481b0118352749b9c41f9299444ed7b411c897f9ae26140e6340942e76378787355d9afcd5ab385406a6f66de49512c578d20ceb20b1465a65d0fa4c45ee94ef212a87aca5cac5cc3e14ba005f33486080f59991c8ef29de2e1375651da2600025eb40736debe667f7290b97c22f6d54f6ab29c5a1d7538036cf3a220f2f6fc9d688cca6ac48ba8906eadbc3507d5b16b7c22aef69304fdc002837d4aa89a956045c4e7ee5d24b8fbd581327f4b62b260f8a4713bcafad7c8fadf727986168dde500a14f9f7088013719eb931468663b1e3030e4044009301da80ef182c7ecf3f0c29cfea04c9eb444c22a4a4b0797a9a733d11bbf1ac1e5fd758167415ff4772398516dcb92d9c8782c6a3388e142fba6570556ad250c5907155807cae10aa52a43ed3702de0fa6bb4fcc51dd6f1a8f102fe1f2a4437b6dbf3f66b8c09dc9a7a74d0bc37dd09896543c2bdad83e359b5d941ad062f9d062170df89018cf9623e2df7db228186f48c02f208ca98c33c56359229b8d173bac0d3b35fa9447ab8fab327db969c17580865cc7eaec64ee76707b0db58bc1ea5db6fbada20f7d691823879e0c3a21c9155622c0e64341fa0c52063d11498f44783804ae6610f2d59c17ade5630b8db388ea4ca8fdc08ae80858b7074461a69fc0af23805c2e005d70b35740709cd80f85de03c374b466a3d37fbdf2317b0a1a2280d051d154b9e1c62a0a052d2f4c2fe09d8a24741a3a166e94156e91c22a855e47bb1f4add25cd1454df00ba657d2b5b181e57a96615c6da855090e9d9d4a7db2a1bb26714294edab971b23e7744f640916b5c43791df30f72f2ebd59bc778db3371cb5d033b9e5d98027d5acb6f3a75ecf82355ac47a66d1b489637a7cefc74fc0ec443b5760ae0d7ddb65aed13b60b6327872f982779cf7e23f159b884e78241e9c047a4c9488af5c3fcd0d8bb14282846e3d797e2521861f4e4fb1a7d8b215a5dc03bbae6be228015c189ff37afefd86ce646d52e2aabca807a688f400c40286853c0611eb3822778c87642c86752dbccc604f47f3a0a76684d12805aa6f7bd5d2514121384b28e89aefe40d39f7269de6de5590af0173710650cbb442eb4f2d0115eb039b884345638d30219132541b51c85034cc3e0141f7d8c18821a98852686652d3e3282d5c7a4e6f28cee3f5cabb0f6b69bd1baa898e3d30777ee558ee47445ec555967bc2fb49c201346a0c6c85db00a6fab91b3139a841685515a2c0cf156090d08a216b7c81808229ae2dc377ca241592f2753e23a83d01891f612f45ff90ac0d7c8b8ff24468a898fb96c00d4f41c9d79517835c58698e3186f82f96e2607d4e07625445da40f7079be42616e9798f2e35cbe43d86e58046217957cdac25a2d4477da72bb36bcae588839053c7f864d8665dd7a4b6fe8b1c473f39b2c0bb9e6e734cd1cbf42a6f7ea4fdcb4009cb0fa05f5a8b0480369379a10dff25392de64af41c29015b63ebd698b3fb254476e22a5716b99e6dd793d7778beec7a9c5d1e4aa8112b73a686420f5db0e4d32668f9eb8cb92b21ff0aeda45bb32f90c4e717e09f43940b0743aefa45b572ca9516b3d3f2ba482beb2dae3011390d96494e4a03b97644e19fa3af7dd965c8fd6e1293dfd4974809dcfbaa2d5fc34d7b7c2aeaf749f216bc4b586912960683ff1011705a936430116488b5173b070813ace372530c4422288b23e19209a03d4520052f69de91e114cc6f11d11f3028040afc041eb5a6981ce28290c337a54b806647b89199b2b76f97e6a0cda94ca773501c9aab85613b655cd739bbbd0dac3f1bcf0a3328800237926746ce3cb5f59757931fd11553ae10c91a3399bfcc758da9291931e0a4e49cf6b9bfaf4d1be3e310ad1c433e2aa632906d9aee771f1a67668fb09018fc79190bb90620f0a1a35da5ef67a89ab95f62a1bb844a1a6895d5290203daa3f6cf1a055769de5c63cb7fc404461634a4aa8938625b8a1981efd92300864ff85e620fd60935e57328af965930678c9a29c4af4331fe7a85264d74065f737cd3c63984bdfd0d4985bacf4d82cb6754b5d85ba00e6806e3d66034150395f963902ca6f994aba964d323c7a6dd9fe0f8216332af923ac62afda2aa7deb9c49c7b58fbdda4c401a910dce9682bab7d53f14433a131a635cc64d6b88274e931ec597a748e0b097dc358f4b188e1b3eebb91c60f57e1f76205e320dd024fd23865997c4612ad04a6324d8de10c8aa66b54e146f34dbd6702c6db92f05abe9198bd7c52d497913e6e687c397b2f2404381c1462de85aacb78560fbfee5d120e4cb5455cf2078be4bb8da3b41a1356f1c90786a7f31bfaccf5bd6fc337cda190af6d57ea61aef18f008f1ed76a91f6fa4673dbfcb90b0cedae6d92c182ac10e490bbe9e3610aed536ec7e1e7ff627e89e7012e7efb31dddd206de8937e471f4bd40366087d85fd35418bc8283fe2767389791e64916cdebc68f8b3ff7abecb173db6d8db785e8a8d48419cd4274e22430c79d4d6ab7473564a6429fcb4c0a2bb99c879d24c8838f1e8110d2c2338fb54cc599f4accb7be576411e9f0f5b64678fe9c3c790df6373bee14c8f31737882c1c304dde04432796037382a7d0faaff1bf843b609e68ef34dd63c80bf1c2ece784ed6088e28418aab2b1029a67d26297104424ccb31ffad59ec7f448b0cca32e637a7e781834ab8fa327c1cae30012a911247b81649db67604e9e390ac057ab25c71b28ed12f176b33dd2a63efba12eec2ac95ad3007eacd32a96be94cced5b04ff5ca268b26496a00592e06363890ab0443da367694a9ad1bfcf1e0d67075009fae20603dc8fb77a6affb113bee1e891aea6714cf1595802c85ba02b68cf3780d878196c6f768a9144dcba239b08de123109804fee490527840a3c90356e838d3e87caae9d86036d712da4eb390416bbe40b39301049799b8c18aeb9e98031fcea7874fda5d7968d70c750d3416d7c5886822b38742117124211875a21fee301f44039a843eab628dab08b633324d56c7c8364557d898d40c8421701cbb84d3b05b7214492a59949dbee1e44259d19cd9ef3fa18a55663424f6308aa6cc6031594ede26146049ab3b5a188980c86c574e9023e43ca4395ab0c791c4a2b135dad1e785c3f2f403f84e009f9a88aa6f806df920e7363cbaa7925916030d04062fdc2a16948619c77e670fe0af1b49030ac4384246baeacd2a98085acec02b1a1bf442bf027ec2373372181c0463e9f3b48751300ddba254cee88112a5d4ac3ad3854e47838ec8e898e588f147a0e601956124d0a5a590081a298980b001bc8902ab5c06ef04d0065e0f0fd32dfd5aa3236d923995b0a75e07d9821290ce5495cc72c8f1522284e40641dde687822bb944a9db154b0c815f5980a0eb9059338df6b10f14253cdccaf4287a77a04ec8b72b4ae1011f2964645e4aa08f509a34c53c7db8b68f3b077fd73cc391d10b97c247d0c3c45438874b6d39b96b8c5dcbb5408fb2aa651fd6ec5f59766d21a7438dbb958aac102f1c4507029fe3f6aacd31a7f0fd227bb38ac8d72140d03e9e99d4dd55cee14fefa88350c4692ba387249d05cb4a203af1a57c55c31e55b1d855fbc4599e16847324debb03ef3ec8021770c8fb57be3d7cea195a2ce639933b492fce12cfbb1587ddfe987a2e4c1ac31d5199342952c3f303f162fdcd02e71ed2a6c3f60d1343a9560b7a0fa52de47b5e3c1bd95f509264d6e15d502a881af17ff99fa394cedf54c9dae29cc6fe4cf99c72418b0d04ac18021cb787b9a64871a666b18b1ce1a320717c70ed1c6ecc924a1493fd7c4048292dbe3758a95e1a6248d0b6622a0cfd15213e391bf524ccb2200613d6c15bd1cfa53794dc4f9cc848692cc59f3189c00224ca83821b866093bcd423755ea5d81325b769aecca45b55627c8595400b7eb02d9174c7179a99cd2e2b06b282c4d8ccf8f785684336861a3572645d3c187739c5413116e3581789c3b098ea723c70740900dc6af5758ab597be5d61c3921db59b88c260e96a223525fbb4749fb7afc8f50549b6cfeffd132dd4085fc4ba6cdfbcfb67317bcd70e100e09eec024fa6c0fe1d4db153462485026c0f2c658159779731aac6d8e5fc35031d540b1211d91f5246e08dacc2d22562c10fbfa8087365b4bb05e1d0130b7831ca6fa32644ccbe9e52dc876a1dbb5a4dbcd6d98bcba1648448d92beb7269ac856c2e9aab57a917183abdfa7d4aaa58b9528da0956d662c12923a58ff86e9beb980d3bfed95c72c3bec23ea3b20ec182299eddcbdf26297a146c324af1bc4863eb6ae5fd9d343ffa4511c4f628d4d76e1e2745b477488c6bc74bcf5f42fa6f5d38876fded895fc1680c0bd2bcc4e13519096067297d4efc187c8b7dcc154747d291d52a0198ed038718fab19c5295a5ef6bb9e9c6e82ab657ee3d80f0a28492e222cb816d82f5266eff4cfa9eb5584396f94c0e9b68a11a8df1b0f44e1ac2fd242923c5ed10f2b124f33d2224ae56b131b9b6ade3f0b34af5bc24fb30bfec9ecc38face8b75d774a30c6df1334a9fe16eead81e83c5292c8568b58d61b715abd8ac52538cf3a48caab61f0f8279b82c6880f26dc5ce98bf6b2f0f516ebe05ff629c67213ce6786cf348e3b0bdc57be0718c5a8ccb7f7c83d233108fca33f975855a8cff5709e70ce7627cb095109cf4588c07b81226f98dc578219610241b8063a9f616e330b58491fb75d72c7f588c1f700967a9c6625c60973096fc5c8c1f383f21098cc538e02f61926f5e8ca7b9db68d2b7187ff0b6519b72311e54456c40b7d10872313e06da469f7ff01fd9ab6d347d5c8c7386db68e1adf76d53e5fb4c28e1e18b718f9d8a2fc63f2d64a48acd636fada28ac0185771f6d6417fb162a48af758d39e1a1a9673d361330f50dd60e5a8922aa15142da3ad12c8354a3b754b9d8a93ab83065b3f74153515bbf3241c101d5aa5d27fe5b73f433165487eb70a3b984579c44c67f1656a777800df8c973ef80ac66857630c605db02c8118ab67c627e974209f885bcdcfa0152432ca2c88ff4fb8bb1241b3bbad9f58208d74067e1198a775a274d2f80ddfa2c4cae2e5760409b2f64db88d17dde0b7f97573b7b5474acc4a2f60eb523a0944f0cd3d6948c4ae40489a98f84af72c1002622608e2c86a3f4bdc938656a87848007138f835d2610840338ba8db119ae8e4d34c5547f3136877d34663afdea3d5326774d2f188ad96962b50582cce672e82ba31a9c687a4b4ecbd876170ef1825e2634ac7940290b53d32cebde0141ea7dd50b051b0431241b6e2ac8d902dfc1adbb92390b56f29aae50c44092f7b425c32a042982796f1b76c6a4fc57e06dd9f8ec02e1177c1e9985f52e4c1b75830f90ec8254dccb16fb692d50ff78d5104c1459fce901cd9bab83074a8acda67b94093e68773098ca41095315d5e83ffb5a2985e1156814f2b91e1fe6a3c594ff5ef7a1bf22fd13d67ef11510ce7768d3682f943710dc59bd88832e08efa4e24531fd49c88b7bbce9279c356b68a10869320bf126ad3e5cde555bfa9c815a16c14a8e4f77a841fac93bb1fba2c8f0d6a503ff7d7e884e060df63c7d3790de9e1c1b426d65a619ec9cb60fdc1aecf338dec63e249e0ce95696baabbc1dd8a451db338db1c00bc30e23120b72d229d2d37501ad79abe68ed7c123a0efbd5fdf41ab0278bb08286494219b191b3ae3d57ad6cc14a83d1903c9efdb26aa1e23bf3716bb16277511479166bcdf2d343f01b0505b64b89828fca886760061dc3205f52607672233e555318008c7ac4a28246241d17fba5f0cd4f83c58b6f62e0fc83c0784b21b6361b12e6cd1dc734e0cee5d99b19c0a3b3986af8eb9c5e995863de4f577ef10ba6b1a87d2bb7ab21682d1f162af5bce472d75748c821e88c572ae15bfdea284bc0665bb841e2cdc4dc9a99db470c514c750e8ea7a29014db90b036abc8e38cf9d90546e539888c1edc3a791d4c8854f70882ce6d6facce3d94f066fe446ea41565e24ded92ca4c835fa6c6f8c07cacc11882dbfb7bed63bc531bb83f49b5606517fb843688d643126498ba0c7dd5a5a66a5059f3cc6f99aa9203a3b9ae567471f3856f5cf662b5f92a695beb51a56fae1d11e4844c7b1452e2b7443f61121e68e6ec51895e8aa5db646812a48c0adcb38de7b9b0abdbef4d6161154330997913f3295790ba6e93e9be2c581060cd7e11b2bf019d5fa88e21629328372fba6ee5150181fa9d6b098249b1d7e2d5138a624d4d4640b294990f27ca665afc64e66edc93988df5b50ee32215f2f9956c3a78c106c469aaaf44bb9bcd8a74e69459f28f9229b682a53533c7015a85b361cd4e21cfb10a2944296c1400c162d421fcbeaeb98325bb0ac251c58e112d6acb2fae4186c6173b89cffa9781260b2d63d75e7af0122fdcef657dde41c225691945492d4d2b753afaba15015c7155212f55ac3ee8a0d884535429503145cd49a42e459192285480a536f10abbbbe4f9887c1622aff2e3a95fff846d0cb0a8d38aacd63aa1c459127ec4cbded1378256877f590774838bbc86ffb55c6e7058379946572325d7461e61af7f534fc72118ba76f6579d34e26f26fb523f310714b87c716eeb44de6edc874e6ca9f63f74a40f6c124bc21226dadd41655e26d4a075be6641b0cb754cf1eba3f4a00960c92654aa0f8af58ad4487427150ee628bf5f76f963ce21bd0028b5b79516613b52d2bbb5b5111dfb12a86041aad7e3e94b2d0d8d538f2e03c0e0b24fbd28f71a849c7f84f2b61028d93a2c4ec229ea1eea62a9f46162e80a0f6b38d3521ec3cff27338e843daa6ffd6422f76c51866c8bb5428df7a40b650dfb74e12890a2caddde4792fc61717d78d4a302a8d1d7eac90f0ae9839117ad2898ea8126cf95bf26f79465ef22ebfa9e04e25157493c8cae72b8e68e21db8831263d717728eb2ae8b7ddf80cf500a671fe8ae783a987090317d948cd60b35a2ddf06926d6aa3a6a04c05ef130cc975f299983846eadbb568ec6f2d0ade422899783f1f95003ad316803683968277ded00fe814733010c49edd9bef823a6d1f244027f60b5b90bf901cd3d74d7e893d5b3c4bd8fac103285026e6f0ee8baf29187a5382b4ade624a1547924385178297a637d0789ad2f78ce8df610d21d6d9282b3bf06b580b23e2c9a3e9ced256be1ab66ce3e30b53848dc58dc9259a6ab1402417f9711329e742d0e620e53ae2260525e0c84137818dc5c0fdf797b5f6916b547ec51931ad76b038663307de39bd68f94eedee9faf5171e4b8dcf6ac922e2972cf7b0158b69e4dccac2079d5645ea0f57981df50dd52d5952239205b135448f00e9cb786e74fa869974331e2d1c1f16029af77a6706d47c67c0f2226c51723ae391e063c300ac7f608075a5becc2825ea6265147bfb7cbad7cd3bace68ff1e10eb140630f313911c644eb1db3bbd7b16b3ed27dfbab70c61ba885382a55f7d8e894c604d3c849eaa9c5f064a9393a468974404517502f77a20e77742def7a4e8eace57105e6cab1ae09b172d393e44e4997786e103d88bb1a3c26e25e6eb2e0b1da04aad28e69a6a331a1118a64e0a10f6131e7b44adf08625d1c0d946ef9184a63ad230eda80da2a2a0d641ae212424dc9047c706217028db4c2e3805cb7e030b80003bcd409b814095d96e87460186e6074501c64f35fb6f26e1a3485380dfe9ddb2afc7713d9d2e94f740a8c78cf1cc66a8592aef358b7bec7e6b774bea81525f0532e40b53b74fb11c547db04a04403c7c2a7fec8b70266f71be7b438805e9cc27e3e26dd5d321ec89edc6118e499ef37313f5ca11d75e95de8db850b45d9ea4a680224bc6801be9f4b9e3d35b1c3de3f14ad5a524df2e6899d465fcd11f56d97231e8c30e2302387fed919cb7232807c10872c4854611a05ef03583fd49b3cf849f4c4edcd45b79c4ac3fc19de7a57dd24c88d19b9eb031a6d47f6b1459b58d719ed576d34dc25038a922222c02cd90b6832c94b9c930ed494f929067e363c81ef4ed0e6c1d716df2c5b64155bae76dc9d6c7af2866fb72ae473dc8bc0f8b40dbaabd974234f59acb56bdfd84004c5cf6c28ade0a57c36427441fef182b66a9e3459f11c167330eccac43e1a6b165f150fccaedb8d00697e62005c804736bbe4f8806bf1f161ef9554f20892c80783b1169fd4664b90b481b3d73b17e3074df02ee038913fcd74298a7e4c14b0291b8d0b6d30fd6f7a4e144d8dfdcd12d6f6dcd76a70ef35414d440373f3e485b507bca7f8323072c28ce51d63cc0ba02f9b30fa2a992bc596687c282935d82ac5b197e1953980ca8f3a9b952140d42f64d8d5f32114a5e65b8313520196d64ac62e6da8fa0a394d6c44620ee4e8b207a2c1196abb4af05c42b5b13f13a8487dbf3920ce3566de6f53cae40a697cae491ee9946ce485e6ecd9aca8aff46e26bef6f7c95d55f3aca17e189c5384fd37969614df480f7fdd78d0682786711b3d045414a372da6e01508843ac980551b30eab2bfe78aa3ba0c858770539f618319f216a2b465e3ef40deeeb4a536559532d90da689d9707a4be61f458a60e6e8667e9e310b35912307c42891cad077170cbe649137cf99a3dc31058a069109ee0c1c7b0be7c57d7ea1c147a3b48c07955cd76abfc57d880b310da8db642b42ed8a7cddf015c034a1a5bd1045ef9c777e807913d1704c4c01759702c00fba270640f53c071b4380415fdc308c38f2bb55e280887265ce44eb76c621c4708ef42a19d62ff490a3156d3d4304b6a90a9523f0bf7f64903f699e2045b4ab1a8eea824654ae0d30f82f99941547493697d80bd352fdd57877cc0a660a859ade66800817eec6419d7f6d74461b7caf8abf03a13d4b771fec42611f4275aac974f1472185908e03168b3e908679e941a518d869cc6e4383a5991d3fc109005f9a214d29ab75922f915aadbddcc8b63beea7b19b0dbd240eff9b88ee191e35b7652854df3c902343f0a9c3433b5fa53cef51258a796caf72ee72e42881e002a35cf2c51308c43d8c07cbf0696d264d8ebdae0da252c52a3ed56155ed60c434811c969644595dc2435c211b1f31a52e7e04d44ebc09009e32f25074fd007a7765451055ed39f91f89a737e04bc0e1dd516faca45edd3a270358b4c204a0e5885ee6921daee1e8cbee24feae3227447ac3221c11a700a143f710e81f88976c44534ce5476de6e059a8cb80826251a1ffdca2641e043a93ec4ecce5dd045ad952cf28ffd95dcabb3da70d1077e39a2acd4dc12551110ee8e5628d6dfe8b721a7746c9f113feaf582f8360f072061b11313f76604ca0879858a817a67f0cde0c92a20ff69403f1d8df23594524a10631d32447a13dffec490009c7b7059bd558f287b4c8047778c547bec73af1b5151f8f730214cf4651225ea5a44b062f35c9e21f285c424cfd16be831a8c1c97caa922c864ec2acf17b320c1abbfc17e4a1a2761d9a88e6591ceb6aead492c2ce33e221f826cc9346abaa9222029539afb54251c11593b5953ddf3735230644ee8634aef3f3e82cbc40ba10a9ae43af505a6eaf3719f3bf2b665e44a09a80dbe99351c926a7646c7ed2fd1a43b8042118a2d888dd4210a719050df46a6ca07a719dc375648ad8f8a561d0417010d30ba22f3aae13fd1a36b4ce68a1450e0ec8c4186ea2f0b5cb093205e1bee4121840a6d39c4873161a7e4a100bf689d9046f565b9b575a57609dd6f3e53bd439fed3f9aeee1ebbee25e5a6cbcebae28b5c0b067e3a032170b8f83ca09e1b10379a21e8c8e14f8c9ec727562294e8b12fb973d1ed98be3ca9cdd2ad14fda50281b284890c23b7e3c66fb5e8e30d5f6401c4c02ed27f34d9a56ba22d155653f87bbd205479d291e72fbca94732dd512565f9d64761207ccc0fe17b86719e1e8a95a9ead9a5e3e3655034b393c8370817bb607c78cf6c1421d976337f28439881b66c9be833e4fe7ae5719c2d9087e0feb2ccb749a4f22af7b011c07f7fd26445565275fd98de07db4417390197e694d27b7e7350a1d1a475b00350ad0e73234e35e2efffd65c09ce714c09d55b6e9644292cab75a08ac7a68a0ef8de66977f12555e9db748a436089057e44f73d52e3468f518bd6357f7a63002b78a5a6257efb99f3f62fa9da1667ed3489acdd2711b0a7b11591fc1df49261238389f9c46d19c77d1e00ec50ddb3858b42e8c45fecd8236fffa425a35ba28273af42e67747fd1ec91752eca57a044ec4ae804585194c6e123296c0d03f0d263eee08a354ac4c008b9097d37549ef36add0a6797ac84bcb33466a8e0b9cc88ee67fb7a1e1ad6521110956961eac404acd8f39d37c4b04bcb149cfc4f4d686b6afe8ff651bba61ed7c525f5b479c0b93993a9e513f13c45b2473d928e20206e7eaa6680a3d70ec60c37eaacbda263228d3a6696d96fd431c8112cb84dbfd3a4f0ab67fd4d48ff979022fd04686c0ca70742396472d1c37cfb01a8004feb0bee89342d07941a85028581d4785b556d3cecf9643c8a04343580ceb24b4b6bc231555731640b962a6c17da0a34f3a850cccb2d22aa839193cb85619dd2aa90dd67bbbc8fdf634bcbd7ad56ac04cbadc4db91b33526ab28a6e9fc549ecbd7c4be6cc77205a49d4ab4ee11b120da26bcfc8a9b53a4adb4490073c9e398de6bbb562aa1f554885098134f28993d763bd2d69f3554a46db72e2eca6c186da46eded9d17fa86e58db938612bdeba63ea6baa5c9ca232071e9b445359d6f962bd357e822688e93727149f7a0bb5498da18446037bd80018c3673ddc595eff3662c1ab4ae6e5d336eacd644a51749875acdcebed19d2ea6b7b62f6a56ada7e535d377798add57aba6986a2b2ec258316a298b2074500f2756234178d557159f3ba08eb2aac7816e7b43a4ac931c0460619bb15506e95bce3007a3fa96f75a6baac8c9fdab1218b839faf95dc121833f7c7e7d0987fdc81a303483415679292f48ea6671e080b6c2993c6d16b5818dcd02ddc83133274a5a90662698f600743b4a13c0861b8b96e0875362f299365353c1914c638f801acebcc4433764860d42dd512cb22be12de3c23a64064f3dee53af26af2d653cbf7e4d520a7ba073314d6699572322e93c62ffb088c35a1186ad58e2bb361f4470b6042d3a40e1768c88b606714c5115d65a3052c450172552b43a46c4d3e974e7cfa804aa8cfd196cc64f0495884d43e97bedb2e23f6330c71f1311d559c41ec09a430ad0708ce787884e365ea7411ee2d975c2f1b7328e87d59b36b1c84b32890cc0628f0f1d1cb96c9d8ab0f7b72d9a41c4c863725e448c3235c1974e13cb02908e1384721ffc01c235bc228cda9f1311cbdb25c2ad676d5cd84701f7c6bde4025f701a61aed6cbc998d327e1abf754ccb18b259511ec0dc75cca34d38c88642cd413a97c06f187b7702665574c207d057e4d7b51ce8fc4a84505c35fc618c369b3ea394285b6379663dfde08410af7062fc3b9376475184eb74b9fe47a76ffa0c519e1d8a61dd8384e7d44a17b871ccbbda8007d01c56ab4b25393dc5ea7f776dcdbe41f1425c0ef6d42d90aab9cdff48e103081658d4c3fae2f142533014d5f8c8c7ad2d796bbb3153e1e8e868868e01402b7d00f4ee7c8a32a7a3972900206da123478ef81968516276612f621eee491c0f9fb259251270dda622b9216d4e808e564212414c7194eb24e6fd259174a603d9ed4ffeff5611a802aae861b8e8c75147d8dc2b89cce622d769302c44cecb97bb5a33521aa52729b6074a0dae04d04d886864d08758211dbd17aa6e4877894ce99a719f05d73717dd7adc56db848adad8debc6387841a97cb9f739e08d8c6502cfc7b441a030cca20d709b233d33161e66e3356373fb7386b2e064d90db36192dad4ac11aa92c0b1ad326d462836c5a1001b7130231c74a55b4b5c3d0faf81f0a0af4a86ea0549244f109089a0296f989c5e19452dd7fc4611359bcdfd5c197a1949e2a2a06bc1e9bd306930da3aa1d569b5a767576b6868fe8127976e884f86aaf1697c3abdcc86efb2e5fbf598ee72f2c8f631b55004a3ea691cb15252d33f1d5211dbb46737f1736507fa529c834ab760e5120467f300baa2139e466518f4abdbd0bd8e24be0bab527a290f3d0aa4f98445e72ba1d4f792078cbcf2ba52f7c90b3e2acc9e8f5b0a226ed84579e37735909bbc89268dc411712494687b9983305ed1861a9e2f2e5230516422ec764b833582f7c29d48577452ea71cddf4926ecd4b0efc01d425a6f57df321cdb2415ada0f36d811a2617685c611bb6c2fdf799937e72e11d1ed13958242c401e98e72764bce4bf3f458027868931890e4f01d98c0bd1535efca13a6d01f5f13ebc64eeac2389578eaec992e97bcc6abb27142c14564e60527c8b23f12a142e3aaa023a8e5cb7c0b4e4e1ef6b4cfca0f7b7ae93a1ef2b97cf1ade05c2e17adc3c425f70d23c77f218e275b84207305819f5be6d6b2ff89c448c67dfbdbac6c56806c857c2132cbad9fc5d18211f7161333efa20fb1612222cabe272488545c4116beb041717732a1176bf87b82e4ff5a04b1d9392a99a0742aae7d284b4299fb3e8e5cb9f325cda92aed80f4c8104d188589349a31bd73d093da8c608a5a83fd39a52aa582b8f1c108d421bb5bdcce8e752341aa98a1bb2920389e6f9ad4d6f5d2623542c4e815a9422265c01cee1daa97311aad7762e2d499655cd604b46f11d19b6845d9331e6a8c4d44832bc0478537822da9cb26682d52ec4d8fa6fdf6c6c4165a59a9cfd5d19d94b4c7bf1ffea312b1529a48f7b2359c79f99712a83013060eb3a10faca4ebd8b1f10c4e6833feea60cd46348d57b46d3bca842c3761aa32a18e5bccc55c94e93608c1050e439d47a0f16dcc875c75d70c9a64bac6b8a18e7a9a3e7b16c2ac1b0d2ca9268a9273b43b329fd6b65b20757b1e06f3fcd12155316404f400e7f8a8968b8786c5891e6eb2c704d73f21dacc9fa1c632b52292c0c09cb3a02357d486e4854fd834e077b50e74628a869df9ece3435703a315483d713b5e3817427716cfbfb51c8b2446e56dfb8d72d6c57bb6083aee5fffcc067a00d72f82cd39a8aa8aa247b9e2b944b4549053140ee6ed5a27fea15bd26f7f8aaeefc1b21c4ab5f1912164a43843476000278dbd315a7b9726027048d4a6ea210f24ec8928b25ef6ae994be1f3c2bfd43701f2d9c5975e955dab176f1c1b5deb910b473bd198e739cd44b74921b04e816c89b17af914ad8d890f38f3d614bd5ab25700c690e42b926d5c534100b8b07e3e3e42644a22ed40a27b6d1864c003b0bd1614af18d6f595e7d9065fb9f672a04a3306d171f9bdb3aaed57ca53fcc4ac7df535d3d9f1b175b70678f18f91e4111ec03cb165cb4d8750464ac1746236e3e4c089111443039e26025630ac7559647007866f668075dbaf20259d73f3dc7f62a32d633fe0d5b1de6ba66e4e580aa625aec58322dfdd31e59627657566efa90d5213ccdba41d157fc8459d9f7d46543b8b55d8270a52c2928ef018ae951a190580f85566a582f4b5d6401326bd68d4aa1dd202c485da186fcc17556434274b0796f1fd821cd6d890831f5740fe6e28d4636c55a9ba15bd2f257125ee71d6476c68e4586b4a9dcd87a36705a1673fd07feb085c0dc325bae2103d933a051c23cffe0dc8857d14217aa24838d3336df16c22957f5b32dfc82bdae5fca478aea7b8a5e48a84586a8beae9dff2e04412f2da3b247ba677fce521e4ae18550c85e186e286d0f850d0bd4d3dd70e14e59334df6d1114f2550ad2ca9b5ba410952d1812f638c4ba3dc62a304ae6e2ee44ea6b9816d7f7d34f0bf2e2d8bd8b1a669517d2701cd010838500b49e82eb03ecb1f2c7cec0d79f2459af975e655cc5737a7688e823965f314cde99bad98556306cdcc3a332ae6d79bd33547c39cbe79bae6f4cdd6ccaa318366669d1935980c81d4f4da48c21ce130f3b0548670308b6c963200f06ad7fd59c4906b5f07dfec95de900df5ed03d2b3d18638a236c4b5d931146e1c66f04a8eb8b0e608789b9396b472033f9183522a3ebd47bc2c72b9c11978e3d8aee5ac75871cbafa59d83c7494db00cccab4f5838c827c98452fa05ac225b917e28155f42e7234e232cc916cd6fe83fdafc4cf608684d84776d65e2b8a76bdc8e336621952d0efa3fb406c7aaf90c06622144710a7e7f52347949f467e12f39955dc11ab0063c6ec2aba40e91fd6882f7190e7b27b77bca0df6e720c9e1e88352b830f29ab7c4c8dc9a2a343a4003a698ab825f197e1f49a8298580c90957bd2a674092fb5588da06c21e78486ebe6b33f57fb230f69e2595b577d1ac2c16184d301a1252a3f188e44313e5ad01a7854032c059464c429494a9d612ec429ed92951f7d7649500286441d6899075812a3b48923280d58ab2c39e99d6d1d272685702862d74a24b603e4637e19d4f762e17640b00b242ff06c2da16141785ac17703bb1238050cacea0bdcaf2bc8198dd2eb929b0d0fbaae01e4f83b75f4e1605c17ffcf52c604cbe9beb4e79022d7c170d7d311cec7f582e05e48ca8585e5733ed10baa0f8fa6c097a29a35de2ed0add171ee5efdc7eab43504255016112a0b93a8cbc8daac02c73f616f158c7ac0b160a45a271c8499a061889cbf497715ae2f070357a75d92c66d8d75cdf2c2d1862bf2c164c42dec9da3d980b06bb1d799fe383d6ca30989fb7d765e24d64d947458319e28cb201c28e1b80957d513c831c41bc5faee9ca38e9e65c96acbd4b6bd3184362e311496d06ddaed82fe439b3fc0464fb5026353cbb055a33478a44c9c551584f48adbf22c29a5ea348b57f2590010639030cb769e4d2d57afe165204a0a795dcf55c48f2134f00f629d9d6f9e990e579b094f660000a7d7217bff478a52e9a4ef98753d8f5b81c5e7c668e47b5072b9d7d704ed3d82368348ebc7641a202c6763764376a888855601fd0fa2307752d2297049688102bcafec463e56cad69f2b325680ac6f18737479121ce643e1d527d343a454e95b8c0f302b4ec4054c1197a83b8f688b3884019aadbffdf91ba2a5670af07a9fe036488f097f6446d2f575731d554e17afe0e6bf3ad247c70185ed9b32767ba893ef0a5f957ee6fd8151e47c4c9345e72753713a43b8b2b9932ba784714346c1e445ab256bcacf7f8dac74ab7075d60051216476160b8a7df38903635005f2463202178ad3b9b61c4cd7878589fbacb3b4f1584b2bef9bbde10eca51fbfb3e66ca711e3c24d3bf0a8990c347b0992e5a1fbf98fb57e5605eb1fc7dbaed207dde632f4647e18b694fa1fb06affd87f5fb7e59576fb751d06751bba1ed26ec285ae53525b78b89863eddd4db63bd5b01767badf37df9a9fc685714cd41933c25c61ebbddea5222480c4a5a0b5c4c0beb427ae5a329036a5892e3642a3a56518578d5e0d8e99b855e90e41b85ca8e89ba9f02ecdffcdf3543788d7febcc0963b706afc2dbf1c587f318a922f9526f2b48dbf0af4d984e46e8c9c2c0f5c94765161f8ed26f337215450d3276ca281a34c62d6a87215b760a6f82e82c8cf1218270c7bf13334ab5ab4c468a38762ca4e944ff7782c58274def890506a70718903ddf77db9084b67ea87beb7696d6a603a15a780d251dc215ecf90a89384df4dd19ca70125189d4eb6dc2c8d8a063f0cd2f55d5fa0ccc7c9a4f6d6da6236e034e92595cedbb40b6c6a52fb5d344a1c1b87262adc8387dad6b8d8d67987dc2ab63e562c2cc85877638fa00224548e61a95918d65f25c355bd69c69a290638c7175199a3c571ff573404ec2002d3d6c0c88c60d636cfcfa9fa735021cb9945eba0457ba7f7ada2b5606d5222b661ab6595b363badd5299c5e0d439557298e2d869df4d3f311256fbd71e372e729ad89b692b282e72460bfdd2d611ff8bb217bfbc43af150bfa5f57c9fdb9e2d388fc0da5996bcc13e4dd797c9d88f2257b8e5b1c91b33183b48be6ffad5d5895e212bacb8b6e7c125032e9c9bdef56f0de121a3c59eeacc601ce033cfb67829dad9e4f62265d33a68ad5b2fa60a88eb0dcfbfa1fec0ae229ff6193c3e51fac250e3d244968043451fa22c5f4a0629e5a31c2580c1df8c49d9426830ea0c16df58a2d252e8f4eaf5829e9867a74d5e62208dbddf178fba7d767209cdaca43694716452bd29e8f87baefac5aeadf53e0b1be82872b5a7e22a04d06d0e70b76f4ebac7e5724cef159a26b2ed556e465d90b274c42c22b0979f4dd556cfbb174f5e423746551dc7954b2277327add2605eaca08f69d06f6170e93777c649417029213e1b83c511f51d67359b21f53c08ad985c7eae7a60fb2613084e16b0c1eef4aa2d2d2e8fae575aa97431e86285956a17872e5758a976f768b2624b0ab74123abbe84726b8dab97bfb34ddad42d363c0c1607015e320119e8ae56991271f3686a056550def9a3db8b2110d1f9aea044c2a8896f404fab1b5b5afdbabbe6561c7ce00bdfd990bc5c6125dadda3c94a5b22dc52e7fae5390c40c86dc822d6faae032a9f018503f7de49d8a688f8a671456c8cef98d8d17b10f0f46e722390372c1c8c82466f94a077ff209d12e7531f7c148c5ef1b641f46c718cb56101e2c8ee4a2afe79cee7cdf9f06640949f4e6739c4ab621f8e8337c0d1e5c2ac8e41dbb347e482431ce5efda08b5fdcec1e73f3eb2476dee8125e6649ecd3d906f7a62ba975e0e03328053676881666d9cc29fcb70afc810de3a69d11a89e119e2976bcf018fe014a803e540b303626e4fb8508d886038127a82ace116fcc5c38123a7d35d94ff13c1ab33baa7062ed976eb8e2daf51d450061addfe1ff1875c8b5b58abe3de85bfc66532e265595b26eccced1090070458f159111006d082c46e8793b184b75cff8e1dfdf55098e98606498df4a76ab82a57752068c5072db11d69e31a2e43036e58fece0a95b38ac450bfdf02a53a604bb28c9f84c95192569ca512b47afca9baa6cbe09816415d99ba7bf2fdbaa06082b516684be87ef1e8237961e4b526492295049186185163c811954656de5e2f84796fcdc9a5b84504204ade1e97cb34ddcf439d7abf4d127c5b0e83fda12691e073d963ec80b3c8b7c69023bdb2cb6f3c1141c7e0acb81d3ba81f245f021abcc5585b40d2224e075a0b1b9cc129e11420d4f0bea9708f6c4e0221d012f8fdd13610224f3f42f3a8393e3560a38185fa3b88fa1e6017769e3477215bc6d9cf27809e910558b2c90e116ff66db3bfa4a8fe2089c9b6f7de7b4b29a54c52ca180648050205dbc6ca22bd5d035c3f88e52ecdc92ccdc79d4dfdb497d79a6f555ce3b0dd524bcdb1b2ffe6efda0692fde5b04db5ce7dadb3a935c80d7adacb6b81581e0872b9ccfd9b9a0f62a5661119f45a7ba240ac3d5fbed77299fbd26b81589fd7d25e5e4b7bedf9ce7156671d6735de557b9cd57757aeda8b336df356722a758952d6facd204dc8dc2439b59b733478b8b9d77ed3344692e5f6d3cee740b9350f29087b4af9cecab5675bc07bec7f1165ab1fe83d2d785be2072f1c6b6cf0c211822dbfad071fc9e0e7b5f594b1fff38a34f2e517e38ffa9fd79e8fb71ef9719886763689cbf0486bbd3ac8dc756a90cb94bb5262b16d1bf89b8cb3b3c1768e5c2be6ee1c19c45bbe177f7edc3e9fd8e20bb8b2daf33720d2e38b3657fc3825f246392853fe6441ded2e50637d72283a04f6a4f10d4b3a76fb96dbd30a732ce59af070ed9f7354933cf18f9394c06f9be30a52b2baf4c3081e3ef3a0339b694b4111369b8aefd32bf88f4ab1e4d92c4a4596b7407b95da5cac693247f4e2ee218282229b861a4d582d51222c0c12a091a6e10c1c40910e84061a409540cab87512d0c111f4471cfeac3e03299d76b79422e3e1526821e4c4a297dd2fb8099e139e3894d7f851963370d79b6b7234ff8c4ddd94052f850051228d430e30549524ca0940c1104172320d2f3832474f024438a780376640a1d399c28c391f4c085c7c3c5f657113dc9070cabee0088ab0315ae94133f70f27252c49770a3891551dcdddda79da639e7443911777fdce40a1caee039a38d9d224b74f084174bb04863fe50c21b4e449182335c41b071a448966537f8ae60b32b3719bed90e683ca009173460c1163ad8011455111d2270939b3456e60d4c48184488123a2e2a7c628826a008830c1cb8a1041831349680a2046ac4c007a624a609e80f4db4a69d73ce89ca3e2080266c2c99215407a0b88155c60e46e8f004091519586bad3565383ed89ed11eaa506388254f9210c38b2aac3802959100663b136bad357d88f8d80236e79ca8ab831a5558e1c62582870d24b61076e4610304610f502081161cd1a1881f88d821891145aa10be83bbe700060aef00061148721224db5f45e4fffe3e60665458a1c553c610fbb3234f1947ae18630a364e3c1c3181ceab882147dcf0f2e2061f582e2172b87befbd30d89a6d30dc1b726237ed1aa128d83449662dbdd4aa5497b544e8165d466f84844184dcab9a011c69e8c4608b29ac20228d957903131206116275481842196031c8804a02a6061560c56088385890e48bd810456e2e8db259ed46481844c835e26e647b124b2fbdf4babbbbbfc0053bdbdda9df6ba180326bedb5d7628b6f666b766b9665b7da6a311e52e48d266fcc21c71234c0c0f866d7aa64d5656de6c3de0f67f8da7b6f866f666f97d17be7b8d6de0c865006580c32dc8b4f2b68e2045fb8e08b1ee620819f20b3164bd1848a35ba790313120611422fb537970a369c843279336b4937bb1a8ac87ded6637bbd8e2fb052162fb8e5854b1031f3cc8c123c51440c8400824dc0436eee065adb5a61b76d4a82028b203c50c2ec67082872dd6b0c24813352e44b8fd5544226c7f120cb7638b05664061ba288041102e1edcf08336608083a750d2244d504020d42e320f21611021f7060bd613ca12daec090cb42ba2f674add5b2fa6447db819fac605bc137fb3ed224dd3c51e293e90877b0e28405193d58e3062a20822092822742742a37f572367473b91cb4c051c1089440811c5a00d1e48a14504a3950ad295a56b32cb336ab3bb2ab564dfb6815869a85bc30cb6a56eb0b59e5ba1720e07200046ad57440f184c8c685a0387972c3568219e6d08289387240c6131b94208e1e6cae654fcaa0806856afb5b68a6c8a2ac616a10cd36a6d1683cc070cd965b1d86b920116830c978392bbc081521d55acb07d010601970320407d70038725c428f2c613398ef80f46b45678b05b08e20bb490030e3266d0640b1f7c2023b4e207fb821195eac2b159a6d9ccd64c8c229da53730216110215966b32cd3320b029ad19b4c8c0f74d6434d0a171536cb30a534b8e294d52ccb32abe9907dd294c64acd7cd44087cc7c5c0a83ae669f3459bf3b62614592bdedd80a83098a023a88610732c2285244b50446821e86e4e4f00513d5175e2c39a38723bc488c125a87fe6d5dd6dd01e5bb8aa0d824754640b115d562a0c3e2a7937591e3cb1833fcd974b4df3c50cb6540302fcd8fb54030ff605767fbae56aeed106a1532852628e645cb65b8edb4bd9eed9aa4f9284c0defcd7b81a258fbe96cf0fd2eaea6c17b42265094499aabf86382624932e8ab3d3d0b77ad224d94979e36983d0fafdc590360046acfe8d706d902d7b567a8ef447ebc1369b2167cfb2fd3118a2c37b9352d77b59182b2ec234d6d7a643eedc0dcc3913db32d83d8f8c1dcc39ee09d2aaa146450a4daf3453b7827fe98cf634745551f858dd8e20b58daaa4851302fe507692a253a941dbdc7c31daf02ca420fe6ade167896d30bc2fac25a43f57524ab969cee6da5c17f6c9b92d9701e156ab058202d395524a77f0506511a8a5a3cc92cd6ab2dfa29c524a1048cb4c63d50679e4f048f1e041b48325e6a5f9b1588f9d15ad7726693e8bd622ad5d5ed22f0dd3e1ab256c0933ad6ddcb66d0ed2326524a7c78e97521b7451b5c4744ea14e22161d63e1e153eced416eebcfe4f737ee627c4357eb988ef29978d80cf4f37980bcdf3ebf75369f550f57d7c3e5c9e85ed7d9d0d0b5407777e9eed21df42110d8238b0d0abdd4be57507b3e4be9873d5f25b56729270b282c51401f4b8c25b6afa7b1c43a3b47962cefa59e2bbf5d17cf679aa4a9a34cd264127fcc07691d6342c74a4cbc8fe7fdfc1293481377781d03b29a1d5f4ba87beccc981092ec50760d34f4b584d4eb6cee69955dda1dd23a3a7aec80a0b8b072f67c16ddd2864ab4439ff67c500bb5e7e7649714a8b557be96709270122c5178987aecb88c0eff5ac21e3b3abe169658931ae88ca93f3f9d8d7f3a59d68059a3f269ee486689f568324bf3bdce06f4db87039241ff09fda7b30941c90efa1ead90eed16492742cfe983d7654196ce9b1b3e7bb98660ca8637b866db4b4e8d8b6f2920b6c79ed097a8f8759702cb1d89e9fa2fdf3d645399d56db614ffec7d33a59b8adfcb96d35726d7f8d468953a91c69f09e5c495a1be4909b0da00a91e88e9141d29ee0e5b1b916e90cd9f2bab664618a46d7e59be4ee1879e22672cc18d5c3165f40106ccfdfe8b55e31d67557bf5a677babafeae6504a75b4d6d65ab196f75ed17d6bdf7636366a8cf5dcd5378cf166da7026e934497875afbdf86fbc166fa6cc6e39cb3a9bfb1bc6984553de1af1c7fc9bba466ece0af4d6d833a60d9c3dfef9de1a91264e24f21679f075c53c70f2d8ca63fedd9497a6d59c17d7c84d85b13d1fbb3653c6b98e35b86ebe24dbcd56a9e3a6cee485beb399dce5df66f292171ed6d9a6d7628d37c5fa6e7a2dae6ff586334b733e874306bdd0b4e77b61c882dc94569fd25e1cb58deb40301ba4159d3163880a9784219da4d61aab0ef7442fb2dcdbb7d65875ab561869a8c7e3d8f3c1d09e212a5c128661c89511c60dc3e3d85a4a32f859b5d65875ab564e185924b7c9aa9a5629a5b5da5a6dad34736b2dc6f8de2bb5acd831f65a99d427aae38a2b185289fcab7194d84dd334c7d86b65529fa88e6b86bdea0fc472100b34c594b99f740dffb665186737c39d4dd534ecafc2c4d871b51aa78d9129ad3a5aad933d904caf77361809cdb28c661bdb2a35de58df8d29e6ae76a991da6eab75fcab96b14b247bad499a2e937772ab354f54de107ab04c9020b14c90e4ec395d1469e44f27b266b3ac66afd5f7ce86862cd3346bb3b737157f4c104bd3a029403b3765359bddd4cb65eed34db5cef6aebdd7d55ead95b33ade7badb512634cffbab64a24d6384a6c9665f7769b94d7c5133b1b102bfe98da6b929c6830ccc46bc6b4b2f05c5e1733e641ac489355441ce6aa6fd73adb637dfa9aeda3d389ac719ace46638cb4cacde22d8258f6351bed03dc48e31dc248df1dc2bb6815eeb5cb8fb4dd54e32809c097011b4c3b00d4e5471fc26f2c2e3d748c3f42d0727fa31d2e3ab891aefb455fd6dda1faf3699ccf69a2f0793e4ea428329847ffa39e6d857badd3d23db8b1f6fc16fdd19aa642d01f93cfbf3b91c6458a0c669791a67bdbc18db453fd696af2d26b1dbd248a3263a64f97a13f476ffa8d7e4c2fa3ef3d3663e48e792d226ea4270b37d2920737d271bfd669f910b4bb688fc2ca2005218e3cfcf6b54d3b1b1030083a7b1e1e238194b5e7af6890a44383bf418f810f6230e78f0984d9a83dbff358cc63d77581eb8ad755a3c45d5264831c323d135e17c67d9a96fd45f22d46e8680e7d55546d599365a9563116c61ed8fe30245a61015d55f69e3e88afcd07627a5ae1cba75c421c217399192fcd99bc3f308b54f840d123e003ff009f013efa72999b9cc2076611cd078a1ec807fecc4be6036154b5e532129651f8c07cc2a7f2f18df0a52ccb65a66b7e0f13ce00f8c02c7afd814f2285f09dbca49a0fe3f28130a4960f24fde8035f94553e9c452c1f28fa17edc068909ef6f65b8a963514a5b2e3e7531e583ef4f3a908e6d31d620aa2183d451ad0ab622caf723b1b1696ca817465817255d3b4419aee1d3a96007aa8b2d24341f147686e1651dc201d9fa212fad00703e9b8630d3dc1282abebcb43dd5397c8d12cffbea7dbc3de3323487e6ccccd09c999c199a435f5e9a8f71ce22d1d3570c552e535128154a8552a15428154ab5ab84d59684499884d5964cb98c9d2e97b1a614c6398b44ff24126bbaec85812191fe45a29c6d78c2386791e89f44baaa2559fee7b71cbce93627ca4e55b8a5d7560d2735519665ed59592e4d1f0dda70cff7f0927c55fba33dafd3deda701aa7f16fdabe764202e8899e223dd528f10b63831ce2f3965a90e93867f741f0fe3c07b29459a7fca6ebf63407f096dffd563b9bee9bc9295d4a4adc29b9dba6dfea9b9efb8373fe709bcdf9419fc2fde7b72ca7c4f80344022863d6317a9a039104d21a826412ea9c72d3ce46fb8a3f7bd93566cfc671ff0e01836c6a9f6e8b24cbcf9e4a4dba1037c6fa729cb53eaf0d7288f4c903c6a214234dd66347b5cd9594524639a594a1ebeeb8e5eeee943aa594524a29a594babbbbbbbbbb3b757777a7d429a594524a29a5d4dddddddddddddddddddddddddddddddd9d52a794524a29a59452777777777777777777677177eaeeeeae3fd38c7177777777777777777f1eeeee943aa594524a29a594babbbb53777777dfaee6ee2c1e4addddddfdddddddddddddfd7bec50777777775fb9bbbb3b75f777777777777777eaeeeeee5427a3d4dddd7d26c9f455704aa9bbe325dcfddddddddddddddd9d52a74e9d7a17db29a59452ead4e93b759bfda0c18e15946badacf20ed9f7a377c8dd624bf78f933d1f24ed8f9319237f7400091e604f2879caabc50736823d3f7e1f58fc315f051924811fd876b96345c36d8b9f29a5943c73f2b853ca13677c21917ef4a317518c314629f317e39c73c619638c31c618e58380d8713249d37b792e2f4d0ef4d0613d3052ca64dd8d1ffc37ebae33f92765f28fe963da73a5b7ff68edebdc5ae83b2bd60ea5740807b5a7bf324d9b38d4348d6e1cc7893097a969dbf06f9d0df6fb8e5dfbbe1a4789fc1cbec6b3982878cb3d0b6f39be1c773bcff33a9b18b3ce7f9318df7beffd844c5a6c3bcd18f0938a69513613988a34b19b48e48b3f1f9efb524715e629b68ae1ce058a19a11ef33ed1bae772d78d31c61863a4c17a16ad499ad9ee1b0230cd21775ad7165f400e457f3bec85499a4564106f06cc1a7fbdde61b7a7a707a427909e4c1bc4288ca27ad6582a32f8828a2ffef5c49a70baf285b9ccac99588b2c7fbe38140fb6ad067130886f59e5c51cf04d31a577069f52ce214ff2e4a03ced4c7b7f9086d9b5403fede9f672db34ded41fc4977ee0a66316bd745fde8fbe0a4e833cedcdb72c72bddbbc1a6f4d479a6f94a71a25f5bb803c55771f7ccc22d156b5888b2c77a554c545756efacd1a486ae9dfec4f6495120dc26d6af3639145d74e3b5d6766c66770fd48a9f6304bad55a5826aae2a75471555d1aea39ab2eb6399c27f7566e3bf5788be486342fc317f8254523e5168b35ad6b0c817920a920416569024cc970f06f206e96b0034b380f8003981186460a1002aac90520017422a211b6c52de05b0fe07ca0daaefb1502b3864d39a8f5737ad35b3659533354a2e303387a41cb1c9eef38cc1dfcc5f5552624c2885d18d297cb6ebfc48f50c354f12e644d9ab884888a4f9201d2349f353b401e20a01f8d1bf703fbdcf3ea9eeece1ce7b52fd78240280347bf2602ebbbdb67efd688d393db9bb83209d9e9840a1dc5155fadf3fc10828533bbe0c379a499ebc07256ac79f2a2e07c79124ccf7d38c224727b3aae63b0efec0ca43f6d52037584d7b3e4ede64477f762dcced3a5827cb973f2202dd6b9f0d203c40d6682f6bb4efc4d5747fa23538dae7806bb8bf5ad6c8ce01b4a6fb72c0e153a3fdac99a00d9c96b184ec25a7d512b22faa8ee4585515e7b4a77fd59444960f56930c2ee3357ad6c84e0143f606443b8868db9d81f8836dabd7d0abb5a15dedf9d651212853f4f3476d1aa3bc7a089d93e5a81764fa604ecf063dc76bea47a9c8319c783ece1bb574d2e928476d3a49711e91e5db495beeee3e3f0308a8aa582cc6c4ce95d2ce91a5e8e24c4a1b29fda5fb883bb3882c475df7d4dda9cb22381b29bd88223e6c8607a4c9dddd5d4a9fd3a7c71f4ec34b9c2bd862c65cc48ef2548eab7cc5da51a9542a954a750313927a1e267acd4447cdc8fb82f5843137a9542a954aa5ba8930332f553833ed54cd156ba7e54aa552a9542aa552a9542a95ea269c39aa187aed99a8994aa552a9542a25612a954aa552a97a522ab962edb45c2f094ba552a9542a256130985ca524ece4273ff929954aa552a9542c0513927a1e267a65178e2d3f4dd7744dd7744d17c6398b9e64c538e13b4294ec33900b840f6398076feb86393f3ef5f2a0c34600bdc7c736f32e0f62fd208c7c50ee8f66f4f203471a84bd496ea479d0c98d34cb17bd34d2a23dd23bf656b9915e8942eb8862a455f68639ad63fed328bc8b96f91174017ea443fb8756c20059237f00370cef8b963505f0d80d5d8614e24cbbe7ccd33c10203f9f9ae6f6e96c807c337906c80c4d3753f77c92e9143f9bc7471acac3d9e0a829d2ccfc7c9723d200f9f90e474c81e6670a3fdf53d031d2b8195b3e1034b6fc198723c6cccc98414d91467aec45c71a00681fda458f46eff232bf799d8dcc379347325aeee7462aafe376d13af4473446d3140a9a5ed8288f3468075d5195c7288a9a5454442e9060605a5bb2b0b04e2089a049bfa590489fce85b849df091bcba17898b9914e2100281360a4b38f599a2b39292fcd1130c7d1d8ce962684524c18e94fcbf5da1f9c599a61092aa09712be47a42247da83d1a096974838301385194aa176eeab755dfb635241794c870e4c4dad18093a423e4820853f1279dc4877393bff00f4e787fee47869ba5e3ef46704fd39f9547978595bfe7d451a979f7f436aa23833a62402e9e76f2eba85b85d48e19eefb209407b48b208eff2a52769117e5be96c4adf4c16a1a4e51e69b95db48a08a39216c08f7404bdfe88a03fa056a419bde86382b9b88ca236d2dc7eadf3a24779a4b7fdf198e750d3c94b9e87473a030598afa814cd192a5acad0900000004110002317000018100886844259146639146aea0114000f65944e665a3a1007e3c114456128c318428c31c4000280218428848c11d90040a1a5093509ad82315c064f1295824b70e31f8e440e362744b8f4ebd4c864566e900ee18156cb8f06f1583b67cd125b6d67bc9fa58f68eed925db16bf9739ae90bf3d954327c088ab79123e0e02677784b00c15e0426dcfc2f5036b4e6bb79224413f9f818c2457e9e7f32d48d24f269211347c1a173bf3a00ca5271ca610d8d2acae2143a5fc3bc5ca40281e7f04cc1a0bfce7969373a26cd64a99e2d40714ebdb127e2ccd8b9f5901cd7e799cf8b1007a61365e53aaffef713c1c08f977d3f8b8c399578cc2250be75fa5a1099786fbd96e9d57428c170ee9786105fd95e322a7e57a40149f1f9c0876370f15ab0cd6a835bd96d8cddb3d77186d280c07e1e324b84e72372d39c03741811a9bd2401d41029d48e13407d3e927c55e4166d46c9f988d8c02703ca704ea02c35b01d4edf354d7deb9f10d9680e8d729e48a82dbf2092d484d076db87968620f2a25fb512f1b078b2e6f0d1439c53053a2d168829222f80b34262648de0531f49793d297ff9f8dc6dc5505f6052b03376684a11545f58b980f16029a2fdcabac29da2d5078b1e2c6898352c5180a3330314df3205c53f619906db9a21747728f69cfb354fc37f3eebfd9494fb723473c2e7c7ef0a37ec010ba67c0444e3e934bea254960d1c262ac06fd4ad02780a0191594362d91cc5bcf3ac1ca315b7b585a86ee450d7166614f623987dc75e1bcb531860aa520b0154f480e2cbbcb5499d268058168f2173643bfce00856f2a3b3e67c6c2b893c59e1d2f548157e8a0e3eb7aabb4b0b98f6efa012bbf6efd50a1209a3f3c00c4e53795ba03fd2ccc9ae2c07c990e1ceacc79aa982ff70b360eb696f546a81d16bbe242b0a0235a3b58399b952705ad4906e29779b594af530efa2ae483e0834ed3a9eb49041ddd988c028bd37a10c4731ac3720e89aa7058428be1f6c9f243041b8b03d26e2124f8b2df102cd23c028491660b81eb788e2b78ebb6107ce6e4f48ab5f395598405485bab004c13e4c652ba021a3d2a4e5ca14ea806a40101839b5180de3404091850cf612ade376bd3c251e5024851d03ca4295a8498c771afa6f7d2bcf270aadd0b9bc8fdfaa43721588b9de6c1d9565047844396eceb13f5402f40786cd223eece080698d50476c89240d0e85aedcb87afbe288ffbaf989e2e52d8d6a5d9575982910c558c6478013ce605d0e7780135cd4f8e502b0f43695e17ebe761126166a97adb5e84fa160b2c4de2a240e295f674ea5b4446d77a3aa61e65ddee429a04c199c66df6f240f63cbcf6bc380c246c030c4349158f8720b7efa593db2ae8ae104196926b5c72eae4593b9108c291a8a82d8be62ea5ee0d9285898344162cf1dec8330b7af869df1a9f5298df39dd438c444cd03d4ed6e50111bf20019ac8269e077c8ba0272441f7d713f8c96e6e219e169f5d9b38c153bcc00e7040bf1fc4f0408525254030e42fff586b4c299f7386e66a2d2d76a73f3e1a38d0b7b0da806e8bc916706cb3cb8b5e0ba12276fd5606ddebe060fd27563a388c5528c250ee8e3b8a309db3efeb1c50ca710e7954d496a6036cfd1293c04241b2eb9bfce27c9c940c19b3dc59d4b78832602a6500717c88d2586e601083e7392b3c74dfc24b506073bb7677c02dd0069c5e77d1f6cf7bde0f04fa1df4f1f5ca4e81d25dfea72c6d90ac5498a335c03184dcee13e9f57c3669bb94bb36d806ad20ed301c969ebee5dd7076f14c97902b305356be2865340f33699e3f30509fe72d51571803175ad52259cce6f89e9cb0f322ff342c86d24a542da116662c680a0179972fc01de606ccbef1231083a6594cfe22c38e5abc393c24cc52cc24c767b85dd5b0878cf7c5fd9ea602e8920d1af391995923e3bed9c53720c1f88a89077a71bb4edbd90d2c7ba090b50d4b313ff0fbc0f424f4d069b997d984651cda3c643058774dd8b69d6bbc253dbe0272a961c2386b855e6ec077d0dabc541e70d78c24028562b983c4344dbeec4170b68fa8911d571da2226d684d97cb0f4d6187851fc20b4867cadd1e4335d62071a4563007bc4005c0ba8ca4978bbfcdacf3ca2f002dbb4f991f5258c0d6d51e9e8bb92bf81cace5d311246292e91a2c30e81a8c57705d0063e6d0b13f530994f4876019cbd9ecabde8ae8339197c1d084f929955b2d57a3fb5ed8dc0a121457c4d6873d811d3cbdd42c03564ff6bbf6064a4762efcfa0a908cb344dfd85d7d5501dc49a00efbd6f095f16eeff0172d5ab59359ca5d04fe0e89a2e85f0226711c3607e236da5eeea4b6d806b7e344181aeabc3e3abcf4130fa6d1190e487128347535206a1e79fdf8e4d8445743133a159289c8fceab37129ac37983ffa227ed14240ccb6e97e06c1028be0e8be2edd1096ecb1ca8d86466032cba8cee07d85a340474d3aed3f599021ddc12812193f0868fcc19e2a134facf37ce86f086b769bc123458d25e2ab9edde2622449525caf077ccbcd3cf9a83dc8bb4fa7fee466f680793c0885d1ada9af0e60940a1dd7578cd4edf2106fe9088520422130cfc62c5810a93dacfc5a6bb325c4d0280a2838bc171bfad4a0db324d314f767307ba83899b09a12a2f19838f6413e2f1d6b319cf13800a31766280b499080e9646090f238f45cac594a77b52729c8e2f0159cfa8b6371f43e842c2f16a70fc0607045581c5a76e0978d30c1e2208a0d4edbaf380bfbfc4f118e025bd4bc579caccefa48c32ba9a3d56cf4f094dfeaadb3cd02a38b03d28a231451a2961507943e5fd14c386ddcabd8841d69669dbdd125fa2759712a7e7f4bcadf1ad3c84d805cc3551c9b240b2366ea324a0c717efbbe977a037c6ab07840bfaab3065559c51148ed6722deb850c5410fdabf7008b2bd7b572570fb1b88fc518a0e9b7223aa381d21234cbca306ebc2ada408e126acce64ac2bde6400f02e4b1cbfe58525d64552e67d0a8bffe9ddd16d91c421657614a04d8f336f7310306ab9d60c0e32fd452be7f11d29eaeba71ac35599711c458aa18b0b308ec11e1f24a06b3ad247c37590ca452a34e0e61350fb93bfac67d76b3977b2607409ae062a68d9afed63cdb2ab8be53f4f23b5d09655616ede8938859e401255e9e0834a0d2b6941674d275abe075c6e38491f246979a9f73f6053cb921e20b136bcf4cd3349ddc0278ca75e70b81310074d3a0cbc6555de1b5b9314f10743703058770f9a969bdcdd636ac847314e39d4d8da45f78a1a8528ebd949944381c04343fcf029445e0f3fcdc0ff44d7311dc0764e987b48e4500e33b3eac0b39af41ff126c30a23e8b197463b70cd22e0f242051afc78076d200c5ab6d480c95b96d403da79d4dd0404f2d1c055d14335afc324b732a839665ea53e4490e735b2c8a780a17ee001cfc37827176c32882d913fe9055554239e9499468b283f11e2142d59232adc1e5a12bc01348c622cba1dcc5862d7dbc1460dd2e66bd36dbd3403e1a038d01ca435a02429db2c0f5e0405d4690894a482533bca9b5cddc813ec847e42b7f06d4f81a3d7ef62e14db642a88fb90e73a2f42d86b5f973ac0647af21518f869dd210a9c2a4a90ea8264052acb874e7b860bd235c1abd49e088b968ef26611ce780ad83a619da7844e4d38c1414e0418fc3c9fe21af1978c61ed4ed6bdb2455d590959e350a14a6c8a66e1a2cf5793af976002df083d12d6a3a90a96d0a5078e428c74d576cb8dc30df4da61a637faea9ac1cdeff505b1f894778ece0034c494032a80f803718499809523619adcf3bd19f7a12f4cf93300014bda301221911ee8c42b43b8036f4adf2e45b27afa14e864b14ba25c903707d24610c938eb8830681f640c45dc1ac77aca9538aec50e22018c53c7d80f27fbca10858f052a418552d296251e8811a400bc022095007e9553aaffb15e01e54cbfd5e45229016ee7014a3fac6ad6775196d0959f44014e39c8237b9038df923403f181dc35c486ff6c65a0175d9c9695fc943cc5c9b314651826a474c85218ea0bcb2daf6566639a8ed5f2c820c8e2e5a2a2ca4c8c866f35c4c85b8eb8748901731c3843c95de27858e08bd9ff48332f711da5d5a6f0372e604aa6b51855f54cb14441b72dee2420b470cd94634671836c0118876fb02f232f31b3e4b6e8e1d3f80193ebc741435288e85d06b0502d80434a77956a7e041c8f3fbd2ffa71e8d3f7dbab0e1b33165ac69251eaaa7983236b7d9996c7b28700bffb13368aa417aea444d61aecf4f7f8a81904a7013bc06a44c50ecbe6d8db221c5c7cd68070869d74b85ebe4613d0747d405d30c82ab3a5caed09f4c351523a42906759fd870f4dc4af481867892e95145d4f3b5b326f1ed2db0b23cc2ec34141a0adc43629a121d246e1e7fa41a9cf6cee97740008a36e73bb7f4c754f9e0033a3e0b384ecd4b93c2a88a6cbf8858aec27b4c04a6bf04385113c3dfcb4e9d536c38ea9e3ce2a9f8662d632f5e8fd61e3a9445a9c703b5bd23c285f0981107717c7ce1e35eb466c76e4b975d5f471c5b076cc9f99e0eb1cf09da173b9713efd087cab7f3ce6457bb834635eacd718704e2ce80fc3b0ae273f9f3763e5a354724bdba568dacb33699759f62c9fa8a6bf76e6e1c18c29c50c078690c55e037652926a17f04199b8dfb6a0c285b59fcfd6636462c97e1cb6c354466c96b68c7ea30a7876fac3fbc0c88225f2d0a074d00209817953717b1faf5b0eedf7c483cceb0272c828240be8e9590554414fdebe6f3c33d56ae4c33e99f9181bbac8500043ac65844b979fdd73de83fd04bc53f0c3d51924db6e040f91cbcb1e7467e2c03fd07afc15114100dd9e5cb9df1c9bbc658afc4054e2d875f7c9a109513bfaf0b70d6f7c1be67c5b4e65f3874b02e3941ce6c568710b662e24b0a129a8182ba462c0727d0a952f8f11976b039b8041c86214e4b224ac98d8fbee2e7d3c8afd75c2348dc092cf4d9a6433bc70f6421631e0130246481e85253104f105b0fff4a823bcede069f052e349480519e24af6bc2cf2391870bc152561118ad4e56d7da6bd49baa881c83734279885a92ba792d02723f86e1e2b4f825bf1df101c46cf479ea6ada83590d95c2593c0d83218aa2679141420b6814c2433ff5c471ce582963aab36b470a7ff94a693f693170a7649f3d6b8f8b051c48cb50efd768b3ac01f8643e7bc00a62cb98a1b318d00a40b239c5fb8568ea215d5a92de32cd06a2747cd230e4ab9220006d5b6383d9d95a9ffc15150319b84b051be7f220afc88b3045588541b4377f1c85d92b74d2a8cd866ec8ab926b7d9a582722151b206c8821a37c1aa2fa6787596063733a09a79fbd709d3f67bbbf23d5d5c85c12d4aa2e7bb0af180d4a3d8712d104016d78df8125469fcd0dfacfc43be2ec19706904055713e7f0a75afba441186d71d72502a705941bb2df0a3ea597560b10dd4a703378b12b97256eeaba56daa145fabffc77b3bf08f215181b457ad93520702edb19e7617b6ddc146516cb8e1e9950dbaf63b7d710b11da4de5ef65ca7a153fc789165e65ed4fbe2cac4b2b99c172e4abe82b14d81056f425940fc46f11fb01b88c2734e937541ef38d4437aede22bdc64deb1dea9b64c7849c47acfb70c0cf2f09800383beee1930908179b91a68c1948c704d2742366863b0b1de808bdbbd83232b96f3d95f4b9b9285eb00acba0128e36d44a58fb6b4c15a5234383a424d22ee7ef26b2ab3b5b2d4e05068aa349bed777b912af7f8470be4c56ac23a1382e55a9d9ff1e872e5e3e74afb66dc44ab1ee1de89654ba60bd7d417ac0e6bd6ecbfdc38ba19706ab000708090c26dde645a2117b88f7a2f5cafdf29d9ddfa178781bbabc53211c07eab18c1f4f98f69445715a82c9f4428a7c3e2480b12ce32d510833b52b1062a6a69bc3ac65d8b68640998fc4e7f34b739f73b9e832e73ee5981bc94caddb40d47c3c276a0abda5e2cae1508f43d30cd6bc75cb08c6e3e58b44f73bf6380fcec4ee8c7d26a9fcf9cb5081f50d3f3e8d995ae41c46600b64e9491345a90968d5d1c868b1f48e4b53e0d4630874b145a91492c0b8e04aa04ca6c17f21a6bc76aa594ec32e7763d8e928060b38534bf45dc7ed885b5c842de208d431a4d02502642e42a328838fa1fa76a65634a5d96849a2ed493ded0ed48574d6ee29e37330bafe2996cad9f08522eeec4c6d5416287fb9fd04c34e80e20b336e9f1168414650033f200d09c114b801d1605b8d401fc2d9eb098c0fd4ed4ced026f4b1901ed0f701875ba2158d580869d8d6285331e1791e82c41a12d1d09bbc4131f7b3b5313ba167fa001e9366526cc0692b59b09d964d2d3f896c2db5ad923b50750a4f2710246a87ff296d11640090c3bf39dbf21a16102c3493c030e32da43d8b64a4ca8db2abf72f65b05e95bd22a60c216f22b981033f4f258bc5bddd1d723d2f3cb5244c28a8b599830c273004de9e9aeb5706665ffc35f74dd0a6ceeee0b90e3696c3a9b64da6cc5558225f620a1658ea1cbd4aa9bb81adfb96bed369ed74c7b70df05e38a3096a9a964f4de8e7251f4c5ab4da6a0b2bee0dc68b6baa9ec0fc306b179cce4b1f7847a13b675c9af1702b2702d642c8318bc588021b6f5f5111170e88d144b7f524926ba7cc6d48023cb2777995a57e84b3602da4d6cfdfff8acdea11fd0e3d45903133c5af00a513b003eafdd38049a0d59721a29692a64fde4b3b1be73a99daf0d250eeefd4614e407afb776cc9b4dd3d9996bd9b42bb6b17988ee26ca396b763c8ba3046a25e2477bf3f8628db009f54c6b159f6fb2d307889fc64e6ffc4809887b8075df86fc08c9933287bd96d17c7d62c9f2eb4241c4ae322bb4a6e7ff0e2e88e027553e344eec1e0f1a8b08c5d31d25c02a7458073bcee7f7d9ed37a0c07f437a355f5cb10513ed67c0c9e4b45d2ce3a36d14787c2e593833b3dec21cf2374b6f94a7ebca1adb54be8e8e9629e4777612132d4bd4d3516305ffb538645669a86b780368f37d2d0bd4360e987acbb3ce6751f9cd92fe8e30014170ed4232b5de12bb40590a7b6b162992a90cac7204ddea95c0fb0c2e8134101cb0b49e213a46c224a0df51a57573253a4dcc16169496f4bc32234ff0f6d88c1eacc12d21f120f232f109d75f1fc6d4b4c1e1dfa958e54d9bd4bdf8d6bcec2463f87f1da7717ca036c6d4b2d8d93de390c4f260ccf9970ef4493bbaf5456310f7c509ad8c3412ff9486fa3620150971b04f8a700bb02769008528c53966518309b6d849bf01685a2a933e0a138298e1f246492ff8459b5c73081e2f18ff4fc88d5831d257b27fe0a994a3fb25e0108238a159f0604a4cdc814eecf84a75c9b1a8d4f3c960ca3160b8488088002bd35c5dc71cb56fcd4bca1566ae8460c203b842f3611f21643a63fd043e06727422579128b604e437400715490928eb85dcaec009ab3c3652c951f5c35c59b3842be476d44f69d78c34af1afdb10f9207f4b50149712213b1cc812c2541dc84897491ad5a11fd49e26502b903c7870b4d1105e48714f2ea90825b378deadd604743204c1f8933484438a80af1728d11892962f64a366d4f6369c965cfe5233b6f18710911bbea89817b3a2ccdf5a717fd2e8b7ff572180fb27e340a7f8a3ece9965872be3ff878a700cad165a43c9667404539787938c1239a78df30eecf2621d3872c42f0dffcc8a70f8b5740f804cfcb0197a890c7f4aeed20d60f181ecf754f2a819450b6db1485683ca94f10598a79e649534c300a1b9ba9b22c9def1e30b8c156546c35ce8bd77bb492c32e6ef58d184fd157a4ae6c1a692a072213208007d64974037cd1e1be6cd84edba42ab6916970d08664e1441ab008db06ebf0754c92b26679b70b315275d8fb73dcaea0bb8655e24067545ab25649b8b40e491839e402ce08f431006bfc05e57e8624ec50411afb3b15f8dce8fec059167dbca449025e1424f20c18ce6e63b9a046564736378b524e2e2052a63d5520c5181cc75a626f7df2ab107efc61d13b6b6c3261f0393a7039b931b04e0369f4fab5de454d3697a210de9ad95265d91d85ea1d7b427af6c5c0380d1d33006fbb0a4421f8235a8848ceb8995ca0a0389d177d1db65992bfebe7613fff4a5d1bfe0f2061599a958a1150d5c5b2b0b19bd59d65d1c72cc6c7ef9a51a7b865d6604261d0ee2c4cdcba1c53a3e6c054c52a141d0c3552659fc7484c3b83d16e91fe1269b1f385c9fe175e5811847ceceaa9a8580263cf3ea4b63f72e7b4f0a1955681e57a834a20f308d514f1f5b3b508ca85efd8744f62d7d190177aa191fe7d7c248441da32b1632f0071835156d27f499fba9818654e8d329a6c7482888cb13e6bcde30aec015dae42fcf136203a5a818be86b3e93c1bf5040b7c9f702a18f9fac2e806a776eac7b7b04236bad2247985f958f79d64806a2d7559013276add0df3cede27a057ebac239b472e2574960ed121d5acd7911a6be2d219ef6c0b305e1d7d7abd48a080c9db93adbd3a1db2926414237e8f88cc574661f1602db0cdd5e85e18afd5d9c2fbbec86a323c59c97bbf31d1d314fc57cba4a01202fff4c47a040a48dcdf8bf19d43da01cfa19d035b69b7d2af8d710034639070270b0ead2c0aabd7b7615d17c52368ab7653f95545c72c6916bedc9138c7e79a3dd55a133ace2113985c5e06fa7320ffced5478e2d50c7b1f56a16d5d12acb0b8c6dd93a986413de286ff4f01a867d15f8d86c539aa66c4089cd38d198800205e03c5197f3a539aed4296cc974cc344eb0b257ccb64e668d0126bf85873ffc364ec17411d04a72281a704ad0e4a4d438d3a407daff3625cf8b6dd75880f010339a2cffc40c8ad60f4241c9c928275f400ad5ef721e5fe1eee88975d5d589b5d01fb65b1af654e0c6d622ff2376612c0e875e39622b61967725d9502b780d1a70ee80e191e287ef969699e466ee748bf8706cb2d69936eb26e8d9ff7c8c9b0394d0c5d14fd9b71d1cb5dad322ae0f39c481d4dd59f2770829ece012aadfa0f6c04b598295a0c0241d11b650de505d3ce96c4ae9986c392c88968d8d92a1ec8404b0f044678c7ca20e22f05930362c8bc1e65b93b72531c142651b3c1b6cc579c1583b86cf32c286e46f2b7f84d70e8354d50b94b606ebfc7924803633de6e498c6507ad1bcf54ffd9d803a40477bbcd09ada5ef2413cbc72c879b1a6cd6bc62b39cef38b4fb6c03724bc2abc6af7ef83d5ef5f8562b64707fda7242854f422ed9fef625768d5eff052be09a9d07d7a1a7a3bab04217c7d8ac5e85176d5943e8996eaa5120bf064a179fb7df10afbd9481d2de13bb196d94479204169e16355325f93671b7e054edf215ab45792530393def2d0883d07fcdd0f485c7de837226ac59fc5f027658f2859b981816bda8653840f927044db49f234f6e2950a379d629240485b934211e34c439d8cd593263487c13f127510901a50e34bd0c0128c2ab2a8acde3cad04352194c9a60197837ba22e52bb76c451376f1045fabe677818cf4677406bda8e9dfc47e4c6b8b91d276d8f6a72ad578e8320d1750522dc7621abb78b63f24688fbeb938342b7db6566d7bf9968dd9938c1cea819338abafe174d983e7074a9aaa27d8a8edd928bd9fb1128c96825f5a44f12de5022f4deec8fcb50d3c5866924d31df9b65cfdc692d669a95fc95ec67817c4782d09c3ec7144b87bb7415dfd884e00606a0a615be57ee9fdc58a4504f6e77b7c78623f305574f4fe21ff7a8a7beb2fda93ba5a613a81c411d17b0557542fb91b4a453c3e1bc3c0ab1eaad744bb6b26a7a9451d5db5ea5ba45c0e8fa91a0220893afc36ab88ee31516b97e2661717ea39a04074651903a782bbeb6679181208cb4b1ab841eaf3e80e05bcaee2463cf472602cd61c8572e4aa13884b9d038a127d42eaaf18520af32955777c20690bfbd408fa1ceeb830321a10a9e6de01a8c79781312bdb1139a7e72caf6bb9ce9609ab019cd2eedd87f760a52aee8e9612938e2bd1a0940b9af7da87b33645acff00644769bdd2c68ca6f355f534b3e9e10ffaf99170074c1ffcf4889aff280e84108feea1374d1fd6ad48e9e9e66d1fadd926857970df48b5e459d3c5471e4138f6aa408bb9675ad4e6124724fc16d5be2bd214a1127b17e381e0692217deb77c7cfd017d7e2c1ead530106c211fcb3b2c3b1a655348613a8fd1358d9d241778e3d75085243b8727f4b03cd9405da065bddbb553e436e0ef3df735044206471a3e8a1b03fca892e2102602eeff38e1c1bc8bb93064dc83e5110a0d86c84881909fc434c8357b96ae3bb089e6c0e6baa07351279707f97a6af30d58d916753723084387c20c9d1d19b0bea45fa02e790ddcacc87d312cada6cf5de6ad8e002d0efd4dc98714d6f0a8ec7051d9c05cdd29f31b9fce9854d23ba9931573c6f65777ef9706c8d4ac4682b5da547892ac2f125c6239b88fa28e92e0d1e40b6695fa7a992492bd9a5cd84304841aa57675787cffdbc17a9d8244869352b00035077957fecd2d1c39367284cf75aab9dfe116b6aab4f458edba40ff9a470f8ef803748dbe2928d7ef338300fb3bb2b3d572c55e6d6fc0faa0fda9e078029536ca6ce49d019a8d84018de8bdf9f0dc3b385151679f662f48925298ee7937e6522a8853a518846b94a30fb3ce9e40a9fd1d8b86466839e30b4440b831c99a23c0b5e4346db7f38b66e16981ab695788e149e485d7113cb77b302b261dd4895ecaeeaeaf875e08135fb976a2e6fcf7cb7eff5fe9a1084568333004aba0f943505a0d315e4762364ec0a779a9029902ae600a87c7fb801d43dd2d577cf5db45917a261e37874c6614efe88589775af7a37272460c514ffe90899a4300ee578856ca8658eb872faa7e513ed4de9971860d7cd28d20113c92dae51ef4bfa210e4c0c4a475e982b7b08ccffe962b635894568f06fa05ad5eeed70615b82c40ae9864e4af11545ed5e1c7f129c71906c60c00070503246c8ac42c8465f4a46921690cfb4728c5515e6101660a134de87d6070889c44eb6eb2f91d9293518947436e4ecb9ea923c932b06be50d0dddab3d5bb256aa9104026ceb15c654e1c328823a8cb5413f1fdefe82225f4269fee269bb35c3b414bf8196a7d871777eb59344b6ecaf6206fb36ad9de16c140a01bbde944f511d9722f60312cb5825ea0d478af3945266aa821f64a8a37192319bd0e93ad87f67cf4b96e34a939e3d94714e036935b32faac7010c9a37a811b779bcba74309b50cb257d9bfdb64ed5f76a849eabcfd80b4190c560c449c5ae18f8789e5281e56b85f2c454c056a5b30bcbe465abbe52f6f94f6b560d977d4ee7d90e109bb5a3ba549790fe2ed54c452ed139a6551dff09dad9b159fc8ffa053b8e4d259fc22e2ae8d75b04cf17ef0bbcc029f5cbeebdf70845835639252c4ffa977c1c3ee33383ffe482fefc469ececd027835fb00b1a0a497d0cfaf80193320fe74b034ffd7b449506d4b53b92be8740215510d96e5529fc1b48ef87d0d93816bd2d78395f4a854461fa85728324f5c23420948e0b7c563791037b7598aac9c81b60d26a7f540c08e57462511c584a34cd99a138539840ad9708f018c16eaa4caa07af514ed88113da02b5c6ac8e31a5604e348e2cf923101bc174f8fd3b016fab4e3f476541075666082128d0f5b628f17ac066b7f0036c1124fed880080397a5ee8ff9293aa7d2ec5f3be5bc5655ec5ae199833c6e539bc75457dca7da9d2165ae9943a695496795673c401183a07ad5a49139aab89b93258fe16c497a3acd746a59ec146512d86fc0dd39fb1c228fe69ccf6abc250c516eff069e37181c1b49f923fd24e96c9b23c1dca8d2b4eca72cb9d03e6a42cadf3fb1072456f14da0efcbd09250b009523d02b15f5d13bac07c4e0959dbad0ca827779a709e01b5ba5b4a9ecd22ade830ab6a91c6cdfc3b057359d6a87e1ab076b9734075b8ea293d958ecc15551621760f536a60e5abdb10b82e82238edfb198c15743774ef530b9369ba3f6dc5b7394ef07d23cc03207af4087cbd6bab7e8ad6953d777a146f158a2f96149ef35e4560ce0a7359c02b24205ba673ab87fefb2eaae22e82231b3fd9682e22e2662e69e49dce36c1c9af1d462ff17fe9386085507984831e61895739ef3ec2dfc8c1c682f846bf936b2e5757040afea093a73a64f35082d4b3be89c014102f47976bfe3ead59e385d28e164bd00be4c4c028f14e24ac2bb9f0362d505010d50b06673207f4bab1fce5e92a5d6467bf1d607f6c3982a2f051e1a5bec263bc284a5abace94a8456cd4284b404d31c04b46d798f5a165079c7e0fc7f0dec71484653187966e2e083552129a9bc5918b9641aab9c54ab08d5c8f681aae6b5f103d4468cc248015e74ce187dc684e7d84392be217cee160eb6d9f09080cb5a866b6959eb366f5f685ab52998a1db725a8c9e82aaa4847c254acafa7a404ac17c617ed3be98717dcc8fb89bc4981a2e3c6943450118bc715ffacfbdd6b0743710f42c705b6331687c54ea3ec822828fa7a356a6e663fa25513594772d94d2ab9fa5661fcb17ad9314431842a0cd1151319bcd251a4c9f5f04c4478cfbf606dde748eb8c800dd151cb64592606287ee5209c06c6ef21b80163824e293028192bdb27fc87bcf87c4165a2326f32758b23fa28422429aa5acd7efd0adf17a6e7a704b20ee5f88b20a79f055ce2a8072d7d0f45a018f586ddf3316c5abd674c41923088949b899e944e1a9664f3d3d1024db7131f14dabae3766c586e0e4e3160b54586f4ec37301fc35bd9fba9d6cf5623908a4fd17cc78fe7a2a9acf00f476fe9b90696ac1ca6713f879b77e7932113a2bee0fc17c4025c12befee358ec7e6523f35bb9f761af7667df28fbdc48b26b8c8abf081f933303ccfd308146ec70113fd67ef8b011149b8ea445ef75283852f31df1c9246b5f58c04562d7b37c137dabcca7d81cf09d53f3efcc843c7adc55ed988b50b4e5e66955e5f9032be4f7d7bf33d088f664e894cdefdfc93f375e17694b82e527076044a96878eaff0ec1bd4c0c6ef997ffc14c13cd1fc9d85ee9abbfd9ff116f320a5c3b8987a1466248bef205fa6e32a20ccb3c4e5b07a0dff03d71e5da2611287d1f8047d5424cc8ddcca70a1e6d027ffc9349ac5e6d96d7dc9f9aff5751778debbd939524f5f1415a2a6cb094489dd4e715a87b3b9e84818e9a0e80053884f1e9ea53fb8bfcfab1d37e2116444b414eb38e29e9c20e4ee30359cc73b7fe98467f486ce769ea5375611656ca936e26184fa23913e6845f31c6ba2fd069d699922ee8e2344734a80fd183e64aecd27e981faeb86387e4e7c5a469a03aafc63f2c41f0faeaf0a518f8cbccbeac98876dbc47f6b0fe910a272a7fbc8dfa601e84bc36d1d8ba02b8fec1d8e10117afa0b27123027a7ce84e20d20ab44feac72839f0cb403b20655240ac6e2808535a8c0b1c162cf4c3ed4b2905da6edd22227531755037f94cb6ff10c61097a5defb702500deaea24395e516c810f67828e52d3646363dd42934727ef83af950dede182d34fd775f86a20cbef7e31a91936d682f8e51a4c4f941c246e2a39c5289b64945dd10e9fdd74d83570383f3fec14a0217905142d62bc7f46a967bed7149ea7e74f472adb25b07ece778a7c4b88ad8a60c15167b5444d192d7c2e08354658d2daf7d8265bab67eec1ff8a737843da9cf0525ea3a311f842af7f9e00084a2807530ac39223c6a2eb99cee50dcfa7769b8b6283908c312799f5948891263d1e12a84cd5786e587c6fe5d383abd983b2dacefa46074c709b895b4b82f529e7818899478f80db7ea7d089a0ec00b68a835fe14dd09684a87df22918dbc9a3180cac1aa99fb01f404f812e06c013ee0bb4797db2208d53727572949efcad1bc8e942a9297bbd5c624397b6ae497f8e4dc83b0eb4b3d2bc3d47cad52851998f4a7510f7dbc8fc496d0f3cde18944b1c662bd499ef1e58c550352d5248891bd3d19e984278a6fea22212fa731f89a8cf2d432a611903275ba0d0497f46ecdc87c21618edf0267ed1c3d97c8b8400b9f2c7df9bed1372666bd9a644769ac0a20f40f15e8253e2dd7a1f6b1124b8d4f39d4cd7228ef2d6436ca6acf62b2588b6fe8a6e9a28e3f562a956e4e27475eb371f0f22049d343ec84cd0a3d186b5ad7cc3ba649257b8fb3c6788a2ea8a7942b032a2660c849d47aa0ff060ba593caa144308cc00839a6d60d3f2091914ddcd3101f2686f803da450c40f3f057bb36f75344caecea4633c568480d0bfbd2f3461c1b44f8b8094b8013c08ab3e89d18ba6fcbed0517c88683cf54eb76352afaf9164884c4176f255bd972eefe3544f664a8444e4edf5df5311e912838e16ca76f301f38eb29d4279658dae880e76c04dc8c6d5b1a4f58e40510f183bdf956608608916dfe2170180da6f23406bf625e06da524b6b6f75527ffef714471bbef9f6af0b85679cb37db2d1d955809bb0a54c609cd8fc86b50b709093ee30521a248d93d9dfca6b7214cac5f8aca4640356856f61f5e9e777422dec4210f341693c6aedaf38c085ef11f5395f4203ee3ee9ec3a91ea1e8c85e0f36b47e9a7d577ab1e41b6784c66c99023275a38f44d52c4475bab09dae85c0b5ed082299bb78f3d1d1c152b309795692a390267e8a73c165cb6b61b9ca24cdcacd0abeb39935b7e2a401b1385438cc145f94ede862fc8d1f5cfcf927d20260f945e705eae9b64f94fb588d338d018f719b76f19b43dfb891445e3b6b694a0ccaac6d5dc1344a5c5520e56c2d15dab80542e5fce2e531850207f5b3f4776710e688529660bd8b6d30b4c63434ed5b6bf5f39cc8d96c4189c76191cc93f98cc467922f3802ec6ca7fce2626005beeec373e7b45220d70f5007d90ce183a874feba6613cbfbcf262e4d5860a5cf1240502f772d738247074d73a7ccd029eb1674b5a02e7b43f0640b17e60d7a07365a12c870c30b536ab1f9c86fce02beb6fc9f99ec527e2c5a58554e5dcd68a88a03292ff982dcd76009925e3f9c765dab73803e53358a8a09373c486f5a30468047936440156b0a7de932db23d4e8c2ecfa998edcaaee33afd62fb6babda882bfabfb293f734caefc6c79ae6cb4f676b09367be311e37c8536d7985deffc17a51981adbef787b6e9d36026ab13aa9dc00f0f7704a3521114179411ae0be1ba7489d74e308b710a43266e553a6bcbd971a5304bc0a48c156006e223401cac08ffda053ca76438585f4d239914eee3e1134bac8a57a7060a71db0d03b34cd59767c5f697da1317df63391ffc355c2c511d998225d6ef47cd89e537762e284d7e7b82b1415815f3fd1dcb9f4e1cb4d7c8e658c1b589279a126e5be607a8ae3a3e5155d9e113bf0a93147707ea251281fb916ffdb5aed466a71a60a2117d93fd95268d159a4f94ee7a4b37204eabf38d21878e75de24c0b7ea86289cfc6538796382284479f8441ccd75db851cabaf0422c2df0d13f271ac30b5e6716d493424cde804c236ba219b76dff3e57f4ca614fd590f8ada51bd6a49f7797eb95fddd6427c376506844eda7dafa0f667138557ab6ea70561efc05cc0fff4b409490991cd4fa3eeecd0a1197359d991e692ed4b6c8e6812e152444ecdb4e25fdb499f626469581849897573d67237a328d8f7dbc598bdc54a14a818a3e6062de78613565567d695d2bede8b332ba3030150c093d4061bcaa533e20a105ba0960dc5a2471b9d5782f2cd79ad914bcd051eac33c56f4ec89b75e2758a47ed62ef6f72de38c6a93e8e1aa54b18db08942dc1b34497eaf8f846eed07e7e6c6a001bd788eedf602edeb84c0d864610e751da3fbf5aafa2502c43056760c93989da53a5762ea023fe62528699d4d18eca84d6bfa5b82c20369ab571b9f81ad2207802438203e254cc1f692b7a2909c9939aa70c010a8915862963ad48530c00a9895456dbba4a44d707ef8a35e1028327c5357752a4c60c91a0fbbaa10a03d64595a5559b935c85f7c6c24dbe9b2f042380b05a301935a35d27ba11d0acaa01bd743754eb18dd2f09a29e289fb078f4762b1f8fa55263369570b2674f747545898953bb1f931bb7b29395923294ac31f5f9ed27d8fed42da0bd5498b73291a7b26f84ec7fc18ab5bd2328d909ad0e2d50d0fa8e9c866ef9ce464f4a42757c525cf8760d383131dcbc4e538fad045842a62286e08fa03dc3b9de0207a9ba14a5516a117a276e982d7e3a4de047307c0850ae72a2d076dc0ea56799c5f3be3b82284039f42c10e64070acd889613eec91ea56f3417d3285140d886c8535a38e23277dde112c7d92f9788e116344969c853bd66f73ad110b5f3e9665741d04d47c243d2c1e3b211c179b62d70a7c57656c5ceedca70b4eebc829d7ba44113f4089fea177b6e24e56f59bd62a8ddfe785914bf14d1aff98b27e2e5d081d9a6cada4c4fb3fdc6adf3ef30b22f37bc00fdc0a780381d7dd614b5a07f827b3e5a859abdecc74dde829d06a6bd66bd66a2b120b4d9cd6ac78d482c57ef157d7f439e805c076a3b2811107b3c48e2267b119909e8c0a4193afb2713d0c34fc8b2f288859338a0c52b2d489365f342c52e330637bb63affce4dce8e30908cae82402b079f8e008e71c1079ec069afe4bff0a877afa6169b477b22de2b3e1e2c0d9e16f208ec4220743d7b8fd0519143487812b16cca897cf373f70168ad35a49bb2e3d24112d66352d1842bb2642ac253c3481ea06fa85aab96a24f06293ade531daeda44ea6d717988ae51b37eed7170f4e51f4763539d239c967220313447c8bcbc23b63e0d838e2159f14972c9be7b7eb80b6b9f93d1ad7a14ad191c837aca8e75b2ec51884aa6777f024c036ce07208db41ea96f61e3d2db840f82cd918d9c568c4f7e8e4cb98426d7230f8159ab332ab4fd252761cdf7e7158e26f894de945ee205ed51bbe82adf643ffb68e384407f163afa54752b492d6f178225704fcc3bc82c0eff2e1b0013cf94ab3d82746396f287e915893b704a8e9df07ab6a3b2b4834446eb2f37aa4c93e5533da06354da98a42a623aa711bea0a656996bd314ba6d9988b4c261ec12a400d252f81df01043ca08587d7a1c61e88397c227221271541f9f9e8e1f3940dd704b5c046a08366e2cdf34614c8ee5ae5701e4f2f01a0b352ff69c4b6c1c449bf67a51b2c3d596cbeb59034e326acc14cb820b64ca104e14e5364543eee0e3a562dbe0bb56e78e70bc2b5dc3e0229e4aeba29e7908ada95cf89fe9b17886b74b40cbed9b31204d513ae4d23448eb02ae84fceb1809cb718496272f0e45021f62f2c28982743864103a0ddf5a5fa24cc342e524ee73f4da5257291040620e82c90b71e53ee9854f032d0c9ef910191630b03b74a634d775f8d318ca7944b9754e6baf8f55e588895848dcee68fa5b601630ffa11a1ae62b61b353dde3668452c6f9ca8fc5f6b04f0ba3cea1bbf9e50632fe33a702c74bacffb1b4006d00a8fdc876cab1c182478455faaf8523587af1c70c33bbf32222636fd18c883f831a1b01c75c6b1e2e19e0f26433585c75207a9e89c090e646f5085ca5f478e0d2e2fad0056667de795603111a883f6bcda9ac7c6ebad4eae2112cdca772a90e5bde0516b6266a4fc89ea0febae5ca28a2a204c54c99b4dcc43a3c6b8d1106aa6499af3abbd95ae5541e373db4d0ad0969723a04451dfaa423f8f17b7c872f2c22c186fa34b1de3594b43682185ba68aed66c5481ac7249881d8a4236be2128fece8ae2b52fb6c1661bfd12497b74825c0a4e92ec65c2c295b7be60c7513413a7abc60459d7bce51b1ad6544c4954cb8989ac4c2ff9fce009a4f244bfa08a047be8750d33604077fef3c215e29f0c2d8b3f7fc27bafa439fecbeab1d6fecf4c06e626be797f69caddad4fea393831b136ff59d8f85c13c479a2abdb2a1b11be455bd5ca0e9118d7d9bde8ac50f106b1f9048d157c6cf859ab22b2ce4afc602bb4e878f9dcc2c8dd2e5e82212ba25fa975cd8751011e473cf0bddac9b5d1dd06c82a49eecc86082c04e4a459664a15e2aa953fc87cb43a11aba5215318115c74df7f722906dd3584c510af9ac369e3bd810ae331b3eedfe7271713ee54973d89dc8cc63995e8b403e3a2f38eec37be07d1057785a3031adaf1d91317fa6e8d8992f8ff35802afed99ce679a54ae6a618b49e1814a8f50f2d9fcd9ef8041224ce903272e3739d4f0fed26d3e6b711db681c7085b78927b5129bfb6d3ac17c8a3e340945d71331d556cc74e72976d4b8b16d413f6548caa6e17b8c12a8ca8eac92a4353f3efe37800e481aac52595acf26324393feac831f8cbb2d09d8c6fa2c2260c078c845e032677da39296f4f8a8df02566042c72ba587529da8b689a0777d35398c51871135381bdaec39a6ebeb3e441b7a22dc7b9205f8a9fcf8abd4c499e7c5083009ac159e5c2acfe92a44514f6e4a6bb099fb896d53774da44cd2eaa8dcbb612d8605bb0545ff1b28faca4810921bfce3b22822c6656fd11384fb7d2a84e0cc6348de9ff39d093cc084ca2b1b901d7157e2cb815b03d3649d789c126d790d419ff686b17c79dd6639ab36dc0d2c0f0400e9a82a2370132c5cd62818428844057a1862f4bbad3ea99652208e9dd99182e4447074e2b46c81b9137e10699033cc7ff28a564510fd32a9a8227d5d04740e384d337cd5502ee1bc9ffd23362aa8e15328c74216b27fd7f4f0ae230986dfc77fa281a96920a212b0ce162622f53f69cd606f7ea556888f80d40c5558d07645919bddb8d9339446092c2cf9864fc873b48d2f1f15b710403ac544d2b8c036d8b9ec101e8d5bfab93730a65b68aadd150ecb2f55a8c297e2f994068253c3ec46b606903fe5dcf563c324a0a49517d330085e99b406dbd925802bce16fb6c66c6b4f22f4a4d9f9e662eba46eedb45f41fcb7218ffc765bd4c916c5583700569a1988098cbb455c2cdf88a07b5b50e126ec262dece29029a61700b0da682fd87015f1d6d3b1bee0736e63efb9087a54af71caeb790fbcc45d267d21be935478755aabcad9955d1417711a2413ee0dead72326c0ec5abb8b6220ad42a390308fbaf772b87ba13fba31ef9f2e8a9d13c57070489f31b322dad7b278d28eaf6bae71ae24988e34f4c9bb82d2becfe6a783b203c5d3bea99e8c69072f2c682ba5dfa84a806c1b4cd282f5802820c65b2a740d4b66e124d9ede73d6367e138e7b081d464065e348f77f4546ed59e37fb16e667cd14d349939b85b0a197a3e9164b9d0f4ee4dbc9c4a04ea6e7fa957305c15271d994ce5e2ead83d7615b68e5d859d08f7b95caf9cc42e92586dce01a90fc1865a370f668329bf0006039dcf717fd7ffa6fd9b831d252a630b54fb7e5e91c64c9871beb1fd3743dbd41a218490bdf7de52ee1dd30a8d0a3b0a6988811674ccf7a34eab9cb06fa2dece577a0024f8e00759b8419213a840c7f49c20e968a29ece4b01ab5002cead9e13a4e9396175348172c40b4ac86941156160a2830988b3440e4d34d1a20a73904247132d30c0821466a43862022ae890e27a3f3ae1145ca9b846c9ccce6d3672dbfbec135c92db8f67e0e285363858dc1e636071eabbbc1e6360dd78b50b6a2d3588c518b1effa40176637ccf3b2e3268ce29b1d0ede401487d920ebb81f70464bc883e313dbb7bdd47a4530aadf1e64d48da55a4c6f8b1f6ee04cf66a5c135f20aa0f51f19a15711d394716e106b532d8d21fe0f7083888a3fe93ef28c4d4e373e53f577a261f4a32303f445e252b6f46d3313ddb28782825ece623320c524a29e9cc1bc610032736b0c10a054150c26c2d5cfd23c7889b22665e08a10a2660a11902de357fd8233f8e00071f30414313d00085a6620a96523a810329a53c49fef2a729aed4ae94a40bab600212ae7661154cf88176828c9260f60bfd07732440691ac006306c0183269074800c4080423608620172000216b001066468820b74c03881154756d57a27a03229300216925861060b39e8a03fb8945ad181d5a553e63476a1152268831522d0a92a88cc1cb8fc73072eff853da04ac5818a10a001075280011974b091cbffc137820f01fec075f2061189fb8400a781638e45a4d9c9083dbb05f7e334f70384b483a00d5f2cc7719c9d30dafde172976515196cf938164e7164999c88c4f20c9bf0947d8bcc1e0967645303d7fe94bdb71d58fce5c9ae7a50095be42b64b0258b319ce21bf343cb3c74b9f0cbc162baf02588c3c210c4a18d3c31550fbfedc26710071769cca7b07ff5c2cb797ae1b9ce083ecd93e6ad077e30d42b824f68e0e62a6a114734a2dd792ee288339af7b128e288476224019c31cf223645234d10456f3ececcce044ff3587700789abf3adb41788a2480370c0067cccf1c91c6fcbc69c2137b73f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973f69c3d67cfd973ce02e480a9b156ca39e94a63075962c2a83c343fcce7983d985336eff051af7ca4d122e704533c2c224278f9537cb78cb1a7e084bac419cf7c496595afa72aa59c53ca49a9940c830373589e8df0f82dd9eb84b80ca285e053474a3bc6202ec40ff660b838e3e9b68d7c07c15df91836c1ea7e9c7552c71099b21030dc0d60541bd104ee7bc189760b276b300115dc4178922bd63cc0cddddcddcdd0563ae38c51f68f225a37ed1941f31f7c3222b657821f31fee88c8040dfc09b1f1c54c590608b7e8144fae4aa25be63e113f7eab35efc0eeeb60d155348fa84f564a7a7a4b3520b2f795dcdf1b2529b95da7a598c6af5b2d895697d6598966d9ae7233f9fe6f8b1d9a679b68f4747d3b64fd3709f108e0d131d2d6c98b498455343a383d364870b9c2637ac16ab59746674eca7b95bca39a99c94d66aed55ed756158966958a669dbe6f17c36cfe7c371205088038542282822d1689442522991564a9dd25229d912a85150b4962299629383637305139d2db4b0b982490bc7890e4e164d769e70819345931bd9289a6c91486b39922a289aec1e8db4962952f648939dd252459656e4ca4a735c591969b25334d92a2a5a4b922cc995144db68a269b44d25a96e48a34b1481696e6c8c2a2a2c9962bd2245924a94b362b53ace06471f9a62626adb9a778a1bd78d11c5fbce85523699a6635149da4576de4c98e4d0e8ece165ad85cc1a4c534bc84595cc35370144cc34ff0119ec171a2b3f3840b9c2c9adc441615b1a65b4c88205950c4241109d4e9b8da91409c8947a211a9b3850460cee5cb0fda781f6c75f7c11bd8e4b2107c92ddf752c3854f7c823356aca74f3a14b89374e8ac221084166e86d5a3f240e2e9ac31c278a7f81f45c44718e38f977e897989e7e60be633e6eeb1e3e0a98f7516a2504b5c791925ae94d8a70ea955d7e7b318eb92f96805f7598c3f262e7fce633a8d9a671d701fa67327f5e63cc7c508c12ace09cb0773e7459c82ad18b048f785c95df8d303e2a929820f38244e3cb939420ea258e2030ff0c985b974a1cd19d270eb85366888e204571ab230500e6422c841031aaec0c20d548a4027eb411428531a4a295d5d334b30c26c0274032baa98993a363f6043f6832d38d1a195448e9e0bc74c44be1aa51a3d941e0d4e6616bbfe61afc78e79964f7c2d34eda6e537a5d2072ead921e1c70f287524e29a517b96358632a852c5a70d8e2c22a6680c4e5c2161ca4b8d907b67050c57da72191061777bb3e1ed8fa6c5c38008bc3e15022d288ff0c8063894823be401c711569fc8010a60453f4fd173055df8dddfefaf653208e6824043ffd0c5a8823b6220d18e10b9f605e6ee45103864f5fd02ab521944c4a29a594524a29a594524a29a594524a29a59492e6c63717b8ef36387e43f8916e73b7a1176fbc680399e34897837c6448c4d1ffc7578925daebc28d71e57de1c61b895180a7f8dff82b5ae1c683a2162211b07063c441857b0378234201ce5832ab70e33bb6629421460c18648001e3c5185ebc60d161613189c1645a09c3ca4a090ca512490b1249e50b2a2a295e48491975613412e58844285c4041096d211402690104e2b2e0b84f163e1f0f163c9e0d8b6dd370342dbb42966156c0b0ab0ad7659b585ba9502b9dc2a5916794320af046774301de608e4f601ef136d36c818b57f0a9bd68c3273e77ed1fc7695d5cc2278ee3b8781363e49eda9cb3a675452442931b1f5bf1a3000cae3c1c22d4852bad16621a15bd2e7b76c9ab5d7b86758d85ed58161c5f7a71099ffa32f44fca1f7c92d1c699d0e7b350176be292fefca5f1463e331b6163b3e486535f8c5770eaf3f8d8242ee17e90d7d2f8d7f97a1031514429bd0a68314170aa3b79a1849767e2c6027723bcd46055bc8251f12f9caa116db2c0451bae55d10a297058705de0388ee36c6caca6f344b4894be2cc92b804632216b9ba071870ebb68da1c7db479bd18dca3f98d6757ec98b3621cfaa78b05197c7de479dbca8e39448d1a08e9b8b9313c33a32ae69245474160d059f5828ff42a187fe45244042b7ac505b1b0aa1a07491159174b338052facc14518dbc6254b381545bfe314b7ed3faeb96dadb516ee8481f37c0b45d53c7cbc41544d2f5ec13115bdc88318ad8836f04a74b4b9369fcbba65424c7cfbb8c95cb7f69767e2dfda4f27c575acdbc076ec5907023dd4fd0079468c689f37c21dea8836ad8a4b96449b25d16649b4613e7d111df354f336204511dbeb37e0392d422ec1791bd85e2f3b298ad8bcecd83fdd063cde76fa0564afa7dfaefdea9288d73ecb3a131f7bf6ad33b1674ac076ed0bc83c13fff36f9e893dd3f60564f77c01db3fde120ce0c20d152b1ddb3dde06a490a288facd5b42be7e091d9a8779595cd22a237096e02ce9097574770beab846b4ead4fd03e6442235aa4f1bd5f1cc84a5220e4c31450f7ac0031ef40e7a0753489f48df3e9cde9096a9b7bd8f7a327d394615642928e590bef298e5534ac8576f2f13e35e00ebe869a5c7a8f4828077de2c83db0e0cf38ea0af1790f9236428e50e08f62384f0ea669e0c673c2716bbb8b2939dfd552f2b80b02344ca26d2178bd3c88b4976bc8c9f8741661f4f5fae7d90977a510ae18cc88f5e96c5ef05c630bf5cfaf272e36733cd439f759007f5fa059b0227e9cba518a597ad144aaf022f9709d9526a21cb20bc1ab3a5949965734b96dc2d25336aa75bce6e9652f225df466a840cb6eaf23c38e0702e76637379564b29b5958755a5a83974363bd413daa81dd41c66cf9e5c8487159fb8a5cc3e190fabcb430d6aa77958059a482b5dbb4ae9a3d245a5eb50ba572ad55a3912a972a4979a447aadb5d64a22bdf41d2b3ff750f785da14c314437493079f799d11ef1fb80ecf93a254faca49cf462552a9f4e2efe225954c26d3594c2613cb4ad767df1e6b1dbd3e6691a345b669a4aed4493e89de2ffd7ff77f4524aa22efe35eeabe52ca4a5ff94ac9033212b1bc9a5eebca6be995f4dad5bffec5b3a862ca62c0c04c2c261fbfe9a67b4046a217304ca6182c26934a0c189ce82696d10bd20b0f08f7ec4046a293da543fb55e543faa5fa92fd593bab805a8a3f5d792ec744587180745b79ca22d12892e1a1d8ebaaee146a723cfaa7428598bba5dba173e554e3402d551ad1c4aadb5d65a6bad35140a5d235dad135233ccfbecc7915aaa89474f40383ff778964f12f4e36e9f4f9097eba1c0cbdd3c209f6721effb71439f6fdd664411f7f398deba0fe31eea3e5de6e96a14f0f3f12aa0ddcf3f1982d9760ebb1f1aba3cb77520b97552d452dbe48bdc767c368fe7d9e7d3f9e8fb79e6c13ede07f3447c921ec9528ab8ab039c3ccccbcb95aff122af941cc7719cc705191c00a783d6e563d9d9068b2d2e5fda60f1e4fe66cf3eb005de6459676dc59e9db1f3096e3ef8984d0ea8b83a5c689383276eb4814f2e9fb147de76f4b6a37a3035f864f9c4527a4cf2b65cfed772193b634eee1148926cff601a2efc07c7a02219f1412c2e3ca95b62091baf08096ae113768c9bd8e0421c08c7c5cfbcc8da7c6c208b2967ef6b11723dabb7dd5759447437f3780b5647ac7fb167b0232bd90e37cf5a8edb78f435c3892046c2987551777d80b38f5047348a367c1275b149c419792a3bf00667bf2cdf837222f65e19c7d0bbfb38528c6bbf0b639b4fb66ee85911ee8bbf98a5f4220bf42c83912373a0afc78b063bf7d28c68008c07f3265d23e0f8dfcb855c705b3400aa2c871304549d60602aa4fa9cff034c79ceef4861b8fc08714820d29056e3ae23dc67eaabc3fd62fdcb107c79393825c31e74025409c1910a598871f92a5015d32898c2602a536de74388e33a57af083e411ad5fbe2ada20633175bd2e466f1c21945aac6acec11491663656d3b1ec39708b82fda441cf1c633124ea13cb2b4f6bebe44e2cd3c538feea28b9b5d6ed653f279d601b11f12bf0bc8f5ec59ed5fdd77695e0c77c32b045c062f27b86b866310701fd481a1c7cfe329c64336727d80632757139c7d766627cc05ef30db2bf814439fc7f065e4f3d0e387b10dbc611fcf56c01bfcc837329ffb7ae54644765ea2c5cdcecf18ebf870ebc1cf88c46b71be28051f2d37bb82e4e423c5441bcbe2544cf2b1c1c59b6853412e7c42f9c72c1b1643c14b228ec845a4113b4fe7790c67dd7594ee079fe0b54e083e41eedf0ebfd7751de1b9f6b8d3281b1b141910953d1e72deb7c3fda08e12ee0b70331f6ef614efe366dc6c27fb288abc483a4f0ff62382c01bf0a6208f7823d4c1c01c313007fc019e1a0051cce782b4858538976fe20c3ec6cf584582a88823421afc17d289bd2f087c7282db107c4ce68b95b1c3ee2b723dc05d07220304f2e9f2300cda6ca620f5cecb6fdef9d8c59570eb21c3fb7e5c20f0f646443d5ff35ae08c248a5c227d8fc88edd7632d9fb598675df065a17fb39ebfa5727645a493d970b7b65351a8031d073ccd11a853702de80a91c7ca287b966c07d36ae9cd8c05cfa38b332c2a9791aaf12f4437ca484e80171d48834e8e9838037ea07753eaee325e5d4c0e2c6efbc38a1f15fea5223228d6441065b3edaba2c6b264dab8e68141f09dc615d8e2b0b33ef32e73c9499b37ece59bbe9e3ec6aadedb2e2be382373806c6ab0258d947af13b9d824fa6464d8f52416b68cdcd85ff6cec6d0765f1e96b9971ce489124e113ade1134fd10527ef47a3b8fcfe1767a2a035f34d05ada153c84ba7e8a8e094bc97d670aaa9274486fe7faec10561e8c29d3ce6371ed40926204317d6e08230e4dca9f2d875776e40d01ea0a0095ee03111409d600232e4dc19bbdf9896c07dc162f26a40e75e3aa95b913570c6157e4b5fe9be7849da2d47e219882a9dbdd2a7f7914a6fefe32e8c3c53ea3c2775f0ceb4ce929e91359ecb6d473fe6c01bf1f23f9d6c12b39889accf142c01eb7e11e732931b67e24c8dfbc59909a14ad64014734cc3e57ff10d9765cdfb08f6a08e4e7b36b3199791327b27b4377169f65766af6716f32e2bcf97352d353ecb314976531013b3086d5214b2cc06f792c5182f13e7638cdef43ec9448b083927b7cb67e40fd45c1a7a466d94029c416df0c49def2546ee7c67d1461ca0d363f046a75260c4f8c75d5b214a74fb94aee1494443742ec6153d46273a8ccf15bd3bd157c2b9fd1698822e308582699d07071cca45190aca516e33abc50d08948bce72ed9eeef3b48a4965de742b6c00c5e5aef20ca45923303c29445ff1e000e5d968db8182222a9da55b4545e524151595ee606bdaaf142e6691a345b669a24ef2897bb374d9e8d3ee8bf733130bcb33959107f9c4c9c4cb9d88bc7d99cf6dcfe3118997f33eeda26724edc5e30684e8a3be96893efa48d44638453a55397d1fe154ff3b8d504edf5dbfe89aa5eb252abcf16079e9594c2182c33622a656f24c3e58ae721516afa9063720dafbe2dc8030c9c4bb7222f2f2269978492722af4c7472552ef3b92a1e8433ae8d8879934724de15efeb6bb71b11dc553c22f192bcaf0f7a4c7709889207447b3d10d087c4cb9534c82d39c2e9e993ba46c2277a95ae93f0892eb9d9bf536c92d2459c2e82e8475dd4824ff4a22ea274710b3ed1dfc019f4d712ee854ff49f873a173ed1be808077eb78d32aca71dec7691e7d0c430ad2f874c202de90894eee65dfc4269cead3479cb9f998efebf1dc7cdafde28d907a3f3b24de79db9fed1a12a330618b20394e2e2cf72d97b28c60ca4ec82d9146675a77788a6789387e68a12cdc729be238fd877e439b0cb35680e1a12fa2d323b5a6d12093bd65736e3b94d0d0e6a9f250a610e0ca907cf5c86f00b8f218bc01c3461c2c9186bc3c497e5caefc079232068e183160dc8001e3858d172f586058584c2a936925b5b252f2a15422d520915408a0a2923280949491004623d18b48844203052514805008340304e25c38eed3c3e7e3e1c1e3d950dba69d342ddb21cb300060d825e3ba6c8bb555875aa947e9ece6bc52feca18f046775f7918f006335ff917f04624b1c01b729b35d62a6d55423df2e3b1f0496655dbbaafe58ad7253d10cef8782c24fb84db3e0fab28c116527e3e1f8fb3f36a507cbe4ab5dcecb2c1914af77308ba9f7f1e3fff647143007439f62cc8cb0d794914b932d93fcf89f43d2274ec1f4926f4af48e84914b9212f092e3bf6e9beed9ef73624decf3fa10e0492f9301007397471b727c17941ac910e70e01229dded1f8f27b3794a9ca06fa2bed626ea29bdb58d8ad56b827a4b603088810f568082233881a5037613f4daaf37a179a4ce4e6ad5e549afe7ccc144e4099a43165539202a1e6259701fbcf96ec4ca8f22289d9f737aed7dff0e4f0e38f997d34f1fdc005e967c6d1c681031ad53104c99421a224091c1966dc527204a9878d12105127c42e20221d2f7880b7632d7bf22f7fad525e15d8f1d13ad9bbd372230083b19258c748003ab9b44912ffbf5d87948583870b1a6552f8dea77f4ec1bb89af98eddf6d9e938c28a51f0629d8e23ccf0297e0ba2c59b563931df049d142ae18919227c6109ad1ab801a788116eb0022cd6a0040a245be4d0182b84e0074f9c10b146ec57bd2e0f705b0ed8aa99122d3bd7733dd753ce664a1f28eeb01325da39ab1a0c0c33b730c718792ae11251a89a358da2bfde0253d8afebd7755d751b8263143284bb510d4e220dfa59d3aab80688a2a75309973d10874b6f313a6ba0e05ecf3aad8a4e2ceb38d1692d1845e3c670ab5ee7f08952100b9fb07fb3e6d267f4b38653534c2ae00d7b1a844b9f6157853eaa270fb7e8a42905f14ca541c181ddccdc3930c6f8c9221c99a6b1c02e5d03c67b892ffc971af130714e498a11055bdcfd810cb670dcf341fcc0a71884f7039fe29370ad8a3ae04b84b16750a3460d181818962e7b5451d901e3570cb25fe75f2c4e892538857286095283e4311ab88fabe738553a5f442a95e0f48c6066268ce217a4c36d07c9fb822872476ca3f2efe5d60f756b776badafb7f0067d7d8dfb01317d7ef4faafc6adf5dce2130c0cb61ed5fb4c2f29c1fd9171e143f02b2a37a1a876e18b975637ce7c910606f0ca2e08ccc53018ce117a16c329cc45c60ea753071bb543e739fd10aa94d866c9c31ee31916e37a018795ba78459de700d0c95803c095022ece2a64b073e1162eac42064edcb8d91470f1b5880b043e88cb15fd73b9a5972ebb52e95ce95cba0cef2395de52ba0edefc52fe42b4f578f12aef75f4b0ab23d6bc0e945113fc57e39afe79f701f1b9e9a58f3e37ddf4af74a57ea95b39a9fb4a875da8d41d92cebdc634ecb27747ea3a155cfe0b1857e9be202e37fba7fb82d4b8a09b58bc1e3736a6f9d2e76174a679a803c6ca905b0fe1ca6b1744bb23133cd4b104a33a13bc1705946e093ec1142de5894da553620fea943013d34d5de92593a7049fb8a4d2c1fbd2121d1c952af47c5eefb2049f18eec0c4b012adb21eb74c3f71aa74285229a141ef8336dc9aff98c9159c42823b2bd12acee47df685f7712cde47ba246fa7e32b5a2828d84b9cc2ce6726bc410e9ea18a67f2bcef57e571db2113ede3b64305eec0d8ab9c9f595b3a097ebed40181a5f7c6c3749307f9b4e2791f3c91784b57f988f452473aece0127cabe2a5784778805bad627834bdec701b027a4aac17ba765127445e146e813a213b388f075f3ec21a84b2d34cf558fdd599eaa10e0b719650e283d93902863f61200e0cc4e11b11135c84d26f3167945a1210b8b8b08b0e29707072a9615d6e7c2900eac6025cfed74377a30c18377ee50715967fa51b516e0c097199fe6537dec21ba1470b030e4223f51fb80eee8fa0128bc9fbf8827ea3850ecee8baa37fbb23ef8bff2471690862e05224424e8ac0f8813802189f602443928cb8002561e282ce7144b71da11fbba387bcafc8057dd71d7922daf1c3c0a5cf288cec0979f6c3c0753fe73a097df85c6e3b7cf878a7356ad4b05b09626c9284b397c734352e212e3fb6a280736d5cd88a82939b458d917c3e5944776a2a7ba8758c8469b43fe131123e25e114127d4ec22778dbf09f7b3c3ee6e385533edeb4f739e0c66f1e34e2c6f3e03b1b70a3901d7d1e7c5dae3d77416a9878f0b5170bae0bab2843189e60556cc24ca3dd8f692ea4e154f538093f51bdeb098e64499f9d71c6089f2084bc828787ccb2580fb27ef6814788807ce8459c1b3722a217679a7010979b0b8bc41855906536b868e372c58597b1ba5d33d9c55b3b242a500f849e794eecb30b62062e6ee9c22a62e0e4c6ad7a261e1ca5a744639457a3c0d986900621c991b6d1898d4e7835573025bc410fe525e5d52d5df05203e6e5c8f9c473464f493d6f3eba06a3987a2c29d0b9974c23cf8d35b4f24f94f1e98db4fb865c510b38ce6aad15d0fd94b8a2c7233cc0190db8b94d2ece6de1545ce28a209063014864034666247084d302e5c8bc28cf308d451eff0891f7c9fbc583e2b97be713d37fba4f0397521d1d1d1dd991667626858daf10cb1e5944daa4d2458976095f7ca30b2f9fe8e1275459888a97ef8eafd61d5f599100f972e1214f177bf3a58f3086e70b4431f7293dd4f103a398bec78d8d174303ee7fe1975f2a691459c669e060337b52c239cfcccccc9252296590eecaeed852c965828b0417092e9a48d37541b4aa832879292f6fe3caefdbe10c79d8c1ab35e1643c03c7871d8f782977798e3136082e125c26b868e09320f009c3271f1b9ce56ac044f8e6e213323ec24da2c8ea72f36d4ae9693d337fd29ae081d4ce043d1ef78bb90c6740530f035cbe0126fdeceeee1d2dcf1cefec6017b70f0f84e10d70f990d97be4c8b0a793245864714f175ad1640b1782b22437f210f13248b0a7f1c9c5258b1d7f454e1f631a087f12c11e9178db0312e3d97389ed810cb67c7c7384fb5caedca1802b8870afd32ab29f2c78a33fb721e8af673dbbad077dc8fbb4db35c8e25ea78f1b11f45756e36d0f7a2e4274501591344afee29988a446ef8b4ba8642fd244286212ede3f9881e67b61efcea451a111dd5db6e48bc76e68b4e88e86ef598084e405ce8976699176d1a252f2d47b28133e4af194ea55e521ae955e6a30a2953e92289e4a5d8c81a9d802417a2b55aed5cf771a4f95d74a43d2bc25d93868645229117ea3ecf3218393207b8500d6598765da00ba2e4219d21da514a1367ea8f3c866ded220d9f24dc408c24e28828975c88abb55e6eb303523f2486ce9d76406c689ee779823c9e1c373f20e02e1faf6055265b4a295b57135c3db738c5846d20d432ed1f73124e7df5f62b8037e8653dbd7ded269f6af45ce9123e4928ae8c31b8923d25db93b06af3204724527e9ca4e1543c2251b40b96e294cd717a343e490bf984b2de07995c296f3d0b6748f9a4d268ebac1ef5f866b224218bcf6297d9cb6a979d7de8cd68a79d03e026d5b40e86b3d795596ccef9ebbaae6b6e40586dce0bb33302911f122f1d12af76cfafb8302eb4e20651dc2c6a90539f76586fbfe289820332bfedb25bdc783bebacc1911b3fe79c9f6d473db7eda8309c0d2eb3f659fd9c3ee6adb5d3ce791b8f59ab61f1d67bdde659ee10d2c53e44deecd9ec3ecf3a6bad96e46ad79444713511ca516e55b61dd9493eb2aad94e1341d1b9ec59d5e206843dcae603a59b17853aeea16e1ea56bb970eb110a854221ef8ba167a16e7e425d066fbbc963de7a1a9f600f1977cee97df1f5a078edf12b724d3eae76ee424d0811796ba38d43cc5ff19b32487c7388e9d9c7cdc7f4be22d77a1f2e6eda3d9a0d2ebb158134db85b61ea08d081937de0697bd878cecdb49db8eedbdf96881e1ec316df3617f3dbb9e615dcbedadc775eb99884ca0c885b7b71edaa79d2d37c64f205ce2d53e97e801717179edbe0cc21b43e4b5ffb22dbbb4a20647ee8d0bad80c20cf7c9fd8556dc208b4b3f6b91fb61bfb0eeb2e20649a80fecdab563dab6637b56b50d86c39e59ad5eda0d08ecdae6037bf64cab57cbe59b9dc8048a5c20b0ee3a763dc334ac83cfbaeb5af7cd0bbb969b619a9679da859707f9e462e7e7e9b34babdd370ff934e53b2211144b426009fb9b066f4cc997ef1389b75f8463644156e4b3af508397f9502c422c8397efd6c52e3870b56b9ac7b41d76713fd8326d1e0fedf34034cfd4c30077de0057fbd434efa31f12330ff3e235e3b5b2eb2c361ae417a2b83dac9a3d203da8076448bcf14270f2daf93b7bf0597ad08b6c454549a9b5568eab2829a3d7aaf2ea693a04f78bf77add88e02e84332c11fc2a13ef3561a4d263847ebeb9f635ebeca20eda19e1958ecc6a5fed0c36539bd1ace770afcfb6e194e6a3afaddd757107aeedba8b2e2e6f40f0eada2eaee6413823f3bebe3a2ec2b55f3cc0b59ecc0160eb5e576c456d5a4f47dbd4d6d12d266d43c345b8517e90a5a8f0ed65b07f4b5c76b9403c3f75f6a1cfe7f30965c73cebb55c5270f0d765e2f588f43dc2e341e8f2b1e6b97d0c63f7dcf2b5c7346f2dda78c019df066ee8a4256ee8f52b37dd543aca53bef2cc143a4b03aea9fba68f1653672a793e5aae4a919a1bf264b0879a34049cd15749e9469dcbf711a174df3c7b109ebe8f2783dd72f779fe391fc479444a37fb76ed9ecdf364324f8913f24dcc63d69b50004634aaa30ee9fd6854f5a26855abe6a4529e42ae517dd94413b051f27d08b46a7a5ca3e0db23915298e822dc59924bafede92965fa6bdbd130dcb35ff4d9b416ebfa5967fb58adb5d67eed5aeef5eeeedb1e326ec319d2fbf81f782bfff565170f37db9f5dcba5dd37e3463d186e4ee02b02b71e322ebfc81527930cb67cdd6a427239555916edaa9bbc19e41fbae7aca38336d2f6abf2aded5f6dabca3ddd0c7a05dd63bf4171ad0e71e78b3b1e12a8a27c8ca36d2c22ede47d0765f75a40bfbeb843fae28eddf9e24e8ca42e2d1fcbc738359a86eb9a46517969dce1132b3e61d415599cf7913c3672793c4448d740312747ccb66d1bc8db86006da36d1b6de748a4738fb1f5d83c10c9a3699aa6699aa6699aa6699a766ddba1e950b3168b03eefbbcc627de969d4e9aed209f32edea8e30393d6d72e921143b3b91155991d5979eb3b058e8334ea441cf8744e4b597f95c184ec1303387ba8b73708a6f03de1031b30edb10d7c6ccf1468d9e7122e3a4d45a6badb5d65a6bad15c64604e8d949dba4b0d73ace8271f8a4c57176b2706bad350bd7118eadad5c2b4e8c03f3a065bc2511af1d51925df11ad54528d8077a1b03c6813ebe21243a23e9e6b294ac072deed0a06b1867a76b6e141c1497be937c39e87b049fd37316ac428251f4f4f3af4bc097f69148f384c405b7c5a51f6b71e991e0944cb49c6acbd1c3d87a588f48bc97f731dc78a49c3f43b3c1b107e499a1d58ef4cbf3eefa5ed65a6badb5d65a6badb5d65a6badb5d6fb82bc0c71d9b6b6fbc5d6a36f9fd1d0baeb0b3945f280ac3d91be913ca4cd0a40630f88b4b2b6b7b86d23d66030d30760eb21e30ee1538622bb08450034db896e448a10cac86499999999198739ee3033c71d6666e68b795bc95e347833ac833ab8da576ddb6cadb5a6ea61e84f2f3f915e59c5388ca2af35de5aab7db10d61eb556bdcc1e114b5ffea2fc659f178df2cc51d3ed1df80fb709e6f329fabbd3ddbb69d5e7e226d967efbf61c9c0a7d7b0ca750befd074edd2dde6df3fc651bc2b3a96c5b4b104168e00d667883e10d8637f8484d37e91d782349cab6a3b50ec219a396e9832e448ab61e9bf7cdd141cf04a0bd554c1285a49438240fc7e3e1a08842a218de184565e21d9db26a2071a1696191392e84af07fdabe7fec52797fe5b8f51fce47d76b6575e33e0e6fb919e71687c0354c5d3974a3bdfc5f5dc7235cf44445ebecce7b207e18cec76c4356e3d52fe79cafff17cfe49e9a0470482c9015b241ae85c1e2eac820645b8bd0131da3e9e9b723ea77840465e8c07677cbaac6505c8fb814fb4860dbc81383007ead4ee836fe846f5b3990d8e670d1dc20d88d0ed0644cab3db0d88ac53b9a7f2b801e1397799cfddbcebdb4604e81efee8da4684fde6118957f3be0632f290e013fd90c8a12e7302f9e4f99ceb3ef8864b3fde103ed11a305f8ecb47824f3d1ed3672f5a7cd2a1a491770d38207cfb8f7f5d88bcd8d6833d22b2e5798015b09b3b5dfee5c0b1e74edf0b9d31f9c42d27adf6c2326df37c38500845344a512195564c2c2f60c4b0c1f5907139c9b5931200bc874ef28993f0697e46e7e221893951dcf913e91cc9728ae329ee4482b13096b5b2d378e8680fcf5ab61d3df4400fb7206468333a1797cf383f43b9b8b8c4f0a993dddd376ee3ddddbd3d7b7777c35cf5eeee06fdf3ee23a377b70ea7849454dedd4c382524e5c3bbbbfbcce294107eb7901a0478770b79617a777777770b19c03925a47b777777b790970b6979777777b7704a080fa777a3dedf61dbd105c0d106c871ddb011536a8a06a075ab010a9003c7d55bd6a38b6f74f0dac8b191b3e5e4c0645765a20ccb5a365a5bab05ea7f1a85613a78552c150bc46a160aca4728a18fe7b352ad40ab55490504e25b1ae5e43ce50367556cc9768b657c64747c195e1f582c560d0278ac0cdb96ed0bd3562295f8be20808c010840abb5b6ba1819dfae832c192c160b8b0123c64ac66ab56ab974e8f8b6745046f370b23ac8686ea17aa828784ff32e38773e0380c64347df43fda9eb2b59ace2965c226b50974938252475d51356714e8e34f2c44509f97c3bea8d33bfd24109a9711fa66055b358446031615d715142500e3aea4dc3aa460951f9680b56754e0e174fda888ecb4d36ac92abd5cd0a6795c3a4740240c12ac96245c19a8245848b3ab350e715ab64abc5332da6693d11c00770d46316ac923932470b99b3450e173831fee2a8472a583557abd6ca06f5f804aba64d72a1604571518f53d0f8cb518f343abc3b690675245835495a7059a02e04ab664e909607e0a80721e33bfc832d98d50b8985135d14ea2756d1550b0f9f7114aa879f8efa49b62eaf6e300c73ce9d574ece2a6795b362b5ea6ab5582d568bd56ad5c562b5582d56b7ee7ce7b4ea5a758ecdc959e5ac7224ab55b6d5a8796b39ce4ecb62b5582d96cc69955d356ade5a8e5bc99c55ab6a4ece2a6795b362b5aab65aac16abc56ab5aab2582d568b35735a5557ab99b39a392bbaea796b392e87b25a455b4c22515653cabaf3dc3ab754f1a9482ffb158e1b9e0d180f5b65280f5b6d1f00b45a9cca98b00adbf8aa3a785339a99c4f4e8e0fdb6b6c32366d7b0c5fa9eb73a15a20d451502d1f0f5f1f3a786b747c2f168b75b146a3ab7432b18b3bd201c4d5b8502ed46572f15042288f615307af4bc777c4d79a2ccaba580294ba91e8d66451d6a5d57c959426005f6bad1d8000629448a5c7b0b5d6be8801c3b462823746c777001dbc02c8c9c9c979a1f1e205cb5f3c86ab4bedcab5d38125068cae8357878eef4b072f8d8e6f65b158ac00b498babf7b0cd795cbaaeb8aeb6a07192b3a78d7e131bc4307af8c8e6f003a785b3abe3427272767060f2519ab2be3314c5badc2588d9a47799fb52edec771de47a2ad3b9f9d7ac058ad3a89c4418c75e74936e0e43f6c85045b716a87cf6346580580cf4fbbc363f8d4c1db43c77746072f0f1ddf6c07cda5e3f7d0511eba3e9176ac8cf7515dc6c3490900bec385c83b9fa1b40edee8736cbe226a7a4ede0e1d003ac828195d4b07f9a44307f9e47590515d37ff0e362a46370fa39b7fd1413ea14a534507326a34431d6414a89b9ff96d5e5b72e7b3198910bbf9cc456bc66e2ed4a108898958a463c41938ccf7f5beded5767777378c261feb638d317a5f90976d88ee8e4eeeac99373d82f752c27db3e6f200de20c2dd9a88a37e3eb972b8fcab065c1ffb376f6c1371bd4f371fd7fb7a5fd67ef600aae01cc2e599048e3d8349cb2720e26d39050db8f9af467e5dc9d715ce857d25e2b0700bb7c29dbb655da5515f03a793a854acd8098316324523020000003315000028100a08044291583498e999b63c14800c8ea85866569b864914e330841021c8100006000c00000000a43001366b300f77943354e0659f5aea28c32206966442b3ff3c41224984f166402d6c9e614ae9e65dde7b9f803dd1622f0df87850c7f3a0328c92faa424de8ae1e30b70f1fb393bb100392ef108e9689f4e7f7c83aea73a16bf199d96332d36f413004b95a3c19e8da6d30fe26d3f882bae380124f8641d24cccf071c6cfbd32755f9c30f6e0e1adeaf2b30ead8119811a203518dd7daa4e420f681984a2aa22dcf8d7f0b01083efbe4a308e042983bb157027da9a8c577ba1c1fba73dc401e4ad5294879af1a642b2450b2e5450250fae602aaa26789321cd81cc7be133e011a6dcdc2ae25c31ac9a1fc1ae3f95cf55d578d2291763f3572e337f1fab5f6b2ee71c2618964c0a65ddb0ea6b2386b8cd2d653d199d368dbdd706a3f0802460c50f9b22f222fcea6c1aa2ed26c1ec66a2074c3fa4d0ea602fbe877a058a5b9e50f4148113be070a770235e868cbb62a57e11d004d81c496694a30fbd742915b72dcce18d6fe66bf59689bb1156227a4f25e6818dd29c1cbd513d69376139f8a8975d1cb04f41e348ef1818338c77cbe3cb7f462565c15ec8cf824c202ad2f02995a40fb727d4320addeb203a419280f924a94ed9b3b223290a34daf3e6a2bf8c0122e3e948a22668898883858bbe7eb63f70c24861ea4912e0e5924b13edfba9e3cc90281db139fe86a843faf60d6eaefa0f6fd5b1964282bcc9b5e7377e6d54506c3449c2bdf783941518069cad13221b4d613b110cb7b6512e40108000dd6d66561d25c8f28ffa6e4c8d5a061b1a83140130fb0804368354110db2aff59452c63a07ea26bedbcabbc9f0778b36431ebe820c60da78a12f227f36bcd46c9dfb97ef7e2bcf4c3ed8015b0fc68ec9e09a6000348ea19b6c2d5359a5f9a5da85baf920ec9f53896df17ad8869ce6a4a4f613ec4e8d7b664a4134a07dde57d3d7e326f488c7aae9d31a0efe1b3f5c108373c9eb0b0ff457f0865d1ffabdef7c4338c3329dd48ffdedbaadcd70d70520c438e400aa1f45f1d3ba5e4c1c00f868560b3aae70c0bb249aa9da8ecebe0f1752071d228abf38da3bcb5a3f2598c8616f174fa9adb717e7d465e6f404bea3b5c5576f366d5e8e9974d17b25517f428838ed113aa68d5fe8e18ca3895743e282475002642370062f042e762090d28f1b248a2ef401b345f1c4e76b22b6d02389c344e4df91d676c48f3b19fc75027aa039662c5c64d414243564d6573b3fade779869e40e975ac69be67308361694a3e9722ecac3edc2d98db0e48f3c9df2fb3b0684b9e5bc18feeddb24e1bd0fc9372554ba0ff6b859367132ea1ad42bd425c802a92c526c33408655f2cf430041d953b53547c3c07102c207103fa03290168c770179879c7539036b7dd4e8fcdebc32ae9a8f756a7d2c85ea9f3793e866da706ecd42b2d9a515b7998a2cb786d97a88f32b99394623141c82d487cdf66ca10d9706e3dcb7348c7f40f3564ade7c78414ef8ea4c9ab7c037e25977b413e3bfed8a684655d04923833630aa6e72869a41e3fce5f64a69644eba5d6664498adec260e9933e8bade49f9a74af62a97738e43e9684a74d1b4adcc6f86f975ec3ef7611df9ba1acd355f2b7b1d83a8a0fd30ef3c99bf75bb858c06fd8cb5ba83e2b95d7bf8b31d9af968344715dbf9c1fda18aa85c49cc86c9230cc010f523901ab7f240bb50ffb1faef5a95bba420df44826ea73b6880b1fb7b6e0afad1fdbc8c72ec274b337ab2b94ff715fbfb265d54c2e751244e35463dbc676d3725205080cd2f5532380c10f5ae81745fd37e9af177c1631b93bbe989445a6a417b96699761ca1b1f59005701d5c6655680ae56d4c59e8c7ffe6842205ed8d6fe68cbabaf8ba6ca578275d5f5c30fe4573ea56d48236e3efb66cf15fa611c69ff31450398968ae7a7c1437e62bce16c36eaea313ac03bc4f6880331b51fb5e1799903200b143d3fa9c092bbf7c87be2c6ee721bd4864a228801908a883e6e1320bb10ed5f5141c369fe6e678ab86af4e21cbbc94c7ef076d5fc32454c02177644e9780ae0fe02d762166d5b0656b34297423b424b42a445412d4b14c84ca2a48367716c1a99e0cf61bb6096db70c7dbb05c0873f363f11c044ecd5cfeab3508f701575da0d0d170cb5233b9db36ca25905112c6cc7fa1bc7593b53344d2430f0372bf507c721da836fbe1c802070209f43437bef11ad6cbc31220a80398a747f9aa771f4094920deeb2791f16e601d2add73ae2d3e4a41082e38115aff5fa64615443760a613108c6adc9e159e9899bb98f5017ca033e1b6aa44f46548e3f446e15a0279424b5bac89694407e056151f0c5632bf9ff4ea35aff47d63ebd7a12567e99c3a55ec11c42ffc76849656c5297a028aae47b9d1cc433890b666cae80062fc8301df894fe4d28b8a09e6f011108b57c9af93bb4d95b622ac83b8bb6880df25239bc66474909519442132f7961f95671caef1e8463b09274971d1136c5fe55f78da1b745a117cf57e797ec125ad8c7b42aed9411499c6c079e40269fa1873f60d66d06360cc0b30b3227131ec75d57ce7dcddd2951092eebfca55889304cfd6e903031f1e1e449e798a446b653b483bf05421b0196a39454606a130c36217ae22ada4d0c39624fc1caa0c99398ab88ef24f6211e4cd9a9828a82233d2ba0534984703f72faa9ce24d64108b98cbfe2ccdd02cb6cf40979f960cc1be588b70c3ee4a95da605a32a6489e97b005f2f7e45dcc29eee4c91f55c40bd5c8b344a4609b6d4f4d7f5e38e1742cee63eb0aa6d8ede8d26dfa664b585802b432067bec6f100cc39f74c007cb7c031e9371d0dbcd0512fa67bec10aac804a99059210d68efb4574fbe0cd1073ee6a181fcd7b75ed3a58a102ff3c3ce38ed47d92888dac58ad1d64f2ab183629b35231b41f0680df9bf1e19d629e3dabbf844739f40e3747295717d3262ed2b1c128aae8af08c441f5066617f082636cae65ad18a282afeca169e273a7c85a4a432ca317be8e60d2ff65d7c0997cd63ea489290c22016df114015617c028afbb525b4518bbf4a3f2db236105ff0f89e1603ab14efbe07ccc6cc248c3f106be44dbb6a3c295250e9967a5729608ab095d322c14727d7901e7b7786ff7186331e8a0ead8f025a7188fffd6e8acdea0bb1d8aa02b03cc6042311194cfaa428351d1d2ff00de9174649947d51fee249eb02072bd30c871438a95d1da3059ca3a9899d3d523bb68e43fb878e45ab6da9be7cde6d86e51b5464290035166fd7233d2d18a12711cdd146f7f570eeffc638e807748b0062d25fe1325f65c810343f5374c0b46bb90bcd6c17778b4b1e7f42cf0c88bafc8d64f5ef1edf4b3da277da9094a11c7b6502e35b4fbb35b19e2482cb1a8b5488361da3b36b80f92e482f9eb1d22e9f5f7609bd3f8c8817ce2c7881f7784c16efc6a587320aad693c20ec932daf57d390134c741a36d569c2a9242ed3ea0d497390b8554c769bfc08f08d6f3527f55def6afc10f8e7f4ffde743aef4144253a917d679a1a3d4363ed75c85203ff2bc892575c440e418e82f8b897d76e7bb4c020c770850617768a6f4857a1efd39861ccd9577a21b1cec41d6917803bba1c347336ad7a37372cc7bbccc3937ae744a47b6a9370b4a8a87376a421087beb1decc31082628932ec7ae54111da7b592e70d741bc4dfe71f32fa5006d34fc43262dc7533493466921c38922d156db0ca707516dbd4a632f3c13596649c33e090bbd8b5daa9f9d9045a3866f5d34dda590b82cdb21c9bbb42c9db09281d83bfff0455724ac41910085b1df12ffc59ec08d49bf10d10462178e976364d8df836a171a4b72e8b4be87912a4ef58cadfea41437907cd6d38b604fcd2a54c5cb5c52e953f06e441502fe7b747aa8f3c014b4c7b133b96ad8965bf4068db448b7758f1e2d1703fcdbc925f58c9f1c2900c12933da0e5d6d7bfd03b2a8004f7617ab685a1b542f3a2bc418c8f017853b590de904399bea52092f1850704529f8462682e36f48757ce84cfeeef093f57b33c6e38b8dc9ed1023f9ac425d028aa73b862077ef74b75fabc40d94f375152bd97cba3a4c2dffb22a614b769f99b7090f01819a28e77c108259f9b1d8d60a1c388bc323348f8d98d4e4faa84226cce4e6dae34953d479809df001aec9daa83bdf45d77facad8e591e12ff5dd422741171b9fb8fcad0a1e3f79f8a50be7bf7cfb27186feb0ed3c7c12938fbef6330ce67debc21030ce8ab0390f0a62828bb328df4cb9de20330940bdf5a1ef9a51007acc967ed59377e9719ddd2d96eae836507eb97855edf4bed0a86291cb6eaad4e5377305344e0ccb968c8bc9acc75606e971ff086700498fc5e9403e3b6bf49f0c0cec74ab37e5b4f40a81c83f589d5a9957fc1b4ad7a01175ec0a4f048d86cac3cd69ea6647e22a94328e62c5475bcd66be9227a7645ff89277edd9acb0a686daac6e8f78a84febb21a8e6a452bd0e8360cf5eb3761e1ee042da4de8dac751ba9063c9d45afbece5d4e32a36134b08c1484405d7c451b172edcdb31b8cf2f1a858569b45c6aa2e3e47113f2ff6d8dfa85ef96146bb34d25208ef7d77bf45d1d7ac9d6f718e5560ff32952261bd03fd44bc4f2824b88c50c3d2ccc06875de4a9f1e05832db43c34af20877152a1eb05d6deb0d879f2fe1fd2b83147fe4e4f1eaa026070808a2686b68fd6079eeaf9e8fae2274f952a6cfb12e2fe34ed412abce55fd4b7f5b2197f0c3f3516948c25bfb05c69428a12168340aedc6a0d7005a1b874e63d03416fa0da0ad1174360e4de3a06b10da1b4157a30c6d7f63dd27058501a20c36e7661cd9dd11471b7d9d94119ca5e75e1305eb426ea81c1ce635f73e014496bd1780e77c1e517271afe7d904189e3e9ab94d4553becb3187ce521c8c1022b0ac991654d8bcefeebcfaa12f494fab48ddafb6edef875e2eec9d4fca7475c42f3583832a967d3be8fe346518ed8e5227052b69b0d7ecce4b814ef428d8b63dbb3d94fdec9195d878d0f31a67c1ad9459346dd00ef2886bfb788afd03c199cc9dfb05ba09793bf61a6821e476ec31f06628a7cefae67592ced8818aae8dd6c467a4e15393bedd8beb6aeb621bfb81e0531e8eeef661ca9e0b9cccebd5e3477e4e7b5f5e4ba8a38f51b4147f4b3dd4526eb73b0001d8cf6b44d92ac43314534f85699e3e2bb8194cd07e81f4ce2a50f49dd7fb6c1079391eb3981c57db0ef353f2b5d7b06afb0e6c6e5e63a07cd95c8df965f238c38e394402539f0ceb9571133f6e6c30af6b9d9a4fecb86b326db50471b1e8aef085d9bc66ab37b770d149a686bc8d6db931692e77ae1dcd5adfd569c6b7d1e22617ae753818ef9ea9f1e3e51561253f2290b89d6af7f455e659ecf9a5a8e15280194aff5581f588656998d42782e0c0380284567ea02b41dee4a773a334cfc7ce5b467638c22681566a7a380dc3bac94d3c5ceb19eea281203158c0765ceb7a71e1520c44a73e050dc2042769bde9e723f61e78ecb2638854528097d17b45ce3c2c6d2f63586b1c7571080504a532a55bab2bdb62e52346bff1eb57ba2234d76ef42b66d976c5185871740909c4586b95ddb20eb7f988b9a1d437732a3a514ea9cdade5613cfc8ad82c77849e4a54583cb20b3c21bc82df9bf9b98daf65c59379b80ac6760a448eafb5d8ba0aa15cecc42b3b62fb88abdb638b989d91d7164109fa945270eddc3cf0f0aea46f1d2ab02b409c8c17986b42127e5cc73ddecb0243fcd819406c1b2dfce6cba346ffb2f1110baaa4051e45655fc7a9c04f244c6669ee78a6a5bca395bd432e4d18942c044438e49effb457d3a94b49de8a8f70487a91e02881323ade19715d2acc7943d387f446213fc693e4b310a6012a1502124e61a38bcf5400fb693db36cc382d79350d23598a9053cbdde4774c3c932c7da8b82de4e6e21d3d2816e75033d1c9f74aebe891dc1b51bd9a07537ea4300a8cfc043506c9314e7703a6b0b5ee471d3ba04aa2d7f0151b9eb3a019a8c2576a56415a588286b7c7b1047bbc8f1078236259b8af23444eabff8c48f93c0763706af5488e778c95cf103aa8004385a96488d2983d3af2feaae157999890cd47fe87fa903a0c52edb2069386cc917a51818730873abea54da4c14430bc1a5a38cdb12add0bd8ee0439ab562f7e5820734d863d1c55cacb422990435bdeac435c8dc55fa4b2c03c0b53f1a404f313aa16d1ae80063173fadb4c030d5d545b2580cfed1a2cea70606efe4eb3ee04ec62ffe1e9cc671d2ad437a4d3ca321cbec0628f9ec0be228f5b0e27b2d8aa1d4c385afb530cf394c46c6fb71e9389926088c024f9f03469caf1d95c948cf4815cb4a53b7b209c99f323b7dc695ba0ff088753cb189d11e3837057fc59d5b5f3add3a891af3b0f4555c75afe6a788424ea777632a409bdf90f19d09ba9cf800970076ea490f3284f8169a872cc99319e22ecacf238c9a01395d396bed9dadf088a61dbe32479a69aea3476b16786c9a15c5707272693f1061bfe6a62ecdf8c5a98f1d6400e5e5fa1f66a7517628c45c1a6edf3967d5ddd83763ab6c3e346376af95c551aed9e8d7d26c9b5359fff01494573b2c553ec19e5e2ba69299befcfb0efd91e57b5debae64e52a58e35675e67bb235700b031e35b052472e5db9333444f76ee966998d5d6c657679e68d3e7b98712ad9f0dc0e3a2ca51d21c780beb212b16281eff43a36a7519d4cbea4b9514b33ba657159ab4a12d117755241542f53deb558d1c51e42322cb28d0ef7e642a9f4d14c5260e0d91ebb1227a316426ccda3575227d545f5f2e65d8b155dec2140bcbda2214936ed2bf0bd8b2b43f89db5a971ee074130f0838cf59e5935e5c9ebee07a4dae90d3e557f993da656f18a29db3c0e0212b6464a07bdd70b447a1a5ac2bb2c2cb3bcfd3d3814569c9ae7aba0839a720ae84195f01544bee6f9f47eae89b6f4ef9881b0dab3c53e56fd7250f1e00c9e94e39ff6ea614417cd4d2cdcf3b517c724fe3f0e94926df858181d11f7ee50d7180a24526b105d732827ed1c45fe8d9185b49f28c6111a3db8baa4c039a1d3ab621b8ad5a535af24db8e891498eef5ac63c676775107fb925ac21dc758624847bb5c02159bd13a061645c91efa991fea70360761c45456b21604204c569e95d797195c06267e2fd176f8085ad3dcb6dadc2b881239191f9f3bf1ffe6039f1f1d8d84a9d2876b0a7be5d2e921683a335e37221123cd4b4a73872b6ba4c694b4946dd8ddc95c3e61b9f6c1a3b5b3c3943ef439f27d560d110462d2c2209ed082e706e1092b8ccf57ab098a0b4895628552bb24f4572a360a40a4e2b634a7081e27f412885ac8239e666c61960e36d3d9a7b45d31b0398d80ba9c592db75680ddca8e16c98dde448153c01b3e643deb177c25447f1bbef9a23b9582c744b4837f7060047a9690f2e76727756206770ab65a0dc8fc2c79d5fce3cd0d932ce0fcf0ce82a2da1e23f1e6c099df71692f9d6b73c840de8dcbeac1bf56374728fe33a2f9a8d625d7bd4912c20e762591102e2cbc4bbbde4dd65557d9ded2d6cb889f731ab2ba952f42038f53fbe0b23c326dcc7938b6dc3b1e14a31e90af7c797d65f08ddee4901fbceef05cfeaae79de775e967c99a9c038c24b067164a7b960272d1940401dfef2801575593f82b2420a01220edbe5c2f8b6a0a3675c1dd36ac0976c9c821488d33a61d3238deafa6f17fb809f48e3426dc67eae29baf376e21a074926bd720b35664dfeee174701fc4a1120de19b1a8049eb4b86e2f4b2cd3b43992017e118f29dfc764095ee084d666e30f15e573d177ffb97ebd4be6f1a9ebb244a517e04a09c9a5dc511381c1549403da327dd9975049d399e0b36a9b191846e5347567fa0d1e7b4479fcae393300b3947077a6292995c35a05480a9f53136077ea2728864308343f6ebfdfb7499c5e8cde26dce636f14f28838a9409006707289293db362af4b364f0a0e7e05364d70411960f6772b1f69b1d95132a451cd0cf49a8801033b647cd04d91ef5b588a2b5039a75296e1c2d41a26f2ab7331cbc921f5706a8911e14a252352c487e3f43aff66b01756168c160316634541683ba10e7c2313c4849898231551e10b55722f64ff299288146283ad6c5cf443643de1d9e5908673a8cff356f391e0a984f97842a6abe6fe660f01a759e18279577620793f6deacad26c02b4cf358a4ac89fe432ebe1bbcd12a7d0a24bb7f42375338e9e67eb0fef510774b4cdb0ef3252bb70e6e09ad62fbcc1bd87958f13494af11c5ea70d689c62e136efc2415e6b2253529f08f2abbcc40d4e06b34e4c8526db1f2a52e1bb932d978e1f0ba26432031034f66ad9cb37743ae5079656edf0587f4c213a0b23b16ede4f0e79661c8c387e88f139b4bf13a37ce29edb8b0d97fc012cc22e31b26c59345f7386e450734c9acf42b1c2265794920e944fc8544a2ad8bea7276cf8fae35677fd9654311792c9caa2ad69a74e4bc04211976caa57c02587fe08afe3fb9eece0d0df4863cec75596d541566fc0493cadc2cab6fdf81bcfb19649ddcae8bb49dea1c07f7f352a86f8a4721741a99b202283bbde99503e965ede0829bb52238b851418ac0d3a6599d3bdfccdd01f4933b4542bae34ba9580ace5c71ee267571b057404422a5d146b3fe94c9414563cb31ad42d4fa3ad4d284a536ffcfce7248ad5461acca393a12278e8eeaae3487508466e2bcdfcc34f60c57ea29f1ff3afd3e0b6a186cfbe930ae9dd11b4a7fb0be85e1ea7a9016dd97ae7d25b1d2034c7df5f386b895733d023db59caf5a08c4679c24881404e7dea306b93baa454814054875f920b1fac6eba698e1e162dee8b97af0b1ed99f87fe6beba600876615ad0ca68a6299e7bce41cd56c2636b8cbcaf4be7e49c467db34d0949872856ebc3ff1ce947837ee459446551867bf613e52bf81b395028bece245e0e5aadbf1c30367140832c750343fa87a77bc4548df72a727840aa136d5a0358ef2de5b9deb51fd79c09356f3523d4c1407c984c026809f5d01f2fb219157eb5b610cd7ac90d1934db6f03b21bde5063db268e06ee2d201fd0a692370d9bbf837d78d468511160023d68d94b4227866f9854b66949414436479d2f5fa9cfc1658709c39d2d6fb393c59770f5dd5436440c953875f60990d9ec85a00ac64189096c1b166f08c0d75a8a4eb175199291504c8950a415c2e554ca6d3df409b095d1f7d6d5b15e1fb49f961268d7cafa74c809b75185b1ecce12df98d07676dc399eb4cd702bb4533157152cf55311584eb970aaaa218eb72cca5648d3b3963d800ae3a25e9eeabc984250707a74fd2a233e9289414979e5774c297eb7ff00061da48011174990708d2a4c1df0910ef62c8bf235f18864d1eddc68428ed646cae84f440133d438791720751286869338c4697fd8a7a2d5b53fb48cd8516de451c66b0a72339cb43b41ba27fd37d80d87c3ff8a8626830b407b5a16be091ba1280ad8a4e143b7450a6d4d068fe58ada0bf1954d65060ca25066ddd1f4593c0f1ea6037e13b9be5da0eebfe9b0fe85b8b01da40e0062740631ffdd11f431dfccc2429665b6a80197be0534199774e4d365313bb801850c81d40fee268c31a4c4c48855f2c51ddf40dbc443e1debf436f3065ca21e895e05f07a6e1c1df9c049b83c86cc96397a17cced5a515be8d3436d22f06a1bb31b670755d08b4c9c2b31b401fff1eb70c941a73540375850faa785ca2b8291ecede0eb04e54dea5c37552edb891ba9a7bdebb59be60e72af96c21c909e4df94db8ff77447eca0c9675b2602fd25898e4e71852b21f16096ac5912ee385204b460e201d663bd516cfabc3b5a7a9cf38d96d1977c721b59347cd754421630bde61db12d027da65e24224fbe7e94ea1e61a3aa17e03aa4a5d2626f23c5d47bfd51d557c55f1e75bfa5b2f6385009aeb5fd7950fc652ea9388b0ea5d916e2f340b34886828437d01f16ff9bd4244c798d98a594071af832f1dda3324176199061b0db38222b838ff4fe4c675ecc0feb9bbd24398d3d9310fd2df42390baaf5f105ffc601cb7b23a230262297c015f140337f6a00e5b4360d3df1719dba9c5e122edb1d3ad65b01a795e1a67090c7edc87702b98d8ffcfb8de0a6de67f3057c0008cfdf568b486290bd80134f84a0abc2ac3bf288a23b6ec610a356e15ed517add8716752cf1829e888a28dc0da392567aba517cf83183791a00dce238cb8ca38f5394b758d40219563e3ca91bb22a9030ba95262d781b3eda1128aee5fc1cd7f82289257b196cfd8015cdff6e550156a58beddcf808387ff1493461888b04f44b7601a3c82cf06f342e996edf4003a9e63ecef08335144f877493190773ccd1b560024a4f58b4e800f8bd5e01698e51746f618d057e5a5c537a77b009a2866d24794e65d05172717e8ff6b77943480043edff8266f4a5dd45df4e970bec7febaf06e0f349aed9a7486e5946e924af86b62eb19cb6e3eecbf9f584661fb684cf437c8bc4780af10b8035660c591faccdddc5b261dc5467991721c24775f0581e878172aafe98139c639adc4a18d6d9d986737b8944aaffca28a6284287d17653e3252a0d4a898cd6ec7e5a6351a791f87df0588a4504a94bb08f2cf17416bb13be058c973f107345e6a8712910da63a3f08c393f15d5181089cb234dc0145faa8eb9a97f40a6a3277116c3899369df9bb73b03e58faeb15d280a5a8e7c612f64989bd002a552110711761f21d0832951e42a6869189f5ab5db8bde4e89a4fd8ce75ec0616e9422d8a175b77ef33fb0108a76b52289925133cd05fa04040c0856218219e65ccb10bfc8e6376c12607dfb582ce0aedd23d8de18e0ad8a023c62869c04c4214388ed496c07df5d51810be415872b10b41cd042e26c0c1b8b039625a80a050df8c783ddf30c5209107b973348dde1aef5535cb66298abee4885dccbcd7326faedc45ec743a8ad6161b2c315a9f4697971c0f6b9cbd757468ce21c8e480281e99a3c1986ece2e8812c9af0b07da854cc67011d155e448e4f62a1d3aa5b95f475c3d829fc7226c26451c3a316d460c17fd6465e2b270539e0e853760350495060c465c80f5d81522046cd85809960ca9572c5631628c1865c05b15a715cafb87efb15734ace38f22a3b0e017c091a1fc22cc7e1d52a361548dda47b5926b68edd1a7d937506bb770afe03f183ea74c09617c2eb32ccf2f91ed2d84dde245615a632b3fc9068e25646ed344cdd3c1eb07f03223f61e84590e0eb772cb474f9e4ab8af365694c62692f083b2b4fc3823c748ff90800b641c78d664619444acc9099f8d334dc345e8c5b467d603007a5505540634663583b958073fdc5a4ecb398e04e371cc4fb3ac1d12ee2ea9c0c77655d03cdc4e745ba0f2fa352197602886fd470ea7f4ece177014c21b1502835a73fe2b2e14f1c229d5be1d43fdb3a5979c981eb6ce221e61d11187ed022c1151493fd2e45c31f9ce90e2a4748d2292d116e94aa1f68813ffbf5834374615b71bf6a4f0c29b0096145045654c9205b18a9b957320b50609b4ac3a6afafe10fb5dda01a4e3b2ab5f9a08a0385d8d274bd6f23e2213d19b7ab25836993c60b4923f24033c8d539c1a9e00ed1b5bd4ccede3226688b6c71bf93db698537ff52fb5fcd978b2cd932ec116ea0199b6ba461e2e9395fb6a45455d6740201f46dbaad94c759f58d67d78c2b6de7edf5e106a7e8139c704e4abf47c87c263e75d83717ddb6a428401096f5247f6bd29054b442c43d4df1a01537b7a259a0f2f5be8f994a7dfdf628ed1d17e893d15a3ee5d2f5855acae1fe208586d51d1dceadb8d8b874bb748dbef39de6eb3b6be666dcea56eb57a5fd8a7de21a314c7c36b19459321de35f96801fba0e743ad82fb40caded108a76b67bc1175c8376aeda5b1a7822a24f295b050d2e8225fe68261fbd758c77b7b3508ac3b0666f64e20dab9fbef7b89b789a73ae46dc00136b8d2204125a834acf592e0d20a2c564344990d25147cccfe04b6f5cd77a5d9cc294480a32932769d4810b832c6502117fef48cb9577b215863ca26a9e4e394261772564e96196dd67b10bf68ea13a262ad844e8a23aa63181f40c12cceb6b7a3826e83133252e91543f605d54928d09b68a6fc8412202373626c06d01d18b290822ef8d09011203aeb763a2f31b13729ef31082714cb4d9145c86f13efb7e1713609d31c1af29265cebab0d748d89582e8e5a9366587997146e08a10929c18a9951298c89875163a223030d2b6a6817a8f0fb007dfc26ca1ddb8480c26b5dde0d375e838b7540a208ef02769167a240cf843408b3e8655da29ed5263086bf56cf44663ac299c2918425c0d8b5547b26d6d4f83b6e8fb8de35de26c3615ccb76ab1951e4370ef23516fa5b96fdea50293b0b54abd86b2c2a22bb754b50ec41ab79ff667e9aa0d90b2b5ae29bea4b150b4d7e7bf6cbf45564fe83d55116670e163ee28c49799bdf91cd80998e8788167eb666382f8c706081296869361ee2b1abd47a8250ff533b1f37f85a50f11d5f8722a0ebf93cc970121d02e092118e8fef9a1e51c6fa6c4582a03d6336abfe1de072983995609d25744146535b55ead07fab96e3ee16b5029103ba5deb3cec274e3bb35691ba61e3a571fc446f3af23116372beb7befa256def2ffa42cef3a8e9e9629a37dd4c611285f0eb01c1a11d38abd94bcff39356d53dcba71124fb710509cf92e4ae388fe47e7bfc819de213b5c991ac864c37c5b205b477b5f213b4b7f3fd9e090cf4c4fdcf9729846b685827e2d318bee8dca62695ab76b01c76583663f531beb54865f87689744907619b9228a77c76e11cbe4cfea51687c7da5c861c2666c9cfeb2f555e619a85eb83892381914b235543abe7cfe6eadccd9a6b19f51b4f60ce81620f84cf83753c9b6262bb0d612a51ad779b859f5a7635e7f66b73828919b74a77cbc1e95c5a41ca04b1e9070396d882c8c32239142285c0ef2a996b5f50189786f65c47627f7967dbf3f567808bd036be0c51f9168b3a3c32d306bc79d722f9e336e81c67d5e64bd5ca0b98616a2f01ed8057a1ead4049a9aeda7d50fc2b871ac242c89dd5fa39c916e9e64446d82165beb02af2017408af7f4b002ccb2a04d3dbffe2266207c4765dd4982d197831941b9b807b664702d4381ce62b7bdebd5eba418f6cd5d5a36709b00f3ff719ea5d68e41ddc8989639566dce46e1297902b500f5bdc40c9e80532c7618c9305fa91258c9286644b8864bf996a1b7f6cb97aef47cffe79638d1c7f5abdd2104299f49ff1dce7e5811bd30d37db60646e4b47eafeb04a0ebe029a935252242c47a38ec1a11e98931c14fd94ff03a115024e8c54d84aa2c7b1b6e84f8076770bc8ba49bbfc53deda661800052f2e1b0e3715373087377021f1b0e091189ce1995ec4efb8a0ca696d769279298711766254f501e6c9990fd964463a007dbd7387890a97190c71d22b7f48c94b62976fbae80112c8807d1350d2167d820b29ae5c8d1ca336bc073484c1432aada96c318a14efbb6fda3564506503f7ed159f6fae9411509aa02ea9179d4b628029d27f7e6f96d4ef3f628aff0731ae05a84bfa48244417d1946e396eac0ec2696ac445f5ba9854828952ac1d8493d21a42c93c9517b6c213ab7214c7cd312953b11942b12a829014f81c75b7a08ac6a848ad01005ff512bcb08b2e56993b60ac033159441637244ff4c293765f4b521311f27a228eb528ee8a8a7634e86fd19cde2b8734d81afa0ef9050e1e9f53b39b58b0181a1e0f4deeca5d18469c25f6e55361fc99ef0642879bfe6cfb070671df4f95f6451f5926cd2aeb8efce28fff204a68db90174a335273c58016b04dac8e537a12c165c52b3cd9023e60049abf5796c3841fa5ff7e939b3fbfba97eee9d195ec3b745812e4bf20de82ae1958981e247db796f86e0f8c04164c4184096d714e9720d2af301b6ce2e1cfd9733e802d5a7e8cdc4d09d898ac72196122825ad514b480e9bf2fe9c7331e458a497d4e3e2e66609a05e8414849a97063f20814696c4398b74ab2ee964a04cc6457fbb95de4889711a219ef906d0960a47318bf18984638a2c84c91b8e08110013a1c890d78c228978d86de823752973c60ca50a40219e610e23ac2723cdc0a6164eff0bad84f51f022b7cd0d805b3605a94e2ded4604750a19ff1b37e29f5b91e75746d4f6abc3d8255938ff400a8b46aa8056772d60152e6aa844cbd0c09b891368244fb72bbccadb338d9c1f27f115016215649cb2a3fed24895d4daf21cc736c45b2e525ace529c84461e9318ae34121297792461d34985ec03e89a35b3cdcbd31fbd6291ce2aa79b1385ce4bf357fd14185c4fbb47dad5f813b1acbd6d3ec131fa500ebfb2c25580001845729c5105ff7055714419fdf7494ece5db1f0b232dce0aa00bd8a599003e11a4f1fda07bb3551a0154922d4f4170fe6c43b6bdeec4687ab710c06fbec495cee20181c4a05f1d0344977d7c04cc14287abab5a2723c23b187a480749e0ac62bce7e8d5252bb85a5080af44656724950616b90be3bf5c9f8b8dd2b5fae5557c3b02283bf82f4c5615d21a6d29b54327c31c6769588e771d3cc7fdffafe06d3d630ae8adf47fdad9f49c9ddc7b8bfd2d8f9bc3aa1de0a05753d75f1499613e03abecdbf99f1acf5c1a81ae3ba851e914455fb84180d56144b676431658685f5da096280e1a7aec9ef5e823386fccc4f8df477a03941fa20d56ff1e2483ab6186cb59ab81baa7c8d43bcd37154498b03c6e080fa657a8163f7fbcffc867ee4886eefb89ca305d7c7579514a9f8045a2a6eea4024602a10b1bb371982592e9bfe225434cea4cf8d981a1c8fe002b5de55abf8b371c3eb66af2c7c5895e61921f0456678cbaef0f85273d85000e35630c05e9eac305cd931adb65314a11f1e5adf8f964cfa5540ea857eb19f967aae328d217c8035d596be9cbb3341bc77b1ac1f8bc4af36e7d217b810c0bc1ff72f703974ed5faa258ecfc911b0f6ee371bac059738f9fde288d9a65f41d100643cfb543ffc071885bc805589a04526f0dfd96e3f0de4adae0d57d40c087725a507c9bc1e9747f1295b53d6346c127b720f575eba1d53f1c14ede6daa3eeef16b5887a0a69731e7367595caeeafbef5cb217817726e76418aa92d36f687fe934240cee997d596458b69706af86c1f99c580b52174ced7e9103167b947031781c36e217bc24e9d1cd0047b1fbd19cb98369dddeeaf9c67799a05b8afd58b5f4899de4dc38db4e6ba76cb77d9f9b5d7515c9189575afcd713fa9d17b315a2f1f0610af705bf06e12eff5d67e33af7c7bdf0b1f683f2b4c37c404f55041b5aedffde2ec12d42f9b216f8a2d3ee14f2b7eb814f3e8988a7aa012bb1f5b190427b642acc7c0b2f5cd1932a3e8aa6c85686770e5a977fbc5c579d833c5facdabe6459c39e96d6c3cb2af3bfbdd249aae2ab65ca82836950a2acee94e58f7e601327aff30e4602933de31f2437733372f85f37f7d6ea33c81154d396dcaed669732dcb9b16c028ffe43382a8a7a0490bf0927b824082be32feb29cb966444c1aaaaf55d538f2878effc0ff12ac645607df1b441797cc30d26d16851326f80be70bdd51048ad1c73d15520f5471432ec28c9f65df4766a0ac4af1828a9002bee3ccda5cab0bc27319dba090e4d39ec587628e50a3b157c99a0e71cfecfd4c1c7332e38d96064e79e85034c104ef70c07e7340d99bf06b9b78046456ed65bbc702c1dd849983d3bb299379490ae13a1fb23c73b1577709d1f16b8d9235661b1684ca326e5db43bdd02152abda1d4edbb54ba6b15b0036b5a9067991b995dc349b664a23dfdb6c68282e4f1405813c89135d0f214f85adff8320ff6e712928d49d65cad41dad96e99b13d1afd0d040488531d60ef6a2e1d67218405e703e4aacbef3f5284ebf53de6404a21dfa2c42a3a184462a00beaec4b8a69d72a240cfea84d54344e2155adb0f953107c1563b82957f3dce36b2a601952d8929f119211705260f007dc184b1a70d464e3d64182282f51b3885c0969eefe4628e60567b8d75a4eadfbaeadf805f23f427d6cbf83a746ea9a041c1c3792f62423aaa49eda24cc67724a39ffaf255edc563dfa73a9fb2508fd5f3f54e1da1c7a4684aff9df0654a21688b947f30ec9843371cb7744921d27cd6d3e4395e36ea67968f16b621089b319e5e39df33e7d8b00c3b91eb513591653bce4542ce975038d91f1d81218e55724ead9d8d7d0091354549eabc54651977250dd5f883f6b40c04386b4a8c7db8c0f641093dba760190e4aad8c1f74ace89bac9e19561ca0763b1d3eccd8ddd01973e8aa7e80aa191f0c59928045d1d8cf6fd56a4234d238d50fba3e123a925abc6ec21a123d967ec8fff1f9f5ad43bb6ffe7bdc849fd6db30f20985008c05cad4ab610f91080fb23c0a3c026093958ef4f7098508257bb01cce4d3bd473b0a453f56d9ca7a7d12ab9be707474fdadbfe56d8fa06e2f62deeaa462119aa8b27358763bf731cff5511388829dd72118f787aaceaae436e36f9eae648a7f292f28bdeb6f44760d9e334a3b29920f1c26495745b1389c7d81a47ff12cc4310cd8a2ddc42efaa90c1615b3600be52ade41db1ffdfd677b440bffe53791e7e2b3036f590c201ace9141fbc469fbf6b027903124193d066ac8212199411fd93c5be1ca4354651fd066ebf0697f0080c06685b1b1a07c8049a2e5c06186103af717be9403be690e14b220537f816e0700a00a6b0ac484684ecc8800dc4a67bcae951da0c8752261036c136b6ede17c3f3188910c800522d28fb3913799c546591e3da92890020d2427689edf041c34a22d3312f4ac67875e35a3ec34b4e58d1849bec571252e2c1f6d97711ee08878c1a1d4bce53730b1fab4810804d3078bf6cc732248c4499e732426ee112a2b418a0d78c32f8b0bf8d8ad03902be5cdd5fb8cc06062804e9060653fb8c9549ad5bd27cd85d7724f6eae6794681d2631f1ed0cff543ac95c26c7dd83c8eb4f72ad94c2eb04bdb4eae11f627f197d1fa052a2c69d6c6d906a8c4b5e1c0681a2204c0c6b6b9f6357395d493af8ab98fcaff45ceeb9f98dd4a27322647b3dd3f8d8836e4cfc0b0ecf0af9e79f9021380d8508118d3f7dc0c7c5f9cc54f9043636d612694c8cab930fbf670f0440daa5a81fde6d32989867625fa88820443219428a50e33dd534048bf60c262e3ba2a7e41a8147af89393d57087a7bb70014cb04a17ec279a78dff0bea0fb6be06b6ff7d03418c550698f6e81b8f331e419d63d7ff1378ca315b2f50e075026865144c10d7c1daf1fee5a1cd2988bf82d0a6969b00a3d597f59bb1d089a6c20dd5d211289d3b1c4ee754d3ba94129ffb1951b520f625630c276826fa7e1f84d9dd7f4ed667659449d2894b3bd22693f69736546c427df415c7f0ab7db002bf0be0c4c6500cf2f37b188087f9d302d74560f9a257beeb7e7cd61b7dc44dd84af654152a27b97733e6aa08c998395708644dbfe3a18359aa9c5b9cb4bc9125315f09c5d5e261d0a9388083794243474d393c09ac08251121e3607e42dfbc562700eb7b48c18a36ec701581bd44625517e8ce8fcb0183daea7023a7a268a28f22f6d65da0dfcc7a7798e85256ec6d9adada0fa5ee6a91c55e1f5ef273e6a83a11d009b650ef4aac13fc7758de995a3d10ffc9d717e4b7c47d8dfec8d2ed23b7843454c44633cf0934770012353863e39b5540909100a505bdb0cebbd6fb1c8fcbda9b3edc1b7492dc8e190e181e4e84b1cf4fd62d1838c60c626793f5fd41df21e9d56062a4fa13e76a302a07d508d3fbf3f03d20311cc6efb8318a57c57f93425c81827a93e38249ffad8bd8c1c839112e3f7e99623d4a053c2a0eead53578711f987d6afec74a60faf36854c481847fd0b0f16a45e860db18b2d092a274a06b39749a0dad4ce147ae8c1a9fda44c67731146eb57423e24c0e0db10e4950c5a2544694f496c9d144a0c36dc59fff11d2b1f771281ab0b36f7cfd06a09c77afe9e434054f163350139d815e1bbbe7d3c7c00d6792dff6e5dcc3e3869dd00162315b90387e65f7d1c5e092b2fd5a6c622cf00fde610adc604b8658f0a4e85a05ad7ca69d1a888d278cf032017ae10dbccd3014686cafc1228a5da8e657f6804538430e5724e544b06de4ebb8264ab4298998b2e00493a747780a686e19d1175a1245556d64c9e5dff2063d02aec1545a9f23827fdc5b59932bc0b5b5511c66428c7aa46c88468584c5868bc7f098c76a1810686a365b6d53855a0631b7ed1084c76a1c2d4c8dedbf4b1928fb3ec35ef4e737193c84574dba5975d9ec76f3abd92fa8195ab249226eaf0323c1626264e093fe53861834383ee808ccbf5e95c60545e002e9af84ed4748aed67cf96e7d560d290e7797892878a3a2b0728e9cec113d96e5a5e355f351a9fc30fe045f884a892b7a21a1e8be95b601aa4b48bf5d08142d6d56acd2f3497a3ace05ace637ce977b744ca005ea19cb45ba4df6ed51717e72ebcba74781074ecda64c7377ebd46476828faa799ae2a5a4d8e2d467e81a2ebd6749b7996ea324b2640a09129d2be7c9477b3114fdd9ef7fb32c11207289a049b307726905f6cdb49e551ababcac8081dc37e048dc112f4ca3549f882d3c32074830db2d3ce5d1470a0e3166fb6be9e9e64252a58e8b1e2d4dc850970f47020e232461db97bff2e4a0b720caa6c8c16b249e24d6ecead0908b6da3775361086dd027e34ed1dffdb6f251ce97b1c53ef0f29994a872f23d592c68cca9d9144699760c155cacc764da051e9c4d5251c7a333343f37adcc5d40172e8a7122a4bf73692eb1348fc746e0021f37d0f98189c21837c6e6e387de2bf6ebf24d0a94509861ceef2822fe8f48bb0b6e1a1271f8491247f0e3c8c909382016907928de4d188041e1f24d7a4753156e026a135696deae8cd241ed9666edfa616ad072b9d344e3853a63406c8ee979900d4926982589958ea28638eec710e31d5a75c8b9a4a1f14488b95de9fdc7f5adec41295652405047128a68e56ad571fa0f0e67be3f7e32e0d43a4d7efe1a822bc4f898f67434a104042933ebc2dbae58bd080f4d30d26b4c688daf8c49737de804aa838e33009f01d2b0ed36dfb3088ceeebf3b3c241ccf4780c964f0b372a5f61421bf86fbe939d67f71eb08294baf4f7d94b3c3a0d1a27da91b8e64a811d16853853cda7951ae28826b3075aada988bf423d7d80eaf50718b525ef13d39a62f48618a03614a70a3cac781b75d2509b2f12d8cd1d591241eda12742803aac34ed3f2cfe06f32182e5383564253f06172d641d0b9700861d8d6fe4c7758153a496be1ebf8309f3160028e977badcfc32d0202b75c63a7389aca7f287cfd98b7558cdc9774123dc14b9b863013c3d25d7616a3d6dfb3b9f1edef8e0fda4e42df93dbf92f1ab65103073684c03b1b063405bfa0297729e07b9ddd957ad107be9cd73516f5725280dabe775f1bb260e1c670a4b148dfb016f7e275bc3be534f6ee434fbb16ee4143f4d30639dc707f5c2013fa65ca9ce869849a4f091d60ff4539f2bbcb66aa442c3343f2ad56aaefacdbc31fd37df947fa06ab3839bd19cb6a570b50a09c2b5ea56aa71784f002b354bd9a39b2a067272c31cbfee0b4d4289c167884860967c151110b7cddc712d8c76ea3bfd67fdb5feaefe7c88918217bda6023e344d44cccbddc8d4f665e31de248bb8f9b79135989bf394ad26808e5808f6a7728b367baafea3d821de1d0d97f6cc621ef5104d03b90675b43cc43ed68556573c7dc0d1f2274c483b78cf59838e21978c2596830a00957da8828edf6e329bb78260f888aac06a29903c9775bf7f8b25ec9bcd52a9be9733658e063dc1c24acdec9dc7e8346c27e9711a4b4618673622e4f03256ce29c95b28a1ca08ac280884407403ad3fa5ecc845394ff1eb402fe0285e8ceb3360351d532e4be0523bf08ffbb0b6079e2961cff9ae09781bd84a65772258dbe822980de4758ecdfa1d154d6f6207c42fb2fd295001055835c54e6ca20340e8d01cebb62551d8ffa23f29a6bfe43ca184d538f66df3f3d35df1694ea3437d3372132a54728e2106102fd5409f6cbac06cdce54fc682cf745fc74161995e7de038a16f5c3b8456748bc8f8fd643eda62b8134c0376e19bfbeed2648fa1494ad62f53e481c61d669aa5b70ddfa3dd497a2f7dd0805f840253b12425dbaa8fb279d8577f44416c49ab3572cd14bc814d3f3275d4a4b11d996037ae08f83a7a23f1654f28c0a747c70326bf1306b9a611fd0ad8db8aadb5764f70b22e89274e780b99dfa9d8aa049bce9425ceaf6ff45a46db9088b952e940d143ec9907eef20bec2bdf0ccc2a69ce1c7e16445265362f02eec9662a615e6b06cc7f108c1a027e4f43bd6ddea7a50b272a1b09167a85ab95d1e60f435621ffd52a3376ffb563fdbdd43db9d95f781c89163853622f1a9ee351efb4bb156798bd6916f2dc84bac078211dcdaa76250d908d6c24c882f74acfa29d632d7e017f2626c33dd14e269b505204bf4f21a8de34db646b99eccb89d1bfb53eef159f5ab516d5b220514c2fd12327d3c9594f0b5fa1e75f67f84468b376ce16cde152cf88ddfb36f02e3c191d32dd36cd367d80ccb3090185b8b5b30857cc8139689827ee4787f0e24321bcdc1dafd03016491873eccb22884123e9af8d7c6844eda8ea78bb1934d1abd397cfecaa08b81cdeb502010b4453b0746538b5f881de70f62a5b21c3051f9934b869ae1d02113e4999da2387c6ecde4e5f5c2be4025c378e57e9defbe024bb0685c78896eef09c9fce3c99c3105979c0161b5c0835285cd0d3aba8cb5ded1896be3eecc00b8c92a45f8ce116cdf294f2cabbbc5847bceb1568d950bdb7230fd1387f00ac4776f19d88335a41f7fa4e12a875a4093c5ef38f475e8ea56ce69c7fc167c80ab92802f5201e7fe02fe0513ef3919bdfc1f502f9ff3f374f757fb8e0c471d5030989213940047df3d0e2c87fbe884f774d861140754e33f35cd6b6be572e506ed6206834f01fbe8278356cd2699ed25994b6158555d4566efe9bd260428b6560bdcae9b6ee03f5705404520e433fdeb6265d09c8895c1a1c2183412de59936dd967c5599391ee0e4248758dedbda18eddb019d2d331fd443587cef6c196c39bcdb8d7fd00f57e54efce160ca39edb863ff6d49bccb55b681f18c61faf8d8e6c428ce0a8bc94127eb8059f4cb4d2e2e4de59bfb8864b89c5f8055844a1ac06f71dfa4e5fbb1100a7f939138216188c8ace0c15d4d3b191a1e4270ca81fe012db28a1bb21ed9881f25bd6f2928516c800a709b68022f23e7cf31a7d132d1a441148daabc613d4bb56b9bb9275c0f8dc2e45f051fe66bb542e9399b703e2ae632ae623bfe936f732e05e31fe96fe2ad4582617372545dae2c361c340f60d0de3c3c78679ec0b8d201f6a28ccc40fd964c0aee563f19e02f33a010f2e9fc0f8603f7bf0defcce8866c46b529e980fb560a961033da36071e283f7fd9abbcff952a58ab6c3f34ede726035b3ac7c922d0ca7cc9613dbb0a47b3c7b4c0af42d8b98ec61dd8f3f65e6d47dc6d9c9b622ad86e7bc679a2b520d9ef413517b1d8dde739ebf0a50dcef8d1b157a1fb878ababde01f636528be7fcf8177877fe41d837c99d3cd07b025ebce38c107f52a3c300d6adbde7305513fa82d0c964ca85c829281e525fd40231c98afe1b58a8229232151bf64a98d57fefb036d71b13a740f7544bb399236c6d3b20b7780357a45b115d30f38069f2f066b92b8236cdecbd384408b615a9dae783f034f06af057864a2780c0c0ed79bb877f54cb048de750eb7635ea1192270a99d479b42ad2d65f5270d0ebb5394f8cc38fe8dfd34778803096975a644bb6992e1e0113645396ac5a293757935e80c1694b4e3481023c437dcbb6cb6c69c43b688e1d4bc9068a4080d174151957f2bd3860cdd2fd3e2fd53ff4b3c9dc4b87267884c2c63e05603f10c47ae77223bee8a07ef5f938e4289bbbc29b9e4ab0026ac08b6b934ad74b7dfc700bd3570819768bb08d85af3887dd4c61523f383f807c90ec17889593df1d7502afe0f4582cc09ddf428c7e2872f35a03312a60d63aa71dd3e11a736f866c920aa087939d01486ffc52ae80c53111653c3bef43a315aec73f4c43986b33d98837bc93fd135dfd71a882ae83be416667632bb249ebd7ca07ee07d064ce8b6415776fe8722abe81104a1529cdaf05053a5978207dffc36b7660c643ecca13c5c813763062210d06493451c0b0cda45d4076b94bdc610d5929ca9ca99f21e23006fe2e5f0735d99b3b3d1a3c55b191db6fb0300e883cfee8fe00046bac8f24eafe4b36f6137cacb030af2b6cbf1e64fe13486885ed322d18b9d1c0964dbf637c41c9046d05b95316fab06d8c0ec92f94df134b5a87bc8801209b41b15fb7746e2ff3615fe40828bb50edcbed454272281306e74fa17b9ab456d484db2ca403d4217e52f43f35703e33f0a628b3808c64fd52192ecf66188a120e0160b02aa54cd437b6358111d328cf467b07db30c94a407c503d95b12d76deb6aee9ffeec9c08211c2c92a63c5c92902e3145a0a51b318775265342c69b7e22e5171af0629e2b50c73780da594218bf836df8c2ca198677388ea5719e6191fb68d2321b56a322ffdd1fa63239ea3e2d9f3a39736538b76e72e37e1f133190dbd64ad740ac1515d4d6e39c3218313419695acc1663d70ed80ef33fbad7bb4f0b7e2be8ad14f207a2fb796d3c0698aa4e311526a25a79fafae3ada367ced5ce2c45b4d866fbb3eea7dff9f2e39eedfc0b0b1199988fbef41ecfbe366786ba9f76be4e0fd33a219d1a403b163630c218627f0aa6b1837f730116ac2474df1afee36f6a8bc787423e8523f057042b21df3aed436c88c740111d308e558dc43c285f5cba99f63aa5734d09897ef1814d10fa9270b03e5c8d9cd897f1485f74ab230008c9c49ef2cce4ab04a4023bbdd8143587e48257a53cc88f6686150d3561eef13cd6cbd771b089bb705ccaff96299c41b6a5cbea944ca8259f43bac929d7106f4d133642d19333df0d1b453cb22df14e4d267b15627ce58d86363e58d0bae179823bfe19acc9965a09f9645db9638aba1e1f3308bf4d94275dbba9883c80be9a7ff9aa16440a3bdd93f75e1f5994fda3c934904ff1a12847de9c2c9cd5b25d5b98ac9b32f817743fa4766eb3f11bce980824baea18f8ac0ca54ba05785a90a20a5f6a4b85befe72743333f450b8d674d6365b70e63866dd7fd9626568ee5602335ff0dcaf3f27a0d0044f77372e88f33abc8f37ce5398a1b0f1d08fe182fa1ab9676172236a1a0acd5b64dc3736c1388e72babb59c91a050249385637c8330cfda60e1515c76fed2a6ecc72a28279f019ccbb182588eed10a5686aedbbc4603aac808b0850fb03aa45ac09c837eb22ccf792c1ca05f195e0fdf9fafe3f24ecbfb1f945df82b4b6142ff07951934993b061d3e3256080f7777d04e032b16824b0ebefc9869106d0082c71ba565446a194600321bd609bc3da11ee8f06c63ebe4150b58506aecef918da21eef30f47a74c192cfeea2dff70b6215bbc1554cfdcd3a4926c149d5c9b88861416506e9252e82c713651b0e07d99d3de6176b4a71c5fb9c211e6113d6292a302468792dc8bd4a719b4f187136b75fb214f87931c9966f31db664911e228db37cd7a99030a9e135e05f5ef8f0a2abffaae220751cab9fc7540124f9a6e92995be86bd43cf649a4184b781516a11231cdf4966e6c05c63a1251aeb664c5a4a54df6ed159a9840e7eb7550fcbdc1c754fcd51423bbb79584d72de44bb6893f51265c4ecc5aa11dfcae2b32638f68ccfd485b868230c86d2236dcd7118f248e82fbf0b2d2714818fd5d446383d26960993eac28aa55fb80cf243ba594b3a855081f2e75e0936c83212006261e7a7bb69af83fd7571e859c07d8f6777d4ba4f8f97a961224d11051cba8050bd3d71a16534251b8e89416a2ac3e75001e4121a4a53a9014f72dbfd264bab71904a1a59f7e8806ae52787ec288137a295b85d16ecefcc6ad1ab54b4b34dd263410fb58bddd2b5ca236f4b324cb0a3ad688c04e2a3ccb8490724f18159990f9d61d6b5ff262b5ad64427e77b6f384842a88077a34b10eca800c969f4597c03174a39e5edee84d4e6806b8ceae48b2ccfb22745e04b5ac19b5734c116e0cdbd8480d96bce5817d3fd0fdd1d200540660c51b2d4c2b54af463a27c16164852fcfbb8d50c5357d58da511fe85f588854bd7f7cd8f4d41f457c6d1ace3f80098ff873f35bb870c4a781ac5faf2728f7aba3580c8149cb78fba880a065aea41352ccec16392bfa7aa1386b1c2461bf47ba9fd9b88cab158f895474e1868e6832a7f3181d766735d87ce3ca6e0bd991e12d48a168065a05e276040c5a77eb8a1302784c61fe2e499efcbee8f3db81daba8900298f73e920cedc463cd85eaa4b16b57228ac2e2fe7bd8e0be41b55e2c4a418dcc4dec26a8f43bdf92061a91ab16059ae702175ca105bc433ef508f565584d3132f8003508e01dc35be8a7976c8d12885f7cb07a25e16b729ccaf7a07f45c1f64c8a788ae64df40d9ae187223c1fd0d2638e4ade08a0f84cbb61418855839867d2e41fa2b983f267a84f5b938838b143b21041a06a60f891936d83b5dfcbce19f252a3a23f170cfedb8e47e31cbd39d83685c02ce2e7c862269dbd7a20664db4239425d4c440432f6edf19bc14acbdb6d062e048757a06058e9f71f2f4da6d6650a8c793a9e4e41f5605ec8a5ee99b3bd2dabdc5a96f26d591a1a95c283348efe6518f9cf6e0b4ae4f087132eb4b0c24788cd8997d6946042f61018aaad9e1a8ea2764628e3c89ea1e13cc1bd8d51cdc38f99a51f3728d825f7e30448587b179b17b8ed07a804361811bb2051c09525b427b955598611f8954c31ce9473594e17c0bf3a80169797be3538f10fa1dbaf57c02e63e01db5f1873b006c86d3f0d877444fdf06ea00d1e61df409b64e602aed675f3a0aa884f1182ab1b1583fcc110af86ecda02e1fb0005e6aa874a0fe9016016d4bcc4eea4ea1f07f1cc4e70219d04d708cdca301312b420b345998b385aa131d158a4128180af7451bf1002bd0a6045c2bff39b7cc92e8e2590b86a6a75452f8d593c51685011efc44c9ef697fedf369621b1618e0ec80e3034919bdcdb793d9590ed058036e19c7dbf2216cb4f637c77eccd82a001c7bc8315280a2263db6dafc3da712764b068101bf7815bd3a976f6a71369d084706e1c56bea1d4950fa18304aae3cdfb51171cba6c69faff9b0e97639ac8e0fac69fe304bbd4f57d4626c493cd809305db98d9c3c0411d25dd8d7b8771f89ee62b5211e0e8594b50f8f099f313d7792189e3b3158ce9d1a30483106126a9f8a2f29f5f0292b0f5a4dde1added2968a7446dd73a935d90565a2448fc922f86482be4a5be5de21fd550e66feb41a1834064577750417b8890c8a08c1cda9139be685ede5e68c6da729fcf1c75871c6fe78b248087d711284e4ebe86f2ee0d022d3131d9c7eb6e0b52c639030ffc74d5113d1c27cf8ab5174e8bc1709685e1143f6de19bcecbfe9d4b9b06a80288c4b86be7131240444f8339cb479e96a6063b448d0da7f9691e42ca1728b40d672372e9f9c89888eafee00646745f8f610fd9e7e17cb4e1b8cf41f9f3d99bcca253efac6992ea868b9c5d812411f87541d6cfd1049de6f9bb37c9c020dca09e4a3d103e402b4e4295b2e2c4a02f373e372dff9563aa2289699dc04b4820524ae423c190ab8a180f2ef47b8907fb1b4dff4fbd55cf87622c20ed57602d068b19c58a754bc20dc53f610e70ffc4bff8a6766bd884c2071d6e18f191a9cfb283e4846711a2f34a088d062633f78e78db724a3ad1c5e8ad71f5263f13212b59d0384f125eaab42ff6f103281fc8287c706fdc9d83fddf411e5ef43b2ea59ef72d91fa78c5406b8b37d17f1406a1fccd2b743e6ade897f9943e3221302e377107b2ddd885cff84785d88acbdb5927d0db48f42dcc51b95c72c5666a51495f0246ca80cfc39778dadb6f018a5ade1396600ca2b0554273760e3f486620a8438a2b74594e31494ee6be1a238853582e6280f359c56d0e283d85629958dfa4fd24138a9c9d1b29f7562a64a3b1e1c75f2edb22c4bfbd9370385d3684e4c4277fa81687c3ed87de0ae2cb10c7807872ed533f06cb55c89ac0ada4bb12552073d9b2656105b91f6286e49caa1cbaee4954455d4ba0a6d9632e8d969b132590ab59762c3a50e6c764dae20b782e655d492d443cb564b2b292291e3d67b10075cef950c09e9f2a8660bf68bc45bfd59d23e3225aa0d41f7d650db80b059d5155f03a7c97ca229c05b1579497871791982f4a5ef872414d844e930ba6404cc3c982dfe89c8580a3acad2baf0a2a4bbf36f1e5de08b11c68a92ced740dd9e28f1901d4c638d151655a2059e2f3b24748ce3a1f7dc31ac652bbc12acb061dbf397d30b735a98a974d1c7dfc73de98ac6bcbe951801cc192fd21b6a00417dfd583af0c56cb949850737cf0ea5a41d898a9607db790d449a7758b5de9775408c7b8af72227f72a8181e473693d822ea5bc76e602909ba2a63376e24235f723725db4166f7d1b426dfc9e938285d1bca74db05d4e5c25006d50618fdef1f84260999f72d1a72a8f4ccb8292edc979dc8473a753964914592ce78ff0241ee0368ab72e3ef620dca28e34e5a548eb5286e996fd8d2d3ce262c852f8f38ff16cea9128d522a696f8db628825bbb67dfc81f65376784e9fc70e4b595c4d49b7b7a6ace42d53b3275f1f697ccf65f2d92bd54c3d51f3e0de6370be9b102b43465eca552e263fb908083dd5c2003c8b93beb646e30a6b0426fd2e57716f1085010b7c94794b35d1d7200c044d9f404c9976cae75ebb86908b1c9436eee1073e76e84f91f6f24a0d99492d0be60360ebdb15f81476633aad722992c1ebb27a64801a6bc7800b74e8b9adffdb6379e1dbb561acc545242bf4986266a1bb43e49c90bbbaabe40aae019fd11782c99e8842c6449b46e9d1d569e833a474c389ef797af41a52ac0fc904770d49123de43dcabbe82f04aeb171352e9c2b26dd13ab47928804a2f91e521e81a266ee53ee1c485629dbf6035856e796ffae290433dfea77cc40a7a750c7d55c9bb1e2ac5f98110acbff935ae41d3bbdbc45abcef34b013ca1522f914d181c5460763810bb20577f3fa3a860e9230e3a82473d23b7bd04b0e18d14f71307ee01cdbc1ca5e8590b8f20e85f44c6e7eb110e7c3a74e145fac2b72e9292a9c874b18ed018cd008a97dd167acd9673ef5325dd03af6a9b1d7b434a5565d091ac0ec5c8761d7bc4c339be5487e3861d142afcb387c9fe62f0d8a680333764121cc4f5ab35b83dfa786e5fca1c5f3429f2c5109fb90a7b0d8cdb033ec0692f00cfb98ef0b58455989c96a518d911916c3953fdbd6fde1067a033ce23b229412363d3cb41a7af6b0aacad8ac4bc11722be21b544093af31c31f826368aa490784ae703cd77c454e39213a6e5440be34db02e1dc400701cac5de25d14d278d99c0e6a075f4591cf01efb46508d67e7f654eccc75377d70403712ac73541166f0ff2489a8ad2992d8eea7edb7e11194de41343aecd6809baa8d44232fdc574890421207c7ef5b6ce4c600de75c2193d5b40aaab91476b9a618a9299d8ed66155692b161492a5e8aae5a91b4af4620dfa559f385f2cce5da86cb0778ed2e939ba19790a7c2305c69fc28cbc123862c38130ae5706cfd8455d3a300bfce46a5ff9559134cd389619b39f6b544c378a6810bec82609e3b420bc7df836872ad6037e47248c8c6661ee21f412594418280020339ae32cfc0e1f46dd23f486ae02deeb7647a47e92bb7c0f7fe184b438604c6a7919350642fcc57461b29c37713bcb1d26bff8e61f873fef8cb1c1620a18a20641f98af8c6223d7397cd4951d7e6aa29c7efcb8ea6e7cbffaff445ec3866703ee63ad96c5b17feb5f6dde75b866e33dffb53e184a2dd918b15980e490e37d0e3d2d2214bad404987148cecee746f094bcc43131ae7e6d375ad47ef8c1f7beaffa485e52f6d04750f08968510c1b0f694cb9840499c2173bb0a6dab775436124b8dfdde693a389cc85654c1f76d5e609b06c18910d5c710d5a7130ee974176cd44346500d35cb9be7c9fb7aeb5a1cbcab526e0ed6bedec8e3e631669d0c9a321dc8ce09b5b5ddcc89156f84bee4f2bed4cb8e003bd36771adf029f4c403ece5a0c234a7fdfb0d61f78b8f95485eca371e7f0efe596c4a953eb7bc31bd746bdfe7e8db9a26f3f971055bfac8d5e1c78fbedabf7dafb68ef3516e8eee3ddd06ead047110339e6da042b867e27b82893b70010908ca4750cef60dd2c89384aadef407f76882bd7d3408af443decfdf85f375101036c025ced1d52023c0afd9e4188353ee55719602c6dcc7df892712b5faef83f677f7cbc7576ffbeb3de081241f404936ffc78dc32e5388f29827ccb80d2cc39c602a4a5812b90eee76001e43b3158aa020cec0865c82740db5b740420d6111d732499cebbcf836285bffab4e719ce29c22ba3d5221bad923ba0088f3eec1083e8919ec622d19ea882d89fb9f352e349fa36ec16a63c5bad7049a560414cb25131e0a6b3ecf24a87300a1636f6f00731a779267fb58e77375a83b0b0c8f9123adf9216cb89ec903de4e1e40b2b875bc42c1746e6e4bde59dbc134b6fe2de5d23ef0b979e987e80f74356139d7b5a4433611452fa4fb8390db39758a3774f23ff071698b8fe806eabac270af7d31889c582d87cd48e4488074934f5b81f164e4acfd0bbd0ebf2c2fbe3c3434b4920306112a262b7ec01907bcf34e8c974192b421e85d5c004e47153111f4188217b03e26ebf7b906cc8ae61f445e12d3311c1a6fc249a750723e71c4192feb0ccdad0dac109f0aacd2d67651194969a85e6d05b804e36716dfad171903c1f84fe239c1dcf4c285f521edb2d8d17f2887d5550511e83f0657680c6e4ab4c2589cd991b5d306c73f3c90eeae55bc9c0b6b873647ad53d767ce3522847f9f8b21cc129595688e7ef7b12b6128778201876f735a2fb603af7adf95d26afdcaff059cb42dac601bfd7bba1e0bfbb54f9ec80f41ead7bd5d9aa36e82a6e52c3e4aeddd2d8ac1687fcfd83283f9544c61d7e3d2536bd8d9247a07cb8f9137b8a1c1970f1b7caf5e64b981b1aaf9ccd5b777557f1345c3be85e372711a3f045ba3af8d733a9561e63d2a00b088e1924057446d3bed82cb193f521e438a014cbe02ebc734b69c1c439040bfab8e84ff309cade4a080d9b162c9ed8a7239d13066f4ad6cce07fa54967058768e38eddabfbca6bb7642ba6ded3a0b1cb5845cef86d4462bdbac38fa094827019fa05544806171b289394a3ed7667d22d1145ce1b6c25dd9b2f1c080377fd72c1413c8110046bb54e2329989c67c6fd7ccd6cb55b7a2e2c5354eed59c853440ad328b907027c2e2a6d20e2211a2d2cf2e7c351c1a0023242e63ddbfa5cfacb8059fd8bc8b2da719b5a95ff15de0f00b7d7fa3ede4f99e0b705625513d87484bc57c34f563f58e189a23a111845e4cb590669d09191d599bee7f2c5053f71e73a204e4ccc43fcae75ba678dc13401189f074996a60538361bd97cc40746a90832ffefd1cdcb110a9946b6872df2e5e3082961c93f399690123be04901ee7f817f41a7647a975001982a11fe571e396da1fb63aaeffb5d52637d6805b637d5e64af78ad96f38cc21aa5465ec3f00fcfe879df035275d0fc2ff463a157284718e5b1acc7ff00125315cc44348a7003e0bc25dc5331b65dfb03ba19dab8d6e4cd42524ca421952e6a40c6ba8ee8056b2c899857c0ae1f8b809f4a0922c4ce26f4a39ba23cfc66d0124afc700a5397ba7f075d419f652c0d56ffc0f9f0b0bac15dcea99b9132838449726b2b44c718e5e44c508bff9965d8e93fa552a2165a7006f0862da8b48b43f3270403e9deac8d9d6bfce7582ee1a85e4157606299c0fa20b411f5bc30f71951cbe158660c840eee2f780500a454b05dd5cb44c0afe75c65e8268b44ea035f691dd3a8e1ec94d3f050fc32bb29b952449d029993a15451d09a63423463c1fbe87e2a62b86537bb099693e6e132dfdc9f26bee10a90ce0eb7178e0f3d649a7a68d41c73eea1a05e6e321a15a60ca2a60e620175cfa522031ae0a2a6a07206eb985134ddd2e2c57ba8522443db1e536a56bc308102c3773ed1e00f7452af437dec3591381b05c10125d6665be00a0f9e265ea239e541d41174e3259530aa0a7fd1124337025c5a31a4510a2c98de039cf62934ca6344bb860dc5ed3c748e472e64d82ea0daa3aa06a29d058132fb7d90c7bca0d1fc5a0a5b4ce4b882776fdb396012cfa2c2a9804219198b5a8625ae83a21df22ac570496216c9aaeb79a35461fec6acab9a761698e2d7db2a808e2ae52f71984f14d8a3822743eb6320f0455533b7b71b27189cc43b1b906bdba69962c9a896a96ee35ab27f53967b2a9731dea0c7e603394ebdb3067268cb16465a898359f9633efce0873ff6f10f7dec631ffcf0873ef6d1877efc631ffae0433ffed1877df4b11ffe4066cb5c668edc9aba3ab981fae2df61fd3b28725260520ccfe8ffce1f95b65643abf9bbe6675dd62286462be1b1b6d8b84404acc6102998839a574b09ab1e3be89170afd575df3741ea7de72cf8ba1fe6d623d9d0e006840689b4ecdf152755dd86bba15e4f0174c0a27286376242bf40d1eb3557033fcc2064e0b5ae532989d09f0027043c42e961d7a03e1ce2484a7f80df88a8cb9dce73f2e00f04fd4d56862f91e0cf2283a0c6ae57a750d095b1e71870842d9b664baf73a9ccc4b5f3058600df29ed18f7699ecf4905cda724ea197997ec9f2a5af1c5e1a29d662bedb1eba47592a52d3c34acda6b6ec43afaae5a0f52b4e28bc3453bcd56da63d749eb244b5b786858b5d7dc8875f45db51ea468c5710302c741c384f0398f98a2093e14748cc1e793324a01e6bacb8522a7beaf921af385c2adefb9273b1006f890c206ead7ee24aff3767ca1037a21a1ec938506ec936a7000c737b950cb0842d6798ae216c2029672fb680b7ce6d03d162d20c3c39c9fd605025d0546ba575d5b0a5a1f455434ca701bcd7cc1779b359e762b984f75870c17c9f10cbafb1e07ea39ea251e76868783b0fcafd657220b2c9a3018fb0bcba0efaaa301f619824549a9816153a4ec862d2eb0ea533c45546ed60a6055e739515a4d167a08e41ca3cb6b430c171bb4685505742531a78574d0c86cec2a002983feafb76c8cb10dfbd348a3f70a58799b43d786dced6165ba3b84932e92e4128886687c0a49f23cc37d8724be0e3b88f73bd7a24c6755d31a6cacd155b81c0a5ea83325b2faec0eb4e6cb3d964753708154ea8928e6ab30d9b02125228511c91743773ecea6e62704d47fcd712f28984af7daab77f8aa7d81e2a3bd7864642263e00f9afdbd14eb0cca9ced32e7ceae1613f43991bcd4de9fe62d6f2c65e2d0fe1a26e300ddc89de851079aa961ecac7f094f43442fd63606f00d6fcd9bff693ba292faa89d0fd8099f427b17b8482315082ec5c6612967a6c13dbd1f267dbeb1d394531c6e6d6be593f645dd3a7905e728b5cc512783cc5001b97d2f0ea6bcc25550ff3888c0225b996a086881397b38702065633bd5bf4e54023ab6a001eb56210577c4b3cbda968644cb0c6a769ea828ac902a56f069c1e4ff9821fac6c3dc40710b825f28b9f40fb933d799ad96aaf231e9f192ffde667576c3a958b03206d72afb113b12ebec86810fd1643c7b57d0ba4a74f2b61bb032f750d804613947a37ca6365c0ef4e44d3291cfe2e53a484e6b9c8bc80e517d7b4c0f50eaae659abd7d42976a4adb133c0b5e76b6317921b593579322035d250d541687ccc2800e1d4ad5066cb244dcce73898be2b1cfb5e8a88ecd3282005a6d95140936df61cf0e4177a80100412423c63370fbfffb062d505811a8203b5049ca9e3ed4bb878383a8eea3ae687f3ba3af36c22bbdbaa0ce79ab5fdd65c6e0c0935212923d22b1f2b969c4b8301bf6f417d664338ec405679870e4e69d5a53d05066c6b49f8235e71348dd6b980d7a4633946843ad563df6d59293f90d166017bdd41ce7a777df967028e0b0eabd16ede5d4abf4142141eb4034841da0a2d0a786c810dde91d24f8765ae8eb1df41d8f3a4bd6197436bad7a155258022d29b044408a3374b451956c289d41d728b9fa15edf814a7bf11fb5b8ed5d3cb628d00f9de52c6093f6bd10a143b5f48692f0f756f86e4ce81db407a42ea570eaca823c0957acd7152e4562c134a26438003c10e49e1919ed4fef20f6cac1d50730604455d3fb817fd022013f13fa885cf96c3a57f751e28c9c1f5d84e8a122732939b2e024fbb1afa9f03a01e944d094fb544a364d964ce7e9d688e2acbca00b5ba14dfdc009d332b10c5852ab9b4c061b3f345410d34a85a24b0bc63a4397c9ef3b8a94109b18bf8e46610a8a3ac2dec97b4b58a55be95d75ba07c220b7446852dcabebaf2960e5fd7946350a83a013027a5fdfe2696bf7dafbad8ae289f182bb6b09554026245ab1d8ec935bc002cf946948ce6a5cea83388627a2a07c0caed3e458bf11aa2cf172ea17e0a73a89208c1ca541faddd21cf31e485e72fbf0ebe1848265a5c08014c016f44c3acd69190e10fe4fd1395e6918d5dcc1708225945937846f0954825c723a2a1244ad8bbb4bce7dd3bd00dee372da4c2808e471946fed966151f89ee77a1c08343dd335e13a72a6cf4960ab0edd56834a5d46fe754010926e123439cf3635c33ca7faadfa17ed8f9c01ba139d156033a7d6c54944893ec455cade44778276d1dc8cee0445a4a9d9068b71baaccc34a735d6cde6d9c749994cbbaef5c34df5e4e6b8b6a8d4a8c975416d4c5bc4d7f666fb2d3ea0bb332835b208beef164160b902125c033356d4c882c5b034ade3d922175927a686a4871200f53c1bb644d243263288a3afda4d939edcedc2745689ead178a08017e11aec51c26002375bc1f6fe6dd86ad5c05d6a1c4d5273b41e0c15ae86c66403bf403bb32694c14f0d2eec56dca3618732103af6ece875affdda22bb5135729c85986e11fb61840d05701cfcd2ed536f974053bcf3bf2b57a857d92df84b5235e1ef708199914a16e2fd6673f06de6be4491afb4949f9bd8051240ff0c21fd3c72567a621579871b960abdb0f5b5dbea564354cb32dd2f2352491d9e7cef97b9e87e4b2af99648f4b14cbdacca5a61fcc14bd01d4a1007551bc82503bafd1a6027913c572a791ff9c2df12671363916326937e0fd388c65e890338dc060af56efd421b439ffe1c4ae5b39a5e4950a4ef1f41d3c6ae0944d1435da1f0bb1bb07ff2951453494b8772d425a07f5e1808bc7273baedf3d2b3fc1437c9f1d9a6e8f3f4548d5151473f961757cd7a0299b05654e01d67f000d89083d89cdc145238d0e9cb2910a12cb5777b7b7ef0e5e081120621a0c6a6720d2edc614ed123833577a1221e6c632d108f71881392553580190917a5cc164790a29b7e43d8a5718139725c950d1192cec9a652d95b9841a974e0b254210dad0e5d23ebb85dc8e8bd4798a2857181900282f9f47d32c151f9b2168c8553df2e11729dd855575fd0a23f252fd59f616dbf6e1e4348acf14bc3b57fcceaa97961763bb8b64564c47257c32473abb414ab9ff1957dbb4ffd237728a5a57396987c7234f1ce7a6ff78914050b9ac2f2a29566fbae727fb7864f9601a8da1b924069b60b9e7a5febcd96e4016ef21104c52d541dd5bf9fb90fff728fb5a3810eab1a639701392db7ffb2092b32b5a995529293cdfbae40d22a1eee2be1d2839956edf41827d8e259d1796c5e0ee8d8fca9b43fcdd39e8d9820837ce69c406f3dfacc87c7e6920b476222868ecdb18f0f51c691b43936a77fa8bfd7bb4f4921707a98a03e26c20c0806ca04c38899ddd79a1ffeb06969a20f769717de3d3ed092b8c3e62b69fecfd58109692ee5028476055e53c4520d56301e55493a293862b84fca89616c05cc8aa1b9f904946e2e6d078cb5247007a50c8dc6c161e90caa670841016015ed4087dd695874ffea005bcbcb01593fa2e41c9dcdcce3d5a9a39b6dddb111425adb84ec2de5de01ed0c450d780d2d7e595ce546f40ca9b2526f39abb6d4abd9582f0f8dd2b7e0de5bd1daf248e9e753f5927cb4aaf2d06c2ae5b3de684f251e5016d547db54caafd38d1dfd68537547ca533cb4cb43b3a6b3d4be8ae92af5c220d2425a77989efae9bce5489d6ea4ed2d09691bd6b8f2c8c937829007ca76731740595877c4a7b20c9a6a843063d88263f58a9f455a5db80badcb559a8b8f1592e0746a951c5844cab14ec1328bd5947a6f6cca312efe61316291a6312e3e8563390dbf68134fdc4a732af2304745e59009cbc8abbc5988cda0a6c249b8e1c82c9db649f7d1369e3af669588a16df14c0c34975b278a8a9f78a72134bada40e4f39d323078f71f1fa9392899d3fd99c0eb9938905aa40b8d9883761f5f2b83a521eb947779c4e6953155aef057fd9a47ee2ee8d89bbb1292e07b4f329dc45d97b1dba581af4badc6c5c6850edd766033efbb5e1403581b219534ec2b3805781a76195c3d7bb82048bb3dce55dafeab1b2905039ac343b9a4061ef633f1d7271befb2df02af02c9e83be8f713ceca9aab0c3a71e55d853dea64bada95e1e5685d554bd3c78d83e5dd3b7480f23f6840b9b811b6b3a7651a7aa82c7de18773ae5aee9d7e57604cbe9e56604b42c3f55ed19063704407b7a36358ca37f1b0260e581b2a7c324587eaa3b584eeb8e96370fd465a9b1b6e498385aea5ba93edab2787cd7fba2aafa68abf278b821a182048b7a6114161e6bd826783af656818f10eb9f4cf546d8305e5750084f2f9be361537ee22eb4a7f766d3d2d855cea5babb538e716c3babd229159594ca5b3095b3a8d4cb03d5559ee29029dceb192358a8fc612c544e370337280ca328ab7294699ed2f7b31b2a75e527ee763a2c86b9b050b9a8388ab22ef6f4d48b3d3d45957296963f977a52d5eb6244a752ea89435d25e5a5af60984af7e9e196639efe6d38da080c4359ec7d53aa0fb63ca4a547a1cfc08dc58e806779d8fe892bf580cebe89a3376147b989bb5158aac3deeb58e581b2f49707caf6afa6344db9796880abe3f2b057c511045403cbaa14a43fd2133854201713e3c643a11d4d94cda0129a0fe865b17a264551b6371b257c406f8ac5723f0bb71cf3f406a728e0cd8c9d1392e419b9bc977577771dfd713c5a079b42e8d92f3ca9c22021d82deea092fe791f0541a1397f61103cc46a0713a39d47482728a7096eba10e5d8abfdd49882de6e56b855559fe5a7e607cb4fcd76ed17f2700dacb77e5453cf6e1ced55137a7bfb0706f54fcfb0de8a1f64f9cdb7fa0190edec03fa01ce0f7eec03126a12c33e201f0cd9fe794414e1cdc4fcecf4e0093110c2159cd4b0c5b08bf1016eb25aea019d403e10b223d2e18d7d3eda8e2a240194819da627771de33a86896105055161f95049fff4144dc59223d078f98b3b18d45374eb76921f235018c4aa01950c491e126b36a03b38d7d1e9f11142512f432c1f88910bf2c017d40e0fc1bfaee044e4b8c39d0e8444454f98808dc5cbba1385003556a14eb36e0aeaf40cacb12ca0aa67217c439db7e2431c863814ea409cd822e980251cd9ac359e368b5a6f36e4b1182f9b5d9a9453c3da66236d6e36e449da68b321495ab6dd901f95de2ddf32da217b41502ad4b323d3908913d4c4298a4f78087e362242065e0cbe132f06bfc78bc1b7c1132f065f0387163e815d7dbc184f5806c258c4324ee29357555d6d40db84851603426f2c7a72c8f225d1ec9ad109e8e5274caee09a087f63d164a09e89af080e25a06b6295427309f4ce2ff04c9c0b06998c15c2a6291464ccc26e1863969ad1e3b1eccb4bd26187e1ee823157045eb276b130dcbdd89e71d5b864c7fc411e356c3fa6aedaa84b53dc979265bb331a14958a9189dbee94859c0f29ef39c617e3ba5829250f960f0b0f39541bc0727737cbbc9bb031c6a8c1086384314608218c91638c31c6182386611876cc47b4124208639432c628a58c51ca1a0c5f0ceeeeeeeed8dd0dbb21ec8eb9990202a10c391e2f4916638c31c618638c31c618638c718331c6084140f9134208619489cd7dc5151042282184105678569cfc1e8a7ad1a24c8c918b90efb313d0c6fbe058bb96aeed86de770cededd1f551277fae01fe0b383fe064ef85f9ef41f8e0b38791bbc95de3401cee604fdb1a2c0abaf0091151132744f4cea21f4728fc1b6a2464406c732e4470032b0226b6b987c466f00357b0cdbd2bd88c8110b1cd1561b306128608e40eb63900d84cf6d8e65ed8eca2826dce85cd3010a8c136c762b309c43607c366238d07b6391a36239148a507851030b1cdddbead073441b6424bd9c36a405f2b0c4aec954f745e0b0c4d2c5f5a71e55c4170e430e1219e7d2ff7e2b1ec043e814ea0152fcce3859bb013ee92d8cebed6d010fbc4bed8d71a5262e10b82fdd10fe86dc93e287c20897d1b13150d05b130ec6b8581498fe5c1be961872ac18945817fb5a62f8b13e7de9f4cc040275c207b5b20e2f065fce61caebc2306dced9a3edc668bb013f8a315a12495e315e9456fc805e38f2c9fb95308883152c84d032336c586fbceec2969b8d1b70d668a1b4f030d6864e9a70871dfba5c3d8ec02bd4c311650ecd807281f5aa97ad233f2c9a5f3f8d2e9c2abfcdeaf24743fee02ad6361dd017b934f80d0cb444f6c764e40d764f5be225b6751d3ecd5d0d71a038fbd4c74798899b04c1cc38ee57313b6c25e72cd3deed8832f2bdd28ec5300362fe18ebdb144748865e699899af061057dc217161509593e74d2840f08045ab1455237fc83104258dfe3d13a2f543e296ac25704ec3b6cd8f0c566562642c24f98888bb8632796b949ff805ec932f7d2b13a2c23445a818353c36fa9e07ff1a85890c1bf971cfb80ae20b233ec03b2c3908575445f11993482538287e0f3d09e94cf7fba560c10cbd20849f16395300288e51f21458fe56b46b0f729c151450fcb2ce1b13ed866205a1fd067b38c779ec551c510967950f80010fb6cc6f071094715445846d587b62b8e2a8858e61e41f65e46d709ac0e76b8c31576f41e1388073a80d951cda436596647fcbcea2a956cf10c62575d615b64a6d3982e57a3a71e50ea2cc7def2c733dc59fcf10ccac579f8f60c35597c748eb6d49b7a4a9e857bbc5aa937e582b5d54b7988c94647f97925ab76c5a6bdc7b5d5275aecca47a37ae5b51ed733b063bbea3bb64bedfa1d65d9a8f6b83eba76e547db65b65ddb6a8f15d475540651a812eabd18f4bd6ad4595858502ca854ea28544ae52897d4550e0294930e02d449281c8b1447d3347c62e1de5b61d84d1c0bee528b51f1a660b1aaba8663df8bd1a25e5595d7543876c958948a50ecda350c07f6d125d7561ed3e25b7976ef0f2beb132db6e5573efb89eb71baea99cc64edb1b178b65d7b265baa142360390852df32162ec334ecf4d866737df20c1023a58c854badbc63a9efd5ca4745e8fdcadf33a9540a04294fb1b03c854a3908e85bad9c45e5205839894f7a3fa66752deef7a0635437aff3da372eda711c75d0eb492307d74a257e15e4fda2b3e893bd19bb81177a3a5b5c4ed88df6e4a4668767885bda36b9545b573bd59bd510ad299a4c211adfcb4d19ea188197c6cc61a0630eba3adbc21a795559563f427a09df5bae4e31b1845df741410d35038c85ecff4e1b3c7c5f996b362ef26ae0a82f756170afa180f82aeb17f1d04f1430c717fd8fbceef09f10210eb7b017887917b353c2dff88ef4b68a4572f4a336459d6da853d5ef319e98fc79a5e73c6ebba3ee755a71c5d7217267f45d9108b495c979a9c8d5d8f8fbf8ebdde72bc6097188bc6eb973cd6988cfdabbbaf73b2bed8e676c0f36f461033423627a5a94e26e14349ec1a3c08e28449111e0ce9d11c8d17433e43223616e78dc2b66d96e94b5943499f44c4720f843c808f1db1d8aff700feec4962e7f911f6258a766d3693ce6099c87a443c1c3e58b8dde85f7d3e8417f7623bc658da6e7076d2981b3d72fce69c90fc62b3156dc46da3e6e26b94362448ef19dc4979ccc54744a2af7afb37068978be6943a26b7027cf1c0d77b2468d6d43229e36245a624692d8679f55d91ea93e968f15a66a0ccbc4da03ce60d62302be13e2acd002852b3faa9786957664a5f664e0e5e993e14bf9b027f18888cfde94f658a6473cbf3e016d478e5c8907f473b381d87644dd71fd3afcb5e5e0cfcb0dc7d6837b022211bfa3ef035a3e05cade4b167fb1d831febecca81d72d032d7afbb3e7b067babebba8bb3d80bc55ed7233367dc12c6c6ebc9c05fd7b521c193ab7661201022f4f17028c60887b49727739ddfc1b4e45b79499c6b0cef017c9312a963fbd95322e3e42edd416f7adc72300e7a138a90ec3121c46a1f691ff1699207f04b502872c4968e6d3660cbce7a353be368d4f01ab783b4e580458858be766db4e1185d238dae7123173baa775a58fad528dc8172bae5e0d3c70d070a1fcb9adf832d4bf1479961fbbad847c4a3c2ce973a68d4402c13df36bbd1ceb921d149b8cbaad64013c58e4e22713dfa8a2b3a286809513bc109b243c4670a20254d588625900c8583b6811845b3d6a60dfd00e3d45ca7619427e3961ec5849386e11438980b452c6b70db6a0f48eb75a90d1453968402da40dc1330af8463f9aa77d84974f44cb7de8a4ff456fcd7ad5209a78453c2c1c9324ad43cb589484551a8933450b72811d77b598154d452197a332b3a57d023a23fb940c55085f5b99e746b45a7df8ace8a8ee553229e276f5340d7c4d3f00c02ea153644db60f9720e96ff3a60f9b03e2024f44e0cc32650af9812b11ce855a1443af6928a8632a15e71d7cc25d0ab3264f9b66be4ba46c5a76b548658e6aaa8a8a830e189515c37300a668c0173385d0a4cec10f641410a452ce9d8762cd2908048f566f11969bb213712dcb8cd8654354efed1b96d1be9d3b46da4cf4964ef663a6d27cd8f4e35a55e269d4edf485b8c9584ddfcc0604e8cc246ee6ea4eb6d2fb41bc47edd18afc73c22a9ee981f3ddec824ca60903447a4c31a4955b5fd9a89e9156b38e0631227552cc60bbb717aac3be247d74e28310592b2ed06fc0ed2e9244822a5d41b238c3f5d9b0d1639b971d0ce3967b4db085e963e49bfb868e2b093b8eb340d65cf34ed1a8352616934e16823c59acd5f1e1a0f8d342ba992aede48486c755612acaa19d350b3a45fed2cb62016fb8e6d443acdb6d5cb43bb32700349c0497bd9184fc3d1ceeb76f5a48a19e445d99e5262d8fb7a360d355ed283022404af61794acba29cde7416ee3c043f854bf110bc72434b3fcbc0595db67a797c85bb377665db544aa56ddb4ec3a513f76cbfadf42420095ec3dede7dd80383280edad2eb97b8150ee56d3a0ae5a5a7d8e55cbba6529685386183fe74e3747a96456da31c0cc23a87421e11ef11513a7fa4047aa1cf0f4cfd6ef007faf834921c00d987e4063db6da8724074236d50293402fcce1a01d1d81429d208f8659f062f04b0f483de56f83b5013f201a7c6a589e72d5e48e69afa0cf5b31cace5bf15198a5c7a728956ad936140a552a6d2a2b3edaaa6ca76914a77de3b2a77090a757a7773a0db7024e270e3b0ae744b437755f1068793a96410287a488909e5dc3763817d2e8d89c2323b81caba9bfc01d1fcbf0c81030e0c09629b2d081d9859dcce9f24283e608f2784134a5c4ea2ff182cf8441530f0a0f118658d67492404d8765fa08965ddc457db5711befdee5801647153d52a7672e6a4d1c45a55cb8e30e866360cdaa5e3db187ca1e22d0db5d4f7a863f4447488ee52018ce0c2126f6c78a2227444d86b0252cd3e21cd3594879268843f85798180be332bef96c4100a8a9181844fdcb2f58f817598899421320843ebc15ec99b32db49a4ecf592f7620cef0752c75d7f862c01137da6c465d0582bbb272187844b63bac31b88ea8c6084cd5b88bf4a5871f6cb8380c94c370f117dc65d95979c4d8168f3116ca38570cc414b12c2376b0458d21c2320638bbd47b635dee24c66d3e85720cb10c104c5846065157c43247387932ad601925ce1fe1b00c0fe78f808c724641588688334faf58e64e3b040d6a61b0a8f57165d91731f645b7c40b06bc5879e1e2c50b540f3e412fd4bea4eccbaf1e96c1714e404c4b0c4b0ca928e6f4830f3f6c3fe8fc314500cf643ec79a306fc42177d9490c0847ab5f1a00f80d40007e5741fc72357e5b043080df1101468f270007df0a7e00dc7b2b0170efad6a70efad82e0de5b0580830700b7e2e0f511f79060e021b18970bebe1a498d11222a33f1e999ec00a751ef54a997b2a83715d433998a4cbdf4a520cb2e18506f6a897abf807a3b05d41ba3aa9765efc8a767b4205250cf6845a4a29ed97450d46746bd298d146449b5a55e9a807a537c2538e68163219dacd9877ae9a66379a6de5412f55204b8e01fc195784025e418888358c0cb905159b48391937037ffa690dd9a1dfd975c890714be2f25c4ba1cf58968bb8f6c5e59b43bc6b10f7739b867dfc9e09eed0e88f7760308202aff0c613e0bea1906c2abf92076fe00f5ce7922eaa5f3348ae655ea9df32ceaa5f3a9acc8f2359d9e8144de6abe889d979953dcd43c379f322fc47c8b6b41f341ee9c47d54b87d8795590e56b453d4381b79a37c05bcd393fa35e3aaf6945739ea52eb1f32d1507b7f96c41f33ccf43bda9930f3e5bbda919946ae3310e371bb3c2df780ccec639eefe76427037c65e4d8705c339117fe0ee4585e5c770f76a8205b1fc1eb88b15b91815965fb93b83cc22963f047799881137b80b9d0c61191b1bf3289bcaa2d366ba4c765263c40015def858ec5de2017d41bf8eb00c03b1209c5813288c9b0dd63d7297d2176485b04c5731f082a40e5d1daeaaaca91c0cc3b039e794390c7b601111c77269ce430827c7232686ebb0430e9b3d31ecc58bebd9db50fe62cec6b01ed81c8d50e631ae27f616623bc9886b9dc6e66c154019f0a3bfa8170afbe2906b21a37e41d33d30fbe2c5df66f3e2347cbdb850948879a3c923c6621788b13be851c7b80bc4d85977a49c6ee252a7a73cb3287f8f86cea0b81ba3310ba38ebac63233ff51479d371b17f76106a6881f76f419eeded8999d15960ac0ef83f8ed6afcc608e0973580dfd722c0ef03a2f97d41f6f709d5bc00339457f358c5eee205e026afe66b6e69b8c7abd500b8c72b01b0ec7c8d183b5701e01eaf561c12a3f7674ed3f3f2784476e62ede3ed8ce2238d627274411acd1a86d5fb630f7c1dcb33da2b0134688bfce3a0ec685c0f1ba1ae388bb467fbd2521618e556c5477cc0b21c4e769fae29e85c1d57b638538cc8539dc70b0156288c3cd86c6331af42a12f3c8c5ccff305f857899aff33f3cab9f327ef81cf570203eaa3786ac3d7ebc3fc2d17dca4e225e252b8ed7efb87b1de607e8e11101fdd187807118f74712b3aa3e3ac6a9aecb6357c571bd7b577f58ec57fd717d466330ea87e8baa387c7bae3e58d551f6c7ba8b1c62d8710385eaa8ceaa3ed0f1788598f9d3724ea7fa817da5abb47f3fa28ce5ab1d1affa37c2ae9ecb8765a6cf7cc4389f79f9cc59843b8e8fb93eba3f6cf7eee1590fdc0faf877aa31cd5c3a8933b186faebbe45eae5a1f7730620ed3437d318f3135de1f3ee31d37ca21c4f5d1dfd675f5c6f860db3de612e2317ed4f570c9dd09856d18afdce30e46bdd1c278ad551e464c0fcddd1f4ec4f50ee6aa3b463984f868341abd3cdef80c64cdc95f1d87438e0e23e687cb1c0677a3b0f1c2fc87ea836d7c394c0cf7ecf522c4312e25c35d1f16e64470170a0bf319dcfd61617ef55c45469bcd109545699cb41d7163695452e770352c2158a7616d083373e682d3384edbe18eff8409d1121e1a4fe330fecad577f54edb1d7b79f6f2f2721a56e5909f9fcf36b14f0bf63d210c42ece4ee23b231ba8c6340ac5cae46871106207665df13c0c0852ac5aa3e5e758f1de7e22f1ccc65709a1020aa3664de05c7c12048050dee2a72f9fc5918c768704fb09d8731ab0fbe11df0346bd7a4834a0ffbd7a201530e8880fc66d47b8481c01bd7cb07af5948134037aaf1e92765d570f0fb15abfb3c1eabdd9b1980b17cfb69f79c1d4cd67fbf900bd7ee4231797efe1b0a7c5a5e53ed878a5e93c1e919dcf481a0c67faacda9021144bc23233686371520c68fcdd822c4c8c9839678c63dc0c216486e861a6befc6d36305e80387f13621918e76f4b58a69ebf0db10cccf91b13550eeca38fea0e95637ff318a71afd59ec2af2c20101a3c2741c9c02b6b84bc24030a0974fbd7ab89b68a02dff673858c4070ec19fc1c116076370900a0e0629e18e97d0ffc29ea96dbf93e5af7ba40fcb98cedf8e683a9a10967171beb6c332dc795055550f2a95aa47a3d168078c381a5defbe4611463c567fc198f7c156c2f8d5306020210fe3343caf39121293c2eafc0bee42fbe2a32d07c9c2f9b9ddf8e12ffe5aa755d04258067e9e6e3633cbdeb6b9f8302bb5373fa2c0e2e5809da769ecfa60c9ede81e859ddc6d8bc17cfe6197b577eced085377c877302a8045c4e83e81f8ec0e44bd6c650bb1ed6227cacec8514a0c93dde6d3335b908c7aa710f552210ec3a75e1cd8fc6b1d58c47cb790396f0bb92dc48efe0377a1fde1a3ed467fd61df3303eb72446df827ae612a2de1410f54e19d876a3bf2302f1ab7f612416ed311c8f971bedd5409c92741cb4524a293b18755e72ad03655c8fc18d0ec3c59ca67fe02e18f3f7c5c2f8db92e88efd505f4fcf04f1edcfc58720ead5d301a8d95faf5864af34a982ee4d79469b9f9f5af6627760ef3e617cfe6d39ba3e8c7aa10a885f1ffdead1fe9a85347ff178b1dd2f8f97ed46f71d5d655c6e4968b63bece96faf7d78cc3c8cb70a60115dbd19b8b1f332461f8d9eb2d98cb2c9490b04072f0b04072d86611c66b1d85da76700f0c7a877b61c86833ddcf17fe060111fee8ee8f40c00eae395cb2fb577d3595597eb7271de6c783c22cb9d371beed9db469fdc7db1f3c6e8afff1137b6d483ab7b7cb6abad0228e33a0cee45f65a052fb8675b88853d2dce87dcc2a5c57da8a3229e7372dce3eea9bfcdc58db1b3a69ca6791815dd68efa84863b105597e8ba6e2b355e154700aeef84c6ca66918c430d853a489dd7c1e122130b16c2fac616c42a64fe1286f30a66319134581d4c5a2815e3f3d3d23755215f6481debc47502ebc4652fec290265700f11e8953a52470a89d8bb638c230cfb9c23244208c2e4e475637db495b5e433e21b18a31f31b81eec125f524a092f1931480228e33a7628e13b64625908bc7cf0d8e39e85424226ef7a2ac8decbbd390275b9fcca3328dfc6f262f0a918b230ec8302153f3628a70a4d6cd69a7c129d741137813656582113d3e9315a53f5c1d644550f2ca7e147c32da22576e57d840545d6c5af2fc10d3ab605496c10f601b500c766b2c72ab17c5984657a169147a6f6b61bd9e19b9b33b2a74f32dcff8c063d3d2629f5be257ded2ba4abeef40c6f500aac4ee8c349dc4e7779ccc0aaaaff6a7ce054dd750483b7cd1d148c14a6af3c5be1eef51595cf7a61ecbcb17d74b48e50ef08f108f540c14fb87b8777788777ba294faae73eb61ffff4fc14fd3cf9099a424244f009f4b1fd63fb490b68a75793a6f8e715fdfcbc258f890ffd9ab050aff84a5254d097a4fb87df685bb328db2eb65f5e7ee03200702b6e5a1d4f8825c4fcf8f17bd239393b393b397c4a537f0f873f3dd33d3d3f3d3f3d0d042404240424f4a4679a88e809d113a298f3d333b147a86722504eccc9e9f9e9f9e9c9e9992824ff14a5423973529c1614a52d278d485b122efec2a95e9670c718131c2fdf5ee254305efa16c41d63423dc33ffc0394f944a12894f944a12ca757fc39294d653996254e963151ce9c5acf49692af5773c7776e6ec39f5a4fcfc98934a519a4a51fa269a93d21b736411562a157b388ec5e22f87c1e5287deb5e5cd5551b6cbbc3f83cc2442c7ff2b04c8be5cf56cf00b974588004cb9f4054f00c90d95a811866321c222cf38058d0d3305ef8e0830f9cc6dd7c519dbec4ed68c2e53cbcc5472da028973ddcf1b126d0ca1fadc0e7a29cc5e766e3f2110be8f59be534e18eb989bd73a7c786843181966cb4459dc4a5de037759f6ca1eeee1b88b39e9ce5d59f488727a88725cf0681fbb72781e38558e16fd16f5d2bb9c9e72689f5571aa1cf4f1f4cf5eaa3ee9d0b670aaae36d86acf0eeddb6ca0aef2a37c9e85eb628268fced6058a62b067a451e55555746da6c604ce146437854a467fbd41889f5023056561e30d684fdf4cccc7c529df9b8a464406955950eed1c3277580665f4025ae2fed2332a32e219116934ecc89e3964eec4b9338457fc8b9b3b7367ee48c9ea3977640f4f36648a02de489211388c3334a4831f264d4ca6ee86513edec4a9e69f949272aaebd0d29b382946cf52a69a52c9970e2d75a97731994e653dcb744d7117b9c7fb606be2ae664de726d4741387728a025b358f2308e8d99022ad0dc114e3c0c9a9661c144d753d0319672815069c26f9dc940e782cdfe545144a6c1e822f5b406fcab6e84d81612886997b80a09322d66938f844382889b2db819a45b14c27c11601e390c4f25dbaf7b87b8f59c8decb953e56fe451a7462f6daa1fc9e4c0ff330111e5863853d957978787a309b5ddc653b07f4f68f959dd3ab1119e885421808e8e51d9bd3335c2363242799b9da800211789848d0b342913c1729b252887bac8c92713aa0235989ade12b0ab18cbc3044f252b21b9858f97761132b9160af4bcc0c96c92ebdf0c260a55402754a6025fc401dac7c6fb02f0d564af9ba60e5a4295b6f0c54bd5d4abd4f69914fb1402125b008aec193212fb91043899557a9b79347d57bf9947a53a72a546ff062b0d5ecf6b8d96cbfb8b63c34abf1bc182da037b24e5facc33b3755d6e14eeeb010de612158e998f692f61b7a59c74ade6119661dd6e19da9c99798f3b1b2320f0be8650cdb6c46700977129e37ed918b36cb84d01b997984f837725ccc8c98b16465d518ee644cc32d0756e3eb2226c49dfc0a28a9de08ed85424c843b791a3462957ba44a462622cf3c46e00481a50825f256cf1a8133e4ad9ecab20ae8751ab62f1dc3bc55bc8c315edc7b91758754812954d8a1651f901d82ec6571ff35e7c22b4e9d3b288361a00c967931f8977dc81d70aa7404783620126f091d323031fc19fcb07a595aea429972c7d7c551b8cf0a96532e67c63079c91ab96396a2cf47c1ae28f46af60dc1be82a6bd68507e26e1c311b94a81590050790a8564342884f0d5d3f71b080d50840a43eca3837d48a6c0633314fe126fc6cc28f15690892134b8e00da57aa5c47b056f04d640f88220b30a321bd0aae8c398b9df06816c09eef8086cf8c23fdc498e7ddab4846550dc4548e444c627a867b8a607a78bb04c4f61811cb3902b974283d6ed861428caaff77066c1de726e0df58a5bbde254aab30d898e9b0d1eb81db0aae4e1ab4a56235e5ff827debdd5465cbd337baaf25b91ea7b2b1b3cb0bc9ca6ebcb5b38279e453d6b3a13551ee27a1000c5d1f7c0a94a2ddc65c2b6504dde421626685aae4d28b557552e344dabd787ac37f2f0796379e072406b7a0b771fd29a6e7a26b5f79eb4ef09571015cdccb4807082580b719e50050a1af2b00cbbc1f2ebe9de5162892e1224e5d866736a9c06923a0b97ba8bce71d1c3df7943e287ad7a7dd7cbfd21e1e24cd81df3eff3f0d96c29dfc2c559fe3e3916edf03cbcafbde56f4e26ac4aab3cd4cb0413f0771ed52c875adf1eb74fb0b019b8b1da3f27a5add579787916eece47d535d565eda7b0c8c9b1a8de59aa8f2454977587ea5addd1e2f23ea495affa9056d5e2d174d9a287ff5d56cec59f8bbb7021e5d4e6a58b27a756ef7b0c7352dacbc1699c864ca4a678da9b4b9d07ee326179f8eccbb7b880b5eb9866f170c9b16dd160ab67486717f34ddbf257aaaa2d2d2da9973a4baade1b9ae6e1a5b4d47bb5050f1947ed9c97854cb9509d85c6c2f256dde593bbaf4563a5ac3dbc70c7b8149db72e62ec3c0f2db587a75abcbcb7eaa15e9695b592b8eed545bd33552fa52dea4db1b8aae52a77d1aee29e65a1b198cec232a764b964c2f627d71ac7a2a55abe728d85c6def896ea435a966b2c9ce9f0def0d03061239094caa2a753f5212dec41802b9ec0a1624d37f1713d7e58d3bde91e6d4d1502b59244815e6f404217aad01e6ca970485851dc382cf370a27d48d6a0026ea5d825d5840080b42c54e17818c0c0fc8d65207a610b6eefcd49413ae49e80169238d5126f61021c08e1c1a921d52848390400a489b08c0080b458a6ab145190aa91be11237dc849ab712a1c5600405a96b71cf1f3de78b689634000405a365a58557f3969c3719980c7c6547185ed2a050e4e76d2a3100090560d4e76d512f507ac51358003a3635535ff6ab0bf1a520348cfaaaa01b0263bacc9ea0f230a78351e388e0080b46a4855056b8cc0aaeab883e97868f404aa8aa961f58a6786875e17dd80c60835d0db3c55d63550612f0f71cb66e404da402c73319326d00b5bb6f21077dce22e89943cd4dc62a2d83c4d34c431131e62828758e6451e6a355027e924dc2476804666e6216ef564d81a03bd2f0847092250275aad0e6a89a26fe08c1ce2e94bd74fb504fc71a3842baeb8e20af89b9a2c6a1a8e7dcfb8215fdb12f0bdea988a41ac0fe6ab70c8f78d8dad16854144c8de4ba6a99690dfe46f6ade67cfa81ab0bdf4d2b7bf76e1f78ede78b67b31f8c58053fb4be6a2bdbc3ce35c5c6c5fa34fec9716a1a48f4eaa3b4628ca946363010912244890204182a46bd03cfd5eee4a8b07ff39814c9e112f4673dd6a2022d01c07c0d140dd7a409de4b75b0de4e43581bfa15c257a4310a85bd0de6edd1b0bad11ad1aceae24d0a99146905bb3248b89e115c11dc056747aa55bb74b01ea11a967e2534eb2151d96ba52ef9fca2a9d443a9809e82d3981dd59f6de5586509e3d4e85486548e5d50d8533b2a2923da0eed4cbfebec2a956321514caf261d4d48ce00daf7b352368523302262418568583618de899f75e772d3d6182b22914452f28306111a4b5a05054148520d7a864c51327439c024b862944e50c0f5319facce933a943332a43a5678f6b26dc2de16ef5eaa6a699fc76571105a9667bd69c0a91cad0ca55ce73667fef59bd2a7fdf3823d933154e65855361a23264b25765e8591a5621621993c9aa0cb1cc73a96129e4bcd5b3560a386ff5a85065cf369b5759d4c51ec13390e83d202017ab71252bb82b95904801c7ded4d4dcee7796794040452cbf8bda0a9e49f1f40896586e209d22d8db445a0b08e80af6b6930eea25969ff59b1b1290a4616478152b01bd285624c1a5270c638c31be59ba37b654c41dfff50a0b62f9578ee59380d88963310c082b1a22527940466c54652bf5b0cc2df13c243a20d24aa2a454c4f233a961627832f81819e28a8f94256ce81121865744237932c8f088c06a4aeba757a5524692239c927ca744928816d1272620261d154a845d173f231e114fa5524205affda6e65905dcd4c4dfd4c4aa82d58925e2b5fa637bbcd9b8148ee5d3df2e565503341c550360cd7658b33d5eab4630a0ca012df6221c1cfb6a22d751a0ab6ea5fc84727a20404c8f0782baa67a2828287f47a1f507aaf6935ef1b5ff30d59b9a4ce3542f72aaf75e55c9a3fca6e647acf1dae5b5fac388ac4b6847a93fb4da3f48dd7a359afc8d675390bc18fc14a2d2766c6868686868081ba24de26f474d4326ea84d6d7d40acbf5402cd7ce14e4d5db262113cbb1fc20266a8509873ee1eec2b1247b2581ced3a0f388e5568a70b742c4f27b1c0f6d85873b7e8e47c41314c72be29d6fc423023613908c9840b1cb6f35e5a7572fa5f5629c70ec8a4ecfa8cc49557c7c56747c5674887c2e8939b1dc819a5f8ff4b2f77b2febebba4eaa378eb86cb3e96cb3b992786f78d2f547928fbbbf47aaf2a35893912c49b311a79684a216e82df150a29e519993d2940a8e0a8ee553221c550338a03dfed5f0cb22c7010fc46fffb1555503b46fda5fcd8ff8ad0625e0d544232a96adc1b22f2828282828c8f247a82014cf7c1485e241f158fe08c5830d35774a51964a3d055b424aab813a6849133d2220ea3735fcc8ddd460459815398f08887aa9d52b28d0596fa9e8e7d53b69136ce8c5e037d02515b18106ef272c03ad883d2a3811888e9088b31379629198a3c332dd923a6d45c4e9277108b64e3f813d52eec82192c80f88033b08af51d4db6cb6124aeb407a14db42b8e3b68257dc4f5aa72bbd754a9a76fb38ed1d131ab4843dca3aad83c337ead86f50fb56df99379beb988c537b3f6bed9aa65dab5ad34bb97e92833db16c858d01bdfde42f28263c98ce28a6e48009ce1474a8f8b18f0df6219102907d4fba9f9fa129522e304966d14cc5e075a9192852fcce087896ce1298dd8027063b5e101aca3e52c3f64bd60ede00a55e18cbe7d5ebb854ef54c3965d5ec8a0e89996b7e2d7e0a49a54c1ded4900be4523f594d3d8a22067b5343a9d4e8094b609ff507acc16a939f09f4934a91816fa4cca8c88018e9fa3a7b0c8b32d51d21ac61df790d145208e3a4320205513bdf0ac64a5f0c589be923a22311a6b00fc83e2454005d98e3e363e4480753034e711d6a5f03554981fdd55ce7538067608e1115e98f891d9dab2adb794db4dfb7048807afe3f770d795c5831a966568bc8edf8dd4d0753d393db37a7cfeec5e0c34d00e26e3baae83a4513767aa0f7d5a30c807069161c8be1efa2646d2102347e2ecc8b0867e7fe9ceb2ccf7779e63646666865d3da350615f13b2e7c20b2e6c3cebc5b3b860f92f9e15cfda82e5bf78d68b67bd78563c8bffe259fc17cf7af12c1bfc17cfe2bf7816ffc5b3e2592f9ef5e25950b0fc17cf8a673dc1f25f3ccb0996ffe259fc17cf7af1ac17cf8a67c5b3e2590478f1ac01bc789600e2e35010929464efa563a723023fba3963582a877779cf603552565028cdc900a903745058c85b88998171f0ad4c236b5a02cae01f0760794a3da5a68575075482256802af02f002cf07140058e28766c5f584c88086367470daaee3ff2585a2b0e715313146762c7fc6d45c6a6087b665875d5d636278ce4a35eed8ce5823c508d6a8fa52d57f366a587619318e4eec1a064451cdc52a9d931a8927713130069b2334d01b6399d8780c92b630aa82de1825ea7d404c5424e324034e147d83f12827a3f137f475c758fba621dc82fc7bb9dd821cf784e035ec73f6a1d01ac1b17c989e225370f09183e96e2e9e4145fae3222cb33dfb7beffdf5787f4f7bf05ac323b8632536afa708aff8a30ed0db4d145aba8f8acee24016c2995bcfe51e78077adb27ab1a9076877678d69e7dbb36644b6fee3d7249f45f7d3f216da95e26ece6435a29725e235f55f052c8aa82b58379422ff744920e48a3eead20ec26f7f4ccacf5ea1ed8c31deb807f60f9b0e322587eec1889e5bf8e7be44071a6bd8c53640c43b65bf1a6bba4860c1e0220830065fba080841964f1900695b04ad18f4b74e52810235c1f779387a0100474ce2596afc58fca4033d02a415218f276e4eb96394156748410b1dcc33e3c85e5d7b22707417438878ba695722767e738383822b8f8f6919ea2a819c742cee6ca267736eb8636a3412f6d5e709e86794b225a8dbb20bce2ca393e909f1a734e968a1cd7bccd8661512aa757d777b48d94f355d6e9d5117a27e7c89d1d39441b430bdeb0cc96642f084ac362d580382a29e45f4d9c567293c54252450beced5a4a7eec658d818bb04323780df43ea0eb461ca144e4d1d940a0eb2812c48823966434e8d4e884d6002c7367aac6d4ae0e3b1f618416688c79313133623d0a28cadedb258c400e163506d9b28aec0541ef592c1e14597e8d24d7710e391d17134c5c3a22d01cab06772c16ab23d401cf9d03de8acf623d968318866690013182f2f7f28b830da326dff564974c73c69450beaabdf7b4d7effab99e5469873f1612591aceae3fd89ae44ebf7e3a0d6bf54261b54bd3346b9a979bcd75148e726782f5865e4a53d447a5a7a74ca91377636c974ea753e974fa417927143904793a0d41caf70e6143684f28270e5e9fa968e7a8282626c8f26750d4cbdb6c4c0e9ede4ffdaef0b26abd50e3485b0e92edd17683e5da1fc32370089b0da43da3449629619252ca77d34b4969324d612f8b3f996a31fdb568a92d5e0b6c31c97e2df0265837f8d7ef7240723b501e858551f6b79f1ecafbdb09f56b3a7c3d29312d44c9a398ea8fdd2e4b895eb17c4b0e799453f5c10fe5b1a8a65755265ac2d18749c023b008f8574f10aa4edb76e31dd61df028d7b6245cb2771627b568512f0f2dc66e8f450a918983564a29a509a5422550971c3c02656c6fe1569ee24ea76916964d095a998831355151b451deb077bc9bdebf3e785e68e9379a7a3aac3edee9e16f3c6defdd046945f9f6d3637a865e057eebdf187bfab5dde8ef305de59196564c756b95d3e97008a7d3cde6f4f3de7b0fa5899e4939a32a4dad3ff6f2e92fe5d19e49a9ef743afd86fca942ee467ad36f2cf4c1965638042803c66e6faef486008b78f6d2e08fc5888092765edcb3984a052b45f1aa091f17ec2658ac981931313358ef31143143f705dd47c4c40b52a2b34053f60125a9228a01275bcdc088140d0f7a2cdf008f8a10bce67a91fa8892e680b20122d7e349711d8667561dcbbc0af33020d03e6c6e29e56594523e68009689af274f108693c1f91e652497176ce5b22c8ac5f496bc1881fb25e428a341b512c5300cbb3413877a5dca592cc367e1e8eb524cf5f24071daeb523a5497a2a2527bfcb026cb6219547d5d4a6571777a8d1fb0d688362840a54dcb4871cafa9a4061ba97973f99f7ba3e841042f8641e1386b4b270c4ae40ac0c9407425e44bd87e03531e512a50fe8680915c35017f112e625581016d4589036ff5eae0b8edd78090788f012db3c78092fc9ba25c30b6adcac5aff865e540b688ece54d3ea1d8d46239e49c4432ca198a00ee8add48f8fc693356326aaa5712820ed17d5d2620e541214d03caac51d0a68fea25ab3a2805049e2866a71072425bc0c10cbbcc74bb020d2b33e26c4409395d82944f2e995c6839758f90d0bea42d00d4c498953e1e07892cfb5d8db0dd284a398416dfe484e622f143ef641981292cfb67dcbbe6d9545798925f9f40c0b4b10cbd7ea25fd242161433785c2030bb228a7e10d0bc2b240fb3c7a7217c08248cf4858908537da4ecd625960d961962141a824dcb145b5b696ed6b5c9f45ffc776bdf0a2802c8fa4c04ee2eea8a4ea3e0e2d58b1e570c7416040379d9c87a40953fc409492940b7fcbe12d08c98794048a6a5dd51354ce96c3031ccbdf82a05a49946c427aeb631ce908af48a41fd2cfc55a3c43d22ae987e433e202c9877464cb21b57a06d58a52fed85cdb8d69df8b812234b7202fc648c816843b1a740bc21d6f3a0d04dadb8edd787636941f1494297afbd96c78d0292cfb6c3fdcb52c1fd9a866eaba6369d08dc869eb999188e5adc8c66369d02d2565dbb1dcdd9b906d88655a6479434dec9211d58c42a15010e5a13c4dd3b44bd3a4a6c5660d6a9ab652da725e0cfedb50ad28603f5b0e8b455d39a097b62c5b4b59e64a3bef06ece8af9b97cf2e0e5a14cb6495634c14938eccf3493ea4d9734a2ca8dfa8ab7298128905a1801e0b426d396fc547b59ea05a5bce900bce280a78233b0821a11d102d612b98c85fd2471e090191f7248fd5e18ebbdf9be3a1492152480ef110fc2e01bd52480e5d9293423248f6abca250ce58f8f9592e7ca1d12133a6a929a4e2e20f60a42647b550a5181c22785e48e1d62f98f8865ee914296a54e7dafbb31d49237912709b21704cc7951683d20234b9e139e2d98e1016dc10c96ed7d43434239f629c13237a69560f9efc1cf25f4b5ec6559f837672ad5b2b17b6503819ec0051bd333a3b7e2c7b4d0149401cf4ff682a0a99c6e07465e1a86e035e721528f13b2126ea5a016e07b433c3ad106d90b82c6a4ba1fcb8799f15aaad887b15b430bba219c16118d3ed60666df610d1ad871c72fdcb1e6c25d7717b1cc4d31d143b2831d76623726da885eeb0d38f6cd3c2cf8b01396792d274f38a881700fd91a7210cb5c6672f947092f41a2795e659e2950d2b51f716880f3f0107ecc4450f0a192262d383838381ea8c9e99957c33a4f8912af14246b5bc11d677f894832d1334cf456fcd1ab4cf453fa76fecb754e0273945a2b9453cb7cc452e9bd66a2255e105193eb3d6108448922f4a6f8feb0f07c99c76528fa6c4cd1d0aa62887d2d38e4d8db422da22616bef4f79295b886b59988401b98d0c11d1311b8a11d13f4e988000dcf20b673e0d64c8050e399d25965835911e0153f004f66743e005ec01eae1030967de0c1b20b23a00c1d38a0eff771b0c9d381f580beb6cf5e5a0d584437d011ccdc544ce075fcec09fdc16e3a796858820c51c01af22da023024d5cd8be0eeeebe039583ef775705f07cbc1f2b9af83e360f9dcd7c170b07ceeeb60eeeb603ef775b01b2c9ffb3a98fb3a98fb3a980d96cf7d1dcc7d1dcc7d1dcc7d1dcce7be0e4683e5735f07f3b9af83b9af83cf60f9dcd7c17ceeebe032583ef77530f775309ffb3a780c96cf7d1dac83618c963f814744b7651d1280e7f3754400d649c140ef7c0a48e80935d07b9deddaea218d534bc89899aba46119bbbbe1935c5f8cf7a643fb0441e16603db877d6c507a08fe72b3a1f68109b210e533a2cc784d1e96f9dce181d7f5396404270fcbbc3b6385174a6f5deaebbaae7e29c7f651b80888d58af9e97c2233738b0045d7b927c5735dd7c56db87af2a0a448d70e7793070565a7796cf7d88e938765ded092193173a73fb2029d3b3c71f20ce1ae4bdcdc993c2b2b3b43260f945cf79c8876d654b007a8444dd4d5514d99221200000000d313002030100c088462a168402695364d3d14800e99aa527c529887419029630c21040000000000000020008000408232ae8746e9442db4dd544a626bc0b8a44c0666e6ad61d363990c2410da69614ae25c895410440070701b9923d3e51c8086494808d4ee143d5816ea2733fc0370ccfb53df95cd8765c78defecaa73d949fbcef3cac8b768af4c8d842fa4ba4af65103ffb9574f3520c694412dadf147bfd3d6254f64d26b88b2dc5e9ea8dd7d50ee069def19985870eb17e306d864a3667827e688bba9a3ea8033ceffa3e8f9b645587ca54c78738a2c67121c50af06ed5ff4ce3d6793c9923f7ef307c91d3bfc0620396f48cd2b288f87462fd2519e017a690e75022a771ad03851b1a6c6aa4f974382d022cd7f9b2d11d02164b8f752a2da27b1db5ff5b38057ec477d62d938911f6922c4b928c8e46528d59469c26c2752df426bcabbe49d0bbd13d4a4e02e98c039d7fc4653322e730665659434852ef0f88ca07568815213cbccc0e807c5580a130ee3aa5964530fb1a53675f8ab1415c4df676d22750ac8d8f7841f5b724aadd913bbcf4b304595a91d08bc552dd1715844fcd70f7af8121646a5efbd8fce21e36925d27c9a0923d37f3ca4995170bc9787d2a1c50d91c967456b5b57f954716d7f1975c96bb868529c6641ce7f174d0b9954216e30144b07e955de7e55a4f605044142c0103b541287426413455ce70c7694c8113cb8faf27c8b5b5030cd1d15d570d5b289933632cda5ea095e8a64e1038c0384af2e6353edaab14ce6e6a339905c037ed7b899fc9a7a21e4d577bdf1146aea62dd29788156d06c14a3003ad09f9483611a239b62de9d091c8b8959e4d41a04559eb2e5ce683cb7f5f6ffc2ee423017d1635e0bf90da1e5a01f29f9e8c1818f11020f37da5eacda0bda17badb15ae4a2c08846a06970e44563ee15cc701317401b2b81ead2250a0af4b1230320e7e6c4b73616b130a50ab99ae09f1a6a43505e440dcc7c4e414c88e0354aadb5db5eb792d3cd05871eeac701e7900c617e07357f0a13a1300341a352a79d3f007f47f4908702d3406a85c6977d0307bfd0859cb5163de6c59fe68c358d00e94e92c1bb67261fc0e653de2c2c59f51a6a022860c522fd6df3ae88ddbc60d52cc31a2e8eb40c398f5c3168bdb2cd49742b5761cf8bd8210a2f98fbdd44bedd6b834bf2667990291497851cab46fe98956f2eaa9b9d9c7b276b76db139d3c45d5ddb7161668b87da4241f36c448014d88870f5fbbef65c3e36f64d7a8c5ef0d80185731808b84707efd8094f7a78441e337417c8ac524ca5c825dfc4e4ad4254e5096979ac9e443bc35e32d18f3a3714f601bf4e4a1a12dde1dc3b9cbe536ba1f30411b05de52d2a9c0cbbaee5422867c0bbd2216b31432060b19effd1394ac1a5f8106d477c49136d13eaa6d4d286c1b68384b74fcb383403d1b771abe472acca7f9d4821488f1627ec0d7409c91c2b58af3221a907f90e4616823c761515a1ef7860eb912945a9a23311a3635223cb422e585bafa85be64faeaa963614af658bfd632807d0be02ae800cb6b3531b3088d29fe5ad36e5eaa7bd8717611a884035b26743bd940a0898fe5c64c7f152f45f8bef2a1e16feb32e03e024bbf370ceab23df5c0a3b0ad7fe45e92dcf904102f1c1be7cc493e7f60efdbda39d9ddb81c613f178bdfbbd1de45ecc60070c87b50269f48b2b2e9d7575db6fe813086f917fcce65d8948389e1cd1ac43deb13084f690efbe37afc407984f0b510ee4590d3add16d69a7e3bbe7a83205be0e2698a511f1f0cbb2145a301019a823c48d393f9bab145aaa313ee36e788be21abe1935a6ac652bd7d0bd2a745af7896bf3b4518fc961626d82b6d9bf4ddab5888de5688c0b349fb8ac246bfaa363b219573b245bd4dd7973db0231f549384baaa00afcfb542958b3c3ee3f540f6072c8d7f8a95d6dfabd5f63b3f7b858b271ca6c29160ae2a59f88f8676a74d0d06b604839138ce10797c308a5c78b8064cc05b7ac02059e6b35d9098b295cd838b432e40f01b184a9306b0f36700d1d0838bdb1f08c11b6e90e7c9aee423080d535e456c60361de846e20acd4182da3c1063cc89255ff61f43b0a137ccb40808b8215fa60108b22117eb1e7f90a10d2e8ef29e2d0717476f73538369147ec2b583a850093c3a0d540f2e8ee2e65991a5cfcd1a70071787da5a914df5214b0c5e27807d0ba3356ab58f9004076c5576e61f9b7600734e1e4096b388fdb0865d9f71401b693bd186c0a05c3d6984bc6dbe270445cb85f59347948669b4509ee13cb876f7363015c9a17309d19ed2b60bb062bdc10964ba34c20a8430f941f3c45d8b78b94ad790955f613830a01020cb2dd618bc1284bf23897bb1bd3895bb3fb7e4b669c3476032a8356d4dbb6710db0d6c684b08b88c180d570189c0a0be1e0c8c19e49d1979f3eb917f6a5e3e40d1bbc0c8bb665fd4dd36d395777ae4a4fc5138f59d0df582d0023befd5563e4f6109e58fea4e8f36c14f6730b2952ad0e9cc99127ef3b5a573057b84b626128af7c282cd367fce29834ca4f9624caafe4076f3289d84b51f8b0ad58b1edc36c77cb1a5f647306e2a42ee12434ca7173f422b2cf161ff1acc76a43cfb526b99957d0d1eee7455ddba9ef6276c9606c32f5bba7fba6a3c00c6032b6349e1ee0928e022cd528853a58cf67ca8333966ed5ef46f860e292036bcfb3701a5c4728558272ef3ae3d006dc2fc4812303a81e1073688470020fa2f9416d8547e48a564b253f97c0e7c552b16343c4decefcff405e9706dcf1ad1169459fa043c1c985b32e0b9d8e6e72e431b787f6d60e5f145993ee38f7e42eaf23231b396ffd3411a255b2d4b09832bb35f4ac9de70b161e4a50900bc97d87473caab1e3a1247757c7ed1a92890d354f98fc37f0c24b130d137142789fd43876568d0f9a365749c7a8b1d28ac688cb69701f8efa3860d6f56fcc282e5fbff340cc260bfd6071f8984af7f00d8bfcc6d6f9baf0fd033ce888ce974d22165756bc17743099f0047dcf8e7ffa5f95de30a41039a8071a9b71a7d566a3572646a95609c0f2ca74a523345d53abf7856b51ee228ebd38d16ac62eb5ea3cbd7ca82670a06d22649c826c64bf1990b70feb5cc3df4ed904accbda3eb360b9b38c21894eae89fdac6eb5dc7c87b3e1247d10c89f1ff598c9a0afa8c33e983f2f1793b8de9388e26895243acb5f91fed03a45c94ce9029e9c78c9311bc547771c72290107eb5c6822879c9c5ecaa510e9940b27d3a5e8a7a13a8fdbd98139ef818428ce413e191231b004c59f1e35a62f31b8f4357382e86d5ff90cdc293893dd52db9a1c82b761dad02a8c608b68be969680da18cc9109bba2d88f0be05320e7ba6aebfde70cf68813d453e18c6bb980087ee02591eef9e36af370811562d5abc8317869e2ed3303f0c1007da883d3453902daf7c252dc01be6477ee7336e352ce2177117b9ad4a64ab5bdc2cc4129f02320a5301943bd41e45a28645a83132b959d5489049f89fe5210419d737a63e030f33dea0ef31864b2cc5049922ec1d785684ba89f4b9b517a618a0444088f68fd8fe05929277a4cb8f36076951b634bbf956bd2358c758bbafb0fe55ed260ffc1800f534c097f4421eb7079b246ac42bcb8ffa71f68305230d18b308e8046319ab2f3d2c1251faf4232fe5e4f3e068387d34b3be11346feb493c24d6f3f8380757895b5864568b8a2c103973bb40d52f053afbf5f31384a33b32385aae28d7cd0df8116a0e3cd2c61a97494aba6f4324bab6bdfe11d99ec4ed3daf5809b42702fa92b9fc706660234ac1273ae1e712c3f401aa381676c4f3ef5c7c5543049145b5ecf3aa7226dac4dddf0ba1963557c938b4dfa77eaeba5bce7eed8655fea03ce7e685531f5ba7894964e76896a14a936ba335599eda32d986d0917e37a8f9c6ec05ce1a65112ba3df701543112d545e3f8adb0aadbda8bb5ea86f5b30bf54ef05c758a38d36aabd0b1c34d38ea6484f6a5de84356517685201f60d3d09b30a78c7113e1393e335c86081df58f49e07682c043806da628916fa500f5ad5ca5f2cc283cdf659ed4f2121702d433cf458b9450f40a0cbf2a790cbf149fbb9b503e7ced1f32f5171cc9be6f8ca951425b48c539a514adf4a947f69017d369b5e0e4a175e5bd5186ff214d30197ee6339fdbb09cc321dc461eb968a30ea323c07853daf4805697d18078388c3634efee95604d4636d41c548526fca0fab5261922b9feb9b805571d28905c5a4fe452548893b565b3787a217cb5334a5236f5c549a2c981397a7478a3a22365e816c0de1b0284d7b24050c73ff27ad329c29ce51205716ecda85a56234fb340fe3c210acc9f97aac0f922c824ac39ee2a61abb22128d9ddeedd570905ba4e2d585ebcc9f8a9b0e834043548efbb2236f2837323da460940ad578c53054bae962a0dbd62d13cc9133735b1ed07b404f0f92576622c42faac629efa1a9b700f349c025055d603b32c41778524af9dd59300a4d5cf7bceb7845ff6a08cbb202256588442f077555697977bee6373357cf672473e2f03088f3df85521dec6803a16a0cfe40b73f3ee863500ac3717a023c7a490420b79424187cc65d1d1e4f8487f91ddbda37161b0f4e84c928dfa32e087f170d1a4539dd7db0486f8e7f109b33094cc8aa8ca126ed9e03607aff02183756ff4dc89f73cfe344587a7776ec7df49aadef10082a39e7a5e06c2ddd06e06b54707d0194a3771e16e6633a685ab65718b68084c6fe7bd82fe05e444419ecdc0879140d8542c63b20139b78f36a1e22136e345eca19ab6881ddfb9636a4b0810a375dbc41837d4955363cb032ce59c5d3a72adbd7693b52ba82ed8f4846bbde05aea41bdb8f9d61a7959c2a942e4dfab863b42e1aa12f40329bff04e1c7c38b8fe30f1ca10a0e26added8712857a86e9bdb2baae6fb5e670d8b9b1ac7f2b84dae118b449ae71edd7eb94e9b86a0c792391144f8499d9c73011a32019a6b2112ce883388d52a80e185922f58bd610ffdfb511501729fe1c2bc1f224a46940665e50aebeb4ec1acec22251941b54bd1af0c5071c13c9c307633e4b8ff380d55eaa1050da35e470a7c6a134a668434fb2afdca49c1770bd8a3e4a8cb5465657c90ce04727e528202465eacc8b15a91c8c053c6d7e3cca3fd452de7413f887cc8da3e8b6fbc3738c8864adf26d91c3356b5de9e5d9d9842c13f09175c0f749bb21f42fb5aa2b56d74e0add4a907b71238e3e738c439e75df0094612ba0bfbad8529c04e90af4c75e9dddbd3f6390e31ed7817e3028426878994492625c980917512185d2f911f0a00ef10bb0489ff1ebfc59819fa4948620b39332e79f2adc07a2d873b0f93b71e0074a4721eec35d9636f1eb53f259ba26d56e087fc260cda23c10c482ec0b196312f6fa51c0560508e35b3ba0fd66c7f781a2015227eae4ad5f0a6fea90a3f7476db2adf29312a756a96e62a433baa0f5a70493491bc92b18121ede4ff78b748986c4900d5f6bf72f96c6f2d8c0f5acf09ea4f4902bed21783fee6dcd8a080e40092c0549ab4a5eab4e221e053600ca453b30844c14aff7ce10380d105e6a73510b6903348afefaeacfe93c93767dee1a44f404196139df8706567bc39b8b90d85d98e02296b29474a057cd083d3cb92a68cfa185540df3af9791b788ec9792f94d017dca6ce6b2194367bbf834432ad20f45ba71d25039515d3a981e4653a384d4fc68cf3b3843d3da6bebdd38a845238eb6896d558580918013927e8848386bfd5708199bc9feabc22b9014b201ebe6592ff20e6cdfe7c156fd96b964ff151713e42d8b28c28a02e876a15ca6740e5e1ba5490f80203604d46f1cf57dd15cd30b9cc806a800448217323eb0d04b5f1df07a235ae394344c304f788ac6c58d0edab077e422a8e2d8915c66c3992737700271a10dae87052716a06931cd1ab26c537434f187c1c98234d0198932eaf5134a61add3d8086c4c58dad80f113a8bbb91a180a811bb41176eb2b2393be579eab4bfeba221d4d16cb378e870fc78adaee7112eea9b7890c4c1a972cc4c59b3763e18cd4896e7286ea5d680e7b1bb154b0480dc70bde9764d33b06bec756c37aae67eec4e07c855879eb39367ccd3f6944e0dd59480769373a0fd0dd24a6bac73c0ab3e391a1ee4eb74a75343089506a60c647c087d73ce09de4e7190769ac2fa1523dca735965a107c7abbc7ac27964bc0eaff5472f6f3a9fff8bb375c0a413f3841215ce242678ab03bf9ae9981a5684644c230a019d094e82a6d02254ff2a52e8c8a1b65e57ccb4f4c5ed9906a877bc823274576fb475de597798c68d411e0521023c16ec3694536a187e6d57293060f08b183dbe16efe0b2fc44d7aad1e58c036a920079bf9b45f32e44097f04fa670ad30c923b6b9a458e02e81a5089c2cab4ed37fa823ce39f845d92f460a00beadb566552e4aa9246f4700512a63d107c8c739397f9cd704d82380b76a96412338d76638572e5de3507849a8d2f2ef919a8943f4dd4c35e11ea5ce38bef42764e7a8a4cd7616209d9432f519a379437929e2b695d1631b4708530ce710261ff9b1cd706aebd84efcde25840f04f2877f068b6efef37c7b5200254fecedc5b50568078772c0244ee80d9a5c36d8a73a2156e86084fdccedf1f2212b80816eff3d7e92b7e618ae9f89b52278e8c40fce041cfc7d663fd6ad653fe775bd127b1d8594d28d5b4046fb99cd56058f9f2fbaf4145e6f60793c52cd0f4d9a11b0e59557ac19bd63a0c8fa9efd422e9900687f16324866501f927f8f859642d660a71b87913860f01087500d46514cc78a43d56b335a66945c28ed184ef8a8320ca200caafc2f350a836805bd5c2b186d213463f514eb44d6c581b19924c038baf2bb5783c31e9e8d6692070f48087c6f807e5b010866a566931eaf7580dc769bb3408aa5602b5dee7a12a1b5612c476f0cebc47ca8232762525f1c4f28178f303741fcbb55f432004074bf16d2ef43599dde021ca3083d7e8d322c328fd9f7f2ed848cd636301ba876fa0b4aea1b809e8c53373516b4fb38c4e2ac68d79a1f84d90e658609aa3720e671e3d0be3ded4e7c9f39794b5a919c43f5eecef9f7e6b99fb31f25be03f13ef3b81513909e81cf75313db726ab6799f64f9034c30e71d4f838c4f0f9e03810ada7a0376dd6e20ffe8ee541981a602430335e4dcec8a30a085034a43c8ab6db7cc3aa7b348b7b3351e9d1553a5fd94560bf4a8bc7ebe5bc4f1e9fc5b691ea6b983d3deeff1ab004a34e0f2c41b4b9c9aa1b5c878034b5359fae39824c4cbd3293c58efccc9643ef21bdc1b6bfd360b503d276ad738b7fc164b6c8949f4d1c980c84e20d949a539b4b1ec31aad9bedfaf4e45ce4e519f977657ec5a8a5ee8c1fa46b0e5248bfe8a44cc49d629e4e48bb97beab35a69970d46999b3064f4b60a85d16672dd7c31f903bfa52553962b77889f7fd4c60db14edec0542319853451341b57325f347dfb6ba1cb70a8d915e96b77f3fb9297d2d98531a085067274b199bbb91b26e42ea7d10b3b9914544997605aa001ed63a4e153cab267a449700e7f76b4d7778a7749c929175ccbe96adfea9d923486e59b4e14caf0ff519c86cc333b7ae0d6b55159493ab112753b05cc71b7e10fb8cdfec312c2b59cca765830c822c040b206beba342f225908fdfa83a97f1b0b85981fcc3282a9c240a0b0a0025a5165bc594e984f3c208930dd13f2751ecda154a052871d40239af4d854d45106633cdaeb55de10abd4346f8d36d48fc89888d3a453c43c26cdab1b4393f515999f96c1ec7ef5bacbfa1eb697173249b6b0075333d16ce93d9776b027eec35be7a7f97c275f1e48efe1fa400f1513566ee530b1c97c894f6ccaad5688cc533fa6090500b3da1952869815afdbf20b9a28be6ac158cf9071a48731607149f7c1de369e8152f1f553e1fce52e278082be2a0ae992818baeb3ff303f663ba4347cca0cf6bcff1bf431b54f6b1bdc728f27d9c0079a70625f1532b77539c2a21ff9942690847c76bf2a58e8a7f6333bd621c5b3755ce78ff10c8e9b650b6a38b01434847bd9a8df4efa837be2985e7ba4af673d07d2b9a53e39e0d870a8c4f15fea2229dee7d0ee5b56d37016b9cb24de9cb2c3dff1bfe579cb7fdabf06eef8bb02533f571ac361ff85f648e64ef4f2b1ec051e6a4b99527eca63394a3abedd465836dfd0b2d5a09efa88e22edfcf83984d90214656f53b203acd932584a54638a1ba8ee4c225e0c64e8baf43610d3fd734f8a5efe382e754654eb2745f7e077dd5219dab4b1ed2e577a3eb01921fe345b2f7422d8a131fcf90afeb65b8880f26d45955e37b6e51e90872a766a6bc55148f2050032d27d55960689ec7ec856ac1a9369b9bea7e1d31bc2b6c4903507663297465efb5301168173d5560dd8b332da161e2dc64bc67d4250fafe204d2a576f500b180df0cf18f863d65b1ec197ea3639c1c0e65e7be7d5f5b4a3c592d55d5ceb6ac87a2c5814f0b604395731214ef1376004d67df32d6aef77de0a61dc2f617de1091a8d067143a0c58896a34474ad790821a7079a5bc9bf1b884d912a98ed71342e089ecd0f9f1fdc9b3df75130413c814fb5dd0f97b8b4bac0384eb12a50213640616f3bee3bf681264cde8d871b282dfed07fc64a69cf1968dacf17c586eed4813f39a079f47d5ae34ee3ff5d05e37314f8ff132ca7ab5a6f8eef3f04c5a7b3d479d3b29f772b6bdcb3a81b1767c1b717b5e362618a8a857fa501f891ec404f0128e5b5c0c25d1d3c2242ebcac522565ab2caf170c170489f4307dcbf10ec7c4542dab411428142c38918774786c5a862daecf973810983310149a0b76b009a8fd08d5be38acdf27c0c71a52cce504cba399b43e53d3c9be6d2eb83281ef9d134da6d363fb8e81ce7555151cef594e4ac73682c95d32b765c4c31aab56ac8e58f92f2d70ee99be50c9a88752caf9f785b39d4e9fd46e85586176cd92b00ae74afad5a99ac8f8235799dac6aae0bca946a635c24e17be3a7e770ae9a62e550d34e4873d379970033545f13907439cdb163690f12a3552be588a866e503a5534ca545527e273ad2bbdfc2479f13fcc5952c9c848e60dd56ac360f24761728886371965060e49bf14a61971b96a42b6318c45254486392316fcf0691e4298e7bee271b7197fdd2b5585fbc689883e3500e1a5f5348a0a255543a1700e780ea88bbbbe05e2a2aaebb25181829706dbda4eba99a7500cec27fa1c3c0b4307aa389f05a6576d0b3f3e03af128d08056638c9e4b4c3b29163eac08bf4728a476e6484b13405c2ff69a0a5b606503a4f2f1348dbae62c64696f0eb07d7f5d910500f13022d9611c5f7672428aeb71a172220c406a277a91b23b5ba38adae2db5a9d463d0f806ad6d5bd22afaa195cb6142275d596c75cb5f7ae283581d9e1f227540319ea593396b3d7492fed1986c31049a8085350c5b5b491e197fed102270e163e442d0e7822dfe0c4b87e7f0451e6bf6bae17efb6bfadf52fbc97a0e95e800198e7fbad8ead9b46b93e95965e98b95752ac7a296f18392ca9ffac893d72a839a174a791e6e409445ad2ab7915ace28ea0b1068d25e7615d390a836df9b3e4d41c893accc84ff99f617d3113932e2982987bf60e22637e63a94e1569079ecb83e3f1dcc3c502fb00847dae087c06eb3cc4b7aa410749aace7126af46ccee34095e038c39a0f8928b941d411cb1d9133343b63cfa3bca3ebb5584e50f0739972687739d0296d89de8da01b186350c772fc0a651088d5246ad71a0445b448335b2b199459f0abe54d433e74aebccce66f447090872109c217bcc68429e472ad0ee9f4d38e305d9bed939f1fed699c03057f5c02e00c399829136c35e179750d2f9b83dfe6c7d261c075dd832c0881fc521df60d9e0865d2beff9059503f2def777e682e8d656c8b266e493d9d2a538d346f5c74adf89d5514b5585c2b4bc98d65edfa138c1aa0c9a63f7ad67a25f741dbb7cce9016b79d55ad07dd3325584c2d2db42c1eb5ba4080268998667096d63587310c2a0d27c96a2e6d2f63b09a54f8dcf2b62823ecf1d9c9bd2fd8a197398c198f3de7fc23002cad942ef88839f62821fa805c06761259c484660df6c1cfb79fc4cd8f9e1da62aad885250c4100b48c1b0b972d5ef23bd0852adc267e3d55349cd4cd1019da6e40e4333b166062b855250d83899d748c3334f5ea6526bfe11e0503e303cfac194f9caf847b0a2287ceb6a4d5f9a81e5d7eec6515e0d6a7789f00eb568e2ec9ab035679f9293e0986220b89dd602264ce2a9baa54136731a7aa141be04bc9107b99de7b98a43bb280a06287687fae229b5c165a37da474991ddf6fb81bddbd206e63c6b17d4e7c6707eac78a07aed5ebe06aa6928a192065a347112b34538b8f7e02bea6d53995b4c8dce0e5a2ed0e292c870d99e11287dc6b078dd173e202ec12bdcbb4d180f15437a21955cfee2fc60ec5a6c3bd8c9182d9518866ec23881837450a4e5e799446e0a1a1841c6a3294b047e9dc370f923dc2c784382ae813bc92d7c05ecc91fc80194ba61e2db13437598746e0cb5b2b982f42db200904210bf53afd18b0826cf6ac9dca66a3ed8dc2b591dff1de78954658221949188497d9158eac6e5fc6116e2aead26704a060c4a4ead33267cfb2e9e97c694add59b3e22e18a681c4f6d200db409cdd0354c87a6d1a0dcc02fd52d42ef0e232f41b7b9b109aa9cff71d81a1cf32406d34aac1712f40ec01482dff9261dd50daaf98669b62173c372c4af06cd162fb675c96e43d19de0ecdabb043a8bb3b02419c1bd2ec256f8f2c9030ce186b13fab85d82ba4683c67306ff6cf532750b02d88c5ef2bef237999b32671df49b5ba15660d445424bd83358e8015111396ae3fd20c1cb4d296de0e07ff83d13dcea438cc130e051bab9722220f045aabad302bd8865b446a7e3f2e440f4dfe3e8620a96e52814fd41415a93d93ef490eea62212cb0b32818430c1d24b2b1225db6a92abd6f2183a23a6050afa73f341098e23ffef38f940526130f254b341808cca9987855a1a49aec57cfad3eac049eeae65c5aac4474d1a10ad9cbe1e374fca01cb27941841c3529436672ce942681ce4d60d6b358a876ad10e87bdd724d0c01e9bb396a2a01c1f6d343c900d1c8436751fe1737845ee51060124f069caa48e0f3b4c714f8b20394afa5ae4af7303f90ec511281856fd1b39920e1e348ea2e7192848894d2de4df6562f97341de96257aa6a638e7d0d91043e6def5c39baf43e0504605bce0a1e3892136840def33e486666d9907ad4f5474f4d17ea5216e0f976caa61c9264a20c330a3384a8f526b2361996d87f55872c91cd254f256d50f55746cb968ad7b342e8ffff76b532e5f3af69fa05d045f7d079c1dcb20017170ce3a8a7f9fd58ed1862ec52073785c8da318ac103d9564a9804c357fd09334e5034d1eeabb6b84b3f48db1f192f6d29878bf981447cef66348fc927674de2ee112756b502f7d30a554ebd6f83254cf814986680c699e872613269e3389d6d6d68e671d6f1a0bf0d7a6693b050a821731dec95adf0847ceb4936b96f9d2313869291eee6e14737f7424908fb44a086418cc17c0bcb8f86bd2148d1db9762529d3c04718153036d749eb3bd0d6593c4aff17a453f7a76a5b0c64d7f94162122c0338786a8574f01af2b952259902c3a1ef959527f224ad40b704b753d076b68980f0dd4344ddbeb2f5e4a71219ae8a74e16ce9b508177b6ccd648af582f65972adf11ae73b4f03de3ba03b8ac5b78fcfa1a9e1ef29e76efce7af5c50715ab1529d7f110b8963e215efa131fdc9c2421afac46bb75c1eb8ccbd72c4dd434fdc27916cb94500f690ffdd4cb70a0521137045f11fd7d1ea1b988912acf216a8456044044725f2a577affec4d3fc0ded4ce583456ced93d81035455ebc8105d87afa40e9fe7a20c9783c0c28eeecafe9f70244179f3967e88b3e14b505026b48c5753631643f50007749185087cc753b2fe3012f01e702912c3ef1e6ea0636d5c84fb4062032c1fb752e2201ae3590935afbe23d3c31f8508c0d1ac3d725c038b801b7f9b7f16d54a32322fd7d08b7f3b847711517a732218fde5edab31aa66686e6a324475706233f9b812429aba3255047a474b430a697611024239a556ac35b61e6e3730ccc3bfec1ac33dde2a6da38461d3943fc6bd8adb341167dd0b8d398e43fe859735b240fe88282cc283079fd1b82607f9df77fb5f27a0fa7172057a0d87755e6d809230280019e484120165633a3f40117a9fad26678a37ac603ed254d427a35351bef6f96f9ffad3feebe30387f7bdba01ceed972adae132f0e2c4ade490821c2152af9ecd5f47418ff6e4041a68491332b5238ea28e286fe81eb40615ca279255c11e6c144d58dee97b6be8fc111a95ba22442bed80147959e070f06ca17f5aa00379aa2274b975a8c4ce54bda0c0a1e3941e35619f575052d222e2e03555bbabd18cff54239074d8d131e67a079e767be87194e4ec441cb0f25c19e986b4e81041ab1913bdd9dd794031f1371bed33d8a667515be97145a95096c71f5b35163e57e79e726628c89e7e7a654a2ab3edcb25f6547e84ebbbbae4e23d512d6bc188f419e6b54143060eb657a090d9de4848d005e0aa8194b2b4adfe30e27383666cc6f90a8a4f52bf46d685ba06fcbcb212981af0ae9a5857d68d4f1b30e2be1538a5f0464a62c154eafdd6e30bfdf5ba6497d04682ac70ae67968672688083c09146dab5e8a19a4338b744f286125d78abbb0bafc9c2d99f3aa8c736d63dbbee4b593fde29eb37a9e5f738d11e805ae1706083a7c2025fa004cca49e9c4ea39acaad1f035a564dc7ab65df102dd4f9c12dbfb91b3287f4665017303d70470ad03c5e0b9b0cc8416b8679a147d193323513d91cd3aaea68c8c0e22dd05849ac27c5e7d43c4886fa924940acea7e57acc39115cfb7dd46418d30c0920d26816659cc43610d2bac15b2c73bc451accbc42e4b2af0fe8e2639698d8f103a978ed52475b18b9bfa3c58497b9ce3d628050c35b684f597c215a6e025bb1323881d962305b7c1c97cfad90b2cef1d84b922bb642f8faf05e591eab727de284fb0b503b0d2be4003c4143cb81130e45bd3d94cf19e5fe17145d8d4dcb33ab26d5ff93fef1641bc88c5e6c03188e8a9a26c8ce8982a4ce9de30d11569e14e411b263da96ae2a349f3bd465df0717d0c95fa03c67635daf5f2006f1c8eeba9fbb89ba9c7a968505d1ed265a8717e7077abf0be64fc91f73cf4a6818153b1c0337d9b5d08665c015dbce7acf7fcdb0bbc3f146647ed562f74eb38d483a244747a3c0f80a4344456b2f81908919a30b802902639e8d9035957658756f3bce344739dc1e901aa3a1517948621d6bb0dea0b0c2ea2cb892506369b5266ce0636846cb80703ce12c743a7098c785c885ef30349109f715b28485a68c4511711b759e080ed76c11c4a4aeb42788aab58181a52f37fec2aba040a5979fa392b83ac3358807755a16f8218b4cb86fb290aec43e83268d94405cf56b9629ebc1bfed87ebd95452dd0ca58240807049fcd9dab0ce24a6aa4dcd666163f340d5aff29199b945829af7cd875c3bb4d56182508f0dd79762b628f052396c042316227847098055df6f7302e1b0f705ca47705b46c112c8a6f01d9dc1d92dcc8d18a9b904bd59ea5b6879bac2e878bf41838777509864df4c62a5498b58024dd8604e8f98ca48d8fe890401dd6a593400fb249d41c21151660162b803047cb527f4a3bfc8a166fa1bd778e3dc5264e5f38f108507532c2bd5c4c9798c5a6ba49c4122b9b9652a83f9602df4f765fc0e968368ee3981055543a4f11540c3707812c0a0b9fe481f9587b067be53e27723f58a15b6c15eb26a332c2d650191006caa54cbb8545d5597ad01812cdd47164c0058429a2a68cae6da83c8e825d8d0f7549c898626475e97954f556369a05cf29be8ff626e09b0d9a1417c3d488c3693f39aeaa7e23d993cd880318000edeecd3ce3b340d71e3b1a9d4ac9ee8f6dd4f3fe5f71ec1b2d44a45ae879afe497b84086b1718254d4ac1d25500516bb57de61da0f7517e2b8c673f240bd02bdab586436c955319e44d2b9541df3ff1d59c65da3d1da61919831cb3fb2904cd12524e931e80e43870cc0a55f48d3282615507792a12e0e35c3e55c8728d577320f75a68b5c746f212a4d4215c08c42b8edd1877c4b692149f5f41d1b1d1c691d3d9aedafcad0fd2b9d55a40637ca336272b3aaa36752576c1d88520ca86f7646cc68e0fe45650edb3b7c9546c60200a8cab628df187d218c6e852018bfa966357fd7e9c24de3160628a52166f2b80f96189b3b5d56e32ff462782e0f37da78b78e273f85f702f6356271c783f307f1db04f9b1e44e86d7a530a26924994a706dfb1057038573bdac8f6ba394a1777ba14562845455b87fec2874ff1d5496760cff2a21012586c0159561354756ddfcc05a67f0158d3e23bc9949a525c8e68360fe05043cfa382e4f08b8ee58649e606db3df09a45846ad4006ef9ea1e822e3d6829c32156f9cbd4298c42e625e3949f03968df34b69fbbd9d59c5fa429be2614f25521888f89e723a61ba5030860673b35a7bb0ad6edb34834d29ad1d72ccde44db0d470d868a9c86e13ac89f7f20448e57908a0e8ac87892838223d705328ae2664fbf4820ea712d6bc2e33337c15bae17b996e52ff54bb75725d6ef67c9e1c57843adc69fcf041e10848717952c41b0e01967a21b9306a7f636c0cbb9f3a130b5f3d6ecafdd9eb2e5b6f137c204d7c977716e9dda82b824714ce84b60e76535c8042a764ee1fef8294019616e6321572e72432605bd6a3c1aa9e4956c3fd7b98caf7d0249eda00bca37d7eabcd0d8a5a61fd843eeeee5f0d6b282e1b96529d7f02c3617fbaee5a59ad4a62b3d7a819fc0fcdf0173bdc56a799dba9372b2c29f5e70fc4c3ba5f7e48763b987b96d0d3f014c017ee9723ffdbb86de547c7861510d93277654389dc48ea6004a4d0200d6882d9ac1215f977feef438a3fad4d016806162662889bb8c8286c317fd990c08cc16b3ea9177dd272749f15d6e34724a898c9f7ec06404361fef7189275ea04a070b757750db8f312282d0b8eda9cf26c73a04560097c0ca401d9775ed5fb061e1147ddfaaf47ea1e253238f21587c5e2b75f3bf3673b4baea600b2c70d6f20607b8d5a60b795925d05d30dbbac5803fe6dab9fa84aabc94fa989c6b1d47e415c9f12c33a3ecf763d5568a4a7becad708ea37985b177716fc748b630b26084353f2ab1c717beb3c9a15bd4356939140c463241593bbdee29850c45ec4a83abd8e07d4a44a83864bc82d04e0cd3a1ae229f6482607c88b94e52ea7b5c0eda81b085e99ccc841863759376207e87b0dbbccf76f48dd912b6ed71177eaaa7499da88a03389bd230c2d3ea4805c27bb5202c6793db621bdf1ab17ac4419807ee25764c22143e486d47233a32c07f109418e0e2dd6e0752422e84a118f7ec512f6486b356c8a984829b8f863fcae3a6e6ee1d32ed0cc3a7ac082ee17e59aecf3708b41e5bf3012f50bd1f2f7e3cc6d57ef994287be6e7297a626dde6c2a4401c1ec8f7c4615473364ef5d7b5cec489e3bc157c0192b6c812459282098b1993137220199f42a8a33a7f53d61585f9c9dfef33beaf0660a7404bedb2a182eda01e2620e6b04efbd380e29d140c2c040ef518f6b5831e4ab16068767ac9e97547aec9e3dab5a9d57964e3a9a39d483b40f46701b34ced650b5da0bc9e8cd9cda43d00d0c1d86a0b85bba844f17a467a6f5f469bc20a50c50eed15d7692a1aa65f90633250afa04c2976eabfc263e4cb2cfee2af5a91d16d8e6c176aa3ce62b0ea9062886a9fe06a5165eddc3eb33ea9b19db7ccdb3f97ad9f9c1cf2137cbfd00ff65464f6c823613c1cf44c41e0962558726a898bb6daf5cefc74ae23d2a3625beabac3c86de579bffa4af92ed5d68ff12551e3b6cdbd2a3789f78948d6bce186784aabaf916599c36ccdf27ff6a30d97b01789b0eb06f9eeebf94b32963c4ab6d358d5e197dfa4a734ad09471e77f1c289c97eeab7fdd94916c956af377887c05078d7c92db48e992eeff2ed144a1908a823cf7ed0b1cf767ab7e1020c36d5a265b33f0ace480fecf8bf20edb8538f91b4577f455defc7ccd5373b523a8b521ad6af681534f201de0b3864a64b834336a93498f639a7b786e964c092ca97b29fbec966bd2a3299a4cf50cdd8dac50ce576c5f15ed7853b523de84791e2c544883569550dc5bc246e78a5a4fc7c395af5be2b00d8212d00c02532e9335a404aa40b7a8295d0da2f1a6dc9f566545d668cf0a8e07b86f2e3fa390bd411448e31c5d9f42cdad12411a5f5f392e416cae4a70ad9ea9788e07957f6e8086b51c26c4d7972d179f07fb519c765cf4c7af35a16037f4f3d3b8d436a85ab0dcbf5f65968158fc6c75f441ed943d654a7a762a76a9e5adc45367e94aa10780b3ae4c3b8080b89ac5ec89575acc868df7a24aacfd4b8d6a98c1a237518c400d9dc35aab422cee792e4934599f4ba61e8a9763e915cf56f82dd8ae608db84b9b0be57f86be28347d5c33a5254afa50baf25aa41fee46dd87a31a1021a783fe96b998f4bd2251b28afd08ed8e947715b0d4df38076626cf13990f8810a4de986ee2e9a7e27a9570f19ff3da19d0fa8d9883fbd35ada6061da5b235118dd5176f0e94bbc321d33bb48a53edecf9856de79a7a9cc7a7c59bebc6c2740b35208373f50b450fa191cdb44348ac7e9e4163f221434030e804a65cefc123b201e174aef31f3641bcd5f9ca59c30c978f3ee909850e10748509605c7816273c4516b64b76e001edd6198a921180676b9ddb034471038c6e7416c23181e220beb44c5948eed70bae69697875791f208a344a2fbe70a96c867b93ea628683d6759701f988f20a1f1c0abebf613f857eb003e795a350587b951a7c9bebc3e6fe2e98519fbf4c728226a7b3767a33845f0afa7a9ec39bdb76c5ba791bd07fb9e4936472b77d03b9fd664f68d56a5d2363005ddb53417feb8770eef427e5392d6a84891cd3ebffa97d694fc2b772faa75efaf1e8759e47f93069cb41a7769de3d93d4ec7e07b915cbd3a5ed4e21f031de2e4a3a48a7e53485f59141cbc67503aee144516a986f0dce06835c99f40db714ac84e664923e4dc0f759f8ab178d64d393aaf26bde7b21899d39fefad52ace38f59fcd2b046009a96430b5d9a74495125597f9e6049a18b1f6fad56a44827a9126a2e1719fdd52ceba729f832d9039918245d401c392b4f95f867a9f01d20d84fdea461e9c8b448b27bb2845e77e3568640be66732302f510e20a7d9b5b24a460265f6791053c18c940859fb4f3683bdaecfaf9e3b594d4cb3877e756f3cfd75e886ad9b0e929c47dad0411eaa49a9d18ace7eae2628d2757eb5346939da8d097d79e2040bd43cdf8466e4d41e7631fb9dd86ca30e4731d440dc4006ba52bbe7dba2be9d33bbb3d4c04afffef6210be94c8f28891761b846ab7c16ef6c72cc94a6401de1f11c835952c412dfe51bab97e6da1cd5f49a3d9a5d20eeedf328201ab527febb1fe98d84d722543bad08c7009f132597c691d33103a7ce68834f28e3cc8e6fb79111ba29525e554d8b887a65b2e047660ec591354e89c4949c5477f42dfbc92c163a832f5d525a0b2485f17b3eef1820366b2fe2387c20074f6e53eedf8a0d2789aba8a6c6d3e1b278402289a021e5b8605ce8124be48cc09763653f7a0d0e2a5642d144dae628e78fc800bfce27de3cfee6b2544d5fcc3f7386039866aa4410617548c6ea01ecacad93e6015e133b16911a9e034a37572fbf982ce2626b409b6f16d88e98b21ccdd12b8afc7bcb57871bec1bb5e6f9a7fb09ec08bb6be78113ea7edde74c70812391de4501044339561ff2585dccf595d110539e836d19c228d852a24dd643502195b773e9253478ff6f00d6072a4a4ab177d4602eeec559669002ad29080a2e3d49dace82825aa2b05686a343ba922e7a6d6c3979aed1018f7bbc06bdc6243c448f742a57861945601419c3fa86d9dca312d2556d868ff33e0aefe72e8e0af8014fcb3cc1a9ece1e337ad7c4597eff9f1660fd09d429bce1f2db8d546aa643a340be3a17197cfe8443c92a6e1c36d2d0c8be5d6fb0c533296dc07aa251d352643ec54202c903361bea949e0311d5264397555866bfecf45a6d1bdf7c61400ab4c4fe4d0ed4e9c01be93d065ff0367abc995e58b60ebe28baab80572bdcc813d1d92b858b09931bd9424aac80a083034fcbad10e3770dbd791c0cc4dd42d6d320380569a2771f90a9ed0d972a58c3ac8d906d6f8fb1aac2642b35ca11bd4c30ce0436c88ab4f52c9d81c9c986da8cb51f824c786d944cf7f6c7c38c261e420e153be7a019c84228ebf72ecebb96dfaeae962f5743f64393c9de08067fd605503ed0b92551eeed7ee6c7a7b91b1e23001f5082735c9df2ba07a253438ded87793296127e4927c7d3bc089fa2f45843d7fc3362061a747eb9688edd90ffea8e5a9d76a35ba4ef9c02dd8f18e0e92b4757b63caa48bbc73a0c3986a84f27c92474cfda39e2b8a0baed67d9a07d6c968ae9c0e9fc02b3792232624eb0df3914a2d5d869279ce122c2f985323873a43b6522bb91e0781c0dd457d91a011aa96c8d1a0b640e1960b6a05c58a0ed7a5c4d7ed9f71c1b5c9f4c2d17c19d83f25fc2c617e5a57a77e02a1e6230094d263ea106ae89fb63f9ec60a8d99cae35dd9c86b40bd73a738a3814d19ab13317164a63c03d28b4f4b1c2be3d30e27370453f06281296e21148a47ab1e16498eea4de8b466a27ea933f8eea22132139d66ed9824576569b31f68f94da2d3ce88d0d5d98ca00e83ecd55ac4ca8f37d01c4808e1c9b8cfab83585ebeb0d432a4b932bde82a807e4367c215d2c4ca74d7e834fe3744544e941dc2bfad0ed99f974bb49c46310a1593384e6bc8eafad85f4606a04a9a265c54b71edc948aa78871b613f56de541a5c1f74f2a466ef94b0d18c9348381d60ddd984ed3706653714f3747f59b1e077338805f81080b9de34da2c8df0de954dbb9cecc7793ae2173d016f6ac505a5e72dd589dbe6f3dbb0b756db2ebc8cea6a04440029d100cadb79771216040ca01786883042660cf5ace80f77249e3d0d5f54a8c8f59e3b64420600f7287a018cdc06b11083f158f43a1cf5fd242089f6b695278af35157796934bc58ce3614924e6c513b137f3ebb1f95b77d6ecfb113c12eb5c812af96b148e1685b1a725a54725183f0d3a7af2e6b1e94dc36f9958330987f1a096abbad270bbc479c4454296a90b27e93d7a28a8647e6ba9c9188946eac102884a912db593f90cb57fbf025db2ad840d8a32b591b798632e3adba6b04ad1ef9678be5d70511726400db84e1520f10fc5bb8a99875bbd1038f4e6bbccdcf1ce339763c4bcd77735340c220e2c750bd39288e698bce09ced5c08e6a92e90d2e7ba28232690fe8c9384e5590e2c73b3fae432eacf6c14a945b94d5f68e366718a14015a9aa27d1d504d4f7728d0f364210215d30a67a3a617fb9ea6056803058d628f3dfd16a0fdb24cc206e0b222421c2131696166daa94a12b4d1a0bedb4ca489fa9f01cfb96c1ed90c2f2c0d0b927bcbf1414bafb780020ea8679782090459d1a3080044d8be1f66d89130060ed836d9d506cd21e5026edc5d6160acef4bb1839713e4fd01587ee853594907f9cb35216b201c5c540acdf7df42e2190f90430af87120ea99459b523d3e1382ed538755c81c3a5e5b6ee7a1bb4906fc46013d08bd6daefa3257eeee8428c27896a7657c688bfbd4173540dfe45083212f94c88d12c486c69114e7919f1acdda4bfea8b0ca849028650756eb939ace2739e70b7d1f515fb136801132988e97052d65c0149884e4131fa26336d09aa1c6dc4bdc984e28dfbf4390e8a752b7f30aad32e956ee0d281cf0e953298482e65f96e543bec8ed764206bf3c0fd16eca7a2ad721d63cda077a91769abf9f41c967512b75c3ac6f617a18cc95561deb0854b11294b7fbf34e02c83c2de205b21fb204ab5d8f6aa883ab694512cc8183779e3f0584d5d70bee0cdd091c7e8c7a9573a2cdd4a4ae7b698365e9027c9f195f5ea4620e235cf7a563f9c490f024a0038c14f1f0702a6eda62f05da96d4382aab60d87596d63392ea890b120492d97bf6ff9b4104a62ea888f054f7c76b955aeec539836d93f92dbcba7c6375f36a07d24dfcb502761b964ba718d13bd2b115efb3e6b31b2ca6bf6cd5c0a40a99460268f05b3bde67f9ac4c51f0145ea2867eac97f1c0022dde6c49f847d78e4eff7348dc0e9542fcd6e1033c889e13083c0c2ad2872c113992c5fc5f5167111b1d3ebba16e4ee6af6d06b4681db462ef6806f9ecadc11b40e6d6309bff949e73f1ad345811c1cbbd6c2854dafd3d67de8b672ba4f18fe2939b69f1deb8587446d8631a330d3c16f0cdffd9abdfdc9ccbd7178b29b8e01ac64ccee5c5e24723d90ee1ce81947e4650451837e09ea4c677eea87d0425978e426d8c78f253312df4729da90c94521ea82ea405123e5c3f20ec160ebf8fb8464a5f1f6d5f00c7909dd9a06c22228643c3374520738f17af145bef604b52761e2f8dc318e13f33a44a791f20a2a00005f1d4ae035d9fdbbdb263498eb2b90efb1599ac23d9fb94e7e8dea6d4db9297164819a72d002d3c52abe8faa064a45d355ecf6ee2aee55579b808c2ec5a0fdaec65f82840a86108095943bdb0f57e233042439f5cb771798c55b1ad8bb85de4d296da3f75045689aa6a775ca9674f06f8f8267950c9b3b8192a14c1ea10f5bb5f669e5bde0e8b8def9a18db13e5d08ed06d60409084405645fb4560d350f46c7d06cb079caf49e9d277aa097a317d0e3d8cb6eea839e3e875e83170a82be5bdd03005fe42c63060459a1f3c346c5120829e1d6176efddbe0f065da11f62d6b63bc9d021c2776fe319a3e51e1a9f684c11b50c12d7f22def38237da2dfd80b9183c3f6b4b4c999d3363de4b7274dd271a4e14ca9467588008f6470f1673a5be058884e4c5d8ace98bc71b32c5fa4db6a201e1ddb01eedaeabfb1ed3e7cd41260c055a80fb5ea61aa42902374cecc5156cf8595da51534b9bd6850d77841def85453d834e23112f0fbafe721f0f611944e174c92de8a917e549067c6938e619579dd14c5da37dc035288aa402b8ba510cd42ae0910ff3998f0e7ff18a8d243907b77f2f29904156f995b5d4f154aab24c0c4e107774629acb35ad3cabb35d5070e410450a77bb46a9b654ca0b495061334adacf3e8958860fe293213434e705553b28149b1a6a8f1d40360f6ab87d27c5b0087bfd24e0be896c8c997afb4ac696b85ea7c504b0f6b40288051e19cc2cb96542cb90036e539925bb3559e1b68665e273bb43aba1434ea41ff16806a56b182cb918a593a9dc07be3c8d450b5c51c8a37be7e4f2d718b60b865a7cb022aba4ccac01aef19573cd208b198fe11c0ece82af19a862c402d06498b11f8182a131938424c1b220ad1ae338b3b41223f9fcb5b63ed1fc86d1041819b369e9105c48f6d3a90bf80116219321235f1ebac176a12c04e14a60c35d8d59489abe001fd3342991d423bb943dd12d10615078c554ee32779f872fec8e3d591618d880080c034b3c5f6e416c4805edef84a65e3a8d5b20a390182e6aa468e91d76e0381a4dbcaf846677fb25942c1f8799a24e5146793bd7846025afa5642cfa434570e6ccea36908cbe3202610e4148210e8b84bf76df0f3c68e598516fb09cc3484f24a033ab3ed27889696a2b7c9e61e96cadd8bf956986a1beb3ea445fb4bec7636c2740cd4dad667ba1f2dd58fe4db9ac88df2f51efc329f348086f0cf7e43016d76b1a7c662b4492e1f1ccc6331171b9eaa0fe3c6db3852f449261d0a94718ae75eef11849f1d5062b146f115969504120f64145a1d2d34f16426da2e5c2fc3d33b240f809893d38dde837bd0f41e38369351164935880df7a7d0a08f95eb6b95b8e5eff23b3fff922c8f501431ce309113dd5ef241004c78ad68f4c6ae875472096656c4df42b5d39b3f5428224a765aa4637a35ee3bb2791134ccac83a306bb05e998b427b38e8a4600c068f59d9b435cd5ed256436a603a1589c5a6af0df6c5be0e0d93be3380cb130abad435fa88ad12ea50752309550486d1f9b150f1572ce47d58c60d32cf6ca67978a0a836336b8b41fc2565d9b2244dc5488a289f0e46c79527252b7e507612a442d2c826cc169faee9e96b2b915f2e1de0825bb747d41268997009a74be49f072d2d372a3762a702b0adec9827f18a73a4b1a637468ce181f54a70352a49527db314ab0a03d1183c62ad311a5815514f931ca2eeb48602f71c3b9b6420ba5e6efe246068b13fd937c435fdd85ddd06f53458112f56062ca95f37a2c8d13121e78d89f2cb99e153a88acf7fc6bb2125fdd1020008941c7a92b9678a06f0ac6b19a9366133ab254843deb6b345bb9c87580ee3593e8a3a685b64d0825ce00359d0254b4683e16ffea93bf1cfe416f60a58bcd0f7f7a7fc5dffdbd778d334da3526d7fb936a18bd80e2e9748afe0511cbc2a594afb46234348676c3ce1da565c30801d2878e65ea2019181315baf2d08b4f60b855049ae6831111fbfc75d4a96bbad06e4a27b3d2b53e7382a212deeb2381a43c888c509bcfccaf188f0be6b366b28b1bae3fe385f65d0695f141174f74553fc1ca7030227b46d79825f801593cc06518085ce7248ddf7ba3228fbd951ab1447f5b7df6142f6efdde24e568ad5c2613313a009818fbe51cf9ac8f6e69a5c5f43717f7dfe6db24ce98c6cf7bb0cc237604ea09865c09bbd0f92067902ff73ef94d199fdb70dc28bfca1ffb3fffa2f7d2ed9cfdce7a80c14c1cb26ca9e1680613a97a0c106368c1e351d2cbafe9e1530b0cb7080ae9960dceb02f8184ff98ec40d5749d49c05cebac702245fcc9dac54a3aa517159f90b580ca5ff42095380016f470630cccdae46b8afb1157f93886306d87efcc11ea96d7738b1effbb76f5d1b295ad313d97d53ad9020780c8b892d50b9ae7c90ad9ae74f0e58f26ca997a5f6d87f13c33168d811e527790c241dcc89b25e79cc67b69174f972d9240c916eea9cac51d6ac5f04b9b9853d90ba314ff11c1a4578ad693bec69d6e88c011a30fdbfeef11f1cab0b3ec39b2619d32e1e747b233aa1596f93e017f92c85cee94b36d0ee04e09d6e397629495daf02117e01b684e6766532466f3e09ae782577055a778fffde13266f591d2c74e726d025b81bec3d3e5953567a9b645bd7b3812974da51f28e7deb47f32f37366ae1189e04b8d0c29e00578876eeb5a91d9c71a16b78d4737b94bcfdb79b1d2b0f83d0958095db3d5625c3c8db44093851ce3e2f6f1d1d9afae8d1c839af2cc3c599d8c0020da7c04aaba73c6c865931f74f14831387c80de7441021615526209d28f80edb08e798721483e1b05fe8814aed5dbd0edc3d5d715e3eff671d370ece2b84e47e7e12ac75cad1478f380bf986c465a3b1534dc89b597420f9fcb055adabd5b269d5fea1beb4501c7cd017b4c57b1c9335d28aac39cb894bc7d414c0aea08df13e50d94f92cbb69f174b5f2d86a1798f0daa2a6cde5c0fdf4fce98792beb905f52733a9b52f56b276830b682888fa6c4343f51d24ec4d063d9e3a3d98e077ec0469dd3fcd1134e3eef7e190b48e3a8f29c9e74a3f2e64d31e38fc0d400c4907cd2e2b8365e0441b262e54734541b9d0bb85f00206a8cbea2c2ce744179912038647b9c89147805d6aa56fae49f1be4b4cdeccc340f2137a3dbb228e15dc9d2cc52e38260aedacedfa86f89e7258d6f2d23e2baa118984a2e89e186c1e111c524844dc616f11b7121fb13974b368f30414916473c088ceeb1c0afd46f682292ffcbcf6cf22789f099730a3597868a0b2f0ab2ea5075ec6c18bcc868c2364f40168086c2679eb084150b10bb49a9801850898eae55e18ef68ad2b3a23ad3784a2e40528ce77e64e02817e0fefa3e9557001266f4fcd31eeaec46a573f9840391277d0800fb197cd7ee096e430020c516716622590b5d7df462311fa48ebb29dd01ace1c016096e602699cb175cabd3df6de8a02f1fbd25425a44bf1b64cfcb4d9aa1d5ef8ec5e09c615c72c044853adeeb5a806d48ad68eacc66ab52120a41f873ba1e7a5ac27c1ec9cf3df08c1132c033a339ee0778ef671ab710a39f9970cdd445a9ec5a706c4ca98ee28aef5feb873c6a1a84e2ffbb25949e51fe76b6758d1a7b04748ffac484ee1621a37fe805e763ff800004d8d7d4867cb200db6e999df202a1468089dfe03d6aad6062a415b22ac68d673057850974c85a7764e77f3e98c3198aec0d09ad47cb0c629317fdaf2ec8689de231102a3ab00519a22b1ceb71997479cfa450c8c034d2f52d83a862e2874dde3d39e30826cdee9675d17ba1d6361b1f39b6b8ee24e1054f63983f5a07c39565388536c9f8b42bc8ed628f4ad779b00a091a7ea318706a63e0ec0a97b71e7cb54924e30c8c2570f581a20c168bf3db937acd0081f5e02072ec452a11a355724d418f223230bbd64089ae1944d8509d47999397d42ae42959fe67d1224e8dc5b6909af29389d9e34ae85b95d799f2886e22da15de5af81b368269dfb1b9546a42095ac6e2b02a7069e84f677a85af8561e150ea9c664e013973f0ea4c61b85ed482c44caf57b0792e03ed5197f0d4977b4c0351b61ca91358fe818db67a581a36d2270dac32d673eb1ae44b71c45677f436746dcbcc79ce9936e24f4af7d17ef36991403c305eda7b24989e08d762e73138331ac6cb8ea7cfa6ec3204bf7a0212e4a80ec46308fa1c5ef5d3ec8b5820f15cdd1bddcd8beac0f13e5444ad81790b47359dc71512c8d1186f9b5c623c02e73d240c76788c33ac3e90045ac287aeb6658eead57dc122b36d12fb80a5e608ea7d5e3b072c97bd39d2b9df9bd6c683414c794a4c4b55424dda2b6b19d3842cfc2a7fa52c352061d0b7e0b0c83148502b4d1c39db94073f8e09800fbb9daaf0d17639f7e85f6b1a257d1da9560c43b024c0dd23ee661435c0b21d601e7c675255097e40107620a3a26aee59fa29f8638a4e90b024e49e8726a6cac0869b54432d5b92ff0eacc932240d107c215afc67d821bb251bd3cadc8b8965c72cc3cfe7891b600d836fcf4cd656509b8dc19459852729bd1b2388936074320e69fe89b17f30a3f51b2623171a6aeeee88899f46f702823d62a287b194516f6f6ee52598c375d5259877df66d3d48b059ef5f978032dad72081055d3284a0bfd0b49e8d9a30776fdbcb2b9f9a20037e70bc89e6ca99a2f088d276efaa013124f9634522406bdee2e0004d68bf5e61d1335ed3eba5c08cee03809486c905d75a962be4693ab0961db1e0a246189912542b8862d6853631ac7323f7b305fc124743c4a5414df146462442962148090134baca280626ad64a04344a2a8c374a80846d35e605d1788b959c5cc525b2467d22a065aa02db9742a5d249a094fa7a975abcaa062f24dd07de161ee6f73ca97fe54a386208eee1cc733126dba6aa2bf5d2ca88af44bfbf00cb173d03001464f2abe04600d8209c49b68bec5a64ba06aa1a9437570952b3b054d8897778aefd1722392e48a9328bfda5e14c97f9449a2d7e1a43874a318b8fcbff6035309533a57884b0c5913b4834a4a394012aeeb6368210e3a3c55ebfb38c7a8a680f07de48d96a54ba33f177769ef6d7928e09381c678db3c3097f38cef1a6347405f0d84d4f4f89289b1b1b55741710701d327347ce5335fb26af4a6dbca7e7b513e48bc868005a60e34a560d5aca43567e1e89ae7773406fc4527584d5f5dc41002f7a99f3c8df74aaf2c7c577ab6eff0315a308d1e4dbd19a26b484059e60f15e8f7b409af131fca6dac8dff5ceea191286f446b256a48376f21ca2c1c9e4760e3dc4405b4f3532b47d30e75b3812a4863a0e86945d1ff27bc81acd37492b6c0cf9a05a74778b14901104b61474feae3a9b441e4f727e256a27a9f59b737c51527376ef8996bdbb335bdced2fd2af50d49253c798949460474630294d9612ca09fdc46e4f67654c5d5380bc84c1076f0bfce5d7550fc0d7f38487a9e46906d196907d9e00ca58357a9ad0a0ff34742e01a2165946693c6f2e79cacb6e0b03c689d726f4714156c9bb66c9c388ee69c592e65a93d731184100fd30c9a1d4e4bdf57e81d46d429285036fb09a388567b1185f6155683157de2fb4e079ca7f9b06c002d110275f3dc0d52afd4ad88cf47012c37ac95cb738bbfa1d38053f5d49a699aa3800279b1641498689e24cf239ba7f071d75c461ade1d1506a1856ccecac09bdd93674605cac8c684e3507182e99a8c3e67d6966038f03b0093e0fd1086179443106feb0b8fa30e46076649dfa045f72add0b81c373efdd390066ab016a6ed14763ddaa85e8dec464a35d72f3cc72f0dce219be69bda3a486d5857dcb018e6afb70f843cd4a3501b65e25b8773c48c1e5da4b6eb66ad6d5acacfec4d5b99a85db3aa8a72a9841f4fb5324e115f99c7c5a3f095b2394e040953219d3bd846247ffaa78fd61b8768f047bb8698a939f426849c00b006a7758aba30cf478d72b76e2f432cd4adf02bb011b3f98354358de1f52d4941084918dd7cbddc51580999edb38941bf131bc66568f73af81a5caca521db5b3b36fac3b1594ba6dc5f894da9a41ef9477452cb64bd91f107f73f38c0e17098640c47186f5db2da5f58d77009e81e2cfda38f30f0ad802e54fc7b9536b05a5da683acbe34a1ca94f993f6d65799a8909c3156a02a0833aa30201624537e414dfc0ee409f5c6b42996403f7010904e7562838c423ba8130f25db44095edac3d71e3ecbd57fece07a0e0bb273f938e979b6b3a345c937e0707ff8d0f65882b9f3035400ca7f13d09a0f0f8d4c732ac2b1fa0e3abe9c68c48e8d0ce60214ec1ad2b11c8a07c3d75eb5c1897a96e563e3eb1bbaf792bf245a68173dac1366a3567a45ee47a94bea2597297072a636a944a3a98c588748e361c3d0f849f2ee4c77908287168a172ab9b745a3dee225b9008e8c4d55d7acf006bd257c64b7d50d2568bd5ea8d5f65689882f135ae8b204f3bf5e5217bf67a0ec16f67d4f029ae7a33c0606b4bba05ccd994fdead933b89d69f322a17db036ff702a56a4137d5289f146798c5cfb5d282dd7697d2c27956b1bba44cb055768d893d90f94a2dd6fc7de969c5ae35f1207fa46811d8acf088dd3bb05ac6eb0be9f9bdd1f95c45a6aad141df657fa32e2a841ed4de472a8e31f518c072feb5b862bcc0c0559f71860f850703f054bf7009cd4132ded7958375bc7c05acdb5926ab5abf95602a37db02837b5b78cf98151e4fdca8e63288b5e0346e774f11972d8e605677f1f6b6a264604742f5a73fe02750671887eb0637b14ece62593c28fa21f33ab5926f3519c7ff8fcd7785d159b33445854a7f2683fdb21d32ff4536a0a75b55d64229f8b82c6fc86fe34b315916f230394147b5fa2896d72c2d79af5e2d49f95d50a74249bae157a300bfce0ee2d20c2a189a5cba6cc807c61adfb21ac09dfea4b63369db387a12f967cea66965a90dc7432b8f7ed692cdd72524650580b81b5cd64e2cb072415f4ed1df63715fa1577a2c05783671bc60ad245d6e0f8ef1cdb8da9c174a4d64e46ce6a2c913ea87e734c2322e06e7fd04477f525c5187159ab229cb7d4b15caba4c13d00b69240312440adcbc08bb3f15136eab2094ff20c08b7944b56b84dfac89cb2798cc36e769bab4d731c8b658499605f871970b0e9b34ad53c402801567470f851756dee3f3e45e189b148e67c1ec131019c0748a3581fa00a0f8067b5a5c9bcc0ceb3984e298531090ec9118cc0c780bfed30f1a0518134e01340f023b05f8f4b327e1beccc639c5300b2a82b81a1b593b8f6c0c6dc332da2eb80fe132eabc49f392a005360479eb722786b7975e80d20148b048f661685ac2e27ed4bb31d3383d1c3d37b4cb0ae64eb291cc14befa371afc4a5445c261f24a5888366a4a00dadce40ea00dd41774dca6ba8f89c05f0d1023f9a09e4a0b5f166d603e7f48e5e7c0657859347789a3521c1451bad342711a4007629676da7485857d734fda7f45399ebaf10bfa067d8a3f3e9f07d19a43c2a04dcdcea5cb07750242b7f977a976338dcfc9da18fa3aaa493a9a15b904b3b8a68143355074f56cc887c5fa12850513ec24a73013570a2100b534ac224629af4b2a6f7cf183a5b3a0e50a23463f942c69bd60a2906d8c18539b3d468c0ae9508e11235df3df14c6eb0dada9018c18ff50a554598ff858a70c0dfec08871bc0d89715b9cc4381014a44eae8ae47552aae950f6077bdbc4c8aaf7f1f3e48d3a1623d76798fdeb103761d8c89a47a667b589c70840bca3d2a2f0078641602783eae2abb7e13f7d8b22900d975b8d7ad5af7bfa3ac6be4b6d626c1379a0492bc817d018d69bba4d8c1fd592fca89fbdc47f280e02b92dc49cc8010775df87441d6e3e4e3680f0892f0f6a7a9ed29afa4a8eb0b638b0fd675f95bf715a2b410fff14a2ec495d38e86c64d5a12926215590069235a547e3334701a9ba16574511da62c7914508497532642a7b0752437618a9972a30f7dc31eb6d84a5f7be1e0f9a2f5bd0804d4495ad527ee0cef5530d008207eaa7aa5cbf61341159614689200d13ba8d2e8a067e5d7c8602b6f3006ac2867654c8c41af2fbf1f218b50ab3744274f3067e477b70337942e8dcbdcae3004e1c853e84275c6f5928d0580bdb81f7e75988425d007481767b6d41761d9487e576665b9fb87f97dcfa4e5d017901c80354ca1f2d1e93dda8ea4e4884593b8750ce2a5a67ef61ae186f317947099818334df9e7f3b2e4cc7ebfd36f0635f8b89f6a70e178deda5c617c62bba22ecb44652e56babaffc27548c0ef09c826aad02dda4ff62205fc6dc90e025c4cb740021ff0161a82bd3996856a6bc497c32815c46289c56a666fa65abbd201f0401632553c1d2e99436aed5fa76fd80d0e16d541f64796e645ed00764e4899ee7d3ef965cede8f4c40332abc69c45d0d93cd1859165e54b7ee15fb041ad58c608b2b5f96423945ee7b8d18cb030294068a1da7fd4d16f5f263b5b48394df866031b74f4a6c4ce22c7950c5cbe84a60f696ef29693c05db3ee361817c9aa7572cf54591eea1df9785d9f234772a30d45d1cabd2f98e84614a6b9c31413b8d8c42841bdef96141af31ef49f8b6299e82f29d575f15493e9f1b9b25405147b71373965a33b38400916e24a9b33181e6aed49812b8d82e1c07b99215615ee945466c8dcdb5fd031ee49185918b5a950bf9f4c6ec7334e39c1aefba425c8694777be2c7c9c6732931297f0a16b6e37cd3308ca0e14642204598a537336d87228a9c4526a0cbbc03fdefde8c50d2af79534a259d22c440212d61cbb5673d93a3b56290c3002e1b2d59292831003c1afb97be70e291e021a5e9adee954d7f2c79ac761f65be705fe7be8ac38b963629d5ccb6e744910c3fee494bb0b951be91ab28cf733d95d4b774a84621d4f087ee975f9a67cb86a6767c3affb2ae1ce378119181a53aac8333ad30848f9f711c1f76811ee200567a57ea8094812c7be65059b9004eb1e8244838884244a239d3e5648ccbb261beb20b87069fd4cabd96ba47e6e6ca197831a01707848680e1246b9d1c90bb2209e7ae74f07dd8f70a778f33e37cbfb456b55b70880634ffff26c23008d2c246f66054644bdbbe5056682c8aff9c08e1e2502b32e3f64052f086e64c3deaf2104a5b12cb7dedd1b479b8ffdb0b8cf0f878727df14c00a0b5a6258a1a6ed9452e7f90ceff5f194200d6dcf28fe2430d951cf5eeff19f0d226128565e0d3d7c45650270c17e37fe20866c4f626b07d79bc9f2e752d461bbd6fc2f5393867905c3193d3fd5557c553d885e47716274d20f9384a0f93a5cf67508ff73063c2f9f7cfbcf4f42e1bd5e7406659e04c6b9d100ddd6838cd53b8207268aaf2e393a0185e416ff46ae99d282aaccccd67ff0c36f669c632787f075a898ee966349400c003ad692c45a2eb1dc5e2e20bcb295459264e53747be1fd414454ab55cbdfdb876c731421a0790b6f68d8dfbaf9905e46a3c79f3e03956031f3efeec213079d7ace77530017834ecd712221d5cfa302c626ba732714903a87eb98a638eaa847ac420effa4c00641ad18b187553aacee0761c3111596c6b09e15326cf6226860984e100621f00ac6a256a3fe816c391c2c7ae1bde71542ec99384a1396107a37f419af044eb6c5b553852e2ca83e5e1623b765a9ea62c3fdeb531d4a82bb412f43b3f7f2304c3081a55d3359f4aca2e1be699a26018275daa8b82bd7e8491b10ae33f9696b5b2c97406b6e29b741255d65dab21d0aeee60240102541b7d79a12c698fb264cbcfc328178852e06e26e2368db84bd96c8ca997cda22f14b412084cf647c12e0227ceee7d22062e87e043f8722c0864de5c897edfc1258c3ddd40c981e13dbc3b6baa3fad64344de0290bb228181087c6326dd51cd0087e669f91d6d46046cf350182c6e50e5a7dd21f060ae8686b17b60de3b78cbe7df7c23bc615a64c94b10928a5206806682c3eb961bdd4bd8d2773dda60a7b7d0d05cd6640bffd069e4db5d765cc27edeea0a2b7fb5e4d13902cc202f1870a7d7a2786c0fbe9427a339768d5cd6ee6a5218b1b1ff0e6497df21e4c435b3cecdad77826303e7b6a3ff090cefdb108a5e3daa254d70644f5467f720ceb82a9035b27ad47f0f65e2d111341e6032fc9f61690c0c83d2a5a63c1cbe5a0c42a1b2709578fd08608c1b527bef00d61afba2b10beebb173e5a0a36654a6c15ee43df807326a95591ec8555f2e1aa820821523eb0ad7953d26fbe8ca2b245a251ad00f342be7eb5c73591f8015f031113aac4bdac8a202a89cfd0404a6a4014673c7a0b6c481691ab06ae56dc1d3c87286857822e0ecb453d07823f5c13f3bc6937a1840505180f6a814c2c339e8eb71801fb37c14766281cb2feba0ff59fe5638a80a279915dcccccb972fbd9a1404ce4ed34eb7ea3697fa13df9fb33f5cbdc260be3c64c670e503cb37b7ade7a912175dd6284379c348c74e7eef5a2ba5a96934da0296dac6200215b0ae7dc34625c23ebc3e84a60a42a3b6fe96002df9fca4c0c03294910ea9b94c4dc5680ccfca5ba38986a93116a1c34f35653813452aa5e5a73b3734daccdbaa76816a9d9e6b36a663b487e40172082562599e26052cd91cfa8a2f4830a3b2c59e65adbdb99b99f8b4c8c74a8796bf22ac03e6a62931e9f453a37e0f495d08cb0639424532cc6f1bb4e5b273bc75195441f4c5af20db1589df6c0317ef12a940bb40c03177f2e2ce301f7a3876e8fafa62afc861a4e97401bbbc0949000084b70049a727b50ff3afb43f0fa588c3f1bb54211ae42e9e3954ed64665c2d51b6d7869272333ee61b44d3c2be97dbe516429f0c4ba5e5b110e33752cdf232a9fb223ce6a54e94f413095b7906fcefb7501ad5800b7174423f37de428cd258a544a53c05af5addb4fa8f7fe4acfbe784e81a06f9d2a61e70e0bf3b42709e0c811924a8743b2043206fd920d7d290991dda0c985f8fbfe732dbdff1ae7bff461311b1e7cb11b344958b662dc873337f51f484df992f695bc788fc14e7f915542d786f4eff10fca8be60dd489e66a3795fd7e64efcc062cf3872039a06af35beafafc3e631762ce9c9a36960458f27daa619e0e0b5bd6886c48dba5060aa84bc97b54cd73a741d2a67975eec6f53997aab15526559f7febec8cc5365c863bc657e942bc360aa6a91b5986f62bbff13316546d2cf8ce875c3bd51751e0ed24da02619d64e3aad8b5f37b9ff31b0df3a00f171da50d2461fa68341a28142ad21684d460c31024d7fb03f3fcadf4f7f464fd46dfcb917c3ca7c5a8c97521ed0e4c59801fc525ac66b2446bb9709665f68156d36d3e0e40d61844f6b5a9b7ad86aac488c9d0c272efd960a54e4b049610dafcfcce2ba8e363d1968231f000bc89aa50c3bc3802e4afa9ab1b229837b1bdfe2e4295cb300f01ce75c8e405a3c3e92905a3237ae41b4000e7d2bc231dd4197abdbbb1d5b0eeba3a453a7220354bd33b469bf61a7a2fd5aa7dd44e834d0306ae25f2780b890cc084beb31b3618d14caf8994bd5a2c90e0b53a3aa4fee56344dc969b94114e458f69ceb0b37a205990bc0ea098951c60a2a21c82eba70e5d222f388d116b10833d0747e08d0a724e8f07171d85cd89d6a4a304c33dc556009c309273c2f79e2694ab1b00c6aad166bcbcbeb0290d970ab4d4f68fa630d6f3541671f66240db8daf76cb752dcd1c9d3b267131a75097a01062909d77c16326673f23e0bce931278a43a15e1a0635aacb30fe6d3c3452d377744c965e014bd28a35520d61fad044645951e7457cf266e828a32b9c8b11251d88ad409991bd0e17e766a5aa3d2cf44181f6679a8d1b09f453aba912dcf5cbf626f891fb2e168b1acc75adae2f910689b1287f877c6e08e3b1c8baaa32bd4800d791b2ac2e32a0992c10fafcd2d6fd0553149026f9c42a8ba2563d12620a96c28828715362d194e19d59e4e957301aab16925e62568a480f9c09b2c146dd5bdbfbd5eeccbe634958dc1fa171cd85ae78f4881e686495e5e1a4cd88627bb34ad26eef36b52fe765b7fbdae1a16133d7cdf9118165283ccb859b423e44d1c7f5842716bb1c5741d8e63db09faed24b1923040ec4518c05be8a9bb29372bce51fc0884ee9c0349a19fcbe51aeac92b67ca48c7db692ea7bfda258b33a51a8af1a8243396ec7796003867b300299c99f985dae0bd1ba25a976c7a41a26b756419987e579f062737b458e4014735a5305f94d469e2f0e671febd4eb2a2eb2bd6d61fd0329bd8ffc14a60b12c5bcbbcebb6435bdeeb031aaaf34425d92b21b329c1bca15d12f6c7bd8be0c8ff7ebdf3d2350a8a934c7a1ffc00e804c571aa253971237283d5f31e360b6fe0310afcae8b184a97aa708db2f685905f4b485cde70fc5c91676bf9759fb039bcdf6a9dd31413d690626184f854d0062e53d1b0269237eaee626092788aa16880a26582444b511664fa829f38fd76ded72a30a9a4ce061dc7554e006dd26e2bb7a1758246eafe94526f82b8ffbbb1edfcd8f272c7918a25555cd98a16d106c2c157811a3a3c5209e372c81b09f4281ce6d1e82daeca00cc15401682a26fb95d089a6c09e1f6bb931c1afcd33d6d776f65877eedba29e59e357b1778b60f9158125e86b375c970f8c346d7f58662bfa80530d06e6c84cf04d85a6487e4e7033ab09bfa0071473fd14559163a6ea9483f34bc6c2b27de714f196caf8cee193fcc4d768f6602ef94f55fb242e6887bcbd5b08faf42ea249237c1a236314f5613fef5cfb721666a2506faaeb799569645e1e36d8623b6df6b0cecd04db32b6190d748a1bcc6d1babc2258e26aeb7d83c8b389c0739975cd091288208f5603363e42e004ad3a4311ecd33766994d5f203afb5a70a284571eb24c0a7854877c434c845d3648da490686eaae8c550651e1d9b00e2ead2080f19ef23ee5f0eb4389a2b5c30ff12d82ec629a1aee6ebe6d446c273c8305b2df3b98a3a5defa7b7895f2a4ac3dce658052344c0ab469c8e4122f50a5d24badceda4f91dd29d6b6e133c19a4ddb9110220fd0835de80f9d7a12ef7ce24ee997650bf271c06ba80c29125c721ca0a9932b86e08e48c916d3d5134a32dd5e00c9656b07bd4e1012255aaebece928993ad85f535cfb527fd6b54337ea15b6d69b5c8814d73a5fbba19c28627b1550d3451c2e8066820f768b5f3efe221d0cfa0ede5681edb85a99f26811075a26fc74236d320399bfc6a5c4849d8a575dabe81f120179911ad65d8274f828c1819b8891e2f7beed7bbad4180e61a98fe39ff48a3a07ac9c7406c8bc16ba488645b280fc83f51cedba142c2285eebfad5424342ee7963f42c7fefee0709549c4b205ae9e755c92ea289cc05d963c7317894d6b5211cd1b41f5de30bfb2a1c14a1e534d5ab77d69e65e2134ff26ec5234422ec4439c7cbc0e7b2c4a59ebea27939a402a69e4bc9a82edb531390eeacc4a6ab7f74bfe562d5fabbe8523d62d95f06fb8bd9942a8970fa89b72fdd10222dad8e028501131993707ff073df5cdc8a6c45a8537833672ff2199b153cc8f5cb6645ac55d08fdeefadc215209e3ea6191b82f4b3aebadd2fa4b4a8ba394fbacfe86949d481ee792f62c8186df952b873a03ceb9353da5305057a11a11b8d3ddddd59cac424782ba904ae4d17b2f3e8862e4a52a0d167a00cc9343bbff922459db2925535c0171bb2958d2947faf4c170ff4a879ab47f5f8a0727996f7a8a4361b046d82d984fd75073644f48f55f48c2a56719a842a4cc4d6033d57927c1ec507bea8badc99e3f6896ae3f5bba03fffcad3bc2b464cfb3e557754b7773a78f17bca6948c32a2c856440cf58be9b6cff706b9fff1329bdf00c1d6d957a2348891018d7d6bf75b21f25c70bf25d5adc2bdba5272d0cca8caa69dde88b4072337e87809a45a66964a3b9d50384a25688576d1858efd6ff420e914c015035cd3db7ffa017c3cdf518e9c89cd508b58a048654144bff2189b5eae887f480c14be8a407483c13799b8e628a17f8d1b0608100e247c9ea325010330f32ef3c74c25c602338015073d705e01c9cf4f6ca93065df67334f4d860f437ce426d41537fafc992cceafa5fc251e507315caeafc39183c4f005f2e7db9518f6f53ed9c586e628fd1b50a1d6b0b83bfef35cffb6ed4bf2ee14132d91309abbb27f160f71022e6e8289f3bf03f411ca54e94a3dcde5a3a976cb82a3aaf1dd8b816ed4ba437b140a6c2ed2922813fae6e66ad0e7d83b29ed5b2c7a80f310f6fc15683817cc481f50d32276d639801afb2a2f79f54bace59853b9a2a8ef7dd94eab230354c27755eb8ab3e5e26510c5607ece4d4181fe85d9c52ac2d4987f4515f3410e8d1f4cfe8edc3b3b72e50ea889e55a722855a471c3c1417521b3052ad7c765e552042a7ab720784b237104781b4627eb091dffb29f37148b5de1b45c6bcb40d79e656cee7e879b8bc276119e4501581d0dcd92c66717ae1104d156c28c32f62d826d099100ab5909e6ede692a53d61821410f0b1dcedd235a469336c9c52def768f4661c5d2a4aa81a24265480f2461c32e08fbbbb5071d680ea976f934da94146621ba10cd04b7070f85051d74804901e8d01b0e6d41337240498239b005f2c1ae114b0d38955d3848a4674707c1e4526d12b35eb27f7dc3883e8ed382e6245f9faab7d8c7969c8cacdbefd6c36db55d04abc2361d9472634030c2306da75277c9b499b4bb0ad6c8229547ef1c9ba98c444c62744578dc73b50b9d6961b1bd674f5751f4f8afb3e510403334c56b4c2e30198d75a81d3561d2485dfc3c8bed86ee206f03603c5e6942f6a68ce148949e0e4f579562fc6f2ba0ad3875dd3e5d6b85c93596e3d4b6c6c3676b668a35ee11a7f829cd98a69b87b102b0613a7a6ff26adfa0e127c7b772d3c62c84e829c786eb35950720146c4081b7c38bf02125579dc20f11f2fd0782bf7334af856e400916173fb71336a2b15f6631697ae7dc288b40508312ea47f5751a644aab44808c6fcbb2dcc0df508f5bfe42aa145dc1441a8e1b41dacbaffcdfd5fe1ce5af93ac5a0edc92655c944e6dc0e39115967ed4795aa7b7082125e88aaab28fe746c1809598e84ec3f33e4e38e3286d526a09f6e04eeb1f1edf6d0b15b513678735d112fdfd746665f550dee8bd7ac26e4e1171f3a3dd77df2db45d6ba48db8bac8acf530913d633070ceb13f439aa81a600caa36b65f70f6a1baa667e4a133446eaf2daa950553fc2f957592d56002a336410556e3c1a8b5566758a207acaf7886de0d693a44d43b72ca172d80898dfabdde76c51dbc1151539eea6b0e4eab218cbd5c86374e1e0581ef9c82e654084e87c42eb0496904e53fb44ae4259ea228090c1fb50e5937ed54a373cc791c0e612c85b320715b69260534e9e9d5a504c74d81f72e4c30654cacee3c3ba46a2b644095ae01e08393cb1664ac2ecc6a028a623c46275be0fab12fd6c38c256f6b3fb763789a36383e3f81013a50fe19dd6466f9cb0d37790fe3727472471c12a83f3e765ed28f335a593e0ae010017b8e088f05451f650dea2ad6b16815d1b28d00453ba566bbbefe7b528019087997978a8606d117e6ec573861dbb821476ca28327a0f235918f43736f0890e09841c0feab738e88bbe51afa352b6ca4986679ffe1dd4a336e8cc166399e9cce70053b7977ea71deb5f485785c6d782f7b5689c872cbc9cf9c77d0892229ab46db00ca7087dd3fa346d5fdd156bf33fffda644bd03cfdbafb200a45c6a8c446acd9e74afebf962c817342c051f3cd1dd995e17a8bca45d6725c5b46f0a08062c323d00e0e42d3d2effdc035ecd53cfd1caf6cdb47f0e12e20092ccc278a05fcd713c8cef8f2b8e7af9b8c62bcfbe6f36688c292e0e13f1c64b5b551c568eacee434ebe65e10f406a3df08cd12f8e23599caab5aca09639f3479519f00bec7c549ad82d05d9c226ea15badf6e1c41a6b524a00e5d07d0853573e02a373d17309e453f698d98eb303cab19fd4bd42711d809f68cd51898032cc8fe9848b5fdce3994045c3de6306adfa2cce30c63b5e0e59f006ffbf949bd2b4a7b594dca6ab33457d8d8e5675ac48cb79075edfce43a340a8b68c071c624543365527d4e465877331a5002090e9844531982789ebfe1ed355f0888fab495e1cecfa374de9a756e0ae32c26bafe9c4322dd731403ba4012807ec00b9ac060633c28c76659e553d96654c8fddf8a1535b5fcbcf4348e8cbf6bbe55d710efb403e2f3d1efa66238858ea3b9778a824cd213234f3888b70f90a0a4595b19e71b148fd9e11553fd3c0717ea1d0842fdbeb6798e3ba7564481b4e75d717e5c35dca228d133d2bcac12f073b4ecb796b9c10b78d499bc78e41a7afe89022d867406517c423c3366c3747b7ed358dd7fd1a03bf8832deae84a32cd22a8bad2a59b416abc15697b48433de351d5d01c2058b0b2a3010907241a4355239060d045dbbe692866e84f32fdce3daca3fac7a24192c67d77cf1f72f3538e86b8fd99a50373a790a6a254a116cc68d369ba7b4a605fe9c98c0d21502c2bf6bd0c201076d3e7be7326f3f51d1403ef6542c9680ad945b06389a74c88b65d2a3d159674c74e3c0e20f7515a46c3d07979e0e9bf7ff7445403c2aa46126a5910857f2cfae00f6b6528ae959bc7ac31c51002d4f002bacf0b37e2f61728c3759c6b0653e94085c69a65c90db917df6a695437103ea68c17b69e9d5aa6f0b5a7d54daef5bfa9d0c2e40a0c6102c85d2410c8a2389fdfbded712f800ae0d69712c179a3cb8c8d9f6c64566e7db92eb08ddd7d96b595c60e5d73d1ac4d69afa2b396da358c72746602157c247d504ac299e10c9d7b8eebfa68badbab691f15d2127d3e8fa887bc79c94fa08894b1172e4085c4570a24bcd70a7b387b62b2cceabe8d370d3dc59ea9d73d6571ee810d824f88c1d43383a321c0fa88a617e19018ccb9039543844c2e1b6f11160c7b29711d5ad97bd9d2a47817ae310eff6184b0ca7421dca4ce514e54f0203c5f3197f54138fd2f97bb01d5edcfcf039b6c3f10f8f144267ba92e188977a4ec219708d56f8ff7ffc0f57cd56cb28320147e34721f450a10d58760f2d7879cce88d6233a28f78308c3c56e7c78c5833bfc418a19dbe3247eb4f2b48b132a906e85e55a60077d4202af2f30992303212043684fa9490b008c4b0316c625910ef451e5fe23a57edd4596381dd9922e6d7a1fae90b807860424e1dd168bf202fcf0268e5bf85068cac9d7b769ea62995e26b469698ddeb6caab753c3a202d7aeacc4a6d65e7e68532c247b140a16d590923d5ee0beb68f8c4872d6210fa712a095aae6015f951dd3b6a3f004edd7f47cd2c5f154ecf5bbc5438f1c93331b365fe10a52fb4dd5ca07866693aa72d4ccf7e02dcf2b1e0a4ac918bd480dc64ed19959879b5a8bc78aa68e380a77356cf63ee3c3eac5146fe63e88ea4647a7bbb6b12fd20365bd67537ed7bb788266c5f2b834d33d78f413b9b0b7a62a7e3886b79998ab12f74656bc90c4b764adac06f6d15dadb044398c1b8bd19a70a3a3199c6d0939d9bd2d282fccb39c64144e5dcdccea73a479892e18416bdf97fd0b6a77bfffc544f54490b8a93c1b9e0a77f277126c0576dbcd2edee189f70ff822bfe4048b04687f8964d00a31989a683484216f81bb429dca1fb47a799c425e563d2cfa0be69ffccc73998ef71d73a352a3aaa3fdeb6baca0760580f202303bc3a668c22ef0bd30dc48ffd1a19bf1b91bd14810e8fe35793e569f2665d049d15cb7683d4dc688091d96d0a94cb8029c432b1568a916a3dca8efe7b32b871b39662dd5c173501c7c7ddc76eb80f0946464d9f2a054e50cfe3a349432d6fbc60ab758c5212dbf3a7711c42af25feba2da7ccecfded4d7aadca2999b51491b522bf6681ea1f888469a27a627954d08e5ac59a8d8f4855c8315e2a0d2e4985742a10de4a733b192a658921cdb6a0776533373b54c96659b02a004527042a5e9bb48560b1557c17b8d6e2ea730d89236fb5c93ad6d673fd3e08eff09994cb2b4b79460063cc53e9c4aa4e99557ca9680d379ef4065535e9d4aa8a5bace80e602bea97b4352e794104b5c458cce22d42f2f4c36731ea9d91615cc52c1f0c32bd8aa698d975da8aa5a07e03513970d15eda3b1156f4d4664d427becc542997b086daf47bdd95e0c0b164f5bce0a76e4ea5020d7fc03dc955bf2f1c04818c7de5bae495f347774d0e5af8c28dc1763882a123fd5ca48df27c9602d25b5231fa719f70c5760b262b0b9a9e21234e065cc869c6e7f5fb39354e7d1ef76a2365dc0c027a1c4da064e172d320a46d5dec06365904f45d0d91190f78d764c7092499937f75c44ff86c49654a55482b6ba677bcf8bdf786aad422eb508e2abbcc1a0ae69f83c6b72d810471b83710c2a6979ce32acb2764bd8dfef6d357cc41ab9925b8a4a4a76b898e2dc3561dd0b86622c0b545e883337f66241454d407355439978fc063c1642ceb44b286a1813e5017ad8102ea8064f03f391b5f12d85a8e7c8742c90ab74962c163310bb84aefc56a6235921793e17f4bc54a987c88a72826eed0bc119c74ca54bb2cb1d6395b141c013a894c0e308c4a0b1a27104ab6ee1a7ad98f897cd4fbe6c71584cb96d56ed1a79433b096ba778d71e4393343769e878158d9037ced685636356b9fba558990639adfdccba92ca136dec840367c80fd772fcbada9823516c1e19dea6b3cd7aa08120b4a7d86a18c8e9bb670ad63d383def1f5ad2a8019167cbe2e585fe1eb81358f256794ccd768f6956fa97824144ad94a529aad66af1d5099edf52abaf40b343f83e606f20eede07b75d74f08c6af8fc3ed16c08bba6de0f18382677b0872750bf7581726ce1f51bc09fbb297196972806ef78b2163f10eb90cdff62cfce956904dc1361050100c86c90db0ba07d52a6044d4234585e3208d1fd9161b3f7fd1a9c96b4ccce1dfc6bb70960c9ea67f1af4daa48496c50f6053f53476cf6e569ab4c0cdfe18e4bcbb09454330b03b341ae732a421e1e581639121ff02558644e9d8811459f9c5a7ec14bae4533b6f74a5724757e5383654e868ad0a9f50cb19439180c6d8d452834f5affd5b2b9b555b5bf0df65014dfb9f86392bec639c1a55284f630664273a68f815b80b6a48339da3b09d01716789d5115561155cca935ffdb01c95d7aff27b83fafb5c8a65a473b258e88cf6e38a644a93d74aba12445eecef94e2430fee46d91d7ebad7e8f4c8b42469ea03e38991540b936ddb6263ff35c41ed139c7d5c6d9d118af8c38a3592483dea88af22cd051144504937bb60b6850a632f0e72bed7001a30571e7079d1a84c38242d0129453d9c4b07bbde0575472c09dd6c6ebfa0ab9c7dc389cb2f056ff03b002cf8219a8d331a986cff58de54bc8891472996936bf9c9e0e97bea3e8e49b20b68a83d964a1a37e08ed514f53cb9024651246a0772e350aa392b5699833d122a6cab0445004ae18db8ba8f51c61239a115a44829360b4f29e501a25306e086e76075e0d96a7894b6d60eadaeb2a481faabf34a0d36a28aa859f7f6c0ec674e5dbe01d8a6c5eb573daa00c38c88a991a928c1fc701d82d872228f1f99787a751dddb4547e9496464b98204fa7024f14f66ac93afe96087ab54af5365d68278870431c29b218a35a49a3accd665aadfd708c5806002d59abbbd0be1dcadd94df45a33a578114789a16b035faa66fe35fbad2c06db290b8dca77c8fe0ccc85a8c90aefe0b5348219806b9f98e35c1f2cd0615cadd2f2657dc8519c839620075a78d1f0fdcf1349033b3fca6462291fb7f752b7ed157841166f7b6555714358da05b2852fa22cb60e74b3d73d82dbe9ccf35e6b3c40eeea0d1f9d2e364433a1ecff653a78af7b4abdc4bfaaecc3a506f9fd7555d16f8b6bbc6751c1c3951feafa585d5bbfefa719b91bb8c347945265e8a1d24f1d1c0d208a62956e09875fd9478312cd5c376122201c774fca7ae661432049228f79f845349c497644e2a46181dd938ed45f7b768e0dc01f5ce4c23e261c056fd26397de6200e39019a52583ba9ee005b42711369cb88a9b7351c119bdeb59f6d1d416f40c56e10fc070eea895d0e193178cabee792c99031dc0f8e505317f4a27736f0ae9d19bf17b1d4981c8eb3ceca454f28be342434ab8c4918e51cbc2f320f5ffac507f45de7fd8a5a188402dfa432f8d3379fdacd034a6cc40bb03d31cbee8fe9c8b42cde7da034b95cf0a3146faa306052f85eaf956a803d71e661e02a0d08d0a0fd83fb4821bfeb5f1cfe93e169aef75c6e598388dec26f790560f0daefbb0e69a3b673e3d916df07819ce2490e4e7664123db125d4f96b568c30e8912a4508f9e5674edc8b95881c5bc1bdc5cff3b914c0a3a45e21dd0d5c215544f61b9a0298c7fc01543284d43803761009b4c3a19531b2eaf66ad7b31e05857d12897340208fe67245fa520bbd8109c37428048c262d84facaa3f7f9e4e4ceb365823786972f5c6862aad2914972840d8d96aeb9ba6d5a7a1bff74a0fcc9c2242788ee868b0fb1f0a0e50ec418056c1f1002f5558381e0b121fcfe13f226ace9fb697b1b1fd272395477d9445ffbb91363804c663598edbe6ce1885637cb93004b428f080c76e6c5323ba82dac1b679bf924452d6797f27081ae37360e740aba009682aca5b6bf48f4d7062d820f90b8dda622a4422a000f44d813040cf8de33e28300a5d4133a0ebd42232fa457e815c14a4fde5c4526aacaeae4b8d38d3c7ca83c64d8dbbff06018e3f2185ce2d843cc3cd0b058a97f5a2c03ce6321664335dcf3c2d28e43db18750abc151c30ada01470e81d8943a3b01922b22dbba7a24a96a9006791d96816984840b988116945d4738f7315689a0eba21690d6d4c3c8aac0a3ad12801a781d46d85eaa0af016f02802a1f3f12469415fc54146a433fb2c24892b18fc880fe64dbc672600b01007942fd49bd607617aed32d783030ba94224dc0ea9a5b939730f74f78462a0beda08ce3b4f30b0603120f10e4610dc4614236c80015cee2f4ae0626322d13820c7d18105e0f4560df56f5571d69f84289e7cc4c5f24007d5bbeb49d9886239760f9943a82a334853ecd722c09416efa8d52233432887b68c8ea2058efb1d2282e5ac811f3401785b89c14d281a20f76c303e25b3d414c28375b27929d3199301133959290203b88bb95f610ef31e7f580afe76d210219fe887f8d7015e9ca5cf41e180d6edd04f03e2d1428b6fa2ffe6d39aa5d48803d44a6aab1220c2a0079e901116bac81ae71a2363372ee7090186959b453eb36bb69073d1bada5234721215ba07684462ef68e4378f9621a2f6bcb7ce14b2ccb86147e298114b4b16df803f3e00c832c4c2659841b5f92d3ec0e010ee1606a86967506a0389202389d7e214840ea4f01807e14300f4628925a1bb536789019e96035b24e17de9442e90fd121e0720e8b69fc25758bb845370a6be7c4cc4b66c7ff0e525da22706b102e6fb3e5c7e0d453bd7fff455fd2dce42e0977b56518293ae2aaf1ab76e5b5271e149564aea1a946affe7c6ddc54c1bcd8f4e91e1292d3948e92de399082b83f15229bbb36e9aa9dde353d0f25c2ec6eb242cbceea1075a09f1c30eda5847684b210573ca00195dd5f6f811a676e89ecc7b36c86962ce9dd9812a69db1e0179293ffe6718c2b0fe90cfbe9597699288e291507fb9714807ccc77342d59131fc56c91888a900ab8001ddd1f96d80e05e05f867b5b71f9fa0a42304be186dcf727fae14e274054d18f8a7c5e89f79db05c7bbc08e5c4b0a42e2690569700f862083fedb2e3bee7505a314f510d6513762d8390fa2e9529d2946e327c042f184874a443aaafb746bf7ee5265992fdaf6b0e6e90794961723d0823292db22120110e72b797a9b61c2046df65f69f4f28a744c48197dbac1dc95051ae21af3bcb160fd84c8ff23c20bb86df4d8eae3f658b9d1f64bdeecf151fbf33ba2005780ab64ec449d3732bb1afb5e445b14b1e26c02a9002d7513d347f84ba613ae0239d84c139433ce0a94c1c462c15b4feb1d5ec4ea68cdca8ab1247f594292006c27015c12c24d071014a112503d782408a69c5310f1890048ffc60984556f17d589944406962acf36b8c13d265190feac2b64fcb48804db9c72bd166b8f6e89292e8e52f2be8851df75b71532ac6a504ae3bb67dff70f9fadf6395587f0b8645c7c073d73e0eefd145eb11063f78682ea05ad02aca35d86a4651ecfbd0836d7bec6d327fb77d9e90f897b07647a8a5f8f56b4534b59fe99387a8b333f199159e356176c2788b0385bde69d3474c12f7d9ed5feaa22ff818ca73316ae97d68c11d1d9c65f02509b67f390b0711c40a8d079f61640592b693d52b8806c4f2e433662e790c9071c3fd9063a7daa2bce3ce3613bca6fcf217b2ccb9fcd9f3356eafb96d0678397fd114c61bcc9e4a316dd6987793a48a4e1d49077ae64fa3fd855cc7c543f4908ed2432227d6c663a8eb0479233879813e90cfd07ea2d5242be4205ee02a031a7f822a4ffbfad8739210bb0f106b843f98e8d0adbb80607976033170fcee89882f89011557d4e829246a005ece1b40a66f866ce071c8f1b22d03e5ed135b1c03905e31bddfc14d4cf9222586f179255b52b10c2dcc77ae001efdf8aa21eadc39e344804d2d639b4b5618a740d6d66bf98e94e1d83c1dde143d985005174f19b66525ebdecb833385e0695ee8cb17df66cd1a36c184aad57876d0c7adcd3db83134be78f11eaae99b23dc8b04ee539d86387f8bad5d54071527ff4205419919c3bfcb4377a1e051e2d8a2d52a17c56a1c8e8e065ed6b361c2d8ff7a603e1caa699362f14afdd2332cb3d07d2de620d7dfe65e86c484c1616a26cfad38c7ab1cae87fa33d2b581dd945f8df1c19ce14c2e1dce763ce592e2e2a57e6b0b6e131c1948d301efe7d85b10e9f837753d88c97639e262cc53b149804da8c77af55209e51493a6d38387a16a9c49c18859e439c9f5da63722f068cd9384dee8ec3d701778f7c082f5e30ec4a008e4544a409eae3b816f337e2aafc8f59a8235d787c2de4cecfdeae36f8b6db7460821841042b6945b06e40afc0aac0a34f2b479a39f4ef2db3c7597a7ee93de0c7778bae79da0a84c14411abdeb368f06ce266eaa77f20ebfd5f4d35345481aec5b47705dba8f2057ee74444f474169e2a6fb08081338d5a6eb88a6060a6dd6c0ca71b4899bee3ad1140f4a03ef7da334dda513dbe744e5ce5d727e4a949e4925e4e573b49cd8688e2e6747374cd20fe2544cbe43c9b6e94d544b0602bf0994eedd7b8ebe4cdb3cdd9b905ae76aba9aee51ebeb99bcc34963a24160ddbe3dc51dfb76d34c71df6e42a14066e88c77f8eddf0d4edd6890aedb8ccca91ba5397d44bfd34d13e25428214e1da17870479dbd9994a35e3a693bc93b0a35b36ff373a2a666b8a79c7b4af6d139cab13781d2b75bb6134d995bb9d24ba32ec000aaf0dbb9244e2aa434dbb6e73e6862c2794a944efa3625fd9ca8875e12de3625073d25484948ce9b70d4cdcf89badbf7a40994e8764b7701864f851f69dd1c24fc6ebfbe266e386edbe8428f7ecccd6d935266a5b9ddb2f798a841a0a7e383d5d3b15d6e3978e3e4dc4673bb9ca3f99dfec97be766ea2453f2f43deaa7731fcdd4e82897df66eae4a66fe7503325e5a8c9715fee0b2b371a8dee29513a09e5fb94a3dc3453a79b3e3a2767f79494d96df705026b776f7e27540993a74e2f9df4ef44952891ee4d58b7ed26b3f4f5942849ba3be241001b58b773f347d74e0e127e39acebe220617c36eb35735221e36c960af3c8538a6ea8ee9f8afc67430a51fac743dd6fe92bc4f6207e2015a9fc111695ef0d218b2018f1a1f47589b37eb0bb4d56e10e2adf0a20415075a33659eda8052af6db38820d1b358c50a3068d1f1a34568ab0b29222422aa5320415951959cc988112020a95128494141420a0a09cf89c9c9c7e703a99b030994c8c989894ae2895a40fa424f580441af16034f27a3caf2bd275dc0e386ed3c1b66956685a96832cc37080fde506d85fe2e3b1431b2c8e186bb038ba69b038785d6210b23b8c6b8ce720246601b1917202b191a559fa42fdbe20204f0912a1f2332054be843fa87c0bf6c0072b7c50f95e10a00cdcc181fc78877798fff2b27d2b776efbce6cb4bbb45d978871bd260babac8892b5935c82a3216e0bd042956bead0d3a1722e0889d2429d7a6342412d14241424d45fb4105c2124fd059ce274ea20181e781a4987d142ada48b9a8c1e8a42484e87474141113a75a17214a2a2360a4a4fa873fd1b128a484e34228139ddc29dfa2874a8e14f13098aaf42e310af1a9ee210ab847e864e271a8768144a22d4305066a514569894836f70eae9b083708232953e4a36833e948d55f7a99fa63621cf843bdf9d85365885d7521c8516c7e930dbb5ebc032a8d02616706a498c244cb8c217b5eb32e10a41955b1d123e052184f45c6a25957a0e0e6a6e8b1a397081d873d3da35808db91b0483dead95213f9823c44210057b809cab6087c87981522c11173db9f56b719c8ef21356e1672d10f0a78902458565a83c0a2d8e3ed73e9d8278d59dca04023968b92058859f0d56535fa1ec933a6358ed8e794674af2165c1ab20583d3db592659e0d56fb1989b360d59f9a34dd219cfcc32a1f521965945175f00eab9881600e51d01749a8a8d9649f75e147a15837e8043ad6140c1300a12462548e43956351656b48f4e134542daa10dda6917d1499cc7c11a49bdecdd48c570e00730f3d23ac7a3a4767cf098073dd013eabc2eb1f56e137db150a1117c64df6e12cac5f3f39713d6914eb3a39777541c83804df87de8cca3320386cd105188a260abda9f04f126b4ecf90704c5207f945219aab7c3d254e7e5121a9945f873234e0b93b40ce656a0c91f32253e31f96fa3edb950d226a7ce9678355d435ca3ea8c93f1a1dd80745f987cb2208897292c703be55546e63523ae969f617a7abcc7e9f8ce09afa4eae35e690282e33240a2953e3d6ff31aafc07739a0a0b043f355b685df836660fb18a09503280893607693560bbe5b389b546e5a7a3dc3ad1efa60a49a5501ed969f608a8426e64ae3f71d1288cb00c94a1718edbeff5d32c62d10f5cd6657d695c1fb8a81096a1f1cc0127a741f984a2426b54ce330a1d95628413f54423125e35adf96055b90afd6c681c625556370c4754de1fca398e42bcb28947f94793baca51324a93dd4637c3d3a19284572a3448ac2dc4aa215ea1d0fe825547c8acaed014fcca516ed3b5081595dbc4aa9252399cf0eba9501a7895e76024e04cea2a2915157815faa566543e5855a807ba9e7e53a342bf9b6e41bd9da84162158a43294f07ca8977c44d85d426ce38a4291e5c3530e39cd641cf01273f4dabce6020de22087a11387914f874dae51d5ed389b24e37b79ab69accafafd059a87c0929f7b015cce3c3ab2c9290db353224ac5be1d5f5760bdce81321c01e0594d1a142eb3c1d7049e5e1b3382cabeaac8b756d0ef2a24288dcc880e0fa1321b81e0594b9a8102813ff41ab871a060a754e146a110390106fdc8b1ae4cbb10892271698d538213da52e6ca6340bcc46498992919ba9ab08f6d4f5ad50663305700bff92395e805ec4c0d3170f8c143121bb3987320eab3847c59171388773168757cb39bcb2aa4dcc58c5960e0e0ece0d84e0822704090d35d18126145660861e9f1f9e36d0600c60e4e8f44ee328295a4214243404d493f9485e75c7aba59f4dacfb6c0772a9ecec43a1708ec8af95286931703e140a0b9fca5fc1194205848f4d797b051e2e847165a118708a22945bc0850bf75cd0a8f676aceaee64fd5245c05abbfa795390f0f0270b565952c8af7dac6fd6f8fd952672965d87e7aeebba600fccb9aeebfa56096b9aa6d1e993c54cdb8df64ffb64c12af6f9699d664601c91f9f22c8535424b44488751aa28824b78ece0baa4883830caa7bec6b9d8f8b58e80d3eda1be497b14e8c316a6e905f068b9672dd0f5819ebe3a2aa05165454d15d7f88458df4a1b7ef2fa5e92f6d9d697553d1ad0329cdc2b04e6620e3e52f3f9c05c6fac664d98a37680b5754e62e94b0403b6425218cfa2dd1c8470948eab76264d8f5b25d18a10b75e642c10dea10dcc2289c8e4338b977ef14a34755f3457583557c3a9c2f2a316ebc9c26aacfaacb52697e4b5448e3ad13effd2d51b99bfa74ae2dcb6a53844bd41cb57ffa7a3327305aa7ab4ec7e2e9d7e8e4bdb3faa672f37bfdbadb58f5448709e501ebc9737070c61882024d33d3faa37e9f7e36b4d738a41f8d470a29f41e396f5aef094fb0515f333dde9ba6d4e97d93c3d3b947cff3bc9309fd96a84bb477d4a1e97d7a9fcbbcd3bde760082184232cfadefbd0bae9fae9b2688a374dde345da6a79cd25c3f511aec968d552fecddc92dbada6bd04883da741d8d4e3f5847e760c353433a6aef0423770e77d3cf26a7ff41d8a66747f66432bf25aac9bdd9dac8a39f898a3b5934388e06776dc41dbbb8ecdd21ddeca68c9a9ea34dbcb939f8e45d353093120dd2e5a5aecaa8f5114d9d4e6e321d5ed757ee79560d1b2f4d540daaf23e3289a9deb9efc29c468defdad0b29766cc8b6ae4dd847ea8ea9d4bfde23ee3f48bc7c94d26cf831042d3c983d074fab8abfc64eace511bab9a9ea34df344a5fb8cf9e5a8dd51f35ba2768738bc8a302b93627947dc54146a6344bf06013327f504629ec9e9e4dec9c9c910ace2d39c7c85557ce387981c0a9847f4508255acd292c8186fda52da37859dfaf0a77f3656e5e65140280f5815d2701f3d0747194ff4eb9bbc07b1aa77cc33792626263810c73b774bd2e8dd0aaf46348855bd89793abaceb2b12a77cb33827b0d0268aa29c48143da203f556401109225645d7652578b34f0a07e10e7db227952c56c0b1fa7480571b6280c2012149d592a11e8f0e85061c50ff2cbf2613a9a18a411bbb04f405e24d94845e52f9ce9dded4cc476cba7ba47b37569888457f0a24257d7132a1163a7e8de1cd6814a3c1d510c254022e7e414c10e62335428b9bf3ea00f2c7f1a46ae0f288475f94d5eb367b72af938b355f5cf46bfbeaecb929bf2140fef9c3ca21c2279e10f12cdae5c1052ce13efbc54c1c5068010fdb33ef0a19186d675c93934ae4a7ea588f66b66ab92af4163a25625ffd96d8bbc8daef2707d90c77609f0bdcaaf2c10f25276c3ae3979bacbecdec3ecfb30e15f26e95a6f87e7e0dde5be2cdfdda5ac63e406cb5cf9e7005e63c2d3987d6c76dc8d73736bc9d36159de0ef445485f9958f73249674fc75e52c88f7be621ccbc2296f215f408abf8675d9889d6e58aac6ff0caead19c9a8457f8346791233feef9e91d2827e77c375ddeb387c3e9c3494548277dbd1ac8ac64e5dde1f4317f700bdf8729046700d34609af04f2e39f12fc30d1e258395f9b4252f0d68d5944fb0056e467c8afc8ef20bf03fdb2152a3303b595c5d8e152ae783a248d912b873bccc82a79948e5592a5ca73ddcd291fe70ea819a801d47895b3cc5d1fbe961a2f8019af9af1dd8c2b3bd09a0f7e76ddd3e54bad89425250fb13daa1cce88adf77a65967193879589ad6d10f689dd68db40f685408cb8cbe5e033cd2bf68988e2eb7f07066399ccbaa1dbe72d21c593c4c961de6b772aaf4d759f62cfff152e97bbcaccbe744edf9e3e56502a0478d94afc8b6597be506afb66ad69bf6ecef36cb4be5e13f5e2a0ba5e1e1fd8b074ac3f2ecdba5784cb08a59ce7116bca23f7c0480a6b207e057f7221d85e26567b22ccbde1e12d90c0f3c643c9c87971acff27dd3f9a3da8166164f96b935ceaf4785e72c7895d10ebcd4eb90fe78a9f0f3253ab98a1ebd40f89b1a3deb99c79d7560869080a4fdf032d88a10360efb350e8f5a6122b043fa451d5833e65db131836415be4f637e5b7a3bb6d21a5846b774cb3b914790328f75640b5864792f54905fff047d3f5eeafe3a5f3f4760112cfab296d3f4d43c79f6751668457dc6fc501545894c4799908c0eb05498a373329d8b10ae07050b651ced1f5cd21a7d2204daa38032da73305402c5e8fe4408baaea56ac900d3833bc9304264607d601db8828c4db37f58756493a5f9712d1dce0300e1b2838f2bcb2e1f3e3209e7c7526169447ad3d1ece6b6ed0f965a7a5ffe6c51c8ac7fb23ec22b483bc052e181ae6fefeeeb512858648c64d40356bde84bc3905e5e48b47f7a44b75bb4ed6b759b177f1ae6db3ffcc3aa23a86e2d7302ebddcdbc998e8ffc93f14f1b615bf85a14794105fea1e2c81870a0e81b1414f186bb1d57e0b6007c1e19e478d5a61132cc01c700091f59b512630cc33a0075b01f90a5c02d0b730649b177620ed63aadd354707bbd137320cee2e8baabc41c17efc36e8349c8384d05c3347652bdbe32fd1cec5d8d33649b4b206118a75b38cba628415cc132ce66d6177364beac87b08a62f7a4875ded15911de6f0aa44310cc330ac712457d7db5ae2b05fd3aa8dc3ab6d8ccdfbb738ba6f8fbb227d7bb67085f0be6d39b8e7ca601c8751d8ddf32e71b615ac0f5c7738718a489a918ab81357b03ef039c851675d72ba905a0bbe588516ad6acd38454c427691860094696ae98c2419d68f3546c3b0cc17f148e56381070b3aa4edcbf27940db10b9e77651b00a1fb551a40e057988908394ad8175b9cd82553ed1a7e3e97886d0fd83ee07bbc2ba58150381f5bb80bab05d389da474c01504d42d3cc43704bc806a2010f8b3383cad2b50d703ad9faea7e3e9ac80dca3cfd5ddb338ac1f97483f1bacebe1d55220d0a717870e769501654d5855d753f9b067d6845d6550c880789505b10a0a300b83a3d9ba24e1d53ed22f23aa10a78b5d655358d51476a5a406354c064636868e464506c6664964fe6544f55fa684ebac8855341b8355602461184da75b74c278f7584343282119f483ba2159b2952e07310b63fd2c4cf4d95d691dcf462dfac4217439e08943589895b17e1a266617ee6eaff5d33ddbb047e3b674cdd35143e28290d816acc28230204e685d3a9e8ea7b3a213ea92300c0f3cdd15dd910ea80bea90743e9c1006a4436871c086590b03d2ce753dd68f7544c918d61616120bc81ab288c4b02010afbee666025073f4e1d576318433ac62aa172b775d750ee376351ecd8a8d31cbb22ccba4847255d6b52574d816eb1b5c95758d0eab09354cccf24a5ba2f9f4c5e0d33ed9942ba7224c6e4598397a02b26fdf7658c5db0c56c51a1db685356d09ca435dc648fd36a3b88c911c1b0fab78cbc16ed900e8970980ded882361e5e713a5b0e76c5b560552c2414848250a7c6f8dd8e14b51b2779452ce5aaa0dc0e6705ab349c8cdbc955c1f140ce8a6d04f2e3767af81e6ad1a787d1b4a6581746a1a49c918019816466f469c1ca532be7ab04a904a9a48a524a60d7ca905fc75346d7b3384642527d265ce1a7bb04cc1e2e33bbce22db73cc6f3d6d809e1f7a7a2a7f0b6a184e885bd22d3adc8207ddb80fef616aa31ebe0b23c4b65817827e590ff4932832285be390c5317a0fcf8e80c7fccb6a7ca85ae3cbab1a59a5b10b43030133a65bac1331ad1f605a1f625a17625ac7613d880994758bf51ea664554c10ffb26ae354addb781073b72586c57a926a593e8caed08e72a6d9ba68543bd78376938f26cc8d30b955a30949f585dcc86c7f623b94e938ed7be89d657af2f04e038f807ab8bd67918c7e60cbb6ecb0db3eb051212cd37dbd0660efb873fd97fd80aaa477642c8e11fdf77abd5c04b80a7009bd43d2f5743ebcea6171f4e727e70c00700f725710a9f05c820abfe27c80a0dc0f943300a5daa8000478f161724b06403901506e49e5f7d0753bac75dcb951a74d6e3400985305f0f57408008a2555a31f144baa7698c355c1aba535383ca8c3f1c0f8fdb873dc31d4a937fec573ff28cd8df7b9c7f903ead411a5193d7ebbced3117fa0c7a3e30f8d59441f179a8a77f90f1d45b2fe88d2c477bcf1be919ae9dff80d0ec09caafda6d28cbe6fca9ff5930de0abfde0ace055a41d803a75a7615686e30630359ea959c12a2eb21df3a0803a3246bafb3755db41b941a2a1020bd3f1506071b404e0df0e55b854582f8e0a820057d816fe3763b5416155fcb971ab2d886a3aace21d6d87555c3728ecaa0a05bd658ea24ffb583f3e3fd1c7fa893e3bf00013809494c3947f2421ee0a6bd5eedd8e67bb2c43a11685fa7a45ac8be6b362a8f07440b9a142cd070d3eeb02a12644bf055ab232835ded6e3bbcda5579f4432821a120a11f504b2a7f3d0760df6e8154e36155538d6b0e833950905bf06a0ff4631dc9962c6115a6522da9916645a5aba6e901981fcccb0ef353d52ffa7405000502e9143ac56c17e860a37bbe181adde373aa5ff489a9db85fa459fcf9ac2d743a87c94eef94ca7a90dd170a8e0155fd3e1d5dea474ae5b08b51c566938de7330ccee533f0be65415be0a50fc61d52602f9419de8f3a6d7fcb85e3815c218c0154029440071be57eba56740d80badaf54dbfab17e4ed23e94f66a63d5be1ebdfbb0ea27fa64c1aba541b0ea137faeced31169cc7a6b8391a807ac6a51958d3e1182ec514099ec19aca2322db23dd50028939da6c8078440999c0f74bf9159a00a2b7b13c8a8901b99ecece928b291ef137dbae3b996fef0583f17d005746db1cd9805b770105283dd338b6c1bb58e708be9e4e9d0a8f563fd54ce9ca8cb2b1af8f8fd65fdb4b47bbceee9783a9ece8abe420c445e1c80c5d1b4a0311ec8ef9266affd685ddc2894ec963e849c84f0a58d44fe6513ad187b63133af66d3012e603ebdd8893dfa6772e09ee1b259546e7e689db38fa41419a00899668574f4e545e02f5942ec028aadc515cac4902f594633309790f6e5f32b8771cfd6ea69c419a07f7f5b212fd521ea42bcd8c6f5c7729479e5744dc8457e526ac96655917e523401f322abb94e5a57e9c249685b48e511face2f760156bd93f4dd3fead12ed570f56699aa631e1e39a3f94f8f8c1044623a0c407133fc6905dea05d877aafbda493e12bf34c583afdd08be46b15fb7281f818fc04730c84ef09098871e121d2d32e3dd49dbf6bd4d57949f784741f9c993f05ef25edaaed8aef04a27a86fcf6650955209ce20954a5ba993b2fb3665076577582acd19ee2339a3549225d2bb9224bd341a8de4489ed41d924cce8d265c8f7e4c3f36394972273d47974adf9a326b602d9538baeb024ffa758d2e533cb8975ea234a37bef9c70a2965e4b2fbd9b9d71d7d16fa6f4aee34a24fac1aecb622dfda896cc95eed1cfbb57e2a6bc3747b49a8c46dcb9d2b197cedd644281cc74872f8dce71dc89a334f22439512797a38e342f0f3d1ede51cedeccc951b6975885323b141494999deb666ac63bf1ee25b1497a32b76eb3888a0743021b335436c9a3bbf76d8e4a2592e7f1e8beacda243d5764069593b4cb2a562d99512a954adb973d8fceb8572a99ccc89992c9dc2e65a94467524c9e9274a64422996ef2d1e912e5291cf714149289cea03c457ae9a67f3345a233a59be8b2cac4e472a624371a1d659e9ca08c4ee8b2cae4446746ff249d299146a3115d5691e0f08613aba42172b42ebeaeab23ab3aae628c9163bcb2673b6db8c6cdfaba8e5d1d5790a3e5ccac90e2b1ef2f5dfacdf097551de89ae2c1df2fddf8d23158905cba04f9bdd408c40f191146acc77e0d16448dc7e22d8c0b891319668891205cb5fffbde62c7119d64f5a9628650353663121ab5e16c8e8c48eb5b2d0cf60fb86d7ae129e4e16a3777777777777333331958c731337777370b5fc1307c845bac6ff1f3051092a02442610c8951adf3182babf5e3b9407e19336408e34827f2bcf5ae71609b815b9620a40557fbbf80805b968d192247cc908fa0085040891dbc3a825731bc1a427553ad66aa62157c8d407b81822eea272bdca136701d61e46be5a256d38c552da790dd0c074ea2ead59dc518b733a0bf4d55d630d6236fbb6594fe9b1cf49238ab76234bed8e52e460558c6d61d7acb6accde22a66ffba79fb5f3665f43ab91b6d188b18928d07403f481815c3bd128ba3a6891ba97d31db6e41fafe65882d1b7d8b3bc246bf7e8db6adcbb20dbb2a866dd726e5b6c558fb5ac9bbb6cd1514ca3b778ec3aa2053339ea769dbfc351a84395839e6bea152692b2b355cc3dd39fee1e565bd7b43b02a26662be91da3024cbaeea09c36da3c6247163126b490a999ed1bc582241c22ff6d91c49460550f2bc80fe2409c8659a25b7871569206e99a91488f8b0356d2bb09ebe5e9206119b5e99a1d83a999ecd8318a05490cb08a7f53b54901564520b382fc9668090cf8f03c4f02196172844949d2be69a52636ae1a5733cab01c9d4daf9b5f0a835906b725484864893092f1e1901d8204988c118c08231bd56ab08a512998e8f9c3ba40c9a62db83ec71e08b2ab62d5be7a8019db01cf74c756a616add1a5dfddb1a38e26b4a73608f69e9607ac205d2d8beee81d5b1bd2143fd2bdc960c439a978d5b1f651ddb0c6896afdbbf1c2f2c3e25065d9771d7b0d56af1bed275e69d4a6ebf5beec6abdafcb7a90ab5a740392f0556455c592752b37b2c8a2caba951b719170cbb2c2550b2e8e34c4c9d15700c32978f5ed52a1f699e095cd79751d2e01d44d814c0dd2c70fd649c271db65bceaba6cbbc70ec3308c237130f06e3d9b274edbae15b15dbbf6add7755d67c0d6bebacc087ef622785159c52466a1581555b17af157dcda59e76b33f5549f8fa5faa7ed205605b712a882232d8bc79d9c7c344aa96cd2c4f33ce97d24499224499274726f2e4d4bcf931ba723e5dc4d4d993ce03bc61f647b3ab88cc6b7096bea9b0d93ca6bfce72ecf91e0a57c697b6a7b8f2ecf2d513d13d24d7e72c9799cc7799c09ddb17584c512df12555ebeef7d26c74823131267422279248fe4913c133ac2429e7b9fc47d343f93afca472a97f3f3ce7927dde2e688e3e6487e44473e90b26f719446e5234a53ba34993656f56864958d934adf7f7e91072c519b962613fd75e82191fa46b7d4fca0a81b890439ab6befd6264fa2df13d646921efdae8d06a571d1a041836e8fdd911dc9d9a96ed24d4e4e82a4cb13d2e46a02ab6c9813694d3445bf4c05f5a14c7e32e9b63bd7c9b91e0fd8cd9626a3131229e5335652489f713242319126f75e22d1afe4c1739c09fd8072541229650535fa8c97d15762aa1c9164f61957199d3c257514f9d45153a65a24fd3e23857e31957494f9427ae926a367379148f7384e9e44ba2491481ce91e494a1247ba479a5bbbd1b57bdc7ec4edd66ff386e7cbf12d5197ce0805c565132dc504a4235815f7d87fd16859c7e8eef6d8c1aa18df23ee5e452265a32064cab9de825c394cd1b8806a8a75eb8815141643a22c514f3d7865d1785d7bcbb24e3d78b5bf8e323d60d593733be769f647b02a163999342b4721a2c6bfbd7678c0aa0058f9c95c5951593900260dea2827a7ffb2f94fa2a07cd22c4d9dbeb768ea4477ec89627f3dc1b0ab3a6e272813f59389ba0d54045068ac4c0ab02a3e35976055bccac400abe2674c1fac42d11eac8a3e72816acabf0d42f9a63c2525a6c4a7dc34bf57d3dbd391b217aa3d1d5656f774d10f55377e77344c166fc21d63c21654a647d3b72599de3d479be6e826f3cbaa0e7904b7c4d14cede98e29e4a7aa31aa1a26a35f26c61cea87aa110b38a8db8e84d77ef36f897a59dbd7cc6610ab66d732ebd7771cd153e39de0d5d65854c40415e86c18352aa991092a4042d4d1620918b1e3b1cb7ae155183f5424360c1d0f0a78d359284de0b600f2eab5ac2c5e94b3de9841c83b708213b8e0628b2d6a4024085b2012861ae680054e0057dd2f14011c8284ddac1373f005b70f90eb450e9254abe3391333baab12c2c382e73913717018d2249ea0574d97410612b08c5ad340b0db64bfde5e11373576eb2161bd3948d6b537139b618fb28cd674c528cd60bdc16097e02ada24951f771c91a48b99bbaa97cbeba2444349869676928c087eb4877a6887889234d11050b74821af2571b88abae54557d1060d45a021a2c682c02dcba7a540b2eaa875e988d330f1fdee51d95e3e546929905f0caa9d05abba7f58d53eebd23bddd249c40a1bebe9966682ec96a7a809318ff15d3dd7cf918da76b0b59214e4d690b93d2348d2a116f5121d9e38560b4a9d8599dde61da3b3b580a6453d13b3aebc2d9bc8a7a49bd26510a1efb8d8c9214a4a9065c8f57e27a1462045225e2312a74010d55fe750555be7eba85653029e4d2cb88ad17106456c6ba7e64da0bd9f48b3af56b9d5ed22d2890f00b84e15837dc9718b82d80cc9cf8c115957f046c0094b9e02bf491440ab10a42380485201cdaa01ddb42bcdaed66a01f4c7c3bc66b0685be03b581dd6de8637922673e9c11cb65302bad4b19fbf55a6a618ada00b9414364d40fb592c9ad9c02d28f97dabbbbbb344b7fbc14b18710bef74b7b59043f5ebe1f2f2f2f2f959f39016ee99b615dfcd2dd180fa490950216166651e20411d10fa808c3c70f32c4a87c8ea45deb26fce0554a2625aa3313d37bfe60a9a512acb0bbbb9b89babb9be8e75b25fce383579002a98165d41f0ca3f52ad1b4afc7fdc06840b8db64ef1ff8d32d5bacecf9c8dcaf00b139fcf9a9ebc32e65206e7f30e1635d1848f62da09f9f23abc4478c31c6c7265a1c9c8dba2bebfe74ff6cf29abb2e16ecad7f26104861b534ba6cedce1f2f2f15529ab830a3c3ee1faafe04990356e6a55bd6a75b463a751fd120473a239c1e69314192c5ca3266c8f2c560ff463875b59d6ed96f66e88114236042cdb4efb12f78b5d7e6ee5c54ab825b5666bdc582b0212ca861b8677bb41d8c06f2d376eabeeb6998dee9761a867bba9d6ea76eefd4e51e122946150db82b0b5223c336866d0c1b1936316c63d8c400e15cc0d68e5570d3826c0821cce17859d1055a3861a7eed7c4ed47cf46da3faeefcd9ad168341ad126ba2f37b9e941489be8e097a3359016d9b6ba6318dcd6052528c0ab9bda7fcb770751fb23406db903d6dde7babb54d24adf9a954aa55249fb1739eedd7bab9c45b09366118e83915a967559bf2e2b7e3b7622db752dc3fa6aabe92ee663626292720e769fc4544c524eb01f3bb7fc643bf14aa56b37693f415967e69b9c86f916c7ef98d6a0d02252986e327ddb361311d44f4ca613d3ca89cc389d88e9a75fa6b9db52a2dbc4a6373f5955e8f7e3c524857e26d47af719a8134d11285e22ca53fe655246947fff542f994a27c58ccf9871fa0cd48ceda893d389c86d41f97622a613d96d49a12fa67b50f4c9c9b44de697f326c7c0ccbc4ddcc41b355ec52b1a7895f51aec9f90ba34c88c9a5dbb6efdd2346d7e7bed397ab363f4acdabc20238c3570d2dd1bdfd21aec1fbc851d7e5783b426a345fa18b5ce2dcbbbffe4154617648f8659a640bcea06af4a8fabc546801a77d896b8b9d4186fd1941aafd8abeb9c657226aac9d96300ac165d21d5a44735a1ddbf8b343aa4ddbf922459166d62845129b013c9b22cd3b26bda12c1e88960443caabde3369a597f61d5de22b2dac284b8efc74ba5a989ff2cfed6f0995ec78e515813e9628f59ac753d1d18abf6d73cadcbeecbc06dc3bcbbfbcc4498f2a39444f8449842d190a3e052fb5dba7141f2be899bbab4899f1647d32033aa75d11a2beb16a6fb6d0b920f5976cb72145c6466eee6a10ade627e81de02b6d26be7d6fbf15249b4899b4abaf6f8d1ac21914824da847748b5d8bde168c473eb889936e1f121d322d7755db72cebb2ae13b1ce3d3b110efba6d14863bc81d6f5829e1a64d8186203a7a7070b2cb2a8fc233f3d3d58ac210bc2156d849e4652396ea8f6449dca5f1873f80c61220e1c0144415416b280052c484fc70fe9e988343505abe0e35354a47458d5b4070b2662d8907858a014755b568f65619685514c0b726b10249f63c6b0ec1fac180629267485fc30a10a493c15727ca41d4a911444b53b0af20726b41e695db8c692ca3596b08aad941ed2507753d210e90baf08211b3a2705918230211b241b3af5a706f1ea0b5218646c8c280a90ca7561d2506744928078f5912a9fe4435a1ccb03110ab865f978d0a9cb916e006b00d5c8753e901f2624b438328b468dd73fd20d2a9fc3ba38576a9fa214ad4b0fe45703a5a86242ebc2d810af307aa1145949862ac46ad4a05121c58878d001004e85e7362412bed6c032a0850945c154849415dc02cf6161901f2754a150c469abb326972aa24298864939031838327c08d93ae416e6981377f7bb90d495caf5922786b1ce437a0c6e814556905fea884f16a91f5e35cdba5b18e1bac05b11b316c7d55ae5472c66dd2e0e15ecd66ea312934c3a6ba6b2e096940fabaa60e289225818d34fe32c0e68b2c2d463bac2b4846d81a625a4ac601524f5a8a47c2ae499e22922533c155e7df5e43af28a58a9299f7581dfa820bf948f92ca93b2a2238ea783658785417e9850959e8e540eab2073146a6a3035fdac0b5ca911675da8203fd3cf0eaf3e5311523926232c4c17997e16c7a6a648e9d41f98508a8a86c3b6c07fa622c486c3c294a08b1a26e26c0b09b63b41c770bd110300a7add214ae5b1de1f64ef3744ffb003551a644161da77374b66808f6f00c412222488493e5481dd4ce79543dfba23a4a66287994ea2faa981da22029a5944132486a9a361ac9215e80dbba2c9facf1eb2ac7ea15d5202624ae4035c8e5755dbd205747548374a3c50104e2d41a04549844c4c1a910a7e322701fefdc3ecdde30740015bb2d8605d7e590a75b32988ce30e0b2c8c7461bbef211751d66cc5be0e54bf5e52d78a5def3e41c2cf1f98908ebd9cdd41118751ad23e1e3ad5bd84fdd088b98e9aad820e1fb16b4ace5d5b74c7ff108065c46246381dc2fc61171d6dddddddd56eceeeeeeeeeeeeeeeeeeeeeeeeeeeeee060316c615e3182cda4349ec110121252260865e42c80711067cc4ebbaaeeb8a316e4cc4cbb2a218acba2e27e21563bcae18638c917e3f5e6884385ab6843430765d45d7a5e52c1c9268e1076028f9c119daf0451184ea455fa88a558d73090128b6caa2383843b4ba5e08610ba803c40ef8bab012743185166a47965d10c5a07a75bb209a224e41c486eec1851b9a2b8609613d2c2fb8a843b52ccbb268c3a82ccb4a41b52c4a6f08f55062ab9fea041cc62c0533bb40083842d8a272147a691e811741501205a8e3851076aa57d78b2514a5a0871384d0dc755929b8ae92cf0a2a768951af7a3dbbaeab8960608996c00054e9a06675bde822a77eaa0c5a31d051c14d109c8086252498620e5e30d2501883175a10a17275bd60c217ddb05333d7ad0389cb8261413b533317a5e95fc782241f0857ed1ae5d1f4ba6890c682a4ac3fc1b2c39facc34b26c208c4e865c5c885dcc34358076e9b4032ae69e2c6c508ae9b56835df34b717406abdc86c59a0c327c90febad4581ba42bd42013f148a0022eca9822dbc96e308613b4d0051bb6c079c217c850b201122554814303a023f060065ea88047b38234d403256c8183294ad083202e82c0051748a0a255c08513a6682d3849173043bc30048438d0604815ba0b9415632a843d78b55e90a0a742eb064ee82cc8afc21f7e6319dca0810149c071db69113454338ccb308ec3580aa129b80cdbb1b382ddb7bb9b59c74b2cb1b00ad260cffe61471debb64b57865d5976415882220a2c9161d715d8eb66cca891eb2460626394f53264a346b06718f616ed1c5f13cb8ef1a04a704b0f56616090961c826220e0e187740cc4898168591778acb3232ffb62a1d6dafd8161e0f71cc32ae6cf585e0604f9c56c4bb7c4581f22cec820b6c5ba169975cbfaf712b32eb25af2c42b86dc32d84eb2aab3dddddd38026e59b286d1b4ac83de8f981d5947530dc0ae1d02d8b5634f75dfbe32d84c75dd7b3fd9d16f89ad39ee8b408597d9e6cae4e86b7e3bea8f985d196da6205f661ba65bb330996caecc7a11803218157223b3dd6265161b247cec1e23931faaee46968609a29b0a31ebb2447e2fd6d9ea66519d55bdab2b0c2bf0021a2a910be2100d0c5805e4612212f276efc29f2cb3ba2143082110fc09da02069d5588a211829a600584105adbf00d172e4308218c3c15c02a0877d5dd4c55f0872f2a7c0c445518c44586d1bedcb7981f283e02ff2c1f593e52590c3ec2472e2f705b8028a4f6b38bae65c31136cd72300bbbc94d7ea06a9735f6cbfac7472cba16f43c1e5bb53acf88ee58b5debb1636578735bbc77850d3b06b9a0dc34913576a1a04aa5fea9826298df628e1b16f559290f4e38fb7946e319d448c46fb6c96ca6b7f59d7f7c4c741d8a49187a2eefcb8cc3a46dbaa6979eb7a66c3dd3ff83d8d895faa7285eca88d76f93dcd8ec068cf2426559088d82d3abf1485184d45392a595ffacdfc4021f618bd7657fef111926704f61d794974168a054fc3f23c23acd3c0a7ac4b6c44311ab4b442a195cac4a871c2aa699a26b31e3f315d9bfc037db89e655799a4cf98d766310d83ba47398aa23e52e8093d518cc316e3288df5d2b19f3b02142233796498ed26ef24c3ac8c0945a1bea5ddbf979a2171611e12a53dc73dfb751f0d239fa1507574796199670476cc4ba2abd865897e3f50752f3f491ad10fdb7bd7f9085088adddb46aa921a8f40c76b54d0d95a219000000001314000028100c884462a1503c241786c93d14000c97ae5074521a874110a41432841040800000000018000019491b00a30b90a839427cefeaa98cd0e046db9518a7d249b1326029f484c0e0526538dc42e9864654eb43b013fb72c6b6b4587471c56fb328b92a6db61975070a93ca2f6df143b5941da23a5db0505707bb95158e6872d83a3149e52e8c98ecf0677481eb1228b9f27b9d8c2d2d450e1fc645858e32e46723892b70c09a9d72e71de2358a3fe25fa142c5909d802c5ba576e82fd80489a290a4641375069267aa87a69d3d880d82e159db6d9ea7c62adb0f890b3ca27573bcc322c7739f3a9f4a2bb2993abf257cacc248c7935e4c2d5f221d65c11c7abb0d8e2955fc79be67b3715b16af3f15964c6bbb834cb45817bc4189fe54eaa34386c86212c7a5f2a02251a15be709c2fb6cfaefcd9a4457c73ac0b79407b1ba96861f3274abab4a900d8df47958e4f11ac279edef955de1bb8b54d4a29913588d26d446ecd90685a55818cf6229ac80c66e2592e40272024ee7871f8efce16690ff133b0dead6708fd93700f8f426a5a234b32dd43852fdc664326bd82f362786e730b735922621960a5060c38549205535c5fd8cc72197c90f45feec0c2e0fae5a9356e296774a1adfecf188795eac00ca3638f1cc21ecef16e3460f2e6c83fa9c81bce2571ad16e679b7db116fd1cbf0152f79bf88357f100b87527286f35fe2dfea9f0393d82e8ed3715231b01e72375d0f4e57380941447f2027818a5c5c7157bbb6807c1fc232659e8561699d02790990b102c6030ec30958a6ab02fe2c328b4c8f28dd8fd3f391121d0bea3c512d8566c2984fd9d36d9bfa7d5bf97fc1851aa33f6a49579d010609f779f81fd7b9ac9dd84860cbea3f17000fd4d97e63de8cb42a47813e1f4ba2bfbab84320db23a87626f6d09fa35fbf6daeb23150a9776660e5796045eea544531675c29360b397480326c464222d8c5d1c6ca7f0ffa3c553b4874489b110c6da5958ade9ded487bc19b825aa81df628e673a02d77716bdd38bb684fd4d636540a1ea0efe313fd61e3699fe9865e515e617ebb16cc7694a7d8b68191fcb71ff2838497ae3d09a94b083643f3a016c0dac613b95fc233500a679ff71164eeac5d968e2855326bd5e10d76ed0002c9a1b5fa263d6dc3ae0d07e7758e8d0b1db82adcb6963694d0fab07f8881e0238e41478efeed2fc5d6c8fb118e94fea701fd705dd5666ffdb949625ff6386198aa56d986842e386292cdb3cc58cf792d6feb75bcbeec5b35db81d89aed3dd5abc8bdb2aa41db54f6e1e19afc958eb6f37f664d660e67bb58ceea4b8b55e26c6b975031fe6086df164b88ec6c37da60655c1edba2bdca21bbaa3bce4809c5c235bd1f7099a453c746bcc8085a66b47959d79c7540b048697244135ee3d55d5e1c34f364f7ba4bd5ecb2b25b3a826e5d52b977e93e82494b8d740e0fc6d0d248a312b2efd43a60ff5432c4ea880d4fd2548df429149f4c9bdb05ff22fd0aedd4babe966076476eee7e1413225fe89a74189af4342a30164f7a9cded429480dfe1452236169dfae5f6b38ea6a569c294d0d90715dde644c7dc8a360a6c9e18fbfd00ab63189eee05b8479c83618d87c67a0289e5583bc65bc72916f9c8acac6aa994486027506bbfa7db1a32b93c795ed484c84e442074fab6268d09397876ac5908f6be01898633c4fd789345fb33ab1f54a02828ed5da3ee77c5469fd818bc1b2eee82fb861c23a12df6cfe69a05b4b6f9f133cc3a21beabb163d689592e0720e9a56bdf069ba43aa2b17e406ffeb46728b4e69c198e95a51e48f789c8d3fb83cc970aa10958d775c47ac492e2b8d0f68ec6520d5a81c81a49615436fe48f6d71db73e4e8d552b8df4b795d8a0040bef37a1a8946ffa0b9d283f58dc150b47b5711c1b5dbb37bb954770501194bed5d694d6802858e8f4d5d0d46c67b819345484433ad9adc828529ef0edbbbd61c55511e7648a2286c9ba6832c849cee5042a8971a32932cb2dc8688842008709cfe40f0fd62fea9d9cee3cdbc51a5cb660436cfbd1b22379465fc7e0e3c61d094132f94465cebe71d3641272935c1917fdfae13d9b6d7e6a8e6793de4904df83db111ba176c2a47be558cb6097f11f798672de8046edb5cbfa68d62a826e86b32db2e119827d8644c0806ae7663559bba7c4723a47118b25a359c218cc73982c4c4a59df8c581fea2e60c24d45caf7282b8cec430076c852682697416a07eedc20dbc8401640db773a5f8e76874df0676277766890f0f6619361e5388ced8c93a669ad1fe9b58f9cbcab551cb10b0c1fbf805a5c5fa570a5f2c22af6c1fb2d02d85b8dd342e83f6599935c0b7fe38a897d34a902003f76158cb1fa0c9d1ef791c5174828b593683c9fb57f693f6d00daf7b5a961f296e74cc06f074ff1baf3c1f5174c89ce5b9391dcd324a912e9663015eba479fc631b76f80fc44d018477a94b423a526b389e0d33e823e6a36f1cb6da04510bef1ae9e7dfe8b22bac8d9595b4493d609792014458f9f7b39fb161c10f2399d5877a8147b4d6c37e67fa00157442b81dc3788a5809e455f250654f9a5b9d366e018cc65d8bf24d75f36de0d80a836feef5e82fea06b841ec78dc7f44e7803848bca34b077fe445a3fb343c4d4d23a8db02c7cd6431d4c905540fafa4cf126ad4297d60ef5f1844018b7d9b4ad2a7d36d7e3a4ce01660967172f1229465608393e393dd0e90d488f8e2aeab17cb23ac074a6efa24120b9ddbad46d14ba413ea7b054813cce0e7d9d559acd836cd262efaef5e5e6d43b36cff0f07eb2b4df4e7e348008719b9f6d3e4836dea70c45dedbde18561b8855bb9dc66ee150292e93f0d444505406c9423062833abad5154baf7c1b6f072df73d2b29ce603e8b1e19b33255eb5bb28156b6367fbfab681cb47fc179dcd5b76db264ecdc86223291134b7a2b3c10976ab189c8f2fb3b6b2273b0c1685a2148b48b02b23f2c83e2d37e9fc2be93761ae4da6c8c37ff8cd0542523a92cd3b1b2c85c36347e92981726c71d6449f4ffeee958296760ed7fa3cb232befcaf303d1e66c7a685323e0dcae6746e2744814db204b30abfd72d7f182e429fba38a790008abd1e96dda2c3ff6cd6c7aadc9dd7ab4558926eb9e16208a593bfebb4e13096c4e00bd9507ae142c9c9a4db9c6ae5a0037ecb690f61f199432420fa36dafa4c2b1a06f0a887b58ac22a23ef850f2cd91b18275bf5cc6e37b89ed3f207ef6c2861b0d0dc194ea432bb7fd5f419f6b74e50678cd275c694b356c37a606e9daf1da6134722e187c4288974321823115d16a03fb00ff0385d8922105647cfaa54f4dec07d80942b5d2042cbb7d11f6ec1c8fb6049e088529e3e51991a4ba5c8c6855d5a347d5d9915b2723a332400c7c277202805d7dc3feeb764e52e6735a185727295974c5ad52e1fa0315114036e3b96295ae31cd8cb63ad0be1b7d8fe6740649821073266033da2f2d45a843f98106ce2ba801760571c6fcff9cbbc09ccafc7791175356063a98216bcd4de4e5fc35bb020522f91804cb4bd9412fdada3ba654a1de001a33d1845669284275bff6a238eb622078da2a0922d3ade74c4e158c4170aee8f650db87b57316a6ce4b20379b77260cb540126f3d121f2e25835204f9cd1e80c338d3d12fec2edc86a60fd12f8ad71c8708febb20a112c935e6b18571850961797b8f7948b55870b1469dc366e8ad8bab05ca829348f3a3850a25708aa9a3ed033ace7b15815e09fef7737f84ef78cb2b729b199ef05204ddf9c4109e87120a30e9670e6b47d69621a3556977380329bc7967bc99f2121e75999abf614e9218871c7a1fe5cebea3f6f40bdac413e1c95593d22fa000f9d0dabd1eac7c602a2536955d3aebca31695a2b70d6a4bf02c3f1e1028af579d0de3382014a6b88de42acf9788974029de0c2fd03d72dec75908a26ea003e447ee4d7798181f01d55c588b30a50e74c7b8004712a2b82e10d62f1ff9b7b90663f303566a8e6e49da9f89c590e52eb64362bbe721b93b51fd2d2b98dc92636643e30c5b50784b14b4e2bc15c42d06d260b1dc7da2c24a11fd9eb6a59c10bc25c5e8810a20b67d9a2147a11ac37e34f03b38fa056469c5340bbb5f68c44cfecb0eba22effb43c325318e40b99f4e4564fb32df493f1300949be2de41435de59593ada61ebe8b5990cc5d9b97d4e06af21c9044ffc6a19487c1ef15cb67474cb35c8b8597ca023cbbbb08bf694f72032d1159805752c40c58af08865ebac8e0517d0f8067ac4d278dd3a67a31e0a877e58cb0500d85a7d6bd00a976e983473595c745e478899cbea587264bf91f084e3a7ef8c260b12bc52122b8012c8fed0578c1ce500108f70a481b83096f099431c09364b2030319428c832e2437ae1c262cb601e1d0432122733a8c645543bb875a70be103814143a0d26c726be7ee1c170b74215e01c34a68f8f0412af7a54fad186d448da4066974358ae5b376374885fa4810583c9902f46760b4e118c706cfcd4e1b8feea49b888b1a982f5c2e45166d0566613181703643185a2c7e6200213322605e6442ec0ce0b4101222c0bca484580c733a20403ce484d342344ec05cae91098b4197a70d93a99d3684a4bd8bd44adc7f09bb650ce159a4da9e683b97a85ffe4a81dc2cd43b2a40d4931e3f207109940e4c545fcb2588253ad2d9282b5865b9537444df4e6dccd1a6689a25cf59e192ccfc20a34e1be6cb0e47084d86bbd59034cdd275da9745596b5ab3eec0eb28b4f250c085d20984d107cb93ca63d3f56288d3b01c639cf719767ee92c26d6af6dd88be5b24c740d5db562d7c306b9bf73885c0e1310d076ee6105c04663865704b113130398e31e0db7d1013049cb7eac161d11bf1a17465002b6772a6e0d3611e77302d0503e8bc8b76f6e9b28c0a09c314f1e13db8d30ba2fa4dcacb4841aa4bf2dab367a707d53b6a552aa403d96e16b1d8ad791269a25446ed9c28857ed78241bacc0261ff36facd2cc7a40f4c1dbea822b29ceddd64364a2d4ffd49da8da7f5dd19aab08bbf6f1fefa020dc40f2861d353953945cdfdd456af439969e6381aae1514b0f0336f849134a5610a5b2a40f136f92fbcb2d44dbb114c625c2163bab4af3b780356d8298dd2802ef97070abb82ddde02f759eb61d446c98f962a7354daa22782e581a0d615375831aa91a6f8d49bcc0c45542d31ae185ac2dccc09381692d80dd1279b632afe5b98c36d600902ec312285a6f7c4a66f53fa809b9ffe283b5e0044ace37876aa505d3429989ec5ca2d13199d79c5b80e8a6db34ea13ff72dba95136516efe19cadf29715c4e8fcd129b1113a45b285c5ef09c2051e4c9d0e3f8181fc65e00d2190b01c7e12ab8c05aea9e129baa3b4938376ef30c14cb0a171185236a4c7946277a47d96a5984d82db6dabf7674a867ebabd48b2001bda70abed13f4fe947b76475206fb508d78bfce34ffdf3a859bcce870b9c8910e9d26be8f86cbe9a3cce5256f583e1a5d03a361b928592f9e2eeea3d2be721a799fdc8c42a81f1f9d8fc747e7a3c10fc04ca07571a0c18228263f90cf62458eaee92bd1d9db6c08775f5a0e1933e95ba161f60cb87f568f5e2628af5bb0a4f637862a6443d0f94fd8e5bbc6bfd00624a1d93b22a2fe57f6a73792c878a6cec59f9ba4ef52659200be9f93218aff35c4804a8b625535c5eac221a457c4c0127be23933e66763b05d79487811e6a6465e754a205a5009fd65d40c3cbaa62f202504585d0af58492cb1205dba1c531973c42057255d97943440b30415020e9ac8ca6c9221fcbbe35695aa68ab3c63918f08b9547ea932f1bd1c9b012355adf29475a3ea063074da80437cb3c837f37623284ba3cf2c333c4ab85dba4b52c1ed5c2612954c41b918584584256cd64643798dad3c2975c8401507482a75ac6f81d94c94612cf68c29bd00a2fb8d6b4088f65da4d9b1e7ea0200d0026c18e05982154c51c197a5ef75f730a9cbb864735b0aacf502561dc972a01a8e33243ff1b1c8ad82893bea7153e67049a18d92ab45c6ea0445f78058f8ba51346171a909caa92908eccf00c0b3c4e2aad11e91bdbc9298f5ec52c868dcdb1c57a2e286133ff35ff6f2f87bc39bef10f2dad4a358ffc8a7555313df71d4d64d56502325dedd2a164768640cb30ece932461f7614214c30a2a8f0575792860a0e6a6b1b07ca2f122dd3290315feef895c5cdae2de8e9e6d4ccd52acb8cb27563eae6a074ebb599c06f66db657cad014501826874fb9a8cce081981a7d0ebbf571b844a7d4cbcaec3ec0cd05f9941a527ac06d086a78f7f32893fdc7d58e1ff57485aa32a41b8d0206c83ac7a2ae1477dd142e105800f6e329d6d319fe4d841a725ebd78e7596b9b266a2c4d14a497d3ef7e5eb74c8bb86b4b60b014ef88c762dfdd2fb4ccb688ecaf16f3f897fcb0229bd144cf4c31a616e06066524b4d4947bf61fac1cb15ccd8c2298f5b7a224ba8980b8264b8506edd7ea13f643624052d85b2a81fc4661095b464aa743475c18a94dceb930c2c1a914c2f616175a107574d3165caca3c146a8a5f311038233185d6c16e394bbdff92c1d7af5e369b109b08ae146949cab52019b600c0686ac5eb8838bb4d9a4efa775bf6a2a1f5d842aefc2b930a79798d5029791b9ddb107ec8a2d0a6177cac53227b784dd38d790b1f9a4b15457f692736d613608bb0ca9c931e4bc7fca2b764666f57cc8474e2c3e05243c2e4ce4e9754c060896281849c21c5daafd2fa80da19fc471f1bbcf3b9218914f10fc9733d21cf37658db56d5c0fe95d49c24f4b82f02f9c5f285920c7a0d6c5d5f4e4e167c4a6fd7f2484b62574ceeb1174b676549b54c3e50056f99e44d57d87f6ebfecf0f44cddd1d0b09e769c1bd7c02e13b0ebed177a19ea5a725b5a38729a42ef4febfcde905fab34f64a9f97ab060ae3da4b979c169a12662d8a93937ffdb3411c759cb401986e6d540b8a0e2f506f9c9cf919d486441da0aa0f8d5745b980c05236d4f3ab0f23549437edd927a1fc572bae32e8ce322b358da0370165f8cb5e3f91877280fd87ac1a7548e7d932e3864c62306e413164fe16239fde9174f8c390cb243abd7d4e1e1e8daa3b8d167f1ceed40e423a06cd21849a9b45ab7790e7d80f7295c1017ecd1b490d81e8fa2e457a77dee190eb301be8e815ea33b901eb481f8c12687e844970670fcb70d581b99957acc053b179d58e9ac52d98df6561292f531ef09c23b3e320afc3db6a915092c3b2663c064851582e7c66f22b17f20cca09734f4b8b6701512d865c002a83b426a195c89e2f331cca47bc1de218c38746c73c861675b90a10413158e1a3a12de2a77deb31d53021221bc8c97227d67d63128da24ef1e482092acd993db5ac9e7b0dea47df1f955f65dc4f6d5f40c1fe7584effd2519802d5ada5fe413a6dafcc000f924b049ee426b7ac4fb99e88010483579650dcaf995f84a8798feffd8d46f0280a4da271348a3f31506d734fa6f73cfab7cd770ec2ce4af3921fb689da0cd80e1e04cf0a2fbadc4cc2fb4c4911ab2159f6f07d3ada03b81e2ace0b26a86da2de5492d34d9309cd91fc418e224372468c7d16ab6af2dc52a4ce3b5a0de86433f853cb53d7b3d2adbf05be2e9c47918e3143b7c1e289942f61bace7140ced6e3b6c94651304bd222b2fc456e68a6912679616de306a60ede4d75b89f16894aff8ee0e8af96e932cb58da6cd8c6ab66c6a2fc00c4b37ce119cbf222273edc688b6670d43645eb5338f044a6d3a2a1ca4a36745a35f9ce7101cbf5058fc82aea03dcc3ccb0432d3d21bcb1673c6670525dbf908f957bc4b109b899da6f7dcf1acd6d41a8eb398852691630fda93c8fa432b8c4a4ea28bfa283f9b7982d84e141585de4dca32ef38a65e920ead0fe7d14fccdca72440524e0560db085127c2cc8fc5dec182999f2cabd8d91ef3afa71d2dbd4346dcba92498d062c5320eb9adf5655b07e39d3d0d9ef211b69b83c595e14ca43866f158db94428ec250c6b2105eab26a1e125850999b8452b5f891027195d5d8d5971e32c4d84ac2455b567b261c2343c728e8e4162c938a693bb4ede430f110e8185dd13960bf7a39ee0261822479f38da6a5fbfa2a71ad3d1623cb1b059216d8420ac9ba6129b18ea30a4d1ff427f6fab16322db9ede117a988050028cd5410a6f4b5faf8892b130d15618043a3454747080fbe689521114396fae46d0d198b4cd9710eda5d6eec54275135d3dd5430182ca1e81c5d9eb2a5ecbff6662a0906f8d14d0b085e2ec65884cca2783c278eaff162ad22e9d08080b636c2e8cc650beaa94b7f47e942be23d03c896e528b1a4d981326120bacdf28bcd23957130214dcb238b77306ff116c160a2572e0acaa5494d2500068218811332882388c8f97f1c0887e7dc6259936e992484427208296983749f2548ca0fea1aa570b1b22422b47291542eef5aa5cb471bf5d23615bc3ed7b89cbf5b8baea1302a2e009bc3e8dd22c76163947558fb9c6c3ab1b430175a20ba6cc466bcd6b56488c3dbb08c2b96a40ff1e9179da473db7d3d5ac1c8df318ab55ba5d6d0eaff2bd8f8f4c4a2bf63547dc5baa197fc3c73b099b483fca26e7cd25814f41d82fdf6fce33277383ed500c02c562d2927f37c7ae0f3743d50bc887a0159140d700404e1a3f44b0380a2f47641a5aff6693889d81e7938d40d225559cf05b9621e0077c6736cf5b50feae6e1379733dcb16be81b82fef1ff5257e549d399ca883cfb94d70a14c502c6ad40dad30523ea1dbf81178f5c22de549987e1bcfb365159f418689fd0309e73004202ff2506462dbb348348273eed0ebfe138eb0e634e0374e19599ef33a30d2f8390fb1e9344e49a922b3362c89ccae0a138dbd046e680bee07d12c0de308435e3239770d6a91134ecfe26472d15fd6a5b6b1519a07e303a4e524c0df1847159a0f8481e0aa6da2fb0c8f0bdf25ad8603162e8bc2a075a67ae8507b5c8e50ca6f9a9ac8f905009391538e566c33ec7f0610762b6e78ed11e4d6d463fae5c50eab04345e79f5803b53cd9ad29321ac32e6b1b03d918d72c38da78723e16d825bd2978a0313c92d870a210173f19eca8fed25a853993099aa4c2a7b50615419c1ad13bbbb98438e05cc9001708cd5dd3eea6a254f831866c8aaf5064c26b167ba4e22961430318ca9590a7064f74a90ded723e357832a864d83adf0f85682ed632ac3dcc82a8c8f6dcaf7afc53a317a2154a213e2eb49b34556fa46f0b8721f759aeeace0fb878916e25e3bf11c00c023f7f4584fc52e5ebf6d3d1e219b773ba514d398261edd4f459e61fe90539954a92cf2bd03bfa8540453ff72094f326342f4e517fe68fd86da95f382e8a7fefa20b9b75a4cd21c2bb9983e959e074a424c49c8ba39bcae842567f7b28142de41472fe15a6c6306239b36fc8ba59002ad7a6a3ee7cb563cfdfb46d56b11c8ea57aa3e7c58dd2d2ca79173de4395d28bacfca646dd087a0f3258e7c209bf1e21dab7a15c31af8d0d7dbf53a0a42e8e9d2c49586edf10f87f46576347c1d3e0e31eca7ce63e2ad35b72640c3bde805620452ec329f425da82ed8076192eac14c6a4afd6b58d73918a702c75132767ed0e72814bbf5f815afa2881dc65e8c3c99c36d84efadf91f46952dce8cbf5c0339c2e759a33815158d3aadaff031aaeba52d261caf9f7b76a7e9265f6e7e22146645bd5788a00a21dd2f6d76b3233f7b3859aa0d14befa02dcde86ece450d10c6c85f06058653f7db85326229968b464739e18ccaafd250af742b14345c2ad426d9b132a0171b60a91f0a83c20d329cac9566c57db015c06ad412d4a24c9300e226794def4618ab60c9eea3a532aff60cb4c502820b958e1cff3d979e4c4de52e5dd5484b847eb2cb5da6ad7dd8f7ea042c3bad9ca49568f126f1aa95f3c3c2730a7d22e2a63661c0abcac69582a5a4a1e1629f681b56ebc11217aa46e13cfa91eb1a1ea6f052942df77e5bde658140093b0e2b235b9602f1f4337d9b4076a9712ab7199e06ed0765e487d5d21e8990150f654ff532acf40d56271f026656fc6a08e629467323e02a7ed8b1934453ae4f6631afc9b7815b5ee8287cb92115fbaec228476353324b5c74e24fb4360e878d07b4239ecb22975d9e8dbf84eedcb84211ee4cb5ec0896d7ca254af0d0ad3d961eb66f6ed34c645f69ea93311c58104026c9ca660bac0954eba11f98899ae96cd7392ce86b5d6b766eaa0813327f12c48c9fd1363ffa9ac5f10a4e0d4f025ac61465f61c12c127701aa24106d7a0af04faa219a656eb511b8d0b506fc59f694c3ac2d02d9ecbe8d68bf0cd7704c0c55dd86c04b17adcc5bd0829994b25dd7deafc9f8ee6d914d0403310ce8c635a5d2a2bd7f26e0478d5cd080837a5bd9e1f51aee4f58638378f0c09ffbd3cede698dfb6edd9f81bf76e8d635eecff0edbffaf77797093592bbd8d0b111ed906096fb730c89e31857b95ca4bb3fd396fb9d57940073128c313f7400e901f76778a4589a163e5292f3b6bf44cfc48be0fe1c28a0c222e3c0c08e276ec0fc79980565fb33342c9c606d9bc906006cf2de5f65c830fd25930d2ce44345e5086a14fbe2dadd05501011037b0368b2c05adb9f4cb188687cb21f9aa8f9e71e998984a0e947e167c59b99284d5fda3326884d04a3cec88e81fd6a4b28d109c35f958cdbab364ca1772834ec8183140e2b146c520561c391874e0f1062357e891397d96394db9f5d30527551b6f5a4c47a4839309ce5ed4fcf47e78fdf5827d4cc08e852049eb6074a1fd1ef58305f6fb690dae2d5acafddd7b078fbd3f6396ff86ca06a4da3f3ed4f5ff7a53967dc9080687f5a890c111cbba27537bae35e190787915d087635b7bdd0ed4f2d6f1920dbd3ad2ed534cd2955b68056cd6558d0fa58bcfd690bf0164fb53fc739eb0aa53b2f3f82891311ab2b2f87b418ca6a022a270139b262876580a7ff5adba8eacf705759dfc98534fe3477e014fe3812a9a3016ba308e4c63be9b2c5065bff78086cdecff40f6535c1265ce40423860ea32476e4114047f99c0a47c7f15d9bbc976dbabb30f2693fede043e753e032b8f11aa3c66493b59f9b6c40ee8071ca0a3b84e6120e15b84eaadd8e1a69f11b8ef6693fb716790c68d07ea6c0090cc61abf14460c8587f6d34a9e7065ddb1cde9904615ed67d7d068ce33c7bdbc912750dd61a6fd24ff8f74f77b52fbc9d6bb09ccbca9abfd0409f4bf3f72ca5efb89372a3b353aa2f9feb69bac065ef8c86db2954e206a3f17f8b58b3256c39cedf24ed79c4f698490b426ed59f8a2b981c4e95c7fd39ae4bc3684827c5967684517a2c55514820083250ef963eefa0db16828c11707fb7248bb7f0912e5708166c99d234739a0a2aaa63b8fe2aae8a0a11be2ff806bfaf81701f339492a4086926328cd522712eb1465c30426751d04ea1a3a93104ebc2a7c1d50f8baa128f6b9f5f8c7e029852c4a7f8921b269826c7e37c9d3bab92ba81355c3fc7738a804cf9914b7bcef76646646dbf71f67428e2b9afd6c6c84bf68cb3a11da868856aedd97947dd81e23b25c70f4c39470aad26e398c813737fdb44c43fbe96c11024c969059acafa5f5806d4f2d3e032cdf1fe31b263f04028dad92ecd755753dfba8020a5059e114ac646434ecece29dfe28e53e796809b44b7b2af04cb8b6338b7b79f16639034a6f000c3ababc6669d301b8d37dd2050706aa4fd6e1acd0ebb08cf6c566a1ae5bb6b93df1dc3bb89a1df1def8d69da967d5c75d4b801313276c2a9691097ad4271d4d8156e943a5eb719c1d66f73e41286787dab5ca8792e741802aaed45d8ac7be1aa41648a216db3a8406248ae7537f53ff3e46f1a54dafc6722ea426c73249cc1c85756aab81140547a6c482a311bfc72e14353df95207cf8c802d20fdd242507fe3e17c4176338bcd49651a54421600f40ae8f3b12bfee477e73a6d725455899707cd8fa233fd21a9c771095414f3aaac2ab98a9ea5bc9bbf4ecb962c171e4c2416e682c5285f7cd09da9d0ad3e3c79c4807af824d6251441af02c5a46be49245301679d92b87679be4081ce958486f409ef4ecb9c4494ac9f95d354dd35385c4856d2907e776018198ffd49dac8ca1e3f90cdd66ad13969d7097e0cdd03a1a8aa8988726e1e6f60fcf8a2b4391aaec2fa1e7a247b325c3a037a429d0062c659a02c5ccbd969c8d06df6992d4888d60e44448a6497d4a2148ba6e15fb8ad714f30c96fa30ec229be961a49caa634f9462ca40ef777059dfb08c7286a98f4f48558e0d673c99c0b4ef59f947b984dd47922cd3ec3d36dde47c29705c7b4f3e68f7f3f8ee127ae3e5929f08ac8a04922cff4952c2ad83c08e55e1130197fd6146d8f98502c491c9b1a31390a9f7ca10bfc25423b4b49cbd0a205610ebb8bb0df6872d030e2914c5553bf3b8ea3565b65aa95e284230b751e0acb4077a8a7295d7a6661f6e1711b16c3251bba53b5f88599611c5ab6725d7b6f58a1e9d9bd4c22917ac080d944423308991660b571564876e8d496c12e26121d8c635226cca41144cb87087047f3a5543c9de96bb5e03016ef6d2c51b80720a2eb5371e0c6edf73bb1f15e9829491d5b665e96bf0852ecb12dc657d991e6a1cf5c241398f7d445bb2fbd4e16a8fc2ace94fe7d66683935375d883db452520f0725839924ff072281159eebfebd4b8c8e6f69b35699ecfd4d560cc502ee9e324751362dc2a6c6141fdb222c45725ede31fe119f467fbe94be0cae90d4ef0201985ded3cf8259b7f23238562c5b1b83aa33b54d4a6b95a05106b35a1588edc30e8bfd770294b90571c9bafbc374a34a114df8b9711455aad174eab0de7c1da611dd978ff757f82a6aa87d1b46d122832a5e974dd22e6af7537595e19b7d58618dc83beb35bf2caf7813ec1815135eaefb8e15bca89f8a8a3a9e2efff383e0a1210e004e32ebecb787d8c33f3a1a97cc8bc4870990df78b5ef4a870c8bbae17871dca72b2fb2536450c0fcdc020053bfaf4d81d91bdecc1879f73493820ab215f3de07fd8ff18692492326c9d0d9b496eff3b8efbe51ea69b1680af0c642148e8ced87dc091b4684f3cca7e67926d38c6b87b2c95db97fe9a8a3bd4db3c8ca1a000b9cb62dff74081ff9ed832f5792b513921dde7cd608d292b5a39cd43a16a668707c5246a6d6ea1a02f8ae412ed1ac6b48af83e393392bb8afc50d525c6d5c62bbaa9610272bedf9bb3ac694ea4d1f098a76315832777e5dbe77c8c6c48f6af78107a521c15d90a4e38146300ed3c7560ba032223f530ddd3818eb668ff1b2c95c970d40b00f5df737ba0665016bbab21268d491bbeb93d7d2db3da8412376977cd828563bf87de66a94fee80ce34a2af443ec6d49cb884e69c19fb97072b83c4bdcd1643cae3bfd2d2b678663b0f540f997d22cab61b9af1e0e707fa534373db8faa62f0cde94070dc9d468aed62a29e1a1098ca6205d0aacd1957b30be5260bef2a3b945233dc7a5c29d94a9980bfe48f526f405cbbac5932aaa0b52b72ebddd814f1660989a456dec4cf485c883e69494339df46bb34cc4c8f401d82ef945a6f8625414915ac0eab09cbfadd3d5c1c86f7a4dfe3f01ff22def316babea3dc4bffcc5269e208f430790707d9fef05cb7014140d0d3a3fc81561eb397a100055c316e859e9a1591a62cc0323c786fe61034b926effaefb94e8bde2fa63b51d47727f8f9ec09220d79a8eb366e1c798cb40d6881af2b743d41d84de0b87c190b4ab44b40194c07628cde0c294a84135ceaf8d85f00c2d6d666dc1c41a8f77df8b912ff28fdfde2bc1576d56c9a622a7fd249834e6f2498c2f1dbebcbd6ef4cc46cc88a884e7d6d36933fb7a2c7ff8950a190a959c8fbc4539fa4233d09d76f086fcd988156386032a120a927fc29d71d2ede9d315f15a77920fd29df81aad424cf8e0e030e67c87999e31036dc6465a9b86e21fd83eca7cb1161afb5873cdb82020620ddf0c5d753161b070a8e70ddb49ec23921df252876f7dd65baabfe34faa519fa85c08d60977c7c3b08ebe5bf4bcd91cb5427cd3c81e01363c9d6b892696a028112e6a40181d0f7676af88ec3c56c98ddfbfaeb37967d580a47e26d426cae493076ccc2aa35527c7b69cfdb905f763fc1af792dc7614e11ba1005c3913db0137eacaa590429c8d65f8765e44915a8184e5c1e807141fcd978bbe353c50b8bfc463465cfe0fb8b635be7117341eee6cce2ef903b38463ddadf61cb5212e793defa62d031ea77385539b3aa4f590ba8ead477e76710925ecaff23465d391f223f5ed3c05ecc3ed858a49dad3041c0bc1f3f81a21ea9713606fabc49465bd7237cc70e609589ca2d49622f6118e986b08e4343d9583231e811305d0071dc08e62d3515f86c87e84f943df07fab04e55d6c54132792226525d6007b67e4531aa4f7d6bdf8809b3540f7e88d88ca26b302291c4ab709bbbc513bf08613849783de1b6660dd5e76ab013e633ccad65284c3e6eac0948a66dfa6a3a691d897ee180cf3c4c42c43c3161e70a1a24614b1c64ac9d4cb8945efb1052026b202379e4fac09fb1a0102250868c0241ac12daf103519802dca7d5b8cd5aa4a3df18e1a1ec51e7f28a0630d97d93308c299c053083371ffc726d667963f123aebd1de4a74435a9429410340ad13e3051cce62baf2c2ef4a389e6bd54b202fee4e278c40322740eabd505a6f489f807b95eee806cb9c2fb1316feabd3a53625712d05b66e52600add0543b83868bb32e1ece97528e05229c8cea094c392bfebbe7a3453626dc0257a1b2f4429c18d0c4e1e50e7d4507bec0249b52487e4eb4917d2ab5d0287fa37f71d8a8a23acd421f26a03facdd08902786d63f1da1d2c1af96bf8c1c6e0c7d0332229333f1e6cb8314899d95928e9fa0a760c1bb02e9d0af2fbea3fd922630f1fb1967cfa14922ed58c11266bb778678ba6400afde2937d405c356d3495bc45b2ecb7470eae251099d33e1e293abe021a41a1c6eccb4b746180e198fc37d02f9aaa307a7eb7e5fcc200bfbb88a2d82b807141ee2438570a4c706140e5e534c54ca857421b162d2566cbe70bac6c0a100bb321e75a65e7538cf646981c28cc596a79daecb76201d5c696ea040c1470628bcedcbba6faf54e580bfc86c6e6371a0f0aba63fff47e48a380c714a3dde077244fad135f35c8ab7e2b58a070489efd7c9281ea17877c2f0668185cea5cbceba68ad7fce5ce8c1860e6b3edfc56e8604e279a9b519ceb19dbfacac35ce422ce4072bf8b1130dd6611811f089d2bbe5a316381ed90dbd7c4f8c4bb1985070176d03a8794a3213263cc319fac410e812352018ae78e443f443d77d981c9b21a682b940a4eeae808c3dc6fe056b556de8db45500aba51cfa4a7c3745e35134db08d278493c13a92ae995cc1975035e621e594ae19737f69d8a520490056ac51f4a9c9367839f4ddc34b43e6a2286e428ff8ecdeb9a8ebb404a895cc51f815a8fc92070b249080f54b3801df4462498e2c715dc9e0da3e03af523f464c474f9b709ab4c7eb66733443a3d3366a938cf56634c47b2a3c0d995fc61f5840e760b3072724ab9fb1108c754d7f70948ea1edeee245fa20eb4390477858ca58586674f4ebb181f0fa9953dde43bd3b343d72e023293bbc887d4fb21b7d552ee28853cdb2eed437fdc1700f311870553929067e1d525819769d1d0ebd702475873587b888123f823a582975a0638b14d9f2413e5f93581963da05f3ea50b6fb37060e1d2911b91c7ed3faf4715ff8c367876b9cba968d73b1e4a64242576ba86937a5b155508f4423aaf4b2d5b9fbebec0a9b58f88879ebe66750ddf546b7d6d6fd05231482aa3301ef8018061dbf4b522e2ea49aa2a20d4d4c8ad70884650ddef015126cd18d97f8ab20b2439fc94df2233740ddb6da4d0a98ce5f1a070ae2df6c077d45603c4e368c9ee7ab5739cad530a017e52314ca1fc99dee5337524e2ad4f6ff772764c73b073d3ad169f147da130391438733af7ff82119d6d6798abdda48ea1801892f377b2677de898608e7e23c0b3549cdc314652d1b067e545f09853b3d319278d5cb365417496564650e58451938ebfcfa46902383c8f7bdbccbd7d807fd3a93bfa5bbf812c07f31ddc5dfe9977e60ba583812519dbb8f189ecefbbc9859ac25117af662c82b27df3f6a8fb7cdadc7dffe8d7b94c2ce3f411e3522cb488d0461df8552d36d6f135291881f2916496147b54bd4e32e53cb1d9685c0d5bdb3096a042b57607b5e46b32886deeb336d6905668c8d7a4fa7bb5cc0097d2bc3cb1553508e9c40e12ba21eac23230568bfb9ed3c075e49b9559642ba5b96ed1959d0f58c51cc6c9b030ef3995386dbcb35c7c56e20d9f88538de57027406080795e50dc51e76fd4badafd52c6867a6e5e53b02a2c793781c8fcc0124e0353233f1417ced46a90c8a88351658809e444dcbbca8b2bb5ceca46c3d684cd7b8965c3266c80891be981c33e20dd701d441028c4f58a82bd44bba5fb70b8bfd50e7c8badec6fa994aa38e3d0ee17040f0e9e61bbde04c2cf35c2d8427b6d00feca4ab5dae76fcaf1b91aebb5d0287d2f74e4471c90393ed522b510ebd48a59bf1be8f733ba9e27f69158501f8224db8e41cc96859df9db20f4b4bfaf4fbe5c80a13c63093df0edf94911ddccddf53b420108f00c1d788052a50837691cbc52f469438f1fee0ff6b9ff473f064de978d035c878b323e298a954f9a2a5b8a6937b90974e830817a934b36ae004f096c55ce368c39a24af5ed7ff0db6f89226b7d8647993c9160ec8bdef2e15fc9968983a14abcdd7297185351d29aacca897cc2aaee747c5d50a10e7aab7676186c0563e4b5add32063b44133bfeaa477f61a4a07106cb6b4f9d34c1b6cdcb540a767d6b606bca17b16c75cbb0568ae4e9db79ef436b30fc8f2329ac3f5e8d18c48e8cff7ad723f6aaa38a613c06ac33810b0f3f05ca549733f69a002e472bfc2ae006c1ffeb3499831cb547d5fcb38e692ddef25ee4fffe8fb27b2d6188efee51a241b95652309229c1f8158d9b5cd351977b913379a09171cdbdaacdfe9376903c8f3240971d1ea4ba18a4f81f54cf1373d99c7402a98db069a68d3aa21fe4c8692be1565b79fb97d8d6f6d9f9e14fe69b3f7bae004d6bc75e252dd29491d912a531a5d30be5e6fa3714f4b790077daadf7edd85279386ce642fdd3791536f4c35a59c1e78b754f7930eda520468c6e7376d5a64cfb6914807bbece68114dfda73bfe17d5721feae38e3c3fb2c4d78ee488fd8904b405e66055b37902220a565810b079a5e6b841e4285df535903896969fdc194e442817a7fb1ea440af8116cc9973d405f277c8b20852f590926d9acfefe4cb69880b91b77236c8374a2b6caed948ad1370a4828c12e2e2096a62efc0f970a2ad79f29710d17c3e8260e44600afe9bf83e19e1a7116ac94b793bca8db43fde4015fa699f7bae8e1df0a5557f8ad9bb13ad7a1c16503d1a1f9fe0968aa1479eaef484c86fac70de0af87455953cf66f6f8cebcee0ec500dbe19e6b9c6219c8623ad5386e9a7c05b79bb6c81d4f8084bf55e0b9fa3950fcd37c7fc7d97a4a3fd6e64632b984b7de069384a26a1304e133400ca054728de16e1f21f6d614eac66840913a907e0b5ec5656d28ee30b85a91e896803b40ec10f12308d4e5c5fa28f290f5311a9e0a9751e98e944a08c4eadc14c749de2d0d338060ba3e498208e02c6d7e8a90e898c1030c86fadaefc65a3647e0f9172e6622870cb61a96911ae0451ce929d2a4258b450c85d38ecfbfb0427e2a1a3516739020aec8ac1cdd28213f46f51b5040e4506f8183a6c6719a165ea46fd0a41a800981d0648f7aa690e9397c9bec43dc33400bdbd7afc1da44f3849b2d8a3e6a4df30f213c7fa3abe962119d4a33edd9e8fc3b0a555874f0ff2d094017508e6a67f4c4eb97027a50492cb5377fb2e8288a67336b675d8f127fefaf3aa28a7cacc964a93ee5136ece9b1e4e482eee3712e67e08814c37f1425342b1addc6da0b09a82503094a1602525f6a5e6267aa4cc64a193ed3f01768a0c30ad1f7ae04627edb1b38f696518c90374a4fe264d9406e4186e8582b74dd663d2709a3c262e56a1f7714a3a9228b95ccbeb6971217a305a15be78ab33735112d50ed214165dc3aeae0d6142d394feb25d92b4626e488a8b09b671c38a27fadeec261df857d0c8804b9ebd62d89f9f8d8f9edecf25c17e498305ae6445ea100aca609527ebaf2bbb38bb99d2ccd88604fdbe5e60dc33a30f3e20e353dc017088f35b3b52810e68055093f47fe270ff72c907f47aedc091d7f286be250b1508d1f4dd45f964b869e8c5d36020c311d9d8df119afa5108f1059b6ad71d0ff251e9934b594eed9b98f1ded42af003230503308e02a5506a1e7fc965979b9465f5b592d88a86ad2bb064876204afdbfde8ab1a1a7693156ab04bcd7c13aa6153043a271e2dcc97aa8a7ea3d091a47228038152094fdd8f617f4168e430ad541a64c57318929e7252631a7f0820222cb58c941a00b43db4d74bab2f66a45b57d9302cdee4a2a5a42818ba7ac9e4152ed31a94f20020595bb5705deba5a2022e0d1745dac7cc1003fa2477c5d25bb15546f3ec7820f5ab8bba0aaa8d0d51185289084f033dff44410d4a9dad0b14cfe4a43198a32933479cd14a5f966b28fe1c0980376679ab83cba6c0c4ad1ebf954381d1e18fbdc6822c8f40f46a11b9b4f040740f711b6d3e91070f23637cde05f3b886b147aae1aeb64e87372e63e9b467f26a58a8630a9baf9013ee0990602002f68b83888119a30995d428eefca32111ed12baa2b741b5119490132e4aab167733d67c519e150c6c7b5c784551a71e00f24ab42466c912e473116c38f349390dda426d8af3e310a747e57c343cc329688f367944e4ac322804c7fe649d17e5f1fc6422932ad100051f9898bfe0889582e344face99a1f4bbb234e586e80fbf07b03a27972929acb5711dd157dca201e60197401a9baf12b83dd8ae6d5bcc82391ad1c833c49e93a1a67352f5799707986fcc97f6e136f1497e9876a75a91e6df79438569710b2cb93ee725989e450659a8e16cb933b0dfe6774d530006bcd4c0b236a79157c3563fd9300383778d1277d650aa38ebae9805f82f55dc5b2d7de074422a88a3e57b6c29796424395ced43ae81b44805bf7dc2c041937705f9614c159859ad9c5741db6d31e5164d37cd2163330ce0d0aa9fcc30da615a4300d1df853598126d4006f008c3db12699bf06255b34a8137eb9ad9899fbccd503a19fdac2488ef99ba83d9522000f00759f365f19a852fdb11f2e22a601306d9e0953e77f7f513e4cdabd26b82ed41a9f43fb07f99aa10724b58ce1be679c18ee64d97eb76f43229b93b8ebefcf1ca38425030d594226128fffb489df4081b09700c7d65d2d7d41efb6e16fa63eb6da719fe3117bcb5bf6ab4b50738f14f16a86cb7ca37b513ab83c9ef4ac79b17c48cca75dad9e42d0a4c80626eb0977ec8525bcc6ac15e6a9a5bb17de8f8d883cdd1da62434db0da82d29e578133a9627ad9c7f1c329c15e206aa79753f4696c5506dc2b607a43f37ce355ba2808030686109fac4050d4a86bfb76f532b800937b489fa8bc856504c61ecae224089e29a0a88c5d8c2a75c554376ef9fd35c3599753b793a62141cb0783856d7a1b2fe1f0b536843545aa886031601e528f881d600f6560dee6e460f7d34aea560b711c9a49d94f8580ac91718a3ccc2749aabb539aa4f2e9d7feb28f112f45983b4773bc6ca28163fbe65c7b52a866a19b698fab103c61b0f29aa7fb08b9aa6570edad8e971a444e9a61a22e28a64694d9b5c104a03522318373f7df29c08f08d95124e8230412bfd7dda08b357b38cb79d63d82dacdf3a3d5544186020306c09f92a688734a548c9909bb0ad23c1523752050ad8b2d8024aa1c828f7700f262a1214c011ebe43d89a8caeb82a9c36725813788278fed18ae5ded578c743591b5ce960e5c448787ed78280cd8482df380ee0f9e8a676af20ecb623be33128b23f3ccb8af4127c0855ff17b94a126829fcd8fde279dc0afb81d13de095aa2fa176cdbe0eaa5cf3a40b3c9bfd4a250ab04b818ad382b44880c6346057457148c4888ab899d3b6ae8fad98ffb87e85c1b9bbc3a6131fea30ad1e906e8a6ca7990034ee6451436f7fac85589ef30ec6cfe206c2ef90b51606345029a71aab56381a107140b5106ab8d55df95e1f0cb7399f08c2597a9e2a9902794ebb2a13a935c929a19ddadd1d9425083360bb71a8db5a875417926e60283a2b4a93aefbc9484108479b6d45feebf78fbbfd1ec8ee0f64b77a0657add7afafc659dd08e03c0ed7c37000eb1bd9f6223dc2150033d2397610eeebfd6fe5088badb693d1a6a8a89b663a706adc6bc88af21cfaa81933a61332f079faef0c6b66795aca581f3f8b48282a6fba8fcc0769bfe2e86e5ddc9120842bbf21a6e2fead0113ef5baaaf155baaa19bb882cd71d7d62b2e4844e91435cc4b63617d45cd3b14d1ed4c5a95c6c70fb01cbf5e918dbae6ba6e3cde151f8ea573cec96b6d96ddd75fbf463fa75312b87ece9484dcf31f2359b50d7c4c6caff380750931e8a41d9d4967d5aec54cd7b690f147d4df472f903d17540f5edc6f251154eb1482ecaa0b48b78273394b8c42f10dc69f6c5a555c14b6703082316311a329b34999a152bc4241f8853cab4278443a62b0eebd9bc24df768c19eb333ab9e21ea3d0bb263893b673f62103b08925734b7b61a4dc24326e3c1aba40b29490e2df3d80571f4162dd9462d074d17dcf5864192ac6120a62fc3a316dee4a54672dac14193fd0cccb9fbb37abf98a4e99b45cbfb70562a52a2c88336ccedee613dd4b08b94fba252333e198fa30b8bc770acc47a2d00f05456d65c4806e6be3242b92f9567f03e5f7030b73c7095413d679815ed473a87a24e81278b6cac4b799b696e4e5e458766149c99f196232af49b17487b7ae9d24f3853ed1eba1e84ffa2305e84151c5520fd431e4d5b9b824a89a025e787d3fdc094f3e085cb9a6d51ee0c72b05b6fe0873bcbc9c9a83958887c7526e8e5d801719b5fc56241d038402e5160a65199d7331c841d367437b72fc4e9fbcabe27743488cf876462b83ee28ac3dbbdf7110b33d1cb361d77685521ebb24f0e47cdf6d610472780de720fbb7803367bed1ba40f1fe7064c1b21fd8676f6d2f7dd3610e2344e299458b845bf21ce21e2a4a3dd93df1400449cc14d0761bd2fb7338f83d6776348c4fd5d1aa6e98843a15341b72e52ebe554ce0fbfbd2a4f754dff145fe6b0d16fbf7cec988c47a3342ee41e52a1a67a4f6208698aa9ba51d9e4dd3b2156bde5426a03aecf68331c9c797305c4d9837e7da3262ef40d8d3719c8fc9e2257573f0768a0c437cf84e759470529f3645d1b922f023f79358c3929d3f05115e723d85214651d507ad93b9a78aa5caeffdd1646a2b1b4750802a9fca82e41473c2cdbae615f155c3a8fc94360f5078fdc8181a53f53849aed21c60ecb160140548c2cd546d54794c8b123ec0a8d4cf1cfa8ae4b84ce93d3285a708b846fbfd3290fde9212c2fadb5a195b633c777550759150f8d97403a2c36ec82f41c3ab03d1170da75e86a5ec0d38b1c3de3a5462d304fb5cf73d908b50d340c9c1f8d9155ce91fa8ede8a67f528dd38fffe4c38e6fa95322446fd6e3784dd1c1582e057b3e6c9391f309ddf625010aabff80c9e1b0de20b53fac28979375a0bac5daefa2355969be56b2193af8f39fd37fd94c1efc4ba5b9172b7434f245483754e302685f252bc778ea50fffcfc230fad465dece988ba86d81c763ee9bfea2b9ea64afac9e50901f9c0881e12e1ac559f1207636cea3a41b6b539d338e70f5b5c6a05ae9024495d4d8dc5ff9136f717aabfa4f50f0ea47cfdfd4cc063e5d3fc661c553036fa27acba7943e8f56fb40dcf25a11e0a2aeec2edcf0bda1d66b1abf3f08f0955f38e202b545736626b8647ba8e2ddebc631bd7dce678d800a49f213f1bc876d6f2220ecf5c0d4015de77eea7d786f3874ed352abb8d7d208781773ada75751c516042e87afccf1cf95e1673a867645f576612c67226fd89f3bffde6dd5c89defccbb2edb0e1bbf04f2ac86825f6d98b3b385821343e8f112c8811778fcd9921d00a18753b71777eda881f02fda60c9e404a7bb013b0e9dbcc9c50b998c37dc6aaac61520300b95f62c0939e974997feedd3e3039f16025f947656f5100b449605d053f27879b114360a5ebfacd0214c8aaac56ed968e8aaa0b474c3706ce8c9d39809f4368e606d537941ac3ed7f2dc2415bfc51c60039c3687e45d007bd81016422dae4aee316c7e750badbc7b9a43417fa163cf9398a1dd2e3eebf3b86241ea4e8175a3624c238cfb1c95f03516e4be2c0ed3aec89e4aa9e351d1093bfb9240ce773a28cc637b67c98ca8e9a5419ecaad0cb63f0448b7187cdc7275468524a0691e0e5c4a444514c6d73583dc8fb63c5cbbb274d5699959d31d81b5d309dd5acecddbf9796abc9d533439e396c2b43ce9bb96b45f05db163b21c2ada14844f0425983a7942172ceacccd7d1a6e4204e13e9f7f08162a8bcd123d4ac9d6cd2406007d631927e26315b655fe328fe19781ebee7b6e18c56205c7cbaa1444d64c4807fa033841bc022aecb928c22c53a9a1d3871aeb334d3bd70418ba556f4132dce8c4aaab5097eb0cd4fa72815ee39b52b9da4543bca67e2fcb53b7d97cf261d71db71a14b9e69c2085984c8288e0f8aae145955dea4229a2a02e6d4007c1366c8bffb6c0cc5e075251a9fcb17715641a30fc1620d15d385b626e8241a3af9807f1304ed409a887de8f8f5c762d4f5b1a91de29a8279c5b9442a47fc55fd91ac39fe04831989acb34751e2e2de57c5fcebd494f057339cabc3ad6e1ef54728148f9c94bce7f520c9cd8171e4a8d78ad4c953b7324e6e6154dab177311f19649409bdae6f3a69264876ac30bcbb89bf5480cda6e3fdde15d9774712c3d615d41e3672e08aa18bb5f041a3221e435225b4db55e17db0706083d8e9e5acd088b44895b8577880cb8850bc4891a236e38e2cde20b9862d87b71af506c8c8338e46eb8dfdd47f025078f67b3633dbfac89582a563f47d8b5204c25b5a45a16585a14a11b00c209f558b8ff11914395b1e4878a234ffb9551237343e02477a0432d45f4e56a71068aff21d8c16c871d7eb6f397712d3c454aa86023d0379a06d3b069fc3a720e06cf012af2e2c95c172d790870c9a965d218606f2ce7b8ab04d2aef58a087032e5653b194b808729ed00101204ea2d2c8808541d53a38d059224407a79a920d696db6f1990cf57f4c3dfc4e7eb4919b6c79a30592ce52b342667bd3c7c1a9f726afb034c5967763727a5ff87b5270c6fc12f4bd1494f67f35645f2063c2e95965d754d6c47f5d209349d61c5140c816144103e3f64de9f6abf2fcae8edb6dddb5849706c69eb7f67a93106a06c5fec16b59307a4507009b5f58e8ee75a78f7e8dfe5e995b009fed6cb9c7111b56ff563ccaa7695f3746ac6c9f28509378aca563c07b930ec5de9d9b9f240699ae741481011d798f24ca5d3599bf3ecfbca220f6ba2c4043f532ebae5c1356db6c47dbb471cb4f1d38d42c24cfaf1a42f8d4e8c7682bef53a722679b2cc68d2e290180d2fd4739b1e9e9afbe5c16f48048387c49f2b0fa628e01900978719d931444ed783bd79160b906e1be8ec02ca2865d89a0c2e514de971595eb68b41975a1976d1924291825aea7ffc31d6aa80596072a04a5bab742152e6d560ab9df99200f79a712d444b26083cda643f6c1ce4713c38cd3f89c7dd6151973c8854e24f3a2d914146a40c454dbaae14ea6cad9c03438c1465fd435dd8186001c1b04891d310591e0be05de0f60dad57182be40c725d460d8dcb56e28d83366bc3b3e7f3441d214497078294360d83e58e6e2a5d4b14c5e450bda1a462b03162f8357c9efb1dc18a8bd712016739fe16bb32eec4c76339756ca811e6de3bfb1af59955ab2d0ab9122f4a04aa097c08a2c2aa7432f60cec73e484f97e78cf7d759d0619ccc47edcc821716950beacbb520c84411ba2a1413813d1ad65c2c543670826be702125e72689900b84398440e0b4450bb879633414047d7e40aa9875332474a335ee17c2801569608281cdbd25273fde79a15c3ecf153d4dcce83c7743eff218a8b5dc76583089cd4f2d79f27cd8417354a86c3c69a697d477d8cdb3c457ebb2a23d1d8078add3b0eb4481f7296726e316c4e011038151b9b433fbbb141ae56aa127ab507094a222c4fe0a29cc167c9385ab1a28bc58e6ec2a6abfe309186b3dd86a6dc346bbca88bc70f259681c00017c9f16cb8c87f7253e9b8bbc77a14f00dfdea26144ecf4804494e01b14b9c56938b53d39c0b3baaab53ed7b290258d6e80e440c6c017a0f4fb23e7ccb285382cb08aa1a1b7001a8cec3691d70ba7610914dfc28e522fd4165fa333596c06c3822be81d61ed13492d241e91575dd02ca827f2669a6585c3dc74de73a5e00c0fd0c3517569668a37b89a65276e98cb2381bd38d5530cf29b8c5faa2044f66f49703809e8c2b3a14b81984038842ca57be30f42f7bd6396c6bca15d12ad09326a21364740984bf47bf420223c894c6228130ade7e30208cc7f04317f22c93ab3effba73fb1b3a5e3c977a5f566f60b66b5329e3c49e3d0f511251c16abec0d8bd7c6b620d872e8603ad235bd5d6fc8709c3d92c15e3f07792b0da6af4ae44c5bfe948d893607922328fb95c68f6679ea8e777f3c652655d60195477bd56338f4f59f5226de5c2bbed7f7a6b5ad1c21d9655e661dc5bd002db2877b25cd73497849c09e1ea6d50f1fbc26f292ee4b23f8b6e55e018d3055d5ec80421e17d9a09ebef35f90ee2e9d2755f9faea7c78580fa53096d6f065d8ea730776906cbfb278cc8d5f2c9762ac46db0878bae961480b51935cc632081c1033ada3f444254ade5c80402c59f5c43d418c2f9340ab91028ffdb671ba56b645c18dad48854cd079606ada7e10ce3e080a9a1d1c81ab4b9b646798d285808e292499225b6b100e458686e447c3871bcb156932f7fc369105ffe8dcd4a8a63429c132ddc91505f1074574773c104c51a89d170984df7e7f09af59ab5a993069d1a0bd54cbf243dc8658bd02988d46a3fdad3fa708558d50aa5ddd13fa7596f65f2f694976c72b4907794e9862cf636be6bae7742e4716c27be6b203d22a441bb8f913a408da5390ab89e9571c7b5b4f0783a356310cc7e616cc02c9f95c62c51b77550fa74027405b8a7455e2951c82570f0262c0d0f0e711160de0919310e5a94055f6884cda3e16098a04d9439442679083e769618c01a8dbbff2336ddf9b16029c270143560d12160926d876c3e8c47e9b69b4a9ae1b94986a11b499610995e329420ad74c486fc85c9537a7c2ff17c4b206dc0ae0a1242d278d1cb12596a178e22cd4e9cf2ef31c4f39b7d99cf8a2454544e660f50f1f5c5270a3a28b8e854b9a12259626fa5b10d84fb55c4338f0a5af94c630a5ff22f471cb7c412669a8c1309d19a77ee19d6897592ccba6ed9cf135d88916516ac986f39af5434abe0c92eae929ecbeb79cef1a6edf9ddb9d636584364b7abeb997de3ef6a85f56b45a4bdfa7d2ad5e2ddfd36d47da8d83f48aac1681aff5274de0b8a0c8e0e4a47205a3b25ea79665535a06617a26a0d3f514b90eaac1522a901b020ebd944d77c36c57334a4762639eef501d83d32886e2cd4aa30cd7bc1e2b04c5b59fea5eab987d34337c1c1bdf2328974df68e21dffff41739e125e1e3966b7705c4bf30d2d385f9e9b7e51da4a3d69732646048b8c72606e3454025d9b36b68c78a84700daddf15905834a6b8bfc8c8d9c0180391a7abe3997ce7ce3329790f7254bd412c71066b915107e4967e3b59c2eb9c35e94af16c1428e2425edf811a65e2f4373874c583cb5472b0ad94e04913cac4f914392b1730f89fd3615f2538dd5ad6afbffcc2dde47033899f07ee4c830ab466af5eea2530463edaa8972e091440a6b8d0d66bf89c63333aa6a6e819216c07cc106ab3aa0f926dd887246c68c42acd401e6dcd0710e46b9fb8249647b66fc290947f8b6e25b57b1bf9907d6f424b04754c81fe9cc49307d342349e41fa952bda8683d87896d72eeb000a37919b40cf2356f3da6aff37ba58e807dba604af409cdf6030ba8f2e351f73c69f5a56b22884425972d78508eeb9fa9c1acab5d5cf510f15cf44efec3bc582c7e7a5cfa6357126dd95d0605512e50efb6fd2fc1ca5ea0c228ae4a5872032ca026ada0c9a767c43ccf68c7600bc48eb8606d4740e13cd81e97b93da90e5474fe7473495f22a154ab9824d6f3240d31473d149e0abe820e498a8d893ebdc4c8a7994c6915db6aa368b1614a4324527b88f1849508e14a1bbac1fb9cccd05d1ddc62f4f42aafd2f8ef8db004d7855268ccfe625447f51e74875b8d97ee29efa5d62d3926973940a637a3b7ddd0287836adda07272402aac1c04b09b26037b219ec526a94d9b0ee7622cba8975beace259e9b9613a5474b7a1a2ebc1675e534b2fd7a9dc06a456d2f5d59ef01d5af411660118d50810ba38f766a6bd67d567518461ecbf08ea28fdee1695080caba5fb28db36ac41cd7caca109ce71e2c8f28129c99a935030f5cf5fea9f34220f66b29176161a14f871bd79cc4ce225176ed39e774af2e20d81fa833a452222556acf891bfd86b5460baacb093ee2d037c821c75d71da0b63bf89f5b524814e3d1dc171300be399a27d48a8fc59a3f903cbe73188352f8582906994aa2874bb5b9c3102ab353d4f2eaf427658818cdc068a3385bab4355019bf1eb02c577ed82bd83e64c03c2d76ff18cd4c726c67171caa53823661ccd0e32ae7153569bcc6448debf38299bd4279403e04d706deee156ca54fc081c252f0c9be3cebd50430eb14b36a176227c314dd642417611f4b011d2be0e373ee0938cc43be87db03de175df5575f8813103340a44ccb62fc07f472c0d8bed6afecb69eaa2d63c92e9da22d94651f228fd9bc13aa5fc9173d6e52bcc41b629b2be56617061e2ffdf225b01e9d88687a1e6f452c05582a352a8fa5249bbc10273b303cc6cf130c63670f57989107598726fc4daceca49239fb8d495f835529963021af7ab2ba19521e927c2b371021476408c7945f769317f1f1552d78b189120b9b6810ebaf615beabfd546b7395ef28aa6969cb9a57b7ca2f102959981ba86db688e9b05f3547224a0e985f731f4657cfb1c199c222496fd08838bbada98fe6161541a6eb167708d15512e7e13af2ebb87609ccb06c7e50fac2cf6ed3f608bff70f681eb3a0234a624361eb0415f44a8cf558a841773bfa488dc7e847e1e75d718f2f54f693abd78dc77129121e7555b0c35724215a2cc8642c609810ed002e70d026514015aa38587af900fc7dafd17d421e688903e009c4f1d8d23475a7099b2c542893aaec44c25b859933be3b27b6332147459e975423462b6ed1b46b53aa1948933ac3feed00af76aa1536cdac1d5249d32885dfc317bc363057f82da01f5f8ab99fbb8b1f15e6cd41a36cf36902f6d81a83cf0d4fe9df254114fe4e0bde43efeedd5b2ec882f017f87df831df2835f92f1e38487e90726f7520f001d06259b2d500190c524a5f836020451bd48f5f55e0d3f2eed96201b9ff08d8ea1766c1d2db5307995a6bc48a19105d0264603bebee9588de2f8b2518dcadeada6dda791395e5ac5996650f9bb827b51c8a3593032333d49af246ac239e3cd8e9d2a37673b35a01d897877ed1605bd2331d3133ef86c964057c009074a3b959637362604981fd95231b2a2ab12e375d3b04a68d321d5a5034103821ebf87a60f30dded5e94c74f41d427fc2422345581e89547b84a05fd04ffd72d5de6317660ee4fb92c662d6a8cf4845487579c02eaac8a9469983340206d2633b2a89fde39f4984ae3cdec4c518bda6c1da53a6a74c6c3b3ae08eef172512b2ba10ced425b867275eb7cf9ed135c57dc364e03e8fd0394f71c412ddd1529f4f260fea8a89ebc9eea5035012553e1c58ac3a6d036d3b446499812d50758acab81e642454d8d07de243a0143ae7206033eca81481d12955b7c62e2edd10bea7d3fcb2872d8e3e98017b91ec3b4358dbf127b198f90f6fd0650e935003d3640d36bafff1d8217f68ccd4719b0102ade2b31a041bea6aca3f260d847d6b3a2c3d8f419a0a4a81204dfacdd29d23351cdc3bc76d7784b814f54e79f7fad955ea9ab0fa76b89394f77ad32219333f6faa684374320ab62bd5e5f29942fc0e003882f55e89171494a042fdaf780aba04c9e0dfb42e44146700ebae8aa3041124e9ba7900a0c7d813a94c1dc31d2e526a851d90d39b14452158af591c9fec5ab987069173f9c4cbcd7147ccfb5778ba20f08eac1e6cf358839f1d676e177e5fdcec0bc04a9c0766c518e82abeb7b1c807f4215321bdc2384d147870186b26a80af1ef9eec748690a3f0f7f671de2033c07e86ce51134c79b010c75ad68c2fe3295cf57c5e6569d164d0b335ec08be2bf456d51c6cb45a90571c5563de81f71a91b8d22b334fa7bcf33ee958e742efe7e99bb0bf02d67563cdbc5bcf2e8743f279eda990cc19a3097799e6a7a067b2968ba0cd6cc34d81dccc4cd1d6470ee059740ad1c8ec354888d2302866f7703d173306befb75c3bd6dde9878b409b8151f8640d98156a40bd727184e4af8bf780a8062708f7d09a33b6aef602902640895936a58f15171a38c17b4488d087f63bd07af847e1a3aaf3590e73a4c37281134622bb2e47fb64df2f34fc24585960af2b7cd0d1a53a10910f8aa268b41748af6c1c4f71170c7b2778d8ab8f7967fdf9364969c0e6708ba535dee68a70a015349fea5f8194f63146337716273925bbad191cc08f02c1756ad146bee46e67ee220c34682877b9698c63961317c64162d4e271128f87875c98705a256377b5548c642de495e46f037053a9f38458bfd1cbe967c8c1478b30d7cfb1bfb8973f9d662d64f76d1e48a7df65900c0c85cfda5a8f55b994d64f97aeedd339cce1718a130c18d367ea33c8d8329b2406698f94543e2a2ac8b055c028bdb0433324fafa3081a43b0aa9d8b0801958148a60c669af55c2f0ccc00d84ee0df82da1642e3aad78f71574c0ff5c876b47b83288879c4281638c018e60f9827fe0e44d875ddbb92e837bf2153aaf308fca9a45756be6764419ed8f6dda1e3c3973769ca5d47a4bd129022fa00515d9049c9d8edacf84750a93aa8ebb69de6ea5a2e003317f356c5d3e351a282124837dab1df83b8caba0e19b7fbf2f44c282dbf7ee7fc1d3fc4788ddddf100ab3e10db225650703472c4234b9c81525403ffad681440bc3b6fa213948d208586f004a0946c0302cb316fd06d761f0cace2fab0019897dd91faca6a95bc553066f9c15b209f3bae005150fddf62b604819fb22a4ccc3cca01f83f8b28a46c6ad09ed99d8bf6e912709362d09490761a65093012740d81a93389e01094efbb38ac49e2122d013bf2bef459198bccaa5366622298359a7b2c50c43115c3406a118dfe2b9096ac1e60eb589a980358f478a6cbe92bb64e5a80cd7c200c24b1bcc6aa5d01189ae9d752ce734f143b1720507db6acc02b2751422fd24959b76f334ea4a56b4781a4a6c13b02277bbf6f42108f3d6d5415cf0457da5f4c68481d083b20a616a55f8811b0f8e89a692ba4b431ee0dca2fd5ebbbdf0053b2b222c2935ae5f881e046c41250b21f116ff068ca1e4a4746a30cd5689084ac7bc18e20268a736524c47efb998c6d7b7a82d9eec85670966a24a808f6ad021e08d16b90fbc9758f49d73f995815c3270047a251206b4044c92020311cf79e3ceccea9a9040b0eab8cc8999a71725ddfaa35ade85fc8248aaa026f68e943d9d96b2aa2ff357762cadd1890e4e0a45a4aae9d2f584c8bfd1331aa155d6917c6c289ee696c2692f9ab0ddb232f17423d34a14eed00b7e7220288f30c1755ee4c1081a29957f92c61861e37453265c64a3ffeeb69f518a851328054c300034426341049540c7783c8462c8340441a47018994660041a8310a8088ea46308928261080a0a21d3388c40233012854011740c47523004494310440a8791690446a0310881ca9020efae1aa2ec3e6da046b08e4a205c5b4a88315065ed921cb04cccfc2586f0b36c60a78a333bbe2b685f7ec3710f806af2fc948ba0bafb64093918f085744c6635e59eae28294771e935067178b58ac47a529cbea7cba3f50b3a105c8540d220328210e6f7c30e480d29f9987d8e7d3609a752df57e962ca6d4a6f5c8bb9b7bc4efedc70b65e02fce341ac48c36db31791a0d6e01da221b6b117c2f8643287f10cf69de820352edfd72fa5037551a4560f14f17e54de3b0cf8c576e0aa70d060a9dd2b384d15a3025a744f608fc0e2074d6b86f29cb423f66c2efb1486ab3b46d639c29bd91cfb611b2a43a758c0bc433eaa2dc573b483999d811da724ad4ca03cacc6d02f1dd0846d7693dd0f63148551a1e78017ad2ee45c05aae950a34577fee7c79dbc641381e56af90a2be379352aed19a92a469b4ac48db40b343003336936bca952f3dc9ceafd207056cb48aa1ce0541efd5492785f08a04ae3f0a547f076db5141d8eaaea53a00d0831d320189dd75142f7d4b41b40d2ae1baf28da93c2b3568147acabd6d10ea3c8a4cfac73932998afc2801a8810ec03070301ce9d98d052139996ed033067d839c7d609ba32a82c4516af7bd76b84f2d42f094d1705959c8473bf7a30040142bd3720252f258679dba6a2810b59adb972bb910b086676efa0820be9c5cfa0c9bee94093d37bafe9f5c072b7ac2f5a8d9e5f3ada086670b4e04dd8de92cb09661bc34d1b639b48ec17f10cbb839b62a1d05821cb67230d391019527052d6a706c62f9d23adbb74b14201cc70eb968b777cb50256e10f550545d0da81206b8afe81ddc7e83564379e416f8bb3c08459fcf57121b257b3d5efbcd9d2f76dba440d919d402b3d7e061f48b1062d0786ca2262f6132258634d279bc31f3793570de739f3c3b373607f98d9851a704e8510052d60dee8bb3d2be76f24bbd215b5ca1eecae1961bb1097993f159fa4e3e4bf90fe653323fb5134b15da93fc0d181297b1005186d94d717ea64e45cb1c30622328221e86c5df108361def7732b0f0dba6c3833acd50b73476af4740b3097918da3a60530c39b0b580141c0ac57554f907bb1d34cb2fc5344ff9dc0e87dd77e00ea3058919376a73aeacc91cfced23600185a50e8498520d72b653d0081545aa17b02c1743094309b1e26be9a793b876fc4b4acb02574a55e8b168e1423fad87628c45a6ae65717763969835fbb8ed1ffd9540be8ff3929f8846fba6ae0aab893dafcce61e01399cb04f2cb96a4e04fd76d251eb9c2acdb1441fdafb104f0b6ea5385a16d0ca136bbd410fb8170f1301e2dc6b5c748c10c721754f7f9806f952776295cd0b953fb30e0fe0eee1d8487487c2aea27f5019bfd5cceee1722264c06abdf0571f56055da8fdd60a33b4544aeed926acd93095e1a4700fa0a1216d9c6d35c1a764cec2613d41e4a461417b80991dc305483e27cbec5009444a4cb66bd15a3ef3a1d9cd7a2b93704d917e421db05d715f0bb994d99aee5b46b7a1f88391433b32eb7888c2500eb51028a6373ae890762b32e70ac2f63b8eae99bc6d2ef09ad64d793a433abb306dc4a449e8f313c92b9362d696163e06a62c83838abd585f4e922ee1b462d9bba4229423ab87ddfd070163312d2171427539887a1e78da037f13515863b205412152d42a3224cb548f82c8ad01c04b896b99a6e27ac7fd48dda11f6bc90d41793e59ca62768aeddf5c8d7a96df79b85f39dfdc642ff3a7a374f6d801ed2cb07e1c52927eb6e6032b45f9e37f2a4792d492ea9a871e61747e7f4307a2d8a09d867091230485588d5e1906d1d067de790501e7023c63aab70e2748a71f705f92b434e2170151488725979fe570488bf280f8719bb7fb9426b68e27aad11e79fb646345e052a3d4f2043222960db218ba4768f45caa40e308c4583da0325482c066c5114e764b07bd8943a4d6595f71c3a12c58514730bfd9bdd5d74290f1635e4d64461b5ca10fdda49cd3918ebe9bd0c7eb65fee07aa90e6b81d8202913195a78ad248799c221f471c5d8fd43652080f0570f69c790367987a0b2bd46e69c9924d33a267c4eaa4595eff9148673c1b55eb9a1be1b170ab9be7d62336c81029e65f2b78ef2c64fe5527a921977ebba789ab01ea3ac9b67f708eab945be05b63f6b954a1c22a24e2eb712ce4ab7b800cae69caedbd63b571306a970f501991c3ed42292bcf21e9cf5abc13899e8f67ba695834504b1dc8edae72cba573d703fac8d706124f864add0844b75340167ec5f3e0f2235f1efacb9a150105a4ed918f158ae057914a44de149d990a4eb193dba4c417fc6971f0a1d223e7c96e14f75c0b2cd057f4ecef8a5bfe85f91ff0e6944d06804ab350abcc7a8a1a74ad62a51baf6af22d9e495a0e6437c31bfe6d9d37aac0e13b2110f4179ec4ff89e01921160985d804e957c4a8a1e3abf61f628c8366cc35ce0842e882dc7cec02c7d0a0849fe001ca6b868522128ed13d399b28c2129d4e955c6b0d122e254de589e2eacdb7493d04cdb3f3905736ebba5b28768355b2f23caa6ea8621761726f9fc6965951cf48552b960a9914bd06b7c66d1a2935d87c734a5da587d12f3d567796793bcf10a1c8f810d9f4b3ecdd157c230109d65909e1be15e19acfef14e5d944508738889a604ba5f2f3c2c5d69d5d69bd1432aaa6afe892969b34640cf5199777897d77858925d29658421cc95c3d79d4079688aef36eb0f37301f315009d84d1aff457781e30a0a2502924c5a5375855448779814256dceaf7713d33387168044e7bd779915dfab0cba253dd55c3768a15e30ab73a06512ca3518293ae44b287b0c970645bc2b0351dcac484e885714aa0f598c3ba9c714b311b4cafc3c912b13552d82225ce914313ff52f0c13dc1e13eae3c9bc480ad346aa3faf682676f16f854c194ee0cc1100e7e36de2661fa70c2f8923dba85e2acc4962045c7c5ea838aa8c335bc32173c5455349dd790047fee693d1bc1909c21893a4cbb1476bc9ac79aced1f2ce3fbcd9e8b6e57fb963244df3a8a99eaf7d45ff3659a6a8eca4ec1499f65ae70ce8d5e13ffdb0b6daca2a50388d0ae45f28528b988151acd434812a4672333dedd6a4fdeb1b44720e9fb50f8c1589360f1894260c52172f04d7b1816fe8b291fdc6b20f52a878afc29d6946c600093d26ebbbc2b419306053b71131d4f8bc2c2a212198b9d5f3c18de6aa8dd05f6e722b32aa5420d4df480aa266f591470227c8679de484ed9f9f35ffb228d78543084a4225c08b4dab47f3cc3f353ee78cf87c69857b56aa28477624b6af0b6fac2b2aa2c4483ea015d29561938dfa0115d6cf114708885a7acea6c5c56d5a5962b11d3daf3676fdf65e127f3149858e11b0db771fd19f7906323bd6b407384404eea749c1b13dbde8b27ddca8a648aaa8425c667d9ad3895af22ccf37eb55cf41272d232a2428958c5020555499b859d4a3d876ecbee4ac32f06e68361f76b6c42cb0f0eea19e7e6c3b5a02301e259c60777ab6cdb11f69fce0ff5cf3a27a7908a124e435889a8070c336da2e5220438394d0e110f7b320a9e698366ca562e9595700e0a99ba424dd63da106285f058ca9c7d76b53fe6a4af31d997b83d8b864e56d9b5b72d92a7667be59a365fb244e5212bf68838ea866de507acc812a9150ec224c192908cca4df68d10ef43b33af2373c3369215f6b85b28dc2d11a6a46a95985fb97ae23150a3f8d7c8e2810ae8806ccfa6f34842d4bd30ddb495854edb574d3a8b1bc457eb980a62d54d9c49bc846ec536917618b1db24850e8f0b9003443d5876c989514d3e33d7bd7c9bc493973f173f502c0601550531238b95d4b2b277c5945fb02e62e735f53a9a1e0044dfcbc1b892a7fadb817ff838205622d0d4501e35cf3957ea547c177b023aa7ea8fe81803370e96c5f7ed395dc8471c7fe2c742d91b27c165860d0919ecabe39e4b8094325bca8ef02ca84590e384c0f722a04e477dbd64fba29f0602f11d71468f0744cd613a2c44113679b0edaa9437b800f8886ffce2e78946cf1fc068b35fa7dbd05e443d43cf339af0b2a96f9daca8b7307b5457ca53cf672e06574fda27e5fbcae664d3c1e9e39b0509ab17c135ef91264e08392ef291ab169de72306c80a2e367933172a34ef9ed63996a0807f451f9ccc0126c1b3049c0be56761dbb07ae651486aea710319a882c998357624a1173ff85bbd07a4a14f7a234e5010a4c60729ff763cf010722fd6512a52c758083e5e5ef7679e2389f0582fe0e9f39dc5b3c17887cdc4ce84a44db4391dfc315654525abdefb72d3b8297edf777a500da09986605d1d489593a37fa0694a6311695ba6fed25c84bccbfd004d8921f6e8699a5223331557ad810f26906b2fbda11bd6dfbb656375ea37b9a0ed6056750936f99e7e5ffaab03e960eaa4b885403f30bcc834431c22c1e47418b52214066878ec1c21452de195d1bb803aa5fdfaf6061d4faf8f81428944d2df71c3ad4597e1618146a661af56cb731b3cdc270c7d005bfb34a7378ac947f30a697a7de6a8ead8a3b4edf747d977c90da0e38fbd94a407c8ad03a658e8cdaa13aa56acb40ee75d1ecf8ad4002730ee462a703ada13f96b33d7532880432c73c72f3963c1dc18411be35a76fb5390e4b7c79222c602b67aec5f8a48f495a05744163e4f503ff5b10189f120122418b5f40e0428490e25ad7be07b86a0cec0431f3d8be66c39402769eac56b037a50c5f6ac3a28eba21bfa37d35c88444cbad2d01598b2f291da33108f39ad461b8411a2eafd7f409fc99c0128c3b937b09eabc48cb39fc448a3e5eb68e8b99b64451fbc36b444ff1876bc9da2ea8bdae0a075a014d546c0fcc032636c8b78fa09d02e94149ea8cddf6515b0f5ec6d4f993f69e6ac8481919705bf4ec99df0b6a36937dc4d1f182412722c946dc5960a845a0bd0b9787d0f410d723c851f76ba0e8363ec65dd408f22504dcd36a85ae6771507e4268f616d5c0f7e2d6451693da08537a57eff5688db3da4af1525715b8f8e74dfbb5376d93e56cfd6e122a72a52d25c88c8a3e9a9552a8a00c998e1933435b00dba845154a9c7760caef02f26b21fa48fc29e6c74df07dab93235bb62332ec79feab6ccd9de3259b21e1c5ae57fd1179d49b3240aa3d1273746cb32b8dbb6ebfae95139537795caf5b05de1c412b15e95b3287ca27439ae889a9cd31191c019e38a1aed20e03bf12d731bbe21054a3bc26e3bbd15f02dbaadf88b1c0aa458e5b52dbd5b2424eb884a14c2ef5bbb89d50ded2e50647de1ab287895bcc4948db0bf0663582945d887d0a55fe01a0611f630d2afbb877fa1f4043f4a8b9f44953666df083b551265b989e02f11f65f2f84098d18615fec5161b606c0fb7d3d434183c108bba562be69b978b232a333ae27986314611fe745d618400256c69022ec3b0f3f0aa7a35fd03d83d060f2b33e5eb98574e2603b7fdf0678e368563218e1a77e711e37c074cffdf20c79bf6809bc62f2e0f1992382b32cd7d889ff01ef2906725904892534344a2c4c70d64dc82f2119614f934b6367194de8174eaa2123ef95aad922f4feb1390b8951ed9427c3873ccd40203f1cfae2522f306896f98331e63838c27ed96b03ced6cb08fb0e10e8be689b4285b17fe8ff3c54523ca1bc77a2b6e95fedf36e6fbcbe88072482ba43741fd5289242b7e9a12e5c5e90a42716b7a8138a23dbb3e01289fb89bae4303ac8097b3eb0a0b0e7fe145ad109f17abca9eb516af860241ad950f792fd246d5bb3a9454c1ea5086cfb2f4acc695a0643e3b037d4cc0e0c2eddbd5c2f6648ee53f0e3d85f5b9150d284bb7e6db360c5463018e45188d891400ccb428741d4bcc6e877d8cc77d8cd99d0f7849a6b7ae1836f2b25656ee6eee357c4c2bf1b56b34faee45734aa2ef2b7c76d6530862176e9150f891957d9a0e91cac420a0d013d115eaf8ad2b4706f1cac9a219e5878491dbec8028fd8d62c745351be3f49e47a7c62e13c8e610f90d60086fb01cf85eab97560bf324cacbceee12209d3fbbe44ed9ef41ee3f56ba464d6055d216e517bd1dd2f0c741df71518aaf3ad648c1ff867f1b963c028f6ae5cd4bdc4108abdc7fdd54db02ec87cf698198b4755029b288add1ae70ce916ce85621f80d9bd22f77a0683035683c9a7d277a376f01bc53eed2c6ddf7dd9b7e944e534b929d09357e8171751ec4f1ce27d1a99747efe8083fd7af0c1d5cd16f105776d26f6323094ecaee29a81a6f44a723eaf44052b7504e3d2cfab1477e4b1b6a65c7738ca4c297285d54beb97b38e1833008160af39f829425ffab98b94d6c462954e3a08c0705307cc2d8a89a33d384211513aa3f521a6ecce5f7424eb0ed94b4fd2d71d18280b476fd8f174a6d5ef4eab1b76d4d0134f0ac7852913abf2f2b28a919311de9530495fb354932ad9c6c7d7ebd6163b6fb3ac2d6fed87b1f6c255de610cbc10acc54ac84aadb4f09e18bba0b6bf18ad7fd0dd7eef18ad4c272a3b29d76fa4954e1a99f3814925ae14e04616a03de2382d39d147839795e76b41ed665f490568a4df767ac015af6683d5e5c3262bbade0654b86495bb5d4f977dbaa23da3ead06679ce0a601f02440b5d803672454fbfe51906d6d7452002628a7f0111e0656a1064571405867bde5ab151700df598d0217562fd9de60bff78ea26b0916ac761ab9387ceb0fd06a48d24d2c261b4194cbff860942f5f9756b81299672b5191cb1751dd7187eba09b1316992dd06a1c7b812b243cc860f86bd78f05430942b50b433909d93ae2543da64075d6ecc05e2ac69daf5286dd5b873ac9761d107c55172fcc386802240678c8eb69f460700fd485040aece7ce57209ad1541d9b8a04ae75aeeab8a429121fd08b760ecbc01ecb861b258ebacea57088c359c93fbb17143b4012023200a80134d91c2214d7548bea5fa54ac533c747873b68a1aa5a25e506cc0cc7b699868d5f46c99652cad70c300dcc0c21ea7a38b1f561d21ad98f1f93ae5eecc9f58a355a973a7e3a3168e7b5ba5c4e0dd695865e2fe8a5bada4f8dd5859a5e6eea624535d41aafe9d5be50946b35d5486bb8af76b7f40b75ad35d21aeecb7da52eb6865ae37dbd2fd5d5d6585d684c879fafd5e5d6605d694cfa625d6f8dd6a5ce6045ea13af9196b6a61f756c3de81b7145f6d382568f9b1a79519afb98bde115d5cf89cb4ec7c44758531ee571198a565ee5d390c9973c2e39e3c9f37fff491ef5b85ca93ef56d87f4a395e94b8f4bf1451ffa4feb596fe280c24847d6a33e2aba1f1cde51f5b4bf8ae94705a19ef55d91fde027b091f5312dfdc74758131fe1fdc0e0678bef40596c879f2b9c66a672041df999c277c050ce134eb3f2275cf234e1356f49cca9e234b414cd08fbfc24e135375caef869e234ac8991a0aa244ea3d2d44e11af7177c476abcdb1115cf185144ce18b36655f35dd45c2c0842078400c666063d0d56d5de8185c26c048007bc2faaaffe62b5dbde9626bbc548400044de020085e9435d4974bda41101c3051040a5e2871c981b53892f8c2124e480204512871f9e80b45498f90c40742304405252e5731d76a4204230cb101106c24287179e22686a2865b03313cd183255ce18a1db61a690b85ebaedef329227f3186402fbea21f914a26d407f937e22b4fb62d92a4541fc488312cf9ce2d3f2f227f51be0979c27fd576788d136a9a50c304fca2bf888ffe13b2860a9cacc1a2660a3555a8b1424d163552d44c51f3841a28d4505173851a2cd4685193851a2dd46ca1a68a9a28d4585173458d14f08bfe1a76bf3acfa160bbfe1fa389d9191268de7fc7c3f980c63fd5c43288113165e8452352c9b47a71dd2714492a54f160f7ab44f34a2cf920469c4a930f62c458f20ff2af9fc76cbf8218e1529e701d5f60953abc805ff40731e24b1d5ce017fd3a5c5d83d4a106fca29f2475a401bfe87f52071af08b7e1352c71af08bfe1252c717f845ff8aa4f1007ed1af22758001bfe84f913ac2805ff493903ac4805ff4a3481d63c02ffa4fa48e2ef08b7e1349f301fca2bf44d214815ff493489a20f845ff88a411825ff48b481a23f08bfe10490302fca21f44ea28037e21037ed1ff21759801bf9c01bfe8ef903abcc02ffa4512e397cd0bf87d9e8d98d6829e5f87ab4f2c978d8fb8388a0510f1692d440d2146314b6e5d63999c3ba6bdb78e31ce787fa06b1215634cc292d44c54147ae4b24652ebfa49d4fd2a296149541295442d6149d4aebf04b65fab76bf5e764a47f4fbc6f1b46ad1ae9f233b12c60a0619449ecdd692da7e9d2cc9fb1d8b6d6625ee7e799e4886c33f3dbd63bba5637a96c3966736ef4fdb8bf8b961b9878ee19276bf3cf894695adb407fc248fc74d1309d61b96681cfb7acf3ac8751df3269a6772cc744a09867c3c42cc3b571946d1e7d13f32cc4b61fe59bae651abe915c38105109d2306d1373edcb30919fc4908be1aaab7933914ce46ebb16924252b7e26757f36632eeb66b200eda61ac8b8d3c19b76d1d4dd33cfcb467a33f651eaebb9d36ad9b99d836ad9b79302ec671b03d9371b5eec6d1f66d7bb10e75eb6ade8c939d348da4a3953c19889b85b6d34ec54a318e16de4e7b96ea64abeec6d5420e7652a5bb9522197195ac9b95b84af560e767c6d9543120a21215fb6e3715883a7db60dac5301bfd829d6b5473bfde9d5bed9ea4fd9e6f3d160e3a6d6facf47fb3635afc53733aff6cd361bd986b68979b44ff6d536b6cfb6817520ec8b81b1cfbbc93a588cc38584a010e442c02f82f39eff01827c15db2dfd71215fe9e13fbe07ffe32b74b7b490cd17c17921bf11e27d111cfe43c889c2941fffb1e13fbcf77e85aed2fd0ab9fe956cbf36af7fa5ee97c757b1fd426156e87e7926b7ef4fef4f5ad7cfb9750dab716c5d7fad6b7e96429b4804754419783b89b352281361a90e8cd6b5184b71601c9b093f3b309126c638308e0d146fe22c14612128da3a3651d6b98530d063136b1e0f8c73fbd040da6ee9558b59501f5ac9731b79609c9b07a485b592c736ea80424f2db489b251c7060a631ed0168a37519c89445828036f21ea71c95161e08c267a5c7e6b6c43e31891cb946cb734ec24036337efd6c1be180908b36d609ded93d9445f6d13f368b31b6d23f36a24fed1483ed8a6b6d9cc3cbe699d48e14cf4a7a7e671629fd929a47568270fedc4917d64616de699cd3eb1d0d69171681f58d8f1c46a61c713e3d4c05968ebc83c320eed030b6b9d9967c6997d6221ad43f370641f5938ebd43c354eec33dbad538c3413d536358f44469289681b9a472399a562a2d9a6e6cd466f7664a5373d32d49b1fd8e639b4c7b6d3e312c44f9547614ad09be12d457a5c8ec6373b310e44548a1e97256e7a368f4b1437c11907f1b3f540446509241b691f1bf99e102c2443d5bafecf2d34e38f02cd40b492f1ff03ebfa43b4dac997d86ea38a2a5433816c2118ca8fe32853617d0bb4f22c90caaf8cb3945709c53eb5163f412c7e8262fc1c67fc0ca5f04fed0cd54e90ed04c1ce31c647d9393e3f4334d068e3e36dac7d6ea1198873100d241b699f108c8764bba539b555088602c946230df4b17942b212888602cd4635d0e7e609cd4a3592dbc8061a619e100d647b10ec47d928be19aa95565cd58ae38d04c555b5f0048aa538105139e22a96c357ed0cc4553490c3ba7ef3c357360f57ada158d7df81d15ccdd812b6a4b65fb8fc5309dbf5afd6fd3a67a9af06ce64b5ef517fdeba8e756debda439b7d2ff233641bd5443319fbc1ba1ec9be0747b7af46131fc5cfd06d141bd94434d26c45dbafd28f4633922822d54a2259aceb2ffd99e2a74836a2914437924d141bcd4830918d5413c146b2d1ede3a7a846a2ed967e8f0d5693cdc2d00d8c7d36717403d1383510f6c9c4c7a5e8cdd10cf4b824bd4982951e97a7374935f045b6ef714c7c5c6ef889c294a37f532403858f4bd106fc73f5284cb9293d2e492287abde24c540ae724f3ce4aa77b7b4e84d92cde3e7889fb5f2c7f7e71aca7f20a292f3e1734cb1cd83269bf79bd3ecf35e89569a850f44549e3f3c7c057a91e741a69bf89e132d7c51367e6892956aa2d2a3485f3ad5464f8a897e54b2855e0433cd50a95f917c0af524a5dbe951269ae94f275b6cc5cf204674ca93091f26ffb0923731d5565ff2a7aceb3f99f0a1fad59fb7ae1f85299f9f2698093f4db5127e9e56fc24ddf8e996e26789849f25143f4d347e9e4cfc54e2e7a9b65b3ac6cf928d9fa71037cd764bdff879a29564a769e4a5da6ee9e7f0d304f2d364e3e769b6cf128d9766e5c755a29be7cd122d669bd5386f9a64a61b4d669b7d6f9e6a31f0cdd22d7cd3448b6dde3cd9bc374bb09d022fd2a0c40d64f044894bd0c357af09668408aef8e2fda28a12972187af6ea6da4b125870852f8c3852e252e44044e5c757ae2cffe00c2840c9700258894b20a272c357b67dd34b4051852cb480044a2871e9f1554bbaf532a65abb7ed5ba5f67a6a9d8fdaaed57bb5fb1fd3a81884a14a6dca422ff11f294ab86294259c87f7078eac65139fc07c853af7ed56cbf4e14a604f98f8fab601bfec3e32a1cbeb895fa3930e6ee76fde406c60be4be6a318bfe0d8c1c7901ee37306660d32f9061fd02e6fe3cc468a6645d9f637e33252bb9a110c1ed09ec200c3566c91fde8cbf399c77d6f8f526196f0f1321463173d6f8dbaf0eb73a2e428c31151e7ce38bd1f1487bcf63bf7c00f926a3bbb501391c77fc3d5f14acae5dae88e91ad3b4906d909bc840c846baceea16a3dae156d7c140dfb8eb1da73711da4504976f9fa88210a3989f5ac71f7e9b0c06588afffbc613fb85d104d34dbac99c05608a65f29f9a18612012e4260adcc23f05daf1e68a4d169e03e0920608d686e580dfc6ebb9e79c73eccccec6ef41e44d14f8854bb09b1bf68a4d16e1dbf16f3a36e2c5ac73d68edfebd8881737e8650842c7dd03f3028950edb8636616736e3df426e7edf8cd1016a21d8731334c3b0e653b055353296b75896e8eba29a6aa66e12f91a26cb7f09bc80d8c41686034c1540363a795011195248f7a14a644a9e00c3fb8a2f84982fad3a330e5899f28de7d3ec560b8b5ea8da7efd8f6eb34b59d07222adfd0edf4a54761cad28b1e7fc7ddaf123f4f3c88119d92091fa5373d0a539af859e2284cd9c1e0adf391c6d14944e2dd0ad13afe8eedf841b58e7f6c3bfe8fade3f780eede20374f1c114c3db08e592dd26e8269ad9b1b36e7601cb748ed0e163a18bb0f3b66cb30453737ecc875cc96a1091d72e462fc8f7b60a0278661a027e6493956981c8b76fc2420a7d13ac7b15c80e016e966c3c39b12dc0f598a25ba07a65da64ea2e3c7a607d683e007a528f2d2250697e8d8db1ff87d9c7bdf59bd61431d3fa18415b81b523b74a9f07379e652fcee71e93df827cdc2de077e810920cb5342fc6dc5f81cbb5f1bffae62343db0cde24f087e79287e8f07b00b7b25f00ce9f83d11e09707b65bf83dfc9c2e8ce089958aa774b74231dd2f9005b8851f09990d3afe263a7e539c759cee172e656a1767608a59b0f729ef71297aa407b6a918bf83e97e75610e649be202c045597558bbfe18f2d71394c7daf5ef40bbfe1749b2249bf2922f0a4bb25d3f0df24fd21c5eedfacb931488a8243dda752925919e9576adc2bd28dd564ff8d9a1dc76bb363d419fc5cf2ee5d8fd76eee65c2e3d4157f4af78e96e3beee5542fdd6db7729c876eb653b99643df16be5b5a74755315c54dd9fda22baa7bd596f526e7aebcc9a52a6fee94373db4f566b7b6b890f1a4f9f1cd8e6571219fffbcc9bd2b5c88c7f326a73e2e55b890ce17b17a219d3777cb85845fc4aa866df150f9083c04be8797c04f4005e64f06fc02be01ef807fc0ccbffe4cc0fbf81d5e01cf038d8e3f73f8b3fc73e6cf003c001e852969763c8f3f77fc59f327cd9f3dbe006f803fc023e0519892073f77f0b3869f34fca4f994aff91dcfe375f033077e96fc9ce1e7ccafbefc1c5ec7cbf0d3063f63f8f9e2e7eb555cfcacc14f1afc84e127ccafcce0678b9fad67cdf821c609a05dbf04daaebf87b7eb8fc0daf5430046da426d685d48186f8b64ad2c1246fa80b4eb7700dbf537c0edfa19c076fd0b808176fd2eb295dac0c270592c098307b5eb57c0daf5efd076fd0968bd5dbf0cd9526d5861b424ab6df1205b0868b136a40748bbfe1a12c66a00182bebddad76b758adb64580960d03b04185210092edfa6748d68a6cb96ed70f8096dbf5d7dcf6abc6ddaf550d904df9500f5dfdda35ebbdadcf5359fcfc5c905d3fd47377c0f66bd36e52bc15543f95b5b26fcdbb5fac4dead2fa56d69ffa51ef4b6336eae6f53e30dda89b77937aecb76e5c10ddb41bd45b41b5e543513e1705b29b95e49a3c94af05d70d4b7a4ddec98702d576839abe152c6ddc4ddae2b52a1f8b02531d561bd22a45145b0eea7e698ac872d2ef454395a3826db8ae9c177443567f1b8629270c530ef87258d00dd910e5ac9c96a3826db8ae9c576439e9f7a2a12aa662cb09dd2fdda8595c71c407c64006774555b62582840f8e308309be28f1cba62beb721143c113de166dd5b50505618b0f88c10a350042ead28ae0e0072d30e285d2f3de80a1a188215811052f9422d6881d90410932a065c8a5c2127e10e404521042194271e881fa013278800ba5475dd1368581b229fbb6eaaabaeeda626d4861b45ad69b736044123414bc2f3079d3975db3d881149cf0000b6080aaa9dbaa68e8c21659e822b5ad2ae8cba6359cb082164368e2052acb0533f4e0092fb850a26c93108423f4000b15582108255e42133029c4625085ac4459cbc005177481062594284f5023b4e8a2160423b3725d09dd546c39e897862a0b15594efabdeb9b22aea04ac8b6421406a7e5aca0abc28188ca15fe7a14a66c79336c5b1c88a864e1d204f366987220a232859b1c147e3e0a53ce3c2e499c1619d46935a56ff9ab508b629d58938a52cae15123b705736a5dd69654c7b7dad10bf372b95dbf892da9340f237249e84be6f4da30b531a5b5e65fa29794caf0f3749adab3b49ea29793d2f3e49e26b6a48a5c1a4e3ab5a6b5948a5a1d7cf4b2a6121a7a73e023f7b49a52d21b4a4b3e6a4ff80c3f6b3c1051b9d24941286954572fdbf54a471d4f5294babaa88aabc278f919cf76fd63fbc210df4f3aa346a7a531b2307fce403f35f8d969cf913d3feed9413fe80b3f3bec39b61ff1fda49d75744754743f6a471ddf31fdac9d14848eeafb61df54f892a423102a52d995441da9a2371dd1923a72452bf9e6d8bee62755bd29f2373bec8ab73a6d894c797364392e4db8f9711f9725dcfca02b9707222a4b26b7c48ad419bffab426d39b2ab528d20a338e52939413ca4b2496c69780d2919a724a4b6f9b0252476beba4b698501824d7f52dd0cacf937a9a50920b5a47ec292dbda416a48e4e68c925b1203e32bd2d695cf9c8e492d4cf0c3e425fca9507222a71a038dcd00de98ae2c0f1e220b12909a9c2a1aadaae5b9299f6868a635dbb7e9319f7c6fa76fd37a06cd78f32f3de58e1e78d17bd819d79f90d16c77ae38675a685df5871e0686fb433ed0d15078e17073bc3de4871a038dc1b66d61b1dd4e4d3a64c6e895551923435aea6b7d4925612ab524129ba2ab9a597d48e56909a92a8bba555ce43b65b1a2de191ee9676398fd86e699607684d85529215958648efaa55b924a117c586d415aa4a4b462faa0db5ab5565624b4aaa090915b9a6374fae693cbd25248fcbd2c9d49a90beb4864829afb9ed9616bd5d7f0768549a3f499108d5aad4148bba35d173b76b559a5a55a894a46d556a0a85ba2cea55a1295584524958d3737ea25c55baa2521212b424f5aa52a969edfad7ae4992f4c44d912469ca4da12896442549bd29d44ab2a254684a45a9242628aa25a9d4112b724bad2945b923552a5a4baa8a25a9a857a4424ba957954a536f92aca8950435e13cdeddd221932455f1b8a1cc945bc2c325e1660ae5614b91a8e5cb0311952301fc009e005f80efa1fa93c7ef781d1e001f00ceffcce1cbd7f1345f1352f973c6c33c8daff1ae90cbbfb4bccb9f2d7fc2f8f3f5316fe3657ee65198f2859f2efc6ce1270c7ec2f8d0b7bccbbf7c8b9f2c7eaef053859f2abffa95677deb53f889c2cf137e727ef21ffdc9a37cca93fc34e167093f55fc543de94bdee4c94ff193849f287e9af869fad2a39ee4533cdadde2c08876fd3d0a4012c0edfa0740e2dd52b96fc94b96b0e4ca25552e491280b6eb07c0dbf5ebb023d596b4e4ea25552f59a292a91a1a52470ee55a82ae50524596acab1752d5ceb426aa8c5ae2aeda95fa5257aeb4eb67912a56c576fd2ba4090d32edfa57e48a254b6048b6eb9f41c6f6eb448188cad5bb5da7b46a887dbb5653e49bc29ad252dbf5bb5d93f849ba292dcab3af6cbf38ba8650d0d5bbbcfd143fc937854549bfe52e8f74bfd2ae53d497f42f6749d4ae53d213978444f9ca53d2139744394f53d493f7394f5951d0e72096e37e7b4251c577e572da27df132ba62b1434d4be7b4253d614f5e41571f6f4224f416f724e4afae6095ff9c91f88a874413b32d618ed4ae53d6965b0a1186e0a8af21f9774851dbda5b51dc9685d58958a755b140b2ae35d795d5cb444a54d393f575cdc1654a5654955d815d7a5654165c47855d6955646eb2283755350977485754165ac315a95f7a4dd2d4da2289297f48a4a58cfca5da9dc51aa25a9a2d6b37a47aab5b48a564fc96a858e54a574c596ac56290a15e2e7e96fbca96a49fcfcc1f9fe2fe34d13d3f83f3e878c0f3f393670b3c43df98fd3090e37f809f431de5c89cff243fc90cb4b8b0a83850dfd0d2cbc259591c648554cd011ff010abdb82d2b4bfb82da80b6b02cae0deecbfb92b2bc36bc2f2a4b4b3b038d81beac33d21b32d0163706fab2ce4865a037788bcbf2daf0bea82ded0cb48565716d705fde97f4c56d5959da17d406d4e57d695b60b0e088c165a831549395455d4163ac26ec0acbca424dda15d5458dc1b2d295d545866be2b2d495d545866be2b254937645755163b0ac34c66ac2aeb0ac2c54861a43355959d415b4259591c648555c1374855a49a8684c3da89892581c298e17072bde683baaa81d551ced0d77bdb1ceb83856d48d970311dd80dec08e37d899975471552da949460a8a219aa0a315956a92a18262a8a2c93a5a4953a8896505c5104dd8d18a9a72514bd218ac49bbb29a2e6b890c17e57149f2264b35714960a8259737f4d27e5a3a2cac890d68090dbd7c5ad60e4b6b6283cb5fd2d0cbfb69613b2cae890d2f7f514f66a09f96b6f3b81cdf64794d4e196fc3e372e427eb4dde8c81f2b3f4ad53e553de7c594f38105119e2e7ca8bced08f6fce483ffc3c799293f4ae375bdcd3f31ce65fde9481922aafca0535c95841314e462bacca2535c9604131c41474b49272614d325a508c57655d715dda12192ca80a3b223f2d8fcbf0cd9537a54a955a218b9f304c5cdc120e44549af8297a940a4f79b3054501d1787e9e3c0a53ce78126e442e5d3ec48bd85f94aa1f4d96b4e3096f3c1051395a5fdf51d3ae9f7314f655b4c69f521cdc9084c455246ccc8f6e687150a51c21255b1baf72571518afa2aeccabdcf0e200e3c6ca92c6a0bd330fe34fb4bdc1cf1cd6b34ccf1cef89c30cc7a13d73504b34877b830cc781cd21ed6f8ef6061b1c873507d4cd71431bc37150cbdee6586f78711c5c7c4d43158717e5b22a68455126af3ac29b5a516c6a8282f2275c23acc9915645e1a70eb4743baba3cd91c35bf655079b23cdc12dd9aeea5873a039b4e5da531d38bc39b0a5da511d35380eee6e691a307c06105139be5dd36867b4610db4e5edfa5f5c3833aa8c2ba38a31ae0db545060d3634c30dbdb0201a2ecc5b2a79d5dbf50c95060ae34b345618f684cf58491a294c1be34b605018f584869a02e3a2c0ac2c7f3283854969a8278c7bc2ace70c96c39c33d693460ad3c2a031388c3a63864a03a50183c3b034d819ee0b4bc3857969bc34da196d8d969717b13122979c9954a6b591aa625a1bee0c6a0395494b62581b6dcc2bc3caa02631ab0d56e695596dbc648c6a63957965561b6f8c8d35e6956165d0181bec0c6a039549636cb433a94c6b238db1e1cea832ae8c1ae3da50555a518c3bcea832ae8c6a43b5e18e31ed4c2ad3da486552908d36869d416da0322c48060dd96063d6988fe8d6695f5766b571dc16df6cac34ef8e35461d6ba0201a33da96f7f3825c0f0df65fd80f0d3404c3d298f1ce5069a421985604a3c2a033d6cfd881d150791cbb7011e20f9bb07e7642ecb5136c5cb959e3c9fccc4f9c194d96f9d1a498ed1b27cd32dfe4bafec79cd6026f8184154244404d1c9182176b0f98b84115514c61c80e35c8aa80441726f082063b0a67f0c11988f05ea1873a66df5a093c4f11ac0e7ef039e20a61e0b6177d774e407a6f5278c10552982d810a21d4c42361a842731b148e1db31e8875b063235b58c125845c16806e691e9fb513423377cef674f0c8a1c330fe2044d7bd17a2eb1c87ffe03dd7718eaeffc079ee7ff09ef3dbfb8fd4017caf6fbecfa90070ef3df71ec875ce7be4479aef7ddfeb0e8d27079be77c99cba13b1d502dcc21a30ba6f55cebc230725f17a3defc1bd2a3876669efb91e3cbe18bdcf548818e3b37f3cbb685626635c68803142e88e37dfe9f7b4e8715940f138fd1d7f4db250fee3289ab5f16bfdaf5dacbdbbfe3df6ed82026fe7fca1defbcbaf59f9ab41f902cbb579137f18639e41fef1cd02031278844f2edc9010a3745c8fdad61d03e072b7bb95bface5aff50ee724d425341223e7438dc49863bbd56de179990489788f12896956f7fd06b4016d34f718975f4db3bad40ee00feec1cfa5def5126a898e8239d13b33a60fa177477c26d835ce0c23e74d14cca3752ff575337751b3dcb7316e62bae7823f14cc23994a9f899ba3d7bde7e14782073a58db2f14ecfb50b01a8a43bbf7fb04e326ffc7c598df04c93cef3d12a4c292d8b191f32075f3e686abbd7b108804a9a02440322e8c260af605f11e742274471374047404240bb7d86cc20de8037d5f6dcc319947e28e0aa25d2514114ff70da97b264127d0bef9eda19b076747c69c533a7c0f7a1037415a7c20da077a9016201988041dd1acee89e0d0ee190024036b33d0090eedab76e5debd878275683ecca1251344f4940e1e8748cdbe695697aad97df31cb08bed8e26d845ef480c76d1bf2d8c60ed00ba54b5bba58511ac815d80546857e93daf1322779aef4d4e90b67726a84507ddfc2678035f300d9d83728698dee410e9dd06840521417048ef3e081307896856f7998368ee1cb9b11851302ca34d306341ef402b12bdebb2237a879af50ef5ab2d8ca85f7dca7b21724f6dde07c9efcfff83091ffb49fe071399fb20f9fd2b32e5f1d4861b80e4f7ef40b27f07d473ff837bd4ff40f1716f4e30eee79e8bc2c8912c257eb7bacfa1f79b4fa6bce75e081125c9a3c894f7fb851051a27e53318e9ff25e0552f70bf5abf781fad57bbfe227131ef741f22a7e724fc253deb91fc5531e1125e8bf4d8c66754f42e6d8adee5164e884f1634032dcda2f70c6b9894a7bb7a330763a36d285257ca09be08ca64790fdad6448126661543dea55ad4a0b2c4c95cd04c9bacc4dd490debd0992a150146cb73a9049048de9bd0d4f19603ff74c6cfe54a18828bd508bf1e32116c6ef4d14f9a412113d93acb54402b1db4ee2ad35e416d0e7d82108d3ae20ad57bb70077d6b0d790677d09b48dc370c580fb3080641c1b40bab6abdfbdce91144f5288ea7bc2ff91fa927f98ea73c9e32c0fed5efc07d09ff817aee57fc07133e50bcc7ba5bddff50f1cd71e9795918533ce5837b92e79e847f9f8be2a847f11f7bf3b0f9e7ee56f7dee7b1769548b6fd4af9e027c73fdbf76ef2bbed16987aba0960ca41d9e6bfb7d43da82ea1595d7e12b9498be8170653b088667532f6d4fde89120ab59dd7fb6cd3f5b8d97375ece1e49166b3848f3c68342c923c2e87d8ebdf1fefbd023bff7f815461324a3ed57cac73eb9dfdd1351768f3b3ef673fcf446202b41ea6e751f6671933eec56f7bad3836675bf6ba3e94d6cc3586790c7e440df90b844c1b48b88ded1d8fd3add76ab7bdda9e1fd74cba2dbc13b38033d48b6e118b3785ffa6c02b1a98133ede2bd4b7da822dad57d1f0aa65d41d82eca506af7a819ca89ee5143d02f120d3544bbf01332507bf7a8d87e7165de8064da958476ed27a8da255a62a65d4e681768d5a0216817b6c2fc980092712608ebdd8b487373eb5d47e3bd373009edf27ce7e13a549186cff6a9457ae7f64ee4e657dbdf1a72f3a3ed1a0a160383c47af7a82d7eda45ead8881a886c6046d2d0854809236a58024cbbccd30d9d816460ad777b8a5d7b1ba387c6b96d641eda4686c598ff13bddfecaeedf60bddfb4dba916dd4cd12da855dce8df362993468d7668beebd67a579580f13b46bc385ee7d08c532a1581f62d637ef791f6e71f32127e2fd027d808f77cbdb707388eeed10f5af5fc0a47f1d70bb67866eff361f0c06822e84f7b9e34e004efde3987f3bece7f80f70770feafe740367a3d1d5e121c3f6101d0b6856f7b551779f631d912e7af799c604fd0267f8891b50818275399df52ed364404537f3da3b19d8ba998f6459effedb78a8182cd52e33a328182a8876e12b7af728d4440d4111e99d15dd54751305ebfb3bee3d8e8b3943ce3c40bf9e5fcce40f238e6207b76e8a51ec00bfce4f868c592d9c408218721842ac80f107fc19d64dfc7a8a2d7a4689f40ccb1ec8affc22d1afe4de237d6858c93d2633c0f50be45bef36378174bcc3a734bd4fe9c0e91ebfc0c78aeeb2619d23f16eed166c4b118630339fa1ebdf37edca99ef1b66f970309a1b77df34ae8d5fc63acc3973210c3b39e07c01ea3763e850639f45830434299e8502a2608e37c4f3a4b88113dddbfc7f3cc6dfb1f9befb71bf3efede9015742f0a2460d0bd7f8ee32751740b092efaa7e32890a042ce5d37040b966844cdd35eccf33c0fc605c90209b42dd8d788fd1f68820d7690c56e42dfcfda1f43bbb40ba8e3242061c686ff3ff24079568e1e3e1c10c3e5e48e23d5f737b48b07cab372f4f0e180182e981b9dc611e51fdf8ec05c38e086c3d9e81b39f0fb2831c6517411807699cf030d97981e3d5000881b391e451cbf8f868b0bcc36cba15dfab39d19a540eea518912240588007b5870f07f0d02cf343a9b9ec57106d33124591dc4b5d3f2b46bb6c4900831764a3d366fbe0903ef4207e79d68571a4593be4801c0e07e4b0d65a6b1d13638a3dbc2e8c22aec936332738a1094d5002b6b1e802115899f2f19903c99f3913f881e42cc307ef11a35937ba8c63344b3f0ffab4b10f1e34cec1f2e0ca5f3e9d700b42158967c4dca25f3ce918a5e35f61123c3396b008cf8c3e8f3f1d0f217220b431b262b8b0b0eb0310ac18fa854b71cc333d72cb10990358860198457f2872c6aebb393a754b88dc928bf8c8333e3080955bf4773ee41cce103718853041d7dfe98208fd2091aebf1b41d7cf19118222bafee1616019209845ff995bf40fd15948d7cf71b748811e86c81e7e41ae83cbb1d9fc3e69560e1dffa7538effbe214e27d5f338ed7dda79e77dda1d1d4621c434c60d05760cf037dfe7a24f27cff3b8897f638cbb8fa54f1b73f0e3ac8f85cdcd86023d50c0874df66c3db43ef0907366b1b688725299dfe607580777c4a81f9b5a6b8db1c61b639df5bbcc981c9a356245e650166bb3f2de1f161ee7799dd7791ec771dc7e5a0e1d7adc9b8542043308bbaf81e0efcd6d6e8364d851c0cd596bb773b1399d7197c7fc9dbbc2886d3d70af73e416fd264cd7915bf49b317ac723b7e84fe9fa4db0cb7b01e416fd660909cff4307936788687dca2df01b925bbc44e2642d7af8dd0f58b74e4199c5b7ae41674fdabee32203e7253e71974fd9f225dbf878a5c02ccd22faaa0eb0f5fd0f57f1e0884ae9f43722880800352d0f56fdcd2faeee09b1d47f68059f48739a32037f773dcdcbf3fec9a44f48e4b60c7ee01cb70af5f02fb41100442d9f68bda956bdfe638f1a1e2c98e310a854179efc729cd73277b0e4d84ce794888514c1c05acebc7e1b85f9eef3c7ed67e897f7a33a6c77eb1fc8d37712b036337c60fb15fa1c738c752f887184d0c852b8454f2242125d2975e88aaa41282faa142ad7ea04a5ec551a6126f91562eef8a45a159f5e78ccce2974c51db14bd66b706d66b76f34679683567fdc6e834b3436897a5d1ec833ee537ab3c6896b3647e4f5455fb914e647b82aaf28a5d127e515827ae2acd2c29b728198d79fd6a95c4493908e12acfdfd42bcacaff10c24af9f259df1f93e49bd93d4159e13f84989ca4f01f26265cc8ff7f0e2126266fe6b4e6f90f21aa2f82f434ff43a5e2424e318fc2943afef43808292979130b517d11ab5799f1ac272254edfa4d1d109bd262bb5e1185561e9fd27941ada715a92c8e8781ba5dcff0b835446ba8bde167fca9ffedfae59111b136fe74bbd6e15f6ad78f76ed794f111b723daa0e3c847a446ba8f5a43770d0eb69456a88f5a0200f2b4ad797835a8f48757770107bd6f01f424a5f048986ff2895b81051073f8188cad22be077781e7e01cf8017ff861cf80f21a62f8254f21f2c2e84c331bd890b0191587f1ee00df008781f9f001a2e7f0ee0054083464c4ccc975efca4f1a4d7c3f0d3e54d30cf7ad4b71ec6b73cca9f7ccaabfcca831ec79b1b6540daf52f40edfa7978bb7e05bc5dff0e2764aaa2ee16ca6bf29eb00950bb7e1f69d78f00b7eb3f00daf51be06425559514c57df464dd2d7255413ffd0348bb7e0190e4ba5b2a289f9ea8641b8f599b467ed38505d8963117580b5811224382c886e0c41249a846a87ec266477b3ab8c91c08725ca89bffe0b7f13cdd7c5237df4475f3f3de39e7cc91c87b679d45886774dd97f7efe7802037d9b786223c8d1fc6fbc53dc7fff479597cdd16230e03d9599807ccb289309ab866eb9bd47a8760937bef9d3b1024b9d53044020d0b2a987044733a3fd743ce39e7cc3fcdca5e8421144950a9b44abb409ceaf8511cefb1d9e9f843ec75fcdca68ff2cc17fe29cf889c57e599b1e39f479e538707ff3ca3ea465daaf3d38cae5f7fd79d870d5dbf66038059fa555e00b00be3e7d171d306ac9bdf9f2bd2379118d325c8e7075ceb6e10866c18050ae76996fe0dc771fc61142e7311623ce2d7b7bf51b3607bd7bec0da03fd07ac59ad3054c2a81f7397ad633f7e148e470edaf3d86c308f1c3a683974f078171aae3921b431a280206938ce916955ab9f2c3e9956c51ec13e02bbb81da420049b48ef52cdea3e8f3b349f5d043cc1886219dcb36cb7b24cfc4412b7474633cbdc8f129ddf813bf762489a640f5f243d39184973e7d09afc3c479a597cf135af00d981207728817e894bf13f644a6f70a0d12e7ee83d8a03027d788411f5f98c5fe841f933ea430a7d63ee208ee96332994c2613caf4411d614479a49191047a52ab4f8c291d3cf173e81007911eaf00198661f8a1eed08439932513a4257a473232923269446b69c751746c448a21f470ef510ce9eda38d5f187e40de177aa0cf188ee3388e1f07d522a461238c1c5228a644ce0de97eafda756413e9b6dabb6e0fa17722a78d844107bdfb7ca4fbec4417be8d71e414611c3f208ff42129f4a427853823c7037d38241289e47568485d378e451847fc7ddf388e1f27723e926999cd47329bd94ccb4732bbf176babb10fb384104227c9b4d8824fda71381135240d5478c83e63c479aaa0e84aa8b9ae3c6309a1be5bce662d41feef351f5231ccd333b8eba46815effa7c593aa7fc84c66da10c6cf777628d1f90f57023da25f1d5a3eb282310a311037e9686e14f4a8c7ddf49c14c9e37efa1c3ac4e18c9c8fe9539f327142dfe88964ee1f8e4934994c265348243d27248431f466a68182f0417d88423d0a04fa04018442a15028544705611c6956170a7dd7a10975a8d047e45e0cc38ec3bdc837ba431f92b18d8661c76597d541eda3859c91f3d1c6940e1c0edfe867a39fd103e9f13b4706a1d94cfbf00c74a1501039d46d5447815f496451e48ade6d2253fce944fa1008b41428e58ddf65d7a304a9d2a751a78fa259ddbb1e0f0af55d8706d569d4e3c94ce85d57d2bdfb8d0476e56fa77a0698d5bdb993e8dd87eba8bff3a237338d167ea6b051cd9a01766d11605667661eecd83bbb998b7ccbee467790defd4ebb5da477bf83ccbaefa6e042a75a2602ecd25f6056a7d3a0c9f0f51745d2a05d9b0598d57de8056134b3acfb9cc4c721f510cdeab64635abd337edfad31baea3f8a2efbc9969bb438a7ca798c50ba650b8ad18f5ef2a46972301bff20cb73a2c63a4cb3f1079805f99a6592137bf2c84de3da70ba3e9591bfdcc31f49b655b1bcbb6368f149b1e8c41a038a99afef9cc8af1db1d9fd53954e434874385d39b4e1d77fa6481faaebf6f1c35ee320d85ca6b9ee555bb52a9d5d8bd8d7233f5a5d7648acc6b9ea5deccb3d46727340b5df1919ba36aa4d2fa455289ce87aff51ea25bdd87a4ef68be51188cdc87ac663141b3baf03f6f8621f7e1ff10be66659de794ddcf8b1f7e482dd369911e3af7e2eb54bb8a6899e6b8aea16034374a44a71ad55ff7789c3542861fc5d79d1de1eb0f00c9739ee43dd935b955bb58bdfb14c9ea79a65da5d3697cfc127da9f45d87a6c4b1ba109dae5fa73c8fbbf844741a07e5a269b8d052adeed73e02b7ba3741ef9e05bd7b24f4dabb8d62962ed3682854e745fccc6527f65f184b3f723ab683e03a10ac5ea285281437738dfb820fd177f8994b51d7719169355a6e51d287a6d02944327d68fafe0b9142a490e96432994c2613294422bda9d9cf53e2dec379a00ff7e38f9ce7f378a08fa7a473fe4a9eef07e3477ad2e70e0de9fbef73e8c498e22100cdeabef3db653b64aa47c90317b5f1c3bca918bffdea94672e3b1f721d0fd903c7854d0c391cee38c3721018caf99013770708560f8d18cd8d72b2768d5b46a4773bed9dc9792172073de785d0acae233dee9cdb7b422e9a18823c5d1cf27031e47c0e8d3b9ee78e103920720fd1ac4e0a1ebe2377db8b8d8a21e713ea25348bd5450fef8846a20ef9e387a315634a87f1431f1ab90f3fdc1c3d9aa5e5d821ab73681caf00ab73df8ddfe5dcc771e4e6378ebf398e2bd179ddd141679a66754f440f7d307a6fe6d87ee523bad57da7d9ddea1e8ba7e2d4fde944d3ac0e55a441b33d18bd7f27c65446f310cdea3ee5795c767ebb28a7d11c7345debddc11e3e777bf74ba35fae94ea3f803bfcf7b0e08ed811c7ad73640f4b7c931e08278b2c089f70958c8e20ca814920002140881220d49f8c0c360b00f9c4028c84830d285e6987b1f5a8a197cac182e2c9687bd77ccde3d8ac021d4e27f1ceebde7a068162900cdda3cf60df27f1e2273fcdb9e14a430621afebed349ebb19f38ae39b62c9af5ee0b45a08331ccc1c3f6bb6f1ce72647ed5d0c30ab7b9333f3528e0d7af75eba5f1cd86ec500bb3820c0ac2e3f07049bce7126e8dd77afd65a6b5027d1bd976296db8e9dba7cdbad8e03f3520eace3e0db71b2de3d2803dc5d9a038b62e460bd7b8e90e7c0b04ca877cf098265f437823105bd33392f10e5ed4521c4286191d1fcbe125841b4758c071f9009a2992c2ba2e30f3bf1dd61ff8e6234bfe782e03cee4b7a68634c8366711c4cb358dc57a473efc9b4cbfc629d7b8f08e725d13973bf1f11edc25374eef7cbfd4e4398c52ebc9889f64cbaa6c2687e68e7fe43b5eb7beebf214434ebe34a3a57026e8876615ae74e319ee77d39e371ecde6facc128468c693646efbf6f1cbdaef3baaeebbace93ed175764bfb8c53d57e4c43d61eb2657a473fbfd64e118663bffeeb86eec5a3721e438ee750f7df31cb959bbfb90ebb6e7f14fb3b827743ef677bc8766d1d8bf31379bcd6f17cdda789bcda6e3b60f1e62344bbfcbd74dcd42f184710c575cd1b6565811d2202c1216099328c266ccfffd875fdf46fffe41f38fc4bba38dfb3537967b1c75ce01cd07202ce0434e55edca4596707908c00720f011bd3b343b03c1e90eebf32e375ca89998dc926bf44ce3c68c9e597ace61838c959e55ab37c55ef2f951f6e71a959ef7af487243623026cf6434b7ec27f9514c1f3de9c6fed739568365b20a30cbce44f69368e383b879027d889b638ae7cfe82641917925b31399099c6b9059fb45648e0166ed47d1aebc3faba03324fcfd3926fefe4c648fb8a9c59d75d7491f6e44944c12897cf084b8c7dd5d9ad34f10b9939a79063ddfc0cc4de0233d833903c147f011da484cc10874e01297e6a7da5218f7872f78285ed0695510a14b01a77970400f3cbcacbe6386385b1e1cb0f769f3f8fbb0ebd074bb13804f47d1acdcf13a34992bb179dcd181ec313897d10b9482676ae09657e8f3a36019cfe70f9131bbb51f448e2187e5c2ca7b8b64c6acce7fe7f7a388bff7a7eb0440b374f8776844cec37ee111e4436096fd9e9a63ebb7ef18faf7b3f6bb6cad5f7b28dcfe8efb36558445421a8449602c92f50ddeb00ca9ef07bbd8e819bc127060fb05debc1260176806d00ce08df3c076c38ed4fb0763b6ededc2de8ec49885230d90cb6ddbadfd7b8ad1046f5c4cedfb035dede27e57a1ef0f42eff7d03ca3617de79c73cedda38fa2ea708c01e4ce7133731cc7715cce3973dcc622d986071ccb074574ec75bc862874f3eb58ec702bbf42b9c5fde64d1173de54b970667d6fa2741ccaaf1e44ee394937c707f948d239cd451e7a851c936457e69877d3d5b925be07eeb9bc44e7b0003973ec9adb32cf4ba4f4fcdce7d94a0efa6c36e368f6e681f57d99e33a35bb7350bc074920583d07c171b13c44866e346882f0a3b30eb5ae41b261095e85ec114db07a6763cc9d376bd8f8667c34441b449611655419adba69226305a5ea98732a85549f8ec399cf2ddd9bdf56c12cdda3e496ee378fab18a51861f6644425d3bb6fc52946258c6e6cb2057762889fd03d88a377cfb97af70fd3bbefbaefba1addfcdeb13aeecdaeefef599c7e93a535109cb567c331a984e7f1710cc2c47efdf8b6d934f136468e338e3a34a3667ddfe6f46b3f87438e3c1877cee07b9b8f342b0bd1bfdfa4298e60fec653b8c15742eb5400be0a885dec60dd04abeb386134bf8cb9ffb44b09fd26119a9b8c39b4cb2784b02677ed6d1193aa3108135cf6bc1db9ef2741b8b9c2b81a77e47e0abb0f7387a6471138841db903f7cf0ba329c4eb1eda183bee88f1c4c7278cf8354f791e17a718007e1dde3b9a63cf9a6f1384f9694858bbd65ca641018b11a90ca8948a959606b5638a040200009000931500003014120984c2f1781e05792abb0314000b62a076886aa0ca93180a2a860c21848080000000000004c2200155876a40b575db45ad7e3299ced47707627eef10cd7b537c803ce0fbd8a7aa245128db5c49a15807a0fc9efa6f53061dcaf7af7d3bb54037a5a19daa846b65f246735c8d95d8782a8051556aeb6ed01629a6d05120a916f92e5d3adb1c73bc826229cf48ee3071b5f4ac67880118153f5dcc9b9782c06a62b2508bf62e3c4d42f529f0702a0ab7ebb3346d33ef7f3c109a1fed747b3c96e7ea58955ed037e81599f2aa17f3da45bdf3c4d72d05a9b5485318fb7ee8371cce805493c3ed3b91d42d2461a73dd7ccb6e7e5591668d83aff3d01ae6889f2189cecb7ed2bf425ad3749a932e02475c73f095f06b786888a86e3a6ae3e2e538f700d8389510224ae1920852897232d9a863e10973f41c244beb31c6c35e346c790bc575116a1ab55525dad58e39abc6440f241b021f0b2fa7e4f75c622cb1c63bb6902bd768035aaa767b3c62fa2d4acc3c4cd7b9c0436d17dee0d27ad123aa8de14d7d3a23d00d6fea9a533c3dee9fd30f0a642da73e7a60fbc4fdf6bda05cd7519e8e0b0428ea2b055ebce40cf3e4b626c92d915e119deb97fc36857efbb5d10afa1b915a99e1715caac39e8eddb8792e290fc0f5f144e507a7b6ef946f3bf7137d352be9030af6913829428901c783608384998d01a0d216a68ade51667c836b52cba5e9aa15be7aa353d655638ed7bd1043294b48718ec1dd21f097b9c5425a8fcc86920a7d141b1e7c198e8bbc0b57f6d929f932481cc791558c86efc05100d8d42509c8d905e7d4725f521604d600a5060dc12f7e7d5fb51ac41b4df7de60d5e44934066c65a1e0156935b039d6c11c360b5ccc116e129cd3f39c7085e65ecefee0f4d38d1ff5c249b7df2380c7800772208ef9c8b5ba875d41060df598fff4ea489de29c90b1a396e1489d42761543517ed89b34081ecc44393277b35e70ae89d5f4d76182c57041200df84099191f5c4b4bba0a49fba8fd1a1543fe5e43ac10baf3546f7965549e91f3914c8f45c17bdb51736ef1a774d8f71cd1825f9a86dd83ec351b32bc970ab9a268eb2393a0245329fd8596ef0934ac8b24f453fd28e2cdccba2e9eb57d4d49ecaa496da7ad67f27f0ff0a5fef633ef1ff8da85b91ae25316768eb4231641a53e7e21ed20a54d7a962f1159a3f876fc19671d006b7fe6cbd760c7967d6616574c99226a72e904d5cb5f59ca70f45a968bb65c4d0ad62d12ba82ac0b1118af833d055f5aea143e218183f8311962cf11ac1d6a6ccd2e226411df0ad0e55c82da61c61b193e5718f5e99bac9e462e4909d2c8a9021ea5ec8b7a59307484f28129cd3b394d15e1e162a283b7586a1f106d28e04e9459307cf8a9d53167890a120d50626a9f1f848e742489781f4c230655075c3d8f819c62b20c879c32366c5925a5e01d2fcb2fabb8a3a4caaf0679344ec5080cbe45061d99c70a8e128911c1329e0ce247245cf8dcbe252847c2189219891a984587a205755b0fba06fd2f5e0fd149cb31ce0d0d00fe5adbdcfe3e5caa8fa9b800ce649f0131a9366d50c3ff8e65482b8692b919fe887fe736d029168114fd28863a7c5063f2b321d52a5c6f6d315fdde10143e7dbe40322dec0de3192e1f1ad7944213d2d34254c614ef880c68d0974dba767fb8aa13bb6f722c23c44f1ddbd489da149d94020764b86dfa3f2e30e187b811d7cef75a406c17d0d27b0412b3ed174c583442d66581cfca3818c8bcaeac9e7bf56fcc032a76285c79e2e68f5c547a8cc41af8f97603ae3dbdd3873c0f88d3725cfd5d3153f06427bbccf84ab8e890f471e978a5d8696a74fc1bcd7768d8d8f1f4fca5837b49f499afda859461f84296ad1b7a6fd51b16045889951c503e6d527cd4fa031ecef61dc7e7faef9c35abb8258af46542005dd313c1fcddc664bd11bd95948a140dd450c5e76d1316c6ab7fcda91dfef198806c590f9ec9928c67ce2799b006ac14cab69758ac77c9ba7af731a9e92a77587fb38c52c083c09eeaee552bea8c9cf9ff3886e198d0e031a8bfa21334f2affcada629e381b9c8eb7a59434748ee875d5589e0d75df2fe743982bb0f4be5bdcd9a3ef7b2ca644fc7e91736b1e13159c0511d975fc8303c8cfdb501d6cec8fc7cf6e7abc5bd3eec865ab356e6daeef38d325ed43cb0a17fcda90f081fe497bf18731a3e19922976292c840f9899da184128ecb3c22acb5d4990379add6b163588e5dedd8258abfd7cabad271a0234061612b45d586eee86ba49931abd70f12859f71d606be4c44c4dd382bd014ec9b9955bdeec523234b6ba0feab2b638e988aed6ab9348761f764b68d0034224664151620e9c40ef7d359f96a1ceb694ced916521522a6ebd8e175bcdef46ed869240536d531b856ffbe070af9f98985ad2526e6a93a04b5eb8c3b05dbca55fcb69e06b71b265e6c8eaa22015dcd7706134bed31048b7d9736ec42229ec9834956408530234ad174862bbcc26f9960f1c43fafe0af88681615b579e63aeb5f7a9d6df50f280298280a23fa2c7ec7d2acadb41c2f63933bb2d5b60027ad6b1c81af54188da615b6cec2cf464081176e42ca24de32a083df1f821869db613ad0d63eba05443be160c87039c16bc34a8f53a0daa078da28a35da5186fe6f539a55e9a1c3bde123c5b007d3c5781eac055dc4b1f3718650424ef0c29a612455f67750dc1a2ebc943f3d4e29268a8f256d98c82caf92735335f0adaad048095a216fb8a909fa3899f845a72e161b968fcea2abab1be9a2c9ddbc11cbfc594bbd6ef54ef4b7bdeca5a32158a07a3b356eadc350e5fa131992f1b40cdb5e2eb61b7f7ce0aba9cbb34388020211a8254fa2b0c8ab3dd739fddebbd42e0b10a3153a871f38b0c86b3d899a850bd991906f7817b605a8980fc10785eaeb392ab8bc0c947dcc6d894f4b889b77d88467364287da92ab9f56623a4b6c864c12249940f34373e7b6c91192da2a045c35e71097c855e250a4a4994de358fc09e79a9848e5e98d7b96d244763c4d4181e52a5bc5052212254b11f6dce56c0c8ae3799c6fd6adc59cca0562ae822431276aec055a5e265d2307f15830c849c14dda6c4d986ea0d0129591658e8d3e24feff54f1154dc73c96676657427b1960244fe24545c8982ebd391cbea07b9049c1d29d401240abf4fde713173acceb35a465909acf3ef7ae7c66d05ef15f94c3841be63a9c7577e26b055f21f5c7dcb7ac307f83a1bee224191f4a4264b45bc79268aedca374df7c65ac13ef34cf01fc84852f041239d482ca2e9f69fc99fddb25d2632f283b9f2d644ec976fbc82024df9d750dd0e3d934867279b2590f09915b8155400caba49b9c0c04df853e67c6b17f9040e17de27668edb391ff12e21487e24c9e34a1d40dc887b5ec18cedf777f4d0d57fca5cfe3980c7a40e321c7a8a6f603de90a15eb7bc62fc33c26202833af85915be987f92eee073db752cc44dbf0d1da82058515d93acb9bfa17ad74fc3aae4c5e099a6d67ff4974f9c044229a937e0a3c90fde333fc25eca516e86176bad2903ce1b4e57e8c1e321b2b113cf765ac57438b53fe627b16b4aae7d1c766c79345fa90184f89b4d7f8bc9af1676d9498ba8252496ebb34b2374e376b3f8ceccc450268c6eeebe2b76f0cfa43d787f3e2b1594cf679aa01258faa16be92188493429b8b037f0a650a0849a59af99fde6170d272cfbc7afc9ad3c828608de0123bcea5551a4d64a3b4f394920d1da30463b9dbb60f0219897737e2a0fb6ed6bfa8970f416d4e17d2b0e4975054225aff62947fee2803594e59849df7e20a581ee6cbb8a769f72e55f87eb9f8f8abd1a9701e04c37848f24a827e4baed5293a550bc25963d42c7c46a2979f4e354ac53b91a5e3ae89b4af6ab68c2b7a41aa1673e5a3aabe4960a9fd53f3b686e1424eb7767bb38827551bebcf44bf4189c7ce723d1fbe8ad5fabfe1e9818aa7ff639e4b20b0fc43d7bb5bcdd456db860b46e449e41325f13c424ecefc7dad11709941c8ff4bc40fe69959350ef42b8b0dd4f59148fe3b5f6fa013fc8d3b8e5133b23c3e247f34b3ed8e68e22824eaa42e8f3661f3772c3c586c7b339139a44915e3531b524a1b8e11a0a4473bfc0157cf40062dc78b8f7d82d7146b3930b4039960719cd369a517c43990f8c58b45d21462c5ccdad92ee0359609876f2657de8854bee7cff8a4220983ccdd0ca9b70b3f6382eefac1e805ca1424d8c45d2231453ab53dc1a51eaaf4f00c833c87857530a7c374ebb4aed9823f212dcae4c0cd597968c08bdfbfae40ea5052f79e9f9e2c268bfe58c0c58172bbcab99b082f3225d76b2edc76c760dec8cd7eddac95e688326a39e30d6c74aae17c02dcf8ae295bd3a48c38dad945651b59d4aaa2e54be9bab8aa88deab1af036f6a72878ba65082460bc8ff6a339a8c58bbf0a2ba6d6d475893bc433db228910239b016f009b4810a69a878568a945a70f62d8a93c44d3a105ca7c53195d04abcec6c907884c3622dc82d210ade58fbcefe952d34a75e4d5420a349c09d3d2fcd9441973716c631954a4f53ace00b2669cbad3f3cb548c505d00e79808d6608ab43caa50679001aed97e402c0357871718d16016de630cd52454d6237ddff6392fc3993a87534b326d9e0c424aa11af1864d57bbc6bf2323bda9a76a98c87cf917f636ed982a99e368ea0a613f25feeedd60dd531ee56980d1606d0ba11c49f194eb183303d9fe40d070e2e93f0004771a03dfededfdf613f12921bb7e91433ad54c947813af0a7d51335506054ca9363cf1d1798448a8e234d799f53605d15128a392b8ad5cce8b0ce49de1d8f69191ce100f8f9257e2220d9d1e30a1f66ade3fd7c5c5988707f18eb115c961d8b090d0480b50d157cee71b2e413391500a3d961147cb184084614c41079f2f6c021d967c01f96c8dd2c955dd74ece36152ac7a81d8f5a9723f124052026f34d6123881279b7947a255d5bfdd3c806ca33d0ee9e97e21ff0eef5dc7f9eb1d08d53351478d40fde5acd70a597b9421bddfb47e6efd7459b29f645b1d884816e48b02edc450ecd832c6e8884d10a527c4b30bb8747d190a2b499827e7260443564217fbde47f513e7b82d98b1160a8eb6bf391f578e7bdccfde555791bb377fbf2cded105d7d19ec2d87c37eaa6658e9d8baae4184d97ab4bb21723072ad6cd64b97b3997c126eb5fa768b5494dcb5a8a3a3b47795f9fcecc438785739659bcd016374cc6d59d59d38ab14e463588e500f4a2447e70b12124f557dd496bf6c4bd3876427977691631791faec1f55ae17bac35113d5eb8b8fe315857e99c287d50544b236ccf69c9ef4672861d351b9c09db70dab4803242cc5f0e9f4dfd4235ecc755149f954b70cb621665f9eda78ff2c3046bfe90120f5d19c5bde67a5a4a7c3bf3542a18566f040ac3bba5b157e5644574d1b878e504b43497d26c1fd470f31d6bcc44c8d3d00ff5f17fdbbb1d6fcfb5255bfbfaf5f953ac0dc5cad9240771a85797f3b6fef79a1827d33f451e1766b96b3164a8bfc273220f992f5accedcfb561f6e1b1c15bc351ef6fac48ff0b564dae571fcf4323d3ce95743e950edbe63ea95a8e6ab66eed2b9463985b4029440c2d76b2accc903a480a0a895847a3f1abb99ec0a96bc1fa55347f1e8e18318736dbfd437e5188d99b3bec9283ef489c9368a9d4f7c4b3702dc8c80c36ddb7bc7453ef29a756b3af7cc4ac7b281206609547f8ec492adc1420fc5e8a47173249e3668ac13f0e942706197c8c6906872764e306a5443cc95843861d658dd38bce9866407b87255e1ae1dfb21caacc33ef7725e9b8ceba90ca16183605abbcad4ef9fcadee892d29519f78f1c98201b278e039e558d2e96abb2f4635e2a0de2b4dd30f3179565b5f0d2953b4bb1c76d709727342da4870d0c04adde74d10a16bf83ff137d31bd3e10f09f6e78eab9d9f70570dbbde564c29b1c0bd419d165b927c651a60a65c8c2db55a753a3e0ac97e07ccc7bfdb28c8d815e74e318ef2600268c320bcc208ca61232856142ca452e4f8a692ce8a8c96ab1572b656c90cced9cd84ee0c1884686053196624c332260e597ddc5699c6beb737f72871a7db260ffa8228eff81d87f80774bb24c803e66bdd14bedea5d634032da39feba5e55874c604ab6727a70b4e5edef0bad0617b612b72b32a6f6f032a451d52c2b247201ef3c6665917fee4e0a269de5ee6aa2067cb4b14395b80980da2e1d52dec18ac6a1824b38c01231d69d95238eaa86a68163ef43e654d3b122b865400287abf250d65534ab025df1889ea9a13aad50e8908bf4b400920f13a43c6b21e45ffe797b95efdcf07124b9b41834abb72e39182381bdea67c7057225cd73175b37059968586743580c797a5473909dcef06a7d5c246757d553907f35b2cb5fc35ba53072c728b7550efacbca57aa9e51e81128731e326ec68d5e8b16538af43059873fab6b9aba316b07465302d84d294f57928a0346c2b5364b35f8aae13ab4976b6025baffc1129b08518cf64fd2099fa3ce1468b064c81993302277cf247e6bd8887a7b7358d3bd6d522c6430287f8bba6c8b5972454b50b35359cf2f794ce61ebf23bb527688bc7a90e549c8ad83acd69a3471c2904612834b6bce304e8dd43a757195b202c25bf6a33c7682a84b3ca8608cba286ed94d0d43519c56749680f330556f0b736c9988414099f15ff40349e9a5a411c92221e0ab406ef3961d4a315889b81e0088512bb989cc248d1f90e32faf92cab388a568549d0462e9f5784acfbb242cee84d026a2b13ae88308ec1e5cabca03043c80c78828c7807e959170bf2fbed58346a934e8d3355e6afad358adef0f967717f8477c732895a51de7032e0c613dec6e4bba3924d863c1ce92c811ddd5be3e94fabddc7412a5d9d959d6262dc0b06e7b37adf858830a5500e06f8e65570e2bd4ea357401e2327828bf98dce404fdb0a6ec13ceebcdea6060661de64381747075a4f8f2e736fa62698e32a00403edc5707039983707cc2e192a23c3f1d95a53fa863465a700043422ab3dd8bc857e75ba252fc89d4e42338ab334bdad4fe124deb7e6b8124e3f39bacd1b6c662e3d8b67f6169846b3e1294eabf34f362480572b76a7a46e9bf1852f28264de4967381521e27b153dbe785ec7e7f66b8027a179e079cfab198760002386497c2329159ab9133c0c1fc4c94d51880a5749a2b468d69e4d9aad13e3d4ed5bbc190acaf50813678be57e85de55dcf7780e6a7fa5335b4f6e5464b4c34db42d4d1e762e250f95d0b136f3f9ad1ba5ff76e256f8098cff4540f215a5280850837445ea54b44e4c5bb04817d0704dfc3dde7c7642fc1659b010800172420f40a9e1d0ca7f2eaca23ab41a2fc46a567e6af0fc4fa4a9629196f271bce2fcf3111752b87b70c534421054d9f65b02575f8a519a13052d0745cb0f939c6f3d3f413ce5c549357300e9538ab6685986c6c8d91f7969c2754280111d61730a3770c12d4b5ab1801f425191ba3370d8efbe1ce4f533c1a0ddba17adcbe3534e9d5a5085a4a25e75ac978ef4a8a457951ca542125010045cba19a8acd7993190e734b793d302af2ce7361ca5f43d0f37a8be73dcbef8ab5d97a00056bbfb34168bcc0ec5541dd7be2b36f3813b1ec1b589050b5c080e80058d35bd35ce6cbaee89c5214c8a7ee725715a3771852c4693b9926e93a6901b748520f156e8c4c43f6f65893504f228061e00085afe330f3d8ca245c651e4765b3db2ce31213ecba97e78a54d1edbcd5b5d699787592a260976dddc164331232d08edf9aa9999e11a6a669630a7dd5c011ebb130514f8046c3ad79740a829a49055f2d4f0b4e3c6761d8e5196305aecb25f9a6808cad8bf6a155c8d88a47f101f1fe81f80d2a2480deeabae34aeb25450ca056d2fba299997b32cdd094591f4ad014090182208c51a72f64c34a1082fd338687d7d8009fac52e0ba601b025f360338d857972c4246707045f4eb1d969f05379128eaf17fb3f042904f00401cf5dc6803e1d25d02129e437ff195fda6b40bf85fb6bc606f998ea1750eec402ee3e5d4e01dc9ccf3f9d65a0e3724a588ed25ce348ee204b2fe9aa512f462285eb296ee7fe7ad41fbe148b9805de4d39bd3c69eda5462d70d5ed51de73c6e9fe996d7d22c08c4ab0a5a7f51924b3af3fdd072627b19f3953920055da45571d648058fec87453275e9459f465a586364bf98e5ee0e69d527cb867767a5fedf4f2e348afcde0945454cf583471061fd50cb150e10ae1d0fd5459c8580c47c822245cb6e53714eac0cd883ea876f56a43dcc1ad9f01d7a37e6690b0a47073497dc80a10e979aef671f86d39771f16284ebb73da049dbcfa20704e9f55c5cf91004d86dfcf5834d10e8e39ef6bcae0a2ea5c78097c2fcca163e5e06c1647243a191131f7394d1a277c3a8f83686e11a254dbb4915f863dc567aa622f6e90af061cfce68b9c4df4848bdf72cca11f9366ec477b4870a0811002886e0e4f3a39f6fd0a8d12b0369b9b3cdd1d6b8c711243a426133a156f3619de368e197145ebb5c52a7e3434160f92a7aa489128a15f8eba703fb620b7421606ab5f2c3380ff09acc579c43113a9a0d2109861ecd7c7eb0b86fdd5f1d508bda9689e6b50286bf4be35e9945f598982a31bf69fd0a26a0488f981941e3ea2b83ee8f9dc6ab99da65c8f4089787271aee1a45d15f7234fe4580739944ac0bfbcb8c02d97e4bc426401cee18747e3c4282e2a4c2f28c06320a7e37a79e7ae0f7485455e39fd618ddbe8c5bda7743c98765694ab622763ec28f9d8130bf21ec2cbcff130cdc70e87b2efd8e05f35166c76491e5a697acaa91b81d7c427afac5c53462369f9855c1da521e24e9d0a5244af65c8035ebea680b233d4252a24eb0ba7f4182b15fee968fddd4e6c1949dbf70091f635f6735c332d80173b4bd3e4d4bc8e4f4eadc52188b2b7c81277fd548f41088d8359e0750591f97628d0c01163a349a81fcc01539cc4afd48a1b5107105a54386eb097a6d4f7ea540d4b9788c8e8af3fed01a73063da5e06498fdc5f04d14344b6775d917185c7e19e4f02605f5072609ba958a39bc2e34010e84d43e4791034d234227ac0fb175b8816e2b504fd0e57657630284658076caf504a5daa13679402fa850ce80a76c2ec01aaf136f71edf5142751c542d6c44f6f34fcc42e814559fa00bee04b4b6e8a0ccb6c2c8e31c3aeacd997d6c7faf679b6ed4fad94bf6b2adfe05dce60622261d7f2362713943a482329e0257c396f1b881c238bfcc5050db58879f801f2f6bc0aedf4bf315f6c4841be7c448154bc0fa9b4e811ede9a40a2b1fc407c3a5f84ec990c0db407a4db9f6e363a1cb2ae700d0c7f773a6185a2866277850dc82d33734ea9645a57d86e2908ced9a4a92b1cf33d929f233a6c90117451aa498ebe79f7a2c16c7ef7cc2daad6d20abfde44b2a13ea4c628321056d3922c31f33ffb311a331471861daf9e884f0c5a1024daa975b50f2f564f75b7af39193b3760e5f112f5d59dcf45b1f7dd45317724287e8b45ea9c949c5e6c26d1e1c257d03e62954c9da4240362220f1fac68fe9e38177d2bffa54566faff09885931f19e47ae0d964b1f3f1610f9a7e3b2318e9ff2cf9aa499d8a3b8b360adddf69b587d9351f73a8f9d9338d5d91c001ec6d86481bb0144b4b912e6f8e93bbecf0e572c91efb0366053b49e150e3d126964bab6b363c4c3e75c4e3b50f0d9424a444b809ca193c81f732f9def3ecd39c37af80cd03f0c1073fce43d2ed4a52e4366122804809a2eaf26243f7fb0a613d4e5b1247f0d252d5c8449807515a731600f6c80b21feae2fda29afa091c7da0fe448c7c31f711a16f0a88e9a6c67bd246c6454b5033a13653cebfb8558ca02d47077a654b74f140b3786b811a477ff684341e102398b7e52ebe0109bc5d0699bb4654e3728bc35250e396eedeccf2632c144cd0e4ef69221f2ba5c2aea8715b97c38c8dd15f8e7b148702db4a6dbdd6767745b4698cf3f876c6bcbcdc34bbbedd62142748482e9ef4f8282cd702dbef3c843daa50064e72d814d034b09b688376bbbdd69f3a1a15d0028a9af2cfe82999998690105d7fa9523616e8219127b7b6e808938be30d3500cf5057861a01bbe2fa581c99e8ed46186888a89cc733cd7daaa893b299fb95968815e5dedb373e8226ea3386e99b21fbf2042b7adb261d54bc0ea6efdb20a3350e1a6a264de2500f0bdf2e7ab0e22144f25af62f7fb93d4d082575a16a8dc181bc516c082370ca701e950342c70cb3c1ff303ed18a9984a1630932acb5ecd9ef0c7b08ad941c9a1867da214a33c2b064bfd51945039071e6a171464689f9083d83632ee54f660223bb74797475862da5085fa3fd27de3c0156875119f3765fb66a78183e124af4cc6422c388dcc51317e5a39208f3d15dd6c07e69a7b4497c85e5506a5710c33900f2974d05d07ddd6e20d8fcc7115bb3f5037ddaab2766838403dc5e643d259e03ccaf1bbe82acd374d5b7e3bd1605b2e3e69aa30fb1d66e0fa7952f29210648f6862c00194a122f5983e6a01629bd069d005df3fdce2050029eb2f20fe2b695abf23fd7bbf102333d17c029dceafd7a17001600f33c5007a3d32c9ea643a50378f19a2616ce502f907a52d0a7cc24cc525a911faee513d89d1e68885c11a04a5ca62baecfa71d61927e241be67486cfbd27696646a5c686eca4c2d38624d4089814e5b94479d4e79d65258c627d5230db10539d6c42af408c53674e7653cbfd0790c74818c53f6799dd8421dfe839754b40f15f48bd4505e42f613d11c5efa04e7384bf2edb16d0407dde3233123502bec7f110f9b13ec0e2c43770ccbaa28fa9d7cee50f691ba2f9df3abd00a730a419dbb376f7928835629ec5bdbaf1c11476ef9b371d801fab74dd49d297a523c8724a9cc71a3e2220208838f3a1af43bdd2805e25eebd58d4b91ad0c5bd09459e701e239202b680da3cd7aa030545ab10c91700e259ac89be81e47c596c0f5642df64bf671782708ae9cb57e58691869976234e5e30b630a6280914d44c612c76e2e7e4b06dcb7e3ba88d1fc368b24ef99d4ff7c43d995184c60581e475275d9bdb8033a29dc688eae204bb208b573883458c6811b58e69a99bff0225d00934d97b50048e1067b3499860f28ce6729e9404ba434d671d1e57161444309241edadbea36b59f082f79d91b0aa28ea21da9f81f46c32693a23610c5960291c068b6fb6a634083527911949df14f055ba4fd00bdf0162f7d15810c2ffed58c4fcbf4ac57906f498b07e393406df08087e06503f34f80c1dc055690f33bda96e78f3328176458ef78579ef6b0835b64c56c2025a5055717f18131daaea567bc9699304b27699767809d144faa772dc7fa5429e248885f0149324b61ddeadc10153cad05bc4fb257947d219347897adcc7681741615ff55d0707c76a7db0208b451154dd25d8ac72b134da050f09d004050460a80f1dae1f5f70d2907355591027085bfd7ab3f37c3a3a7ada94c37e3297aefddf29f623db5ccb9d4663e539aa1c0b65c91a047f8f3b1938ed4186d2a4ee87ab1b68ce81988d8e9112ca589de38fb381da56b881fdce46b5293586f90e357ce3b2b5b6ccc2d7acf7a5dcdffc55d67ca9fef12d539414aa1ddf5a6fb3a779b537eb9464cf63615e03a039409c30ae85af2ed51e8e2123ca261d5b48d7954c40c5659fbe3e87c48bb4580c16fc4e0b7ec4926e477bf2620d187378fde5f869086e289db9ea2584770df680af6e2acb21fe70c8ee8313e13a49b0c3be7f6efac48e657e51b4282cf26348c84da6513729cef14172d2923ecbe129236886a7d8ad2f9f657772050e93f9ab0f0c414450e0f7cc5f37983c5aae8b73db48698c1cde91c6ea7f059b0d2d8875bf6d7b344864ad82d2b5bbbe3ef5f8d6824b7672c6e836c9e6c1920a9f23110f3969b3442e727fb7cf1a825845f95f324f313db6ed7478142ae03e76d118d8129dcb53dae7666d0ea79b48166a4017aee2feb78f3839c1eabdc38f33db1a28247515d1fcdfcfa420d22d62435f623a03e446368a056bfe9a794f55858b15ab2f27bd4c5c190c1c2c7519d1f14eafbf4a45893930d0854b42d437bda88fc70b945ab7a9ad47a3052bc1cd5477e531f89e2c601a7e622e3b28c6923eeee93d0689767030acd6141cc6c19316882aad1a451523ee0d197ff906a4f324b4683aa02c5d0d7eb6e3364098629e694c9f236945cfa384135f6eca777aeb65bcb798b2f78b534fa7a577f1d0a9d0aebaddf15637869d3da54daed2ea45d9ecb60bf0f20cd0d5a670a1b7ccea6a39d62e628bc0e579499ca827bc474849ce00532d8ce087e56aaddfc1f22a8839a6522634e0c27b3ac73289182c10204389f0ac46d2d2a5c1a202edd50a5063ca2a790c39df349d446297286190e47d47412211cdc5c761aa5672170fc9af1b74562878f834eab6c22c2fd870082b7e0d8898d670fc416704fa7dbb33f9f90c9a33c644484cb86f0ee194f0de1c4ac74e433b788486021c0178c9e7e4c2b7d15507625a92c66aafa7488c1f9356ee959eb08f54d28bea34d89ad78b12a132947a16914ba8a690d74d6d54188206256308820e50ba5f7e8dd0368d83a11d1b1f80d7d026353fdd9034a29794804a046988452276b7ba76deaba3df78dd8d796800fce47af81dc11b142ca42ef9541f4086079e2e0ca787a836755775924f290338ce2eaf88c0340e89a7eaed46d78088bda27cf4160c97ee9b2c7cc5d876d7077741418300f9b6db957571c49a900d169613c9a7825ae3f7eff21b5c428f7d54fea3ae4e4beb4ec9bd2a8ff10340e57bca556a31cb48740b24b7066f5dd2930a6d660ce7cea1713a8b935c41dbdf83ba0ee829f353a0aa5efcdab3a42ea775c3b4fcaae8934534d0d54642773f0f17e68af7cfbddca5c92dd0c5c4714c450f9f3345e11390472115d06aa75bc37b2dc1a1ef040b7cbebc1247299a01fd057774a9495212d80d272a176a45d9cb0db63506b88a1810113d4e6e3e5c50f80d54df32a2ee8529b807e1300c47b87c37cd917e9f9990f037ed1fc3eeba8211fc724a36491fc7b3434be913296fc917fe2d5cc9f950e9b3a74cf862d91600ace298f3e3d2623a36eb649a228d5cc25eade614311a73499effa4b579e84cb0bee3904b4351438b085fa4f2c183ceb9a26421fb422cc371276355e0362da5a11d41a276d8db51fe844733eb2f515a75bb84a542e00589c142dabe9820edabaf09383b52ee2178b4dad7789dc4762827fcc6b53fbae15ea09ab18999b865bb4482be7cf3f07c8f6a091b68dc05de6861245ec6a31d82c2ce0fcc61061ee28293afa87c0359d71989f332d6081f6077066b7c2533020e5371a1787a20c48a37043e7b56b87c86fc83c513758b463d605e49ee50d4deed8747793095c802b107a7d71cee0cb0cad65931a8c987e730d802c314acdc90f68ce7174343649f83ef6767e44c2bc82c5b2611fdda657bd6def599ea760307eb484177b4db2655038031745b6fa7cb9ac171ad0a7230e43b49593effe6c8b928f332180b4ae96c6a870a71cce8603d6ae35faf48c468444c1973a168fcabd06ab14804f9b572cbc9e881282e3dddfa18f58c0c13ef5587875343974331f1e1e3c35d0155b4f209883bc194307c8e068cba801646cb3433b2d1cb4ca8d6ec3fce011e11dbfc45017ca976462b46fa7af63a1343fbaefa4414d45c6d9f74ca9b9ae01620be855fa50274256ed23847dd1793d2d375dcc83adb7a65f4b580d141fee12342475c545f12a2fa073f858fe02cf8a74e6aa543ec46201ca0ad3286d815252e0fde6ae9b98e752f0dc477637bae092f263a64189623ce1b31e4ac7b55f9ee64ba984285ea51df1c39ec03f79b42d9ac62c8b9d2a2b9a57bcc7857896388d191701945e17347818356f66f0411accdc670d5945437979a7d11e0ba104c28d4f4de27cfba61512e001c2b5aaf29811244572802f9eb033426e2271260e62fb222988efab1a0265a6b9d4823d422a2cf5066689c82f1f7a973a50c3413f52b4af55bf254955d14a71399f1efb2facccb04b81622633a671c5c2c3c69fc64d595515be85f0ab60793ea43fec06f9cafd85895891a27cab6403b1c2bc3bf81b15cc0f32829d78de3d49c911db61227d2736613f3876fe81f8d54943015e26f079461d637c9ffc7f28d43feef5ea7d3e19bdd9d7c34baa282848dddb2bfb86bb151bc8192f56f7ff82366c497781c833b411f3139ed9b348aaa20c44017a971b8a4f836b4cd847195406ed73682f63cac381329ece16a3e1a51c4b167045041bcd35a52f93b5dad4d75193ca01f64638869035e65ade695d0d44d927f9f6d51fbcf01834dc769c3e1f0ea482b24bdc8dc3302ff9601c2dc52568fd71f67665ddb73e0d73fac501e6bac287c73d20280305d46acca002c693abe2b8dc4e0385c3ab39c0142d0ddb39f068e633af86133cdd2104233c050954deb9e101416e3c8e9b9f940f2ce5409fe675aa9a11cb6bba3a771e8f6fb18ffee658ba26db77d3a1752862d018a4f83f7b6065f47e0ce744ee8b1542070f7c2d837af17b309be128080bc0acd153aa5dea3cd91989a4f086bd75503f2a46cfbce3099a5b1bd31cc06b0035a0cb74c681062bf7a097fb3d95bd2a1f55db93a21e551c49ed6c3467d87fbc31098411c2dbe0219dc08e91f84b653787183f77c538ddffa76173b24129ea7ada9c22c48a3541ea9b932bf0cbe11c42d9fc0cfa40e1a8d83dad2237c265b2a5334a6f1fe85c87b69070ebd4b53e946cd18205f7bd031579c96074b49ae682f4a807ff464beea029b0e4dac1311dcaedfe121b0e90e2b3c74589a1211efbd9beae7b9334025bda54ae65b2eb41eb010757c2b95f6f31efc4e7f8c1575e5a884f3e4fbbe47383cb548496c14c4d23c2398983f2fcc43668172cb38c5593fa058cbfde144589da4a935fe8a7e56a3b7e9ae52c7db30627e71bad27b10de1659110772748751fe7667e246c06877abfce1c127f8f22d8af01ebf19e91b952eea493312e7300fbcd9e190656a609f3f068f284743519d02f62d2559784732106ef0db3161f81ad823cb2c24c99d41c377917411c8dde6e2a57a602e488010d6274579e91a4c5eef1539284cfa3574ae3e9331e39e896c00edde682b1a2810e1be3f0850ee91656e6723bfcb3e6f1d1f174f656a551090e40006e30a2d3536991ba3f0b809d11c868ef70d1390faf37dd3dc378b2dc701e29492f6247b2fd2444f15eddc783f18f5192512b66a2d62e4e27cec113d1847ad545e593b8cce4f225f49d2094f1c6d9b55b72f72de8e1c150213f27dc617adabe1b9141b55a9e3afac66a141130485dd97b137b68c8b34319abcb327d7304fa00b234b469e901b536ec0b451c20bd0194681b991d479a6ac11759b2eaa38bdaebcd74e1425e6940bbb6c58831a0a497996839202e9d71d644e6257f75433f225ec148a848fea3178c84ac5d5e1df2a6633ea0de0f424502e2eda9ba471902b21c7ad965b08a42723ce8b375ab26792cd485b1dc248042cdcc6f74569e703763533eb8ca6751af8d685f8232ee6154ae33d3537d8dce7fe223ff4a20d8f3e763fbd481b89e085a6fa3e7d13c2c597c8e2c2e108ea8b69a2f7d3c6c219f241084debaadeb8350ec4df64a1782ba5ea5c73d1e8d96ed1c4a21abf268e4d4cf65900c73638c045afe14de2222a8ee86cb1182c4e67347bebbf4eadf5efe3ec7cff3f32968db57a09d2a0a33ea2aefbe8e20f0581ef098dd2356ee593061c17f14cf7eae1590866a1995c27a3e4afb27bb7fc5cd147e0f5ef78fdaf8053548938f4ca31bdf60fb754e60f213f94219779e97e26933d80cca3bd5d9117b66ebdec9fa9bd8f04344cff52fde52280c87326587c38d181847a8340a200a37a32710db9d93b6360092ed74f2fdb9ac90e86c40e4dcb84e37e141c65cbf9afb192a9694987032116ee364dc55a9c62ebac26fe8ad551b911e667c6cc2ed5fed45989ca929c19a72853fab93bf9b76df6fbd347e22729d4c7551bb10deb40bab13335ff655c13a14204095808c33b9a7e894e79deb484686f40d44d69dc8605f4a7e89d4abb2cbfc64a6785075c1f09b1090e930b1f537ca030a442d32fa6611f06a7ffd06e85da1dc89309aa3f0b9ee7e17858591695500d00c0ddbaf47ec44c8dedeafeae05a7092a65cc143cd75099b19b06939ecf5c3b6e56101aeabee00fd1955c475f5e7ed509f1a9c725c2f694b9fbe3085c2116c81393fb8077d7db841f76992d6442414b7d8903966da89e4866d03b5440622a4a596a700330e2592a37da34852a0a4978050be836ec3886e0c40b6f0088c45fcf08f4a4adbc45619e8091731851652f820282689d5af87c5c8043b6ba35f783772646b7253ec61813c506f35ae2cbefe22f302291e5871de7c846b9f3085b60fdf734d5768150cd434deab7459ac172805e696a136aa3d277c11846409b6cd5dcb8a4bd2a461130f7e80e2220f0ecc3f7078b00edc18752b455a9425dbdabbea8d30c656926db39d8dcfa19fda82d147eb3947f43aac8427b4513f280faa0fb897de8680f3c0b2afed89e386133f8d0fed970ec78c49fb39a8154c347a71fec7d3f58d9b3d3feb7d3ea7fb3e2d498fda1697781f54c3ed25e6b5f9c5f29e526efee67e43d5fe1f8f63ba8d2b5ed933c7f4a09b3d81400cd6f071cbc64452dd62ed092a2dcdfb027c7e81f927c5f09fa707c1a8c22961dbee2db3a4b39e41c5a6fe65f98e2e3cd28829eafe1f89b667dcfcf95eef694caef98a6f3a738c5e7093a7b70f7fbca8d3181a3208703cbd3ee3c58314fdaf11335ed7f1d91f3a59d03977ca9bc7c99fdbf9bd4fa7696460944c472e3afc78c1aac415e2ebecec4b7514cf82474433cff12e5529c4a7732f85dcbd3ccdad7f2a8fe8de6acffcbb108f809a9db81619f968a9a01e910ec594a0bf8c7aa8cb29c7e16a1d59bbef6452745499cd4f85f10a5613cd8c82c5d31d37e6dca0dd3fd20f1d49d11f54c6a99fe1077c17ba052773a7c0043d66c929294a81088355c27132b974b98fdacba10c2677e0bc5b073fd10a79518612055a43d1a36b18787d11aa94c6de015fc381223f0d288473c44b40d1b6660e051aa09986d06505e0f6f45dd9a38fbc1e9063ef572563dd154f1a3731435bf8ede4ddc53ba176131069c35629442cead45f1049c7fb5a2f3867f0a67a0293e11d2fd2083a8c0007439c8020db582194fb54755a348695f84e5be7f88c936f93cb39b6693b51c8d5f9dcec3542e13b4504b956363c7a8d7834425c9501e7f563260a78bcb9ec60955d6267f429df58f9860a5c0a697cdff03868fc4e27ec67470729545fd0a9663fc8a9c0324d6cd85e60da9dd15a6273bd5412e7508139524b140d963558274cf2ab894ebf17a24bd692138f640a95b7aef99e4889c70e4f67735b2208d32abf1938032b7868ffad82070fa49c38de74fa0c49225bc06cb813f9902645bb3744aa6e2324157f3f89a183da375e970dd7cc475d7cd5730b7c960b2e006665278691d4ad3b28cd43b1fabd890e1bc14f24eff4c1ae66753081b048d53bdfeea12d6ea33f5850741e89f52acd0e6fe549f3a3fdcc29883efa7ff526a6e0e95c800403443d062a188d15d97d661243227e33542d8d61bb44c3773ee9e063fa5cb1c3a31528d9b7171d3889cbd88b33b701e8ce137087d2aa00ca282c6bd82584c0a598a122eba449bc644c411145eb3cf350cfb1303c0a63661843b1b74afc6c46c2da9ff1719275383f2981d1950bfac942e858c56d1889e6a1e60703108f64eba4b75f9399222c92d87e6b753e69f3c5b5c1c2a472355180ccc376dda2edae302c4672f75c5d638de957c43656c98ca77edcd29e679244cb836de3285ec336b83eb0bad63fe8a63cec09c938c1b7e18fe4e17e473a947516936b955b0f44e612a6bcff0799b31fe583c6946f598b2d32c960bf4e6465c3ca9b4316791803b2df4c889959d6b655730c6df95e27f1ae0317e01b6b08f9a30f7b226b629f7ae71a13f0d92f28e7cddbb03e961cdb7602d2408185bc0aa3269ea754e6923fdebd30d543279c51a6d279ba9c1ff70ba982ce385405a288a8f6af0a969518103b2c7650ba3ed822c01d60cf38ae995164fb85c26ebd6722c1154f4dca803972936963746cd30426069acce10596f46877f71f6878f202a6b28dea9f61eab024d74335e62aa94b67c745ff8fee3a271c0ad756aade2fab3dae324b90dc861f5bfbe24bd43be5ad926098b3a88af5effa8815f622ba4458a5adf9b9cacc26734009fe33b91b6e6cddb7e90930cf5d459f6a00e40b8e55c752ba0a63e094dc952ee76475635d75a232c86b7e69ddf78240c2605511dd39117547d56b152407c935274dd2428d9de0a5ddd4252c7f921193298297b45915400d22e555712d931069038efab9ff60b248f3dea4ad2ea60894bcdd7224ce3df2a62f091ad97fbd824ace4e49935d49cbd734511eda3964e1ecad4b07ef3fecaff1c29df40c3bd39561237c2fc938aad94ac4be4bb0f1f1f4e180e180015f3720393809119e9936c41ea146e212d86e4c1a28d83d062426a460887dd1e546856e6bfb77f1ec84b2b76a54e3022ec51185e4b0c0a4d4e472d3f70e390548117cb56ca6bf7e16d1b397d50fdff7ead8775974497d2f3b987459844cfd7635d04d792f3fe00581414c121c83ff57b25b676de9ca295b6043214ca193710ff1e3b27bd0b7ee7f6787bc10854eeabdf0917803f3b830ae5883830d0d0008ab787bed780c25d3da9381c81097576631d7fcdbac2073e11d055278636b5723f8a8e1fbbaff3731d50bd11b328bd1e9855688bdabceabac59fce7f31016facdf19bc72b3e015a08949091b8470195d3e1a3f2668bb095ff798f0330b5b885d9215fe67e906b6fbb0adbd23f755b6a5f3d4645a5336ebd748eb4a5ec7b20109887afc80d921c6f6c299aa9d1273fdc2bce55f28ae3c5a8dc96eccc6eef8bba603dddd037778c8e06115b0afec43aa3660ef0348677e97a06f2318797ffe04a887bbca37f9ec57b8b8964c68b17b2b806de861707bb829c7e3f6795b1d34aa99611d023863f3709a44e297efbd0af6bc00df0e1b5d1c507487c4f88eb991bf0aab1758f3039eb97081e21c51c6b6aa02f0ec055c9168bdf53ca7fc54bf178f002280c8a086cd5693781009b7fc9a507a396bf5b5535ff8c85d66c9ea5867d259b10566d70c14ba213bc02d304ea8cfa8d748dac6e3bc23309460172498316bc0d562a40a4583b39aa2d917cdfe137fea2ac10e0dcda98605f79e3bca0c6b762cc237d1130165d51ed81c301ae6945ada4e434d940b20254c2d88710077816af9daec8f263c8016974ffdf75ae390a4ece9cab9299e0ec00a0abb4c5ec9b28579761de066821fc3e0a2258e6950b515b01d3b6cb6c044c7a4f0b554fa81c8bb177cff92987e5aa0b4a03634059884f9ca8c0dc163bfdc2cd8ff6c13cce38c44744bc9def2b07429990127fd55495d92c41a6e300999cdc9184f98adc1a1a735355b89dbb19dac8a1de59993fdf9740b0e8c6f77d53c0e7b733d180f5125ed80d4533b8af936b71d6a4f44c8983376a528faadef8e13af4f458604320fc4991791b563f1f32c46199142b7ea197671cc4977511dd7caf9bd0517f7c1156eb9586c66051b218aae8f4af29f328d48c59f354bb6b28ecacd530c38b7290e54fe146c22ffb171e40c98462a1403a992969d1380e5e9b185127107201a6f429be7210feb9ce2dec534d08be07a1805d517a33eb9f0f61ec50047b04b762965e68008ad216975b9b51b5be2a2af8ff9897223019b0df3296dec2506bfe8139b1bb0dc358338f86346e958273cab2e9f3f4c43d85d077977918f82e588e14be72c811d22528db2802361eaac4633751bdb7217dc92ae4189c2b9c4f800b2a779ce451262bc6a41c9c1bdb1eccc5f14a917eadbcaca7a0592624f69decb8b0906f2a27e8a9526e1f980ccb62e1543cfe9585a072db13ed2c0bbd5e2eaa9fcfb314047a6808e921523a3f110ba284605168ca470aeff0e41a437130f2d098398e365dd0d5dfd02b5e71f9de8448bd0156642cb748828f5817ff88fe3420697e46a646f4bd7918fa674ac1497ec4d77babbc5b354b3d69e240883405a0928d14fdb279fdafe8f5ea1507824a168885362c9ed5d1b074148493076861bfc443f78949fb531bb08971258ea95962261d23c5c273b49f84b61faaa365fd6201a4bfd62c1e0a1a60c9c90cab612bb50f8d525e9e5afcad67f140609da25bf10a047a5b1bfcf89e4ad69ddf5af67a168aa8476ff42b199fa0209925ae66fc602d7b3d026d6dc96b3475928881c543cd72d9b7a7aeb84eb216e704898b65286dba0912bedded57dd75b807844c7463fce5ef49cdca85f53c60b11465a26d81589c7f44e903b9e2fab0d3c472f8c1637ff9a90e32cc25663be0b7e38dba18314689598e581ad103fb1a876eb60cd5af433066aacf1ce0904abc00adb94b7fa44c9e4893262b04168b7d6279ee3e80c9966a1369bb18caf5d14050a93ec2f6e1eb905c3c5a407ed8603b45206bca65a559b19400ef1b37606ad4ee550d174e101de32564fee23132ada1c227fd10597155b4d21900d56e1220afbe097e44fd7bc89eb5715416ac31e1c7f8b88cc6f1184805b5d8d77151fed7e535a7f16b2f0ab2c1829de133d7854643f209e99f279d309096d9d20b13c1a28b039ab659a49200e99bb72e0d3bcd02148bd415705ae74ea8c05872cd9ce8461834dd660c10b75ee3f0e94a0dd502f7f1741f0b264d6c83fc7fba517a82c18654c9075444758f4a06c29c30aee47d80975e04308729e8c569ab2eef2726d8f6c6c8d07e76f93d8d5b5a6d2648150cd692ffe793546ba93516c1b669024dc12592a9f5c5ded540b5e2a39e7686acb9ade4a7665716e0dfec959b5d0380592b2c86c8529fa3553835531e101aa086f6db128f5daebc88b62294310a18c54bb54e63f4f9cecbb2cc25d68f36fca9a0835e3da531f9e41c744d221de75317668e8514251accd690030426417a8610bad5141bedde06e974fbaf111333c57d6983d5390f7865b6fef9b8d9c5fe31235e4557f489cd8be69cca147a68e40d65939a70b033d95b1bc75938328807cdebf9647a13f477716d156037b223c49ac1698dd0e09b085170feded74d466e8bd2b40848559ac5e8cd66c9ba3c924b5870603ff530d928526dd4a0e80f00a5353c3f6d0cf02636222e62f67fa7184096c87693f17c1cd9a5588db19b113e70237170b8359fdf8fa62d0dc6a2a3f9f263b630849b55924956c8548f09466e6813c2c439bba25611e13304aeb2b45e2b3fd2cd804eacfcacca4060e834881c90af0a30200fdd0392674186b232ac7c3dd5fa9178c111f2bb7c48d32bd83bc5a178678ee86cc54c572ca610600e69422c111cae3d330c51801870dc2410da2ce471be17392a3a1996be2a493dd3cdf2bee7ad23caf1d7006a7b84ea09fb45052d6c326eae3144e51470fa3abc430c5a269bb4cfe3be9f5db5cf4a6ec494ef4cfc87277bc47b27baf7b3c2cdf48fe9045ea04fa2c4d95e41633f986e4b1e14a95a5ed027fa243fef67cfc3e96df8adbfd5e006d377605d8938388708ae211022c7a196a431544242c3c811ebe64b660a3522a3574601687981bc713e9dd402a7794b0e0e1361aa0f73c8517274ba317410515102a94764f3b0bc730c49dd1191d6a3b32869ce0b0430e26dbac918a1a9ccd266c1c34a6597aa4a3f91a2945d4d69be906a84029d1aa362876ce22749f4241759cc8cc4d0b496b85e6b07fd99642683646fa449a5d26c622db1eb51ce0d6522ab1be56058bb2986ca1e035762904a493942a552e93671493f929a7759725af17d09a8b9d041c629eab439bca83a2690c42e45b26b804882b24b66c7e29966dd645b404e20ea916c16e684530fab277bca11dbad21da92cc938d8653122b9128aa1bb9a2572395c3c09b4a39318e662b27b13765b11b02d3701e5a29335691f07406fa12ad98c863c65ec3030f3d61ba6f2a6ac69f5ae7a92ce074ce203504a80f4181f1540d271163b8d2c3807938624c9f06c120355cccd04a390a138e3f804d5c280bff7cbdc1680463f47ead0c05affe96b0c165fad7dd40f47618f62c50a31d7b05e61bc0f094ea8624982bbb6346010022687ea2d681f587aef931f24a73ab581cf4e3040ca544024ef8bfd23b98c5512e085777687192847330df2cfcc2bc3742ce8d0f7f2ec203251c1302454ca730085a9152386bbc6ff1267620e96b228da81b8bd8ec65a345c4ee1a1180b5cde87585b0237d2f7e0c75a186631e83e4531dece5a1c15fc1d570fd587f484616f1de661709b039b8b8afe0d23b9f7c92e11e414dbe42e2129f74c640f0329bea24c08091bb9b1bd2a6382c4999d0324584d0e9837945a8081ee1080d3c278d689ebdd1860d33fdd1159aba21e8c38c3c341d4d0b541b5e53354fc0d23b20b604e7e8c72151b345882521b76d3a1a6a095dceecba37603e9d92d56ee010a04d8eb3bff964109fd603dc002d369fa113addff39e809ae6ade6b3be05b2046852db7685d4dccfec9d5b1ff929bf927ecd022639d22c8f4191f4cf1791890b46dc8ecdd40d9e163565fa6a89b735aac6e834a34c3a1a364245628d3cc53992012ee488c145b92591df292fc5bd574620a4eaa0759f9bcf5feab76a567c6525771fa0a4b2f883303ec175e1daf5284b5b74d417a0630d9e8e3f849c88cd74c50cd78c012007e6a7a63674a642c976848d1ea2de9b7c1692ddd4be80b14a2c73e20606c8e534aee6a9f4132da2d06de501e5ddd969d7acdaaaa766d4173944e9b8b02762d66177dd25d2f9c9745d033dfa7760a40b65a63ba68db638d3e2d654d9f3eeef43a216d6350f60cc384321a5ef3b85254905686f9ca42ae264d1d9f8823860da344eaa274a74dc1efc2e3c9001eb7e1bacac1a5c8df8c3fd2013ccf871a2aaebea124e5335ee2da69f46e324ad39e70ee019e605084c5108aa5b2f78210174107e9568c07f78102568b8db14760de4323443f238a8435236e64890ab3dedf6ec2a1ae23d7a59e6be8be0d90eccf8d66dd6c9fe687a174237f44db1f2a8b4e46e6894af3a67bbd40638bfb344626a06ae9782ae695664caa3d3482b84fb7dc214100c85fb785b3bab325ed8452e807c34f72091884b9ce901b671a09fc2d0ea8ee3278afff89a1ebfb4bf8507d1dc4a8291824fcb43e3a18b6557db174be71ac6ad8b9660f7774ff169cd0d8959656e0a69760549114af6f47ab023b2ba4b5ffb8bbe515de60263c720e5f4402690894bbd6102c61f37c00438c52b7840fb61f8b7b0c898405773f4c08140e6505c5a8ee212bb15c951a47add4ac680473e2991f3e706a5248d1f7092b2da312b5c1792cd156093ad6b6ff40f24a91cf98331b6e885c080bb81831b6a1802ae6380c2285d3eab5035c03587f257ec99ce0ccb58c4dd125201e6b9b966feec5d20dcf809c48e4641243dee6cac6ec30330c17e5b914e4ed157054ccdff70f3281470c65ce14cd4938ba754dc06e9fb6fb73327126a62301e03c41455896c7c80a02f17a2769b7da4a450c6d25736025236810cce3982be31bf0490975a174cae693b63f20a067608576af8dc5b992f177a4fea048e31b5d14139fa8cee981b141e3385cdcf47f27dec5de188454b10e856302f0a9cf9ef0fc4eafe16e824b4eb1257ec6482482366a274b3be184785bf0f475462ee80dbfc479e217acfa1e7d388730075d99198627632753bf31d5f6b6304e22c8ffeed61d06e52ebe625a99a2cb6e65e86b1a8953648bb62fbdbf2dec8f0ebc8970c9373ccb3b9e71776df66d28f137b7d8a1aed349eab8bd8878e29b9c077353bd73aa7af123a3e37ab334f30e9af6a28e9de3444a47a5fb43b5633069d6404f08deaa50aff9354fa884587a0e29b29aa27b4b4dd0f4587303e8f51bb903e06b2a207e0f36711cee458c49980f6448bbd683feca04fefb3e71b63d4c0a3b927d1c4acc005eb1e3699d3cb237e10b19f704ce478761666789041479349caab0804a6df7b8678d16cea859a2c76e05319f29111004f2c0e2db67e4440c1091e2c513f3eebd13eee5365d022eda0437f22f25726f95930f4601937615adac73b0108871df2e40a441fb3e2ad1d6557d1c61e1e97d288edee5ca16be23fb9330d194495649d2b20a3eb94f1470c0800e8804ea5fbae1363f9f51fb10ed9e60a0e80ac9afd55f15bd52dc453beaa6875a00d12a5791ab6c468719364114c9a8e2de93f50841ef697710bca92a750e2a9f8f2d760371c5ad0193da5a7c79c1974cfc6d4b105ab275c34e889c6a31295c53e2673181b2264ace2d2ba4f391816f0e7aee7bd36159e969c915fa3388b31b04f4d6904d6bd93fa3b13924adbba41b0517c849f24f04c958c5f66822876617e091018fdac4f851f989227dac5eef216b8b86f5b4ea00a069b8fca5e40411491046aea3983d528c080ecb7aff873404d3041ff8b9946a714c00635202facbcf8aa4b62cd81c934afb6167fa5d2e40664a9b7b96cce5708495acbfed4f992ab104abf6218c23b55b2481f653a2c7297babf8d00af641cb0f1be30a1bd7100a50f2a6a85c70192de089650ca1de21ae8b6e3f0b4bce7b21b3009fbc2250e460c923e2778de09feff1c1462acbdb72feeb80f4cca65e3c9b52810f42bea60285ed0609c8849e898cc0a78a66278e8044a9c2d79c08a9da7f9258911726b5820468763d0aa903292056b6aadab94171416ee4c53d5b1108a3074217808304eedaca86bc2b7203883b0d7302c7e47ec23e7d27192a1003dfd2641ed3be077eaee98d7abd8b2f919514988a45eb93f2680e84c3a2137d942ce005ce4697e2da1d4c45f0a5d0b3091771f616ac1c1be2be753d9fd42e8bb89fba8f6aa78df44efbbda317db5fd8a0972efcf6f78a79f41f8fa6c499b6ee7a716afcce62fcf5d49b3552d8c7ca333d25aa6d8621ea1984aae9b3fa239a6a5aadc09b18319781cee228a234aaa6225be4d829fc201081e3600a8525b9c1a06a4e3781136940a87a26a49e4cfcaf0a335f0dd4acecc7a074e78c296674002176c16980b67bfa7bbb7de10100cb2cca5b9c8083ae25021e82ae00d6f8715d34f60d39182d101395e3d08a001828bf42ba504a86661f7fe83ce1bc5e63694bce0a730a258ebd2122c9e06691d62b102de9262b4cb9fe6348b8b6ec9ad6a5728cd7305b5078eb06a3f961d7c77598c78d9f4e078982a165e495f1504bf0542dae3128962099e55a1b62e964e318441dd1ffac79eff154fcf5c929e3a200f03a0637e58d8f047098f64e254da5afa5efe02f92f211a83f9b33240fe96b213ba95f60db4e156791bf04b41fe63de5f1fce326926404ad893a1e9364fbe364bd4af52c57af8d21759adeec8171168efd005e1ff4d3c009a38b6e38e603f62bb00b5af7bfabe5ea39605bd5ebf90845685b0580b61da689a5b322e04ec7e5529401aeb4bb0f8718267bf79afad9eeeba4d96068efc6bc2f7a8a1760d2c873f2958c015da90473ddbcfc0f25a7cac5c450ec29b31c600a14bbee26786a4ffbb95aa0432ad723814b754e011040279455412c58082fc26d2b542e13a4ccc4422b9d148445355059ca9933f4f96553a3c5a9dca66f50ad6babc5d81f8c9766da67208284abab49c98d57101c9595f01c7e5b0ca17e9f9df580cc3d8f49e0ba163dae7781dc1f79b0499fa1998cf6c258739797d9ba1bf49ac45d0cf79b6d4e70f5356b19013aae370b7d8706ff1a9e428b7de911b7caa622cf77d9e4bc0acda79a86b2136feb97ed8e661042eb7da4ef8d37a29fb1b9bc04eb915196459184ac7452197ce9647b003c024689f06f8e7fa51084e2f9b9c35d4e60309da9b5ec4d0e3a276035dbfbb8791043145d042f1f7ec529de6df8ed7c3fabd485d86d503f8701d33dbdecb01e46285078581d5d1227fd91da7cf4957bb33bf7663233c8eed4a45fcb3dd02691572f91e00f3017c9383d3eb03d87ac39a3a62aa02c38118c364dbfad5f74562d6a3c05003d3fe51805160eb3f379459001a12ef6a6d7369ea3883512122351a6f8c67f77dc3bf837b7cd4c5ec85dc28b1882afbeff82e32706e51f499a11223e2989e146f3454f262bbb78e37bb5d49ea8944acdcb44a32820995b131ef477e328af6c2794afd279ec281e45d5b8433e5caab676e4360aa0803feb13902769b70bae3a8593a6c11337f41002b8a5966c2ef6bc66df43e672672e04151a71b82a0a4080a490eba80a88618cefb0cde4104eb1bb380c1b14a239de27d8f31d2539b7d3bcca3328b5967a4be7bb4d40768f395f9ad13e21b21ef46ccb1510753bc1711df5e1d4cb8225f155259abc7ed116f6e49cf224b55e03d80f430cdb618de2b935ea40118e02d3de93304a2a97807902a6aeada2ec3167661aafb776d8117a6b4bed72f74e9d4fb732c5bbc451dbbd06cf3b8bb4264e3a564c52ac30087815da1fde2f34a4e5dbcfd4f34a68b213ee2b87430e4827a10609f94890bc56c43edd82f48b8b70dbb67bf7546dd87a73380f94861013320f6a4a6281a4abd66e85115b68329efc43c569488d585603a339b5e07477ae47782da196bc5fe13df8a811734b598e4231022b7ac4074b6843fa763644799758ee71b75f91ea824d5d9cc6db19e6ff4e250bc377670af7753deb7d82bb052e691720af6c33f475bfadb4badf6ca2a083f0da000778af756334719c67339faaa7c2a11ba7bb5e83698138bdcac38af4506a285ce7b598ba741c1b904e1240bf5fa7581eec6ab8384b7043c6309b34c8b2a7ed1290641b7bcbb5b7cd761112d6615f75101fc634daca4637bc370039319ed4e4ad135ae465d638475ae9bd5b1581e1b2748f16c5f492c17c89fe6184c63df1a785f9a2537644f9744a6094091b9a6256bb27072e16085005f6a46bde08a3a4fc1044965721cd8db515e7fbb3183b9d8087838db472c136d31d4885499b2dacd16187dacd115d3401d523837afec9fca4f181d817a521f7c75e4744b7f0f1a2d71c8ac450690f029dc766d0ae62540446c3d5f8a6d3befc866af7d8b44e1f7ae6dcc81d9e9e6733e0b7b8fbc0acf9e0b993b27d4240c960c8dc415dd54899f970158409d62e52e69b3bcb29c99f2883921a959235a2c9c1539c6c18b8df6dab90f89346ebe35e2a0f46ef72339a7a43eb505c0b4d8a1102d2929d0d68b959766230bf4cd70225cfb864cbf89ecb214f0cd3c0a699873383ef17fe684b98ec9bd824d88695afd5ed75089897a8d46623d62a293028bb0f7894c87feb14fc60c31d14bb78bc4654f1323a11a5f74293557d027ed05968d60e6f28eacf662b14217a3dd51be495d77eb22f4d068f60f02bd27b433ccfc79bd22fb8004e61c52d38207f70242ebcb2361ff60e2663a8f97ffe15ef78827167fb544f00f5b1515e030d37eb44a76f76f8dfbababa11ec694b85604081548d612bb0896684815da24ed2622f2b295a40fc572d826ab10c7d1ed9aad32f5eb9140ebae560618ac474c2e6a2e42b3d07a5828009077ea98e0fe6ba23508f241a55ad4e42bf38e0231c37092203585827cdb1c5581295fa04cf8fce4fb3ff0f500f94d10faa33f22297af5e16f8c6939457fc54be37fa2b802d267dc663dc79cb9dc6a913d7d007fee414bace71eb0eeac4b0adde0dc036f50d60beb5b38808948aef1d40f73ba3f37f1e0a0a5928b9ccaaab4dd2607c4a40847b42e0549c9679980958148d25de999a55d9602cfec44f1e68faeb652e757fbffa7feac898f6add76af757dfd33ec2c064914efa00b2083e6fdf5a313cc5b75e6fb1f2fbd25a60be86de8d271c74905fe072ca4d62d96335ec750eb1b34438a9672047e803d21fa9242017aee6af801a17a2623c48f97465a26839b5d6d44538582d640e4f6c24b615cb9f306fda9a02628507615c9c90c2c4e85a6efd565722a62f923bc23ee3fa7babc3cb4db8963ca1d166411fc4e1a38783e90eb6ad34145ed8d0f1c1ff53c80b0394dd7c22e061c3e1cea1dc60ef87c44cf4c54f421c6dadcd27042f37a4a294476f13ef91f1588d330dcc82fbbe6e89bd9a4034a4a4931b921acd2a06726317b863fd0779ad77e911b76148382746516b105e850b074a51cb98d9810885f22913b1667ea81df488a3911f1735927373b0c2f754c1e34f1f9d19bc02e8d58afb1853c2042ea662cf151cd3125e670511cc7a221600e33f9fd39fff786ae15e6a14adec15fc0db14e57ca38cf8e10f7e25326c1436748778edb44bd2a226b141fb96606a62272e3602c6ee4acdc6301e5129552b7afdf8fe31585dae48f20042437826a525a679af889a85a3b328e9c8674fee2bd0239344a6dea8e23dae5932dcc8655d51901e21894b0c380a37d6d6543b25525b5156556119e4e9b460f3f0722d095b0c5abb070658fbc8c66682bd5dfd0855061f5db4c9362922bb588bbfb07d3bd5d8ecaf2906264d71dd3c4f2b193592628c22b26ba707e87904209440d00036e2c0eebe9534f81dab95710fe4d6210535836b233c7494ab8da1158264d09452d1612e306b08a65fa18a2a3ba9d1be437720cea5da3f4afc596300240ab43b80c6a9fc9964682bb50fb8061d8b9d754eb1b2490a531df93a4ba8bc0309ba8173943e2dec68ff0f881fdb1d9d9f5befb8a0118662a448d9801a508e235e5ed6c69ad019e991a7743304181ad88382fd50acdaa4c7d273185087cba6a012569b0a21185807857bae43a0d63c402f08b3c644ba7f6ba0da783fd635d25b6cf5de45d72e881c1f5670ffdc36de17bc7c84da0aadb2c702f01ab755568f55f0d052536bed429470f22866380dfd27613385eaafe084b9e496175f5cfe89d2927c2c3da4a4643a566c8a691f0b963490437b6f14f17ac435ad75dca2714b605915a8291e6a80402ab60198f887024fa5e984e4ba6f124e34111d956c9520dbefaf6c0a4a656a2dda778b01395b8a692022132a108105d56b53032a58a9bbc5ad780b0bf7c1cc2927763ae3ac40d930a43b914341b02280bae272423bd9b562e3b394e6d45db01e7f36c7963e96fe4d71321286d2a63032e16be4be616e9a34c6a6a0f5a7c5aa741190c835d6d5ce4700f6871de7fc93e19db20a13f31791cb01bf83467fbd98e60bf50d5016d227857ea7daddbc3c83c18ff8f7def9776b4e0debcc522f0b20dffd654762f92e09feba8948a464edeb21c113eab1eeb6d6b553989ec22a46e418e5c36539e9ca66d3dd4c57c868a152a830e87072b721576021185f44548641699d002b3b5596e5eeee8e9a9ba03d0ccfdf17312495d240e5ee95dffa41cd36c0b77f0000600cf9559cafea224401f69b9f9df45073a262dd6e43da82b393a8436be9ca15281c1794c38ab7abf4e94402e1600dfeee16f0196c0c18e86ce99ca8a7bb4e9d75d789cb459ca92956ca9e667f48cd62d33bf74b3579afbd8a4bb1a0f9b13fe08940551a070d8e91d5c1e80b32ac93188aa8c03c27961ffb673ba0d94a0447e98d1304a824d3512dde8b9819d9162f3d327b2ec20713dda476a8f434c6604d5d02c4696da77628e88b9dc0bef04648bb5c527b381c75b0640b584bce25fc18d1ae33f45c167c602046ff17f78a28488cd2f352a59ef0d48476ba4ec4f38854422c65945d785063122700063b0ae554bcd04521f496e0f76df58125c0228b927ea1be7a1f75e6a757ad4ff9e1390526c0e569893b217b40b672db43095e71a3a1c603b290ea2debc7dc655444354111d4819bb87efeff11958b007b1a50eb3fef47e0822c005a2d07b7e91f2e35f0ec73bf67e14feae0d8761b955fd1e96b6b1c75adee9dfbbc964c973c10d6261d149df18abf004da551f7597ae52f48b52ba5fa41bdee6a4350c0d5293b7552e6c5104f610cda5bca391bfd024ab451e9509c62408410e1803e2433b883472e676f12cbbab0cb3f99361ea38120cc6023ae7acd1b63c1d05243dc2820cd5798ad320c1fac96dd4b71ccb0bcb082484097a56f658a882ebabafc22063e3e0c8121a39eef488c9de067b30c0ea3ea00ea36db12396f685742d79baab06241f9f1bc576c992a5660bfe03734ac71c5c2a527e3e24a9658acec020ca3aabca755d669caf41d4f51d3161138d1e572153fd5a6e8b4c92989104915108255ea849f16178f1900cb7f11084c59c3ade325ea5915befc5bb45deb7252c6b30f99a4f1b96dc16e93a424dd38a3781b351c4c84fc0b1bbfc96da10af2897ec3a578bbebbdf9b5ad48ab7d7a3822ba88d9b5d15dab8b40e9160f8c9ca95e7893309fc9c3541fb2942d73b1cdb839dd52dbb55a1019305d6d5796c95239219d3693a2f9f308b456fd34fbcdf91283f4ae6beb45068b2a142d185da46635ef9174e13a2988213b7ec94a08c77948c1816a10b26acbf25da31bd282fc280d5b1e641c8f71172facaeeb535b6303eab2983fd893156b5bf31ce6a81e469a5d81b3dbaa8e1d515f2cfad3f167ac2f9c495918799625f3c980970d5c00518b6e235f407b12889a9eee597cb63365c534649dde4c4e834c60acd05aff8412f6ddbea0e7facb2b814aa73731027b6ade017b6f9b5e1e5a8b25fba095ab17d9a64a4ad33ff78fe8d80e5361af22856cb6234915bb37501cff9c0725b5402ef6aeaf31ce20113876e51de6ee982e87ecf7a54d49f446a5be8c4aaadc04dad06c584f364edcb41ce6cf07d024391f465e535c01b00d2383a9dfcbf65a5474b19327d1380679dea10ebc4d2184982d642c0ebe2d86591ab552b210ebd428fbe1a4a868cc96f062831edaecde815d4ed63c87dd01a80bb2e3b8a587ff50c990669d55b57442c6bf421a9cd00bb17316caffe3b86454e0875ad2e6b511b5d4c872dda5c09cbbe5b99e3bc95c11449ebeab9b8e7098a85ba4ceaa1f9abefd09cefabdc6eb4f4c027d7f862d2a7d6c9e5c1378439db9a98e1ccecd3745a487ce741712b49ebab04435a8d4d2935f4d859e7acd8e6a18943a3c53b15a133def7867c32fc2bea4ef39830190f9478ddc2dec487949ef844be519fedce0293db6382e7b839855ce9ef81e653f8d06959972a60a6165fe4bdef39a9e48b904301c512644ee0238d849630935c6253550aeb86e1975b823a458f99db2058ce399f280cdb6bc24a1d3ae09453339ae9638dba673b47b99e35f942499647ff9dfc57c3a791f0dedf71933ec71335a0e41f68f8f6bb4f5fc3aa1739ed51c2857a312b29e84c6e6c99b3b0b97c357d5278463f8814a41c83b8fe124ca0fa6a6a313798a77817f8da327ca0b0d14953c249c2e7ef5b98e51c14601ddaa82f992c09452f3a25c53d4cd707b3a10bed6e304ec103ac8bd4d4d8785a6a060a6e47b9eae8e46a426a2321c420d69e1ea3445fa49a8e13d45e8a22a1644f624b9f4b2af51b6569987aace67da8b0ef45f28582b181c055924b2bc99695ac8a2d664b8d312e9ff0b8e48530c4e31e5e254e6fcb85a937f5ecf1f9b3aa197e18b113edbcf24d51523be482b54b42b864ce355cb41f982139052df0382672d0cbc9d8f398b81b4e344344036beeca2236a086a8b8470b5203505dd4b366ae0b0c854d3d287d228aa49d57e1518b063ba108b0812c8571a38d8460bddf399b6506f2f671711c750e86f6734c7e0a6fcf9ac9a5e390d246e83b170fb37ceb482cac22165fb9844c1263ca3f0c74be6b5a321b242b7bf52204597fb7494a19895db02f4256da7b08d2f9e7a61a4b4da247ec40084689f4984afa5975754e2d75a6b5a1db0f5c3f2cf0d6f640e61e38ed550a2a27fbb17c518cd1e913d58f0823097dcf95ffd9e87232513198dd663883ba5c478dee5efe4cf14aaa89a772fd27784a2311a227dde4d19ed8241354f4595337f0025b7ea6ac4085776459ede8ef1004e445a0c50ee3c2c9cd270a02441e57ef001652cbbda9f489862b1963a09d2bb87f52afdcd00dc2573fe36c35da5f20e7cf262618e4c864e840c47369766b4c5363d1eff6cf4821ea5ef8fdfaa24cfff086e58aa3460513040de604b45c458765c13f7417e3a45a5fbbbe68d4073cae6fcbddcca7511442ad30a37bdf349b248fdf8c9d1b5103381aee5635488c02276d85a51da9402057141e5dff638c0bc8592f7e389fa21f5cf33c7830c2f0702b54c972e04325a03de45bd245c2c89b89fe8a4953d70624a635f9b1dca26d9457b59c1ce878dfbe1fd064b6465926c0e2def4d549eeda664f547bc57594131c539e0ee84fb143338d75c1caf59965273fea20414dcfd82983a5032adb88e84b1c830212fa964b62344e2688362965a7a376cf0c2763f380567a4b64faa955d107124da63fc12b38b6b70642a4e0d0e6111791c58d9215ae68c79b44f1366261ae373321135e1ba649434c40bf33d1c164cdc9a0a590520e417d7266b1147cd8c188eadf7f943d66e7ff19dde3d19d08ef2f3d1ccd3badacee1d49a17164b7051526fb04795d3ffdbd8277554c4a55aec98c22fc351d5145b6f3fdbf98970a7408b251362cadae226410d05179285f0e9e05ddd955c382697cd936177d11398b6b67a1ee273c12ab2eb1fa1f2aa2ea6340ba73c5621fb2618a41339e0e3f144015c269ed783b50ca318e160ab23c116572051314bd21407e9f4fa7c781ad99f2007b323049aa8ffb6b0c9429398d70a155a6c25c5719fb0e4e74482c56ea348c80c2aaf7c7e9d0b3302e201108500254163b1202f9e2e6592a7000d3b526afce72b2e3a264dec8ad5fb89d458f861d5def178d34e6185059a716c3f694ae296eea38632add4ddd3b42cccffc63651bf5d5f95c9d382493697b226fa22ce30fb61d5bf9af04d3aab9bc7157de6e2258d5ba03eeff22cf90eeb4c72c15f2833c7a8f691695dbb404d04ca4804543c89666547ad4fe49c5790e0123c8f1c6e05e939726a34573e3fc7e9843aaec0dc2b452449c57228c16b7959102ea13c7802080b0fbec78c31fa473858f0fd704d6211a3fc318cb2db6e23f9976f9c82f238e4000c3f02ab5119e6fa92fcf5319ec6a9b4a8c744c63fc8d51304f5ce6b252e07fc5370ae050438ff609ab60b02d322c1e9b06fad808c898376aebe189d9cd24293f1fd8390f9399363f6ace247a8de30bc2c857eb1aa9a75b0d98edc50372745a971376db157d087c843ee92c5afbd5f726611cc97b3d4e882c4cdca9c5f9fdb52ea617c39fa8c1bbc08cff508f71bde314a237312055f6898ea8d2768902bebf3997e95622de7f61cd92e04bbd9fc629aca7e8e314a13de51ae8413224e3812b6f05f0cbcc99d9526ddb60f96f3dde0c0618927b10e7447719fd7dd0d7ad7d5514889f53c228b0d2edd278cd1108bf090128d21915e4548d53f04958b96264a0c5ccc040e0444b10c4f108855a30e50340cd771fc7cc7755c7c6d0f56c18ad8ddea910f01640e5614883ef73df4eb4ba335f4405541bf3ad789cc79884a61708212dabd244a25e0f9fb266af66fd964efdd646fb965925206ac0cc70c830c9f14d8c278f493026b309e7f52e00ae3d54f0aec309ef64981298c673f29f084f1368ed349a2bd88258cc51c2d05963023cb51dafb8f348e6af958e32f6250b5613005045f13e01b050ea1c061097048021c8e007744803b3f70c707eeac3018020c820083355ef2ff0006575ef2f700965e22c0770073004b2f09e03780a5976afc13587a89c6f7c04e60e9a597d700965e327d063006f005b005b0f4d2f815c014c0d24b427c137802587a89f44cc8780960e9a5fc3c2280a597fe97c0d24b315e092cbd04c4278191c0d24ba387008c77003e024b2f89be0178073602ebc045e018cc00bc000c8335ce81bf996bf87305e07d1380f723006ff0a5fd0f803738d3fe38f0eeacb4ff0dbc3b35da9f086c03a3f00e6b76f8d2fe06c03b9c69ff02e02d2200de4e3300bcbd2500bcbda606deaeda3e1300bc7df582378d99f0a6b21978d3d91078d39b12ded435e24d5f00c09bd20881376d058137ad21e14d5532f0a633196fbac278cfd8e33d657376e382f774cd170d0cbc678b05ef59a30ae13d67e66a056f19bb784b19086f39bb912ebdbf99f4e03deafdcd6aec6f160547ef9115c554c133e860a3edcff44ea27d922d735ea2d26f04f0593edc3db2f4136d7f647935be0c5281887068f47cc9394a7caae78bfc6b386a7b0eeb058c991c96a346968837ace1adc64bf347d6c644cff7ad899e9fe7e6b6c306e0cd98d14f94a1259bbd28dadc22961587358a79c99fbb57b439200882a098f208f0d12377935cda3d37dcd02be203858e1e931f987cf9bc441951d579098aa9cfcb4b30fea318c7dd2b127da398f69a2a02c67671c37f271446cb9f9797dc9472d475cd98f935c9c49854d694922ffe134c02c9484347e7bc0495a03033665ef2e75cdf9a319bd1d1f7b766faf3f26fd1717bcc8976d8dc23cb5fdffa25f4e4bdff3ba1a7efb9f9fb7abf3fadb9bff57aa2fd7b28dafda368ffb0a4687f0f8f48e8e8dfe189b95189f6e75870b8f6a7de624aa6a9bb8c24009829074080cf009fa4a70d5c8203b3e591e5257f9b07961253a5f79dd8eb94003084103382209964bcd0a821800154cd3a9da3e4389d1776460f8513da070d98f6afd8b30fa9559c8604a08a398453c5a49ecff4614ad905146c38794344c7aa454b486ac4f35870e77f7216062f8cb1b1a9ad9606c65816eb0677fb8c9ef23730e6f5d292b2282b166bcd66df0dae94937a670fd1f4a7965ee83737f245bed502b5c28aedce97a22e8c40446b6fbf8507fd2d491666301474c3ad50ae7d39677306865c6b8e42034e32b12b2afb219968fb9c562513edd9877d6d4e1a3d655b587047e82d964c40242417fa2199d00abbd83a16eecd73cac0f09270b587f19fbfcff2559f5c7ebe3bb953ef99073dfff33012595676d5dd76b5b2ac6c47a3b7d55a6dd6c9156f6a85903f68f13d2f65ad75a62ba8fe0de7ba2f5b236ad1e8ca92a5fabe12cde8aad295abef842cd50fd56a57b756afaeeabf2cd5f77e03633a3fc11851f415c3781187efd99b675fdbce567ad6e8f9d239a8088f805aa1c351b671c3f7260c3c5d381ca5417cbb729436f3b006e2f784d9887e4fd64cc1f82d61d2a65304abe2f95d5369d0b28a61e689421fc2f743bc61e09ada1236532d784f16101e1cc5e4b45fd121f58b737139a43d28149a53cb1e088f70129a5b6aee3aff11d6a2c4462b1f72f79750f8ef219a7b77f7af98cbbb0a1b6db9d073a1d7f05ec9a1d09ee1a7a20252113d205145d3a64b73cdcc17e7c4e596fa6ace9cea7c62d36aa9a675d244cf0f31d1f3576ca636858eb9a6beaaecbb8aa6ecaface02a43c7a9f2535a69557255d5145745ba6e355561e66f9ccb498a9eb4ac6933b7299ba2e36c5a973e63a3cd66409e95cf2221cb859eaf444fbb44cf19c7875bdfba9c70aeb9e2de57736616993373c56d3e5fda6cba6c8a9e4e61cbca801e18b12c6e1617a5e5146652dab2383fdc9526b399e3e44cca621266236fa44bbefec7b1860dd1fb105e790f2311fa158e0b59316f277455c149b49826fbb4d8f7a1cf41b528f414ca5368dae46cb5a08eefb30fed3df41a4caf7c45a2d6cd091dd25e82a1398596a626aaa4e86925ef1972bbb2b2b2f22b2b9f834e97a3ecca4bd343d9da22aa766c573ebfcc89af22522a8aa11f54bcf7acfd2b519cb75796ea6f98c3529656f21ee27934c4bdaf78d953f90f6f15199f837a32b00c2c6154b0cb256691852e76208324aaa7a5193d697945825a5e394288ae4ab851a442d0e319c1c82819df0264841a60d619df43aaced4d41188bcde9a4bc641e838ab3542862170312cce759d96757032dabea77630b3812c0631cb02d80a6c60708385b69f85b6bfe5cb8a7fc158036d5f0775876581f642218c8415b55a1ff6a5be2fc111502bb497b7903fe81cf493a7eaf31289cf5b197ab2798aaaf2cf5f287450f0c1f734ad6a1988a63f3a3effc9997ecde2ba6856538916d332730ab5c2091d41fb74767ebee8c993f7f4bc7dcf83e76bbaca70a7f6fc9e2e2bf49c99b9332e2f722e6c204f59ccd31179d27ede40ce605617c871fec402060c1ff5b99f17a43f2cbf29e8e5e83f2f258eb0a634ad2d09fdccb345c7a9d51417eac0c0515416bc6b0c2a165507516c3d984188628af07eed849e4640add0b5566a05cc162d47a87cfdcae5a9923f3ad2712e6122a74da58116a3a728f4f45d2784586892e1dae73ea46b0866be479e6a0a0d4cd8411c72b0032d60c10e30f53989925f2c79a2853c00410b5e88c1d4bf12c77ca541d757913768e81ad275be13d6565bdd661fa1af9bfbd0f76fb1bf8691b0efa1b7d8477da95f82f5cbdb09cd7136945bac9d5999e9868083c4e838b528749c3359dc504b2f7ee0025db3b89f965e1cc143ad4666e838658c784c39090f93e72dfe61f253fd6d592d9ac9cdf75676d52af7dd8f688f2a0a74e8a596e08e1010aa575e7bc7506c3a14dabc70432f3512a129a8c60163b41a7a0dd411aa02b79e9082496d3102fbf5abd86204f65b76f8575b821f81ae2d3f43f94d30448fa0d32d5f3b4b90d0715a1a8e0e775b24dd1dee9e3392f63c3591bf36fb18a8ba92f70d650e4dcd9f537c77dc767092ed3dce92e6739c7b69959f626d0a2dcdf7606d46c7af6f53df4a67c5b3025a5979494f3f4cdad3663bb8de4fc9412b9e39e8763e9bedca5fcfb429241d1a85425f6928f41c1813ca36aee9ebe44d531f959e7925cf603c14f46c5752aecdb916d11f8c95bc5fafbc578bd49abf12b1b816b17199a94558f434ab44cdd967eb7f6f7f93b4adabefb7c8c8f7f57b4f828e7dd4dca2b5687987a463688aa9fd7bc7dfd7982f57565db9e68f72e77e322877769821f7665eeaea70b91f2c59592335b2247508468b962c49edd5b7dacc51f9b5accddee62dca79becc52963e18efe1fdc1f894af386ef49a83c375c9fbd3bb7676b86ee69422f4e4f9f92a5f45b382df7b15f49fa7a991ae2f8505ff6ed11514e377e75fd68faead4963fef6740575b59934e6d72e80f8ce7fefc13b88aeef7530fdf09c75a6f8a8eff92925fcf9327c9cb7f5811ce7c7c05608739cef61bb85b44b6c4d172ea9fbf3676bf4f3a78d8bcfd1db3c5bf5ed8a6aba48fd959f799037a4cd33effa5a1e80c0528e41b4e7bd3c67e8387f056f2ab4e73f784ffd79cfe7f08f8b5d797adbd556d1dbae360b680a69ceea465b8e008d80a43d791601e5cf9dd95427bbb20b2d5a4ea62bb7dcfa1d8cea8131305ab026a3e3b42b79c3ca1b545b9645a2a7a5d9af39bf797dee3918abb0ace42934cdf22cdcd41b6884d42b3a421fca5268ba26a12ef2a1f29c5d79a9433ea386c7243abe268ad91a29c39d2fed6aac1ffaad695a08cf191db53c43efef85b065d9953542c7b9a2277f1b0263dc7fda141d375753b30642c0352c2e80f43c1cdeafe78ce4e6cce7e7cb95cf87f2be9f099aa009fad97e2e0eb7feca4bd03f34c553749c1fca73667f25b7d8d007a0e39c2e516479f52a52f9aaf253e5579cfe7832104db7d49730d6082d4d95dc523fdb151de78b785fcdcdae5d7543a85fb85b8be9f917e76040cc650373d54e9eae8a86abcde4d7795d04c189e72dee76454f46a2dc38a128e945cb22a127d90510a0e839b34baede96656b66174098a2b7b59981deb6c99defb6cea6d013ad839e77c66656a5cd5a3cb66849028ae641c7f91ebb77da70ae705b9a70c2615e0e82127869ce99d8b469b51ea673c3055da22ae690c9cd1ac4400d6a48431a603034a0e10c67e842176400ca810e6c6ca0d0c2021560ac17681002551231c4f4904516aa111568e04455871f28214216c880859625446cb0e1c00c4aac40060c4b98834d199a6086910c9a20e1e2092b50b2037f527f52936854abfee8e83014089ebc9132bdb8a158a8a9cf55bf5948f9a7291daeb6c9c2cba6c98afbca50868fb39d4d0b6f8e36463e14d1f44d07204d3e3899770a290a7a8ff494ee3688c1dda39e77b05e6bad558b81c872370ac74e6ddb58203261b3b58b226da8ffa91566aad5bb5a76514409760c39798f4a28922b84e338eef319695210852704db408e33a4ccd071061d7401f29e211bad30472a481c232633f2e884896374334e61ec42de60e1a28363d464d2009f2344de231482c87b5c22236fd198849c5966586c308a8d984c1c5fe466d464e2f8184ce868d444fb7ba28f880bbe88e545600c8bbbfb74f7e96ead75798b1ff4b47c8f658a293b7309915ef4b4bdef5c7effd85c1d26bd48ae24d77baa3b4cb1083697b6f9c7e6d2a32739a9f2049e587efe274f9d9fbfb9e48d4ecf0f85ac237ab80fce231d20800063800063427f84e56f0c8a44ce49dddd6bad9aa669331321a5482c1869382c928a44843443620149453929a5b7cd6a6323eb5b4cb8d6bee8385f8bb9462d1ded8b9eacffe7604afb28e67942cc1782c3814b488a841b3e075c42c2882dcf5bd2aa11957c2d3a7a90397ff84c54222e119780600d1d97d0d1452ee8e8a24843479f1da883ea1c746291255f4419d98d34241727bbf637c9f57948eee6b0e8c441ad70926b8998aeeb1ce64f5e238de779de9e73ce69e79c76cece9b513cd814ee1ec5f6483304228cad3dd6b84d139b7b7167576359c58a0042b3ace848cd70ed9f58482e677f4432d2d81f59236b4442c791869ee6f7f6475407e34fa3d3d3e528edc7206f741976654ea2f9bc3c5c8dea96ee9b687f26b4e4bf3faaed7f5328cab9ef7ee84b77d8c601e8e824d71cbff0ac2ed8ccbd9c38ec6fd1fd3d3a618cc22885d0eff10ada7f8f5c189ddcfc1eb1303241d248821c8d90449684205f7e30477f30ef91dee397c7263c417b4682f61f91d0933fa1a3cfc6251b7e7914aee6fa8b1b6b462ec62adcdfa3179ddfe316b4ff9e31a3a17ad0fe72cf98a2472f681fb5a0fd9505ed2313ed2f250e19b049638f4f9811932f5166b82194f7d84514e6d804498346bef86f7854c2a4c1e53d3e41d2f01f9130762fab85f69f1e1eee17932ffe377aba402a90ca5f1c77afbffcc98a7653caa41283dedfccf5070d72581c180e2bfc9175a3c3df234b1465e8d8b1df0463ac6bfb293afabbfb8b241a2ff98b44e2111cdf6ff107dab78844bba824cc5b6c691797745ce442fb8fa2641747c2a1f966a08a9e4022da7fbafc24bbc0415244adda237d241218f37f24c65bbc4931fec3100000000018e37df7a3aac6118cf1ba6e8e34e00c04bfff66df1490065c02ca8045be19c8029568ffbe4572b5e889e4a2a7f96f4a39cc4bddcddd872055f72048d58d9de7711cf7dd73b87b09769e1dc7118cc9330cc3300c43246108809748eedb2b82aad29e7ddc77796f888f88fb3f44fe21c0986cffad8bcb5f19cee22ccfa269268d7e5d8c206c10f6ebfefb4ea753bbd7baaef3feebbed0833f447b60e88bf17d8cef3381315f27c61763769ef77d20077e9cd7c93bdcf91dc7e3709c8fc3b19f7dce7e67a9fd9bff4741b0c498b2c9f43fe75dfeb30d43132dbd0003134d002dbd008313cda97c23183d3d0d1dfdb590a3bf8cd7a4e12fe3c9a4e12f0386655a466cd2d0424ad13433e8a0fd9fc4c82316b45b618efe325e13c748852a687f8d5dc89729c89726c8177f108f34b7e37ca313268df10892c67d4f823a3c2937ffe7c5127a6f0d57fbed3fafcf930f0c0a3db9c87831e52851c66f904a54618e23b51f0233adf63cb6d772902dec07d17ee6cdf1107f7b310f81997977cf79de17d7fbe7bef3df0fd11d1e6bbe0ef739dc7371e1b819600ce7e232a6bce4b1ca864b7a39c905833b35d52015c9351a8154a3eb257f0d8320087258a0ecceb799f5f29797e6873387317e84a360d9234b24a2fd435b4c65bcb7297a3ea87d218ef112e47039011266457b148c6951427ced99105fcb4c3cf1630dc34d42666b51a2c78bcf448f17b3902d78682fbe90ed7b6426c47f220bd15e0cc3fda4fc66a92778c99f454bf0e9e82db8dc733ed9b5749d06733da1a83a23bd788d3436da5f7be078318620e83d3ad1ded9c939f917da5f6e8e12ed0d9b1b6672003bef4d22ee88c47a5dd775efe1fda3cb239251091d471645e2d5e1cef7e870c3e7c494a3260c117a92505a3366f2869437a4d420d537a3a7181fc2e1d5514c6d391fe3b518cf3199c0981f2630a6b3de5bcf04ea9823dde1743ef0bdf03d30260439ef819cffc0981f3ed32acdd9a7ad6b3f875b9f1171c307c19898cec7bdb5d65aceda202b6ddf86ff853e04ff5296953f0b9672b499650552396ac65d4c75884724a1560d5844d5e08dbe78ea2d057ae472f41e047754cdbd473924271dd20bcc24570f2e0789bd4278b1d4e04813c329c2dd2cabd17a60e7939ad3f21f5be312d6684393a4c7833889f81e076a1623f4047e20f875c2af83e4daf7428a840b8e34fa088f827b1742e54b187e78ca9790fb0e47ca9730b3ace8e82c4666c85a5aec21750f3c41aa0ecbcab7103da2f2c5fb0e18c3f5004350090e8c983f6a84bb5956774adab1b40a3d7aef4130e6df0b633ccbeaf31ea247ef1f0373c098d1b3ac4635da7f091ddded77afc5ecc7e8f8cda68c64f464ed7fbf398ef3c17df7cde8c865e7b87bb9bc47323a8e62a3284e8c62a32823d9105e97f76b9bc1940df6ad65b81acc5120d5b764c95f24a3bfe51cb749349bec8833a2aaf3491004df73036739163d852fb5981267447afac422e28a834599108b4444953823161157626a64b1fc07c6b08037248e2d1f693c954f8261de54cc74f89e1b3c8fb35ccd68434f9cf791454f54533db2e8495e7afac625f4742f1e918c4ae8e83fb6e8b8848e3574f49fb2bb41aa0efc0bc684f94755e9ce7f339a00ede770412a2ff92734a29d0048d8e88b2f02e3f3701434a5815cdd79cde5a8918b9660f43482d1f10b791a7d2147ead2fe5b8b159938bec82da2fd39ab89e3579386bf3fc7c8c4e115993848aed5c4c161bd1131c531728b684efe9511ed1c8ee779de7374f438d9b3d67e88a710e9f05fc018eb79debf5c0de21108ae89e35913877d926be27824e30f3848e829644d1c177c0fc9c4e1bdbf8c2713c7cd32a04c1ab089c3cb32629cfc4840284fbc2ce54becc350188f8c401893e091868e6313c61aedcf8d4bc696f69701657482e642fb9804ed9b7cf1f7e470b798fa78214f32a27c6e64cc414c915c3d98e20e240e1952268ded82c5c42163a603310b7983e5f747ac81f8028943c69449c3e90994a1278e9812539e9611859e48293ace419e482c90a3cb903271905493468c7791a2fd65cca6905294c402971fe54dfdf314926a9288c450b98ca04c1c2422326213070984a29dbae84da2210d41d2f0ef30490b39fa3f261941bef8c79882cdc7b69668ff1126112175a167484dd0fe4cb43f4822a29df404edefcde4196e902752113a23266f784fca8137c9f3c4fd1ea3a0fdc727481c242393867fe9b7cbd8047923e40479830509130789a5643c82bcd179ff7108120709c9266f7c7f0a7f8384f8207e7b9a46dec8ef305ec652d7d5ed3e8aa937892607cd78eaed3d998df3a422a3f727e540085ac6938cb8bc3f8915e3fd4948fefd65c9488c1782a53d081292f978836a00ca0204041011445d989a8506f28615b9e48b3f87412c18f403f9e21fc2a023f2c53fc4201ec8d1bf83413a902ffe178356f2c5ffc3a019f9e2cfc12022a022dadf5f1c87315ddf0c08ed4cb8de935c628a9e7014b5a34eb89be422b9e8c9ebde9fe42405e33740e80e88e9a22378472420153d42e3eb343d72f7c8a2d1fe236bcbda9307b8d20b2414d1d28b23d0e821b4f4e208357a3c224723b868bc604d61d584992368570d413b47db3c434cd1a0d1fd14ff42f6edfe04da6b78f4e270378725a638358efac0fb7358f2864dc1ef10054ff2607ebffe3dfeaef1b1719413ef2fa64495a338f0fee28ca33af0ee81f7176d44984a4a85a5a2e24979588e32c1fb7b6c3c3047a9e0fd3f294751f1fe1f96a38208c953e43dee1a4ffcb621c56f796381dfd2b5e52b8adf32b6a56ccb59097e4fd59e337baef6a4d9b3f580dfb34604bfe74d11bfa76bcf978fdf33b6a76ccfd9a6aa4d67365d6d4ab3696bd39a4d6f36756dfada34b6a96cd3d976d5f699edabed345b4c05c14e057615600a045313600a05a624c01336023c7fe0c9c233041804d803b803f87a693e079c9819c0f32b80e753003781e74f004f09e079c4fc06e01dd808ac03cff781a5cf29022cbdf48008e0257009b0f41206661458fa9c5260e9b3071e492e9fe2519037a751f02920b906408f5c0dc5fcc337036b1c55c4fb77588e12c15be0fd6fca5140de1f4c390a04ef0fb21c1582f7076d1cb5df1f8439cac7fb8332473de0fd3b2947fd78ff0e8da378bc7fc7c6512378ff0ecc512478ff30e5a812bc7fc8721414ef1fda382a8af70f5d8e7ae2fd4398a34c10f30af802bc74d4023e012f1d65c4837fc437e0c3978edaf10878e92808fc7de92807fc0192f8ce4b4721f1385e3a2a02cff2d2514bfc8d978e9ac0bbbc7414131278225e3aaa02ff2f1d458126dec64b4761e0657c7ee928275e880c3ceaa5a336f0a5978eeaf1a7978ef2c09b5e3aaa033fe30df0f4c815535ef24741dee109f214d913b1142fa63cd4dcef500abcc17833df8015087872f89cd7de83414780debe8a4a6e015fb3b805546901f3e73d9b0aedf39de72568c4d42bf641b9a3c5b5d9937dac3c987ddcf77cb0b6926baee011fe9e7770c7cd124606e23af4f63d79b3e42acaf629f800319445bcabf8bce73d0ffee0e9759fa7d3c2ffbc27573ae62da4d33e9e0f352b5a8958f444352d6fcbc2a295c8081de96b4e80dfe142761c8ce9bc98f79015dcd102f4397ce541f8f322be2b180402e5bdbd4ad6e18ece27fc8e47e5617494a86c130cd1a00fbff39f4f067de7f7b70afd41f03d2b335ae53f1ff16174b4105f057794dcaad2625651f9fdad5470c7fb95cf07e4f9cdf3a03fe879f0f3f97cdee3f91cf4fe07dce0877fd01ecf87b80383ebf95d552a5bfcef55e61f3a30b8fb0432bdb717c1bfbfddbc8774406c82983e814c6fdfe14dc54c6f2f5ad19335c299738ab903a4fdb718ffaad29ab55a4e52abe7116ba58a39845620fac006cf931f11b7be7cc997fa1e945bf306c2714adf3977bb99aea0bebd864d3293467d538a8eb49aae98346afde828a98602ed269549a54d35a69449655275e179f287bf76e050e8483da6a94f30890e924b7f824a50fa9ebf1c35619ca0b627b4441f4a2c8a6cfb6cab299f5255fae5285a5574a435a82aaf0ddf8cc321643d87f2bd57dfd33c223eb6af9aa51d962012dbdbd7bed6bc87486d5ffeaa567fe5cb5aad2b2b5f7ffb4bd70770c45b69cdb57aff813ab8ff5ed64a4ff56dad608c972b1d6dee645c67f33624c8e755fbdf1e82c866f176fdad0cd19ec5bb6a5b7fdbf21e4266fbea63fb70e5bfcf41bfbea42710b57625dc8648e9fa368740ea06526ddd9cb5d9c7f661ad478435b784afbdf75fd73d60c7cfd257ffcb5ead9af7813a425fb38ffa2bef85bcaeab36e4596f8f373aecfbf842cfb15ee77939d4dab66ddb56365c9a326978cf69e2e3ff60f03db8f339dc72a56eb35df6e8a7bdca738ea2af92372f6bfeb2af79bf79787bedc34ec6d26e5fdb40ea1e6f74983b5a5c4e78a3b5dfbeec71faf3ef80b8d2f1cb9a67bfd39ef3a559c90f1cf6171d37ab375b35f9b263a3a50cd0415878d2adac1b5739cee9e434ae6a9623b7ce7e72fb24c7e93cc9e9bc8ffb24e62cd1f2bb56e719f16cb4fc8f0b96960f823aa69650a6cc5ce532312830aa84898dab096d512594460a25425574458bcca4c8b870e2823db1e1a266ca4c23733569904cd5949929d984c2a84b59132d6f3ef2e948dd8696788b744c2d3bae23e73431f18c90da0b5b76cc97af63fe7cf975824b4cba04755fc26bad4b544dd3b425346badb54bd86ddbb66d5b6283a9ef85bef2150c4669288d4c5653335333c5d1dc89c15d8283a9ef71347da73949cd9e7578963f444b90b6ecd04334e58c1c3972e4c89123478e1c3972e4c89123473c3e1c3952df538324d5292908850705d91f3410ffa91d3c42a43d4b7ac3b089d71b86b7ebbccee3cc393ff4dfd7797faf83c1ff384e7fdfe44cce825e97f5cc1c56942b3b9ced58ce825ed7795dc779f60339576ad6eb3acee3b88ffbace51c44c4eb3acf5a0e12d08aa304a41a97789de582a60322528403a9be59874363bbef588b39341c5677934c891a592310a494278de472942863af8d177e2c4b74b50d37071636ce71f73aab099b8474a95439dc4a0e8b7e31b81ba4b22025f434bddff7e3d1b496689f202e40361ac484cb1f1dca4db43f48c7226e8773671c39e79ca32854cb9c8aa3eaa6f44e8a333328a37d24c5d416d062d651bf84969c0bedb26fc1404c7d2fe8bc29153e104e470184d3f7bb197a9038bcffbed063ee3b6cf5e57e3ec8bde7614d6359b957cde1303b4cc663520053ebb0eb103b4cbeccbf780a4e8359d2b182f8899eef7919f4f4318438c9f69ced39ecb0977c99ffc9d89f2c787b19f41e59a6194d7aa2fd7bc1dd9ce92d93b3a40383aa6adfa7b26f7fcec99993b37df47ab1394950e6b4d33e21c1da602de945475b437291c419ed826bdf654499ef8a6bfffb7ef40446c7cf4bbef873fe952e27e4ee7b0e65307bf76bc1f57e8b298fe300e1680eb74da1e3e4527484394a668b7f209cce2cefff79424f514031ffa0633c104ecb78ffcfebc61457775e88ff8c41e2e8bc6797972e41fc6396b7d86a192c6f3f064b8c182cdf5bd008a959b247a1e3a749c9617d8f3d8a1c339e82d39f3d26c7ef452ce3322980ef5950450a467ccf1f7b4c069e82d331b24391e347750cec50e4cbf79d2ff4f79e0649e37b4ffbacf6597b96ec312f7d2f7a76eb384cbe48ea1fd83da7c78c1e786481e073381c6debd1c323b9484e3820c945477f9293578bd57e7b269ec83db2c3bcf4fd96bfd732f8db6332f7fb0f0c43ce26858ef31302ef4f19b47f1033b0cb1d95f0febed92439a116d86eae1458e38873a4195920de4334387dce0fb2f1105f7b2d07d15ef41f02e361c8e170600cc7e138525a26c4eff13db2104d0ae9f1e2afb6558fdcc2637bf1b717f3c6f252cb96b5df8634a1e5edc5f9ba4f7a8c0e38e79c1ff86115afd3eee1ee9135b398d29e33678dd0e6e1bee08e3420d593bb412a571eeea41f1210f4017ee7bd17c1981f158cf1cc414247d9790ffc192ea3d06f2ffe1e5933a6985226197aba390cc36d7b4dd3389c7b5542ed61148cf12e788437a7437954b2c9401ce3ff072746e61071ad0db9900b6db4dd36bceb7537e7eb79934adae1720b47c4b54de8e8fe445c1bd65a8b55c0afb35dd7a97893fbacb5b6b3d676d67e3f7c16c3759df75d4a6696fc396e9c5e55612127f85df61adccef3d904636cf762aa03bf1755a2cc8c0acc624a5afcfa414468c9cb20150beed41a166568c9cb49342d7b72ceef3298922f9476be6b83471657733787056a4e185b1529622466a3a2a2525373bf0d86ea88e8d9753f3617a7a22337a367900de6a5f91b11b7d34237b26292cc4993f288dcf07d9c0b4b1d82327ceff3c5e69c5ee775ddc8b22f69c62535d4c3a3155c1ff33510094dcf69525d31698012943a76b7896664bfb3f675b098ae30a54c32269567bac29432c9985430c018cbc2624a99ae1081313634c5e54da9d09b64260ea94326f0594c35a694e98a9a02c2315d614a99aea829f05df0e652f4b382869a9ad053f74a4c2dce64e2c26463ba713961f96d7aa2dd0433416179a95d7e9ba274bf4d31a54c57ac9854dac353bab7293d432cb3a4a38747df619697a0cb87ffa5ae0ffb9ade232ba4638b9ec021521a44127ef8fe63c90f1c284bb4bfd786bb4d3317dbe760ef3dbcc9b66d36f3e8d761fb36833b5c77deeb9ee3bc34fb8648e9ee3dcff33aefcb1bdb2f795f9a32847d1730c6e6700fdbff7087da18cb81cfc1e06f327a0a738c2fcd385f9a327148cd1922454f9c077fe49b66f30652b5fdd181545c4c974b333a76dde7a02f90eaf3cae11d061ffc18786f523e3031f5876b9a31155969df2696098989a6b34dad1a2e3cce6f1313d38da9490be7a50efd3639d1fe729381200b18035abcc96808ec3208e848477fcfc340e8e82590ed21daf3c3ed1efcb6e7a1fd96836cf1491f02e3756f83d0d1514047f7fa70378735d3293a65fa7037c9355b1c1b0e6b769d4dc6f197a2274c46b5f626c94572424ff75f97e422c5b4775b4bcfb71b8d9ebfb11cd5c2a34710f17be48d35b2383498a384b6b4bf0b87c56171387ff11e02524db95b4c8944ee773fb23ccec77d9ccfe1323d5e8a1e59c8163cb67fe28568dfe36d16b2fd136f5ffb1e5f01ed7be40a6cff44965e1a599deffe875933663e43664a8d348efad3e584a66a0d57fc96fcc4ac86690f0e7788962015c9652d0eab4aff1653f7091803d3fe2aaf24aecb4b53e808a6c0d437dbdccce3c355018b00424fd74d93cde5a89616263621a296379788376ca3bd868edf22b948aeaeebbaee33a33d07fd1a47499877e50fcc5f9fcfe3c3ddfeb25594dc9cef597c5f472e4745fbcd5f2ed7bdd14c346c0a6016df6f1007456ca08bdc009481f6df600d62fc06b1d0ddaf88b040fbcbada2f7370365c2e7e40dbe608356fc4f5083695f68b128cc13f79c229386ff0805cde118019f33b2bed66bb0196335929173fe2ca654f2c5bfc322112ace8835902f3790220b16b3107b303f37f2c59feb38ce0bc16ecee0a9a99b33d8814bdda0c1069cd78929161ac8316887a2f7b7c5176c110b71071f2ff4c78b1d885888a9df9f4c915cfb1ff088ad0d14868c7c33d6e4249c607246b149c3bfc531122bb2a4868e631397f69f3794d2f115333e7127634dccc8c5b8446a55d39c4e8deb789fc7967c113261469ad023e20af1128c09e2657c0e7aeffd7bef28363ff62d1219e698c7a0fd496e08e50d43e74edea2ceef4f8a42fa4292da206fc4e48d3248121ae48dd173de9fe485490a83bcf1ef4f12833cd9bf798fe090b747e7df2435687f9b0419e2910b3a3219b52047ff20f028c44b4ee91d19797442474e922d7f0e3ac5d5dcc7c05388a610e9ee470fc37482bb43a3e5edc0e4edc0e4edc03ab0fb1dd8fd4d8383518189a20a4c5481892a30510526aac0c4df353618cfeafb56dfea5b7dab6ff5bd85f1b81cc571f78a442aaff21acc47e5f1a83c2a8fcaa3f2a83c6fbf8a2bccc7e663f3b1f9d87c6c3e369f7798cf8ce3ee1589fe67dc57318501b5628eea625ea25fa3c638fe8b44f70a20168b050014d32fbf69e80de2b8cece495e8eba00019e16e0e987358ec2c0d30f5f8eca80069efe5d39ca89a77f6b1cd5e3e9df97a39e78fa77e6a80d3c7d71e5280e3c7db1c6511d78fae2cb511e78fae2cc511f78fa2a2b4781e0e9abd4382a046f80dfa2d3ef11f5bb860d22de245d387ecbd70c04fc96b20428e08798337355f2d48cf3a532657306003a435742b46a82a0ae08bc4892cd6484abecaded3521c00e02ec1fc0d403987600530e60ba013c634fe0d9034f1a2fc977024f9597e46b0083c04bf233808df0927c0ce0d14bf22f80fdc64bf22d80e55740fe64420232027809990412f2010e902323b4d7518464c00260248b02b0f452023002b0f4d201b0f4128e1b587a89082cbd640385a5974e587ac90005c0d24b04c0d24b1573311f40de9c00f2be35f216ad3c8dbc7fe50390f7a857fe256f1a7a7731d30e5743e07d59fbdaec0b136287ab2dc2347d12de2a2915151b4d1f7f0c0c847c173cc22d180666c1221c92e18a9b7976b8da624ad31777b8e2e81daec2955803ee70b5290b6f4ad381b0dbb2635bc9178a049537666e3962b6e848432eb6f7fc0b8dbc27b5aee3395cc917faf641d8ddeeb261b824648536731e31ffa0b77fcb11f375cb119a8f99b567e5251817bb32919d7d4ad3d5cae525dbaab1b971795c2f9597649c36bb299555a9542a1b2fd57036f746e4fad708b389d5688d349aceb4d567a6cd68aacfcc4bb4e5a51bce755f22d8c7dc15aebc44fd6bd88c94158e357e14fd15b1aa5583b7e27c667a5cdb8baa2c6569185b357c669ad6cfacce16d5402d9fd18d65c385ab70c54990a55154eba10698f3a0ef39093a8e26da4412d46ad6da2692e0e14a82471393da6882879cf2c60847c99f2f92281b36f48c695ddccdd5251ea363143a52191d47d08abb3d1673193dc9daa2635511a9a127fbd4d65655d570dc951eab35746cd525b5555bf4546b4dadaddaa2a75a97d0d3ae345ca0aac760559b15ca94293636536aab3585c59af24d89c566b3a92518f34db99be3389f56f024697f29ed9cdfdc8b9ea0d093b7bd27da2b9753985355991066735bd0dff77e21f48586c2f5f6a23d00401505c60b6cf05b68162d68d40bd8a0310f34149bde1e0483287c58a8f440b7d8975ec4a0d562ffa3b98e89f6ec37b1955c8793912ffe5c0be48b3fc5a09e587a11832d689b92725f8ee2bc37d3eedb8b69f7a734b728512bad3c6ab5bf719ad428ddfe037f88b678acd1e0569a7dc90f73d70dc60d8bd5043682e5a8da721ef434ad76aad596a6bdd6dceca0f2268923e40d07d09343a1e37cff1d1287a741d298be439ea61c294dc20879636a37c2e973b0e42ae6521e11cdc9685b6d1e2e1bae3f575f13c91b9c15f245a2b8154c1dd4c042fbef120703edbff1be5c8afee6525cbd5fcaaba043a6d6f982ca7396e3381f5ee5386b1d0ad71b106adfe903a1ba52edbdbbe771f901f5bdcf414d29eeb5c9e53d3ff0884e6ff93d5047e7b99726993ae71633b90e8cd97c568704996fe75b5311eca3fb2af4c4dbf5e66d75fb6a22c2591ff53bcf74854867f8336f4a350eb3addf717f449739eeb76ddb7ebec9ceb799730ed4a1e27da7c26d9603ead8de87dd388edb54b49a5a6bad35cfaffe22d6fee2ef430c4aedf9e73edfbe7bf4eb60a92738b3294547f76461cc936d9f6d5be6681fdbdbed277884fd9a2d365d3169ccdcd2bd7f18d3743e108eb6f56bdebfcd7c862b1de7bbcddb04434c579852a62b260e3046ebba29a5e85d6534fd5d7de625eab556277a87fd5a70b9946f58b35673cf94325d21e57b609b7f521e88454ca708d725a8e3fbee8d49a552a99a9a989b9b7ba5be370646e9e6034f92bccae13ea253f7d20d52baa59672db577aeabed6180ed58ee5dc9ffafb9bfef33bfcd191e33657030e9e24d597375a528f7aeed58fe24d7bdb4731a73dce27dfe370389d24f3a1987fd05a9eb1e0ef6da67b79c9abaa88227474cfbf0dd431b58a148e8a4cbe7ceff2521c6ee7256fd0f7efc81ce5e36b08f91d06f9cde998ceebf58c97fc3b2f79635301aa01ef3f6928cb511a40c1fb73a3a344f0fe468000058e52e2fda7aa89f79f3733465552bc3fbd71d414ef4f5f27f805d8805111411f2dcad1022302af800458e0310248070000077e88273ef02f1dd85fe3a5a342f0345e3a0a044fc4d323d73f9c7194874648de6190ac024cc57b68eef5d0dcdfa13fc54952f01e1554504105155450615f0558c250ccd1546009e3b17194bd71540a5c9e97bf0a52803914603f01f629b04be14e5313366d266ba69cc8f1587a09f521c0d24ba70701fe00965e2a801158072e02c76006602fb987348eb2ef300bc03058fbe7c00ac07bb2a6cd84d114b5a1304f899cc65b5ee3aa99158d5119a537ae174dab4635139381f79ced79e37ad1b46a54332c78cb9894c91bd74bc4d763a3fdc3cecb1fec5c2a523c445466dbb3d2fed63d368620e082c1932429256792e8e87973f2654a701ef1cddddddddddddddddddddddddddddde6c6f582c162355a23cdb344ab3b43575ebae15cf725827d6c94cd461b5f43e49c367adacc9417566366b562b168685aad9a1a1bb7f11b182c169369293da5a594d2c6e6e6c6a5652c9552a966b494524a989c49299bc564303d6f606c380a16bb366636dc4b4059345cebd688e6cb5c52a6abd3384ac6cd6e4aa4fa9971a54d1a0d66c266ab86b3b9372217ec3561300d43578e4a71aa3b235a3d6b9c349b5397a3643562a353d7e544f745e3d718a7739d2d27b1d97d6a02f08327497b4aedaddb973728205ffcfd8990a80acc92bfeb0d5e48a906edf4c422bf36d1f28b5b003a7e12d1acb5d26fc255663820a36d489171d79e292d6f6050c4456f09db603038827fa536e869d7d805d0350a4069c581f6e17886128341b9fe430455d5d2d2f24fc1229ac8cd655ab402762fca1e9106bf0384bbfd73d0edc651df6b322f691fcf1d253bd9f376d9f5e47bf583e1adc1093d69afbdc7a5f987324785ee87211ccabca4793c0fc27b88a386c0d0efbde7f1bd97836cd17d10efbf2ef308fdf75f0ef20d8109374fd33c9e07c578409af71ffd3c948552c259d8e9743a20a803adcc2464421fe34359c8163cbe0fbd102fb774ef3d100f448c2ce4cb2d5d6e510288f79e0920f233110a7de73da0f7c5057f7bfbeace7718dc3a1b2849c8a3a1ec1ff7d7a745b8c5730fca2603ad875b4db9455ae3565154d0b3c936d9262535e39b6c93755893753c1e8f56dd652ec5673e859ee67b5fdc6e0504573a1d7f4abb0e7f2875ea9a264bdd19af83393a6aa1147af2d764b476555a7ba745807987ef511a3ecdbbaae8cb0e92cbd1a1df0e93da6f9fc9178ceba5b58f69ed3d30566705ef217ac5d324c6e3027758edb9912fda7b506ed7e5af05b7fb1dcabacec7e3f97c749cd7e382c1227aed3d4d462eafbde746dea0afb5bcca7bbc90385aa47b2fbecb6060d1536cb50b9e82d3f447a2f738d148f4147c51f62874d43ef03d11f81a4871d5221618e07ba0f79ec3c01e73198114533d02bf0504dfd33e9ae47b16d1973d0682147c7dd8c33217fc1dca3cd8df33e9a781312d4a84fe7b1ea12cbd947938cc4be077efe974b2f7c5ed3cf894d2f73ce85786e88e7a3e8753ceabe0edc982d65ebc78bbec07e72918b349b9affe78dbe7c5ee6fcf4ab920a59d0f65f4d4bde74ef47699e7466b9d1c45d5db93edafcbdc8a5b7146389a6e734abe0e7ff0d5d39369aaeda16c7374d4fe4347cd73b33d2ead85323a6a9e4ca6b5f7649e942fa5fd37434f2d94fb7832ad7d57b753edcfc175a39aac0a3ac4da21b4188177b8fe969ea8e6d95a6bf305ef702b8b9e3c4fdff3e0d07b7e9460b5f12a8da33e345ea29cf8b1b9a21f55c397c99d5afbefd2718b569e99973ea90f8da368f862de377c50fe7c6c3c78d7161ca4becbe32d78d41fe520a3afef8283b4bccba75ca647c41519a1a38835612812d10aa4bdcd27f591f98c7058691c455f70edfb53edf7b79a302e9f844b9d39cac57236a12c9c396af494459437a73f2f1d357ee75bddcc897905e2561ecd256bd9f330f0fea8b47fab4feaf3ad385d4428572474a494d31ed4a8c8e6d1d428899e44230d5badaa3c79c3c8dbf3e1c78755f178b4bcb718f0ed1153fb7ff68ffa9a36394e0ee072be8245ecd07009aa4a73a295c848e741dcd13ea4bde8eff1fcd55ef4bc4d7b4d7ccd93378cb79a67e559de93b7e86d16adc4d7b2967d78debee7c31d2aafe5ad7974cc3fe8cf7b3efc64ed3d39dc833dbf05a9d9a8b46c53d7992065a84640000000004314000030140c070583c18048286782940f14000d8bb85672581e88419052c818430c000110000000000000001800c95febe77904d55aedaf0581959be8970ab04f2d3bde81684dd230d2d6b6e98fe73c939ca94c4d1a57ffcb80da3707e008783b8a2aa4fd6e56813d3a96c82c64553397b0ca67712cb5f162958085bed73d90294af24ef1046f62304a0bb3577372ac0e8e33958ccb7094bc4f2e469f854fe522a40188a4deef153921c6e2b302bec827d21ff103e13da249f2aa01df4e14f0bd78da084787c99d7f2b95769f3ccb9f8af5d7f3622a3973b9fc0ad2756f3f203f7384d14c6cb49ead63555bd81c862e319fd6477952c5b73fab47da3e23d464d486ccff42a64c34e3da6bcdf037144d87b7b37862e4310adb66af60425e0dda753dce24205a04ad655d22203898036e35767b131ce233d9f632897831c97ce9b48249aba09d65a3e36c023e780519c50037ba5ee6d89a27379abf14e6e63c610c112f1e1c7175e5c9280c7075e124ec24d3ba25ffa8ccb77806f2588115b1d928aca3b0a5103816d876c4db38aab7794daea5b11fb36d2e4965bccdf064cd92ad586f9b92e45e6f3394bc9264c342da6624bb216d4625bf8c6ce6dc3629c99cdb8c4c1ee7b6a4abb24900dc4f9e90e6b96dcc1089dc3618c1566e1b5a709bf6c96db29991dc6695f8b5b755dc6152f8399fe9c4391cd7b23b3a465da58a0ea3d5b4c79fb70d769c9cb9b48c211935a79b6f232176336eb64311ecd97d9b177b1bac925ff1980b6dbf2d33e52655de5d11e6e6fedbac65cc9d7c5e2b129cd468fc1743c1e5260b6e247af309d4e3cea2638d873226dc5cd082392815fc5dd13df5e9f3bd95fe9fadfd1bd915ca99d7d60715fb90e396d09afd90991fa6ce72d6ae55f53d46fa464806d153582f42af2d4834e81d636483defc1037e8a55dbc144f88651575f76cee96e62ef09167f26465289e298aa57324d41b9ccdb00ea486e54895920aa6e54ef782d10807bb96ef674387e657614b9c2354387d8a3b5b26328bbfcb997acc1872de0e256723d5f9b77e0a4e1e3040fdb2810733f6dd7f9e402ca560517376e4bea564dca6fac62242c7533556715948f2619466edf17b86bb044531351378a50468d257d0282f0e9c7cc4732ed22549a04541942f1b4696f599cb212f465555742568d7e7c098d1d9e297151280701ebefc3a0129b24a9d54c143fae34eb98ef5114ae8543959d80c774bee7bf9bc7f70f287b2a9186d588d85053932a30b2e013aff5e983442854c2eac1c7633089b7937a2d309a5deb6e3234b5f0c5541f7b70f16ceee1918e326b7945c9e3f03be9cebd5f67faa2f24ee774f225d8ced770204a2d09bafde6ecfeecbe24292b66175e6a6d4e1b87d36b79232315fc8bcd83a12c87f3658713e8af9c36fb648105edd9b659cdce2f334514bd232234cf164481eee735a338737ca2082406792456b8b096ea4795095cfbb1c1f71c088423ea056459feaf0585e7bc58f57ec92bd3f04c07f72b8c2a85bd0c8468c49e02152c818b1ec9a14181d8ecd1bb4d86524a1cddacf3ad2582ecfd5e2b8b16b3e362d9ef317c6325279b8c5a9030f30bf93a31423a2759f2adb55953ff86216b9e6ef2857aeb21e2a47cac32ce1006746b37a3f578253ba0d95350490bce4b2f3499f217964d20846e076d90c9ee24b5b2dbea1c9cb4897c6405c2a2406531c5c50136712887fbb16dc50647b0abe313962f4f4dd73d3323e383d99d67b9a273f9aa4da5b93e4e455ea7eccaf83c934a9e7da6a9231fc97cf9d0b53ce7cf5b1ceaea38dbb72acdd3c87d7c8fa8aa48b6a19a84b00a28f800847cba43fed38de19d11fd633c2aeba7235630bf3afa0a35834a3d6b49bab35d6b79eb04d7c445660ea67370b555b4df870f020b146a56841b9f8629c99f3b04d267224f8b53756b3d0b0a0e60bde35673c20507c5c48f2ff16e7503492aeb57bf01b6c6b812bc67ea1ecbbf0b031e875ed0a32913bc9854db194bdf5d12b7dd52334b2f6783fd6f2f82cac6b417d3098545131f1c3c84e889ac4e0292a056ee284f2d67898a82d1fbbd002436109e98b5ce7bdef329c68e62e908ef786eb1438360b19057bcc21141432a20026640cb36c56de4f61876b7f6d35a35de253916ac59cbc1fa4f02a7a1af041808b790a0856dc80023e85dc3498d705b42f440dc0a2eebb0c9dcd82b899f146409bc9a1fabdf3bb316c6034916ace17a211613939ca3e8d3c390cad36329d70cae2cb3767319dd4d79162c91c54d2a85e2da1cc0a2801ef5cf3fb0d97ce24cb1cba6af2263c8d6c991b1fa2fe3dc3787660cbdcc11701f4826def2520edbf7deb62f2afface23bd8b0095b9805375f9b0ed7f6c4ee6b005d967b250df3ef63d4fe246e6ba92cc7922cef88eff1dc74bf65c60f27083cda96d050883034ea7598a01c11b2802dc8cab5cfc27b35da1d73833576e8557a822400b5bd585af5812ca8a08d98f2019897bb5a117181e7f038055f935c095d3078fbfc0267e070e1c80a2585f5e19b2922cd341d83f28490e640fc385ab1c414a26dc38280981339731c4559d3439a330cf3c47126173c427e9baa3cb8412951e26bba876310f8f54f486c3fba11da3364caa37a284430b62e10b408ec703f9c888e4349601774eec887f79440c7abae78e530430465b7d5741118970eb1b23b0241e5eabdbabf76a1ac9b2fe72b7bd75351a193c6e088ffd4f06fbe1ed41a73950c41a5baef65e42558c42a522ca9038e7377772142ad6253bf93362e763232364570142b6e9233cbe9b85e523c902ed995b748d96c946c3e974a51e59461ffcf583e342a71e3a852a4928038a38b9687d4733ae18ee24d633c027a8188c34e0f304f0b5f68ac504140b4a04d4211e49c83dce9ce7f2a37b73e53c526dac652e641a165c2c18164ca7a08440f8083889818183723a460321a42c05ba41bc3406e3bf9615fb28a5075b4704ba182225100e0f3e1e7492713e49f50010c3499fb0660c41323cab9fe9091e5c25dd27d9a74dd093885cf2a2e957123b2b1ffb447e7a7d3665d295b8b15632f69b893257597d6ee683e8bc2f230d42262053746ae437cc8f1b353d6c19e9cfaca2227085e9848ce59b19124fb6028bf096dfec72307c2c3134dfdbcd8cdd2e70046be2db8fa612ba8dfd670472722dbbab669f9b704995bd0f57e58460547b7a27350b9e704c6d2c50c4c773ebd728c4208947a7bc0079d5c680a90136f918cffcab72e0cd9e553311457efff015d06cdf4b0ff355049198d9b7f50ae4c17d393c879601846367b7bf5a92bdd1e834fd64d04c9d37841865cdf63cdd306d22fccd493d78b3bafd22c09256d494c052a1ff4a7bccc4f9175640cfb8267fd263ef3345293258c333d7cabaa113c694648d7fb556c9b32b6069996f98c3140faf7247916239e5e7d33fd8388654016eec15c13f123d99a70f72d1f00ae5718ef14ce197bafe24e23fabb61c3aa369374f72352c6ae5e7cbaaf46f4bd8612748c40987ce46c6612433b5301e15703f6546ec611503d4e09c9c67c0908f3ad70b4fe730fd0841a684024ef4f4aea9a40bec0b4152c37406a963e52d9270445c502b3c6e85bb3d1cd558dee777414296561926b44aa3e0569f5fa303ff5444ef4c369964662cd8a1aaf8237967f267f25df7fb290c8ee68e5c1f65aa6404c916792ec377a0e8e1396ab7191c8c00c5b7f833d76e9437a2d95ed44aa40c6845c1c18e8d3314e294f5783da9c66a89e45c9c61cbceb7bb467caee89b4153c3e36f86b6574adcf1d66031fd25ba54d90fd47180a6176bc17e272deb7ae68de67f00434e0e957dc47d11e8ccede298db7ea34eb479f32ccdc15dfa4098f393cb92d8a80433ca18fe9004fd8750615f4f52eac04f5ae2c8dc94ed6afc5cf095fbee44e1ceef8f88f84950311765c3a78c4eb94611f08b540e5a1d95b374290a81c66004ad89cc9923847fdef2706d424cdf6405374062db1935ba5c55232c3efd4021f941026fcbb67860e5b59de05e8896cfdac1c959b4c89c89c0c59a67af80eb33d816882b9effdfe1f738e33a3a8bd9beda9b81e27975d9c7d144309a5635acc883de2983a1a3dc4130cbd7418c90e684ad9e2d41766e728a08d9f8a5184cea67a0adf4400e03ccb8f6a24389eb4fdcb430900cabc8db1c36a9f6928adbfbced07c0a561c933491b827d0752bb5c814d04b69dfba629ed81784ac3381d7855dc660cbe606f6e6ff39a3f6398ad056aa0f21f4bd2ce913fb027387f5ec18dec6be97e06d0f8f89c0ed23bbc7614244e0b6d924b726664be9bff86ee0b925a7343621c2bf552afb6e9a5e46b40062376c4398ace533bb64a6daf5b115fe4c8ccd94ddc51bee3cce66673f1d5983ad4511aeb8475a77f61b9a206c354a2bb390954205b6e49df6cc1efe1285da2b296ba93367abfab716ed7f9fd53b82fc1fb8022873ef1ecbe30ee6accfaaa4d62bea1dca5d75e54e5bd192898142bd450da102530c222c5477fda1f5ceaa45bb3499b50cf8ca2105236837339b463287829b001412f9ecdbd51d06eb03d3b72ea343bba6ab7cd1887bcc897fc97a42b2aa7dcac4c9c85816182da17cd8d6be9db504dbaeeee62a8a9622ccccac0ef9d6587c72f1c70743aba85eebe46e73489b923860104acf1de7e077c33960fb20387a381a5c41dc1533c2dd721c9d0ac47777ba24013a167b6931297bcb7128ca49c40c8bf6981edb212f2dcf61172cda1cbe9d434861a1a2c522e0cbbeed5643c0df6f978a6481a8f9ddfa4f6ab776848f070663ee2896993f6763355a9ac3183f4ab37a017f4364b82c2ef33394c475302dd230928c3aa3d5259575a2e10ea99065fac2348986f178b582239b7c441cdcab02dd0a0c9c7edf817e10a139591ab1a8c96ca23f3078a85ec61f09ea40e43f1dc505ea74c7f28faef9872c5bd211d1333e5ddee39faf6974e2ab9f24be6a4356ea1cba278fbf3ebae36ddc817fb7839caea35bbaa369dda180d831c5ad73cad4f906ba137fbb935454c795c5a11164ed4f6df6ce55adfd79cbcd89e3fa13096cedcfb60a5b225c4c3f66befa73fe855d12a6822e71731107e3e697dcbbb5febc33597a7ce4ef60cbb06afd699efd7f5bdecc7ba267c299acda0e785cf9412cdd1cc9060c08d3d4d9553216efe18f3fb6903fef237f620161f2ded7a7647669f97312ec8a627bf4c33639da7fc6bcdab2345fe860db39ecc689effc8d5de48c58621e9d6cc5cbd962faa9df8ffa9c39c66e08fcc9cb93b021f88360e18fb6c41fe18d3f14227f6c54fe5c9ef9f34fe74fccd09f2ca53f52527fa85b7f0c8ffdb9b9f6e7cffd897cc4b99b8ff1c13ff504078f56154376f38fcde89f2bd53faf64ff4477ff241efea3b9fc874effb10126a49cf81f62b52d8f0b80e65600916500595203742c037a99dd7d60598280ea06770469962e955ae4fceb783e49983b5458a4bc9b71594a4ef00f3c380e4b534b8cb5b0ecec63dae4a12e8a4dc14af412b4949242497d461de1aed3ff94cb65f278c143d0ac9222e041c6a072caa2a35cb4de0c83adcef46f725fc4baae6b4fd648dfe8c26f0b2a4e5687e6a8e97f0ac27b31e93f071d741039335446ebc58f96013e340d51c4243ab18921348adcf9d10ffee08f7c4bf9a55d9a522c6d694b1cff522f4d299676a92bbfa4a0072f9358042cb309eb3a080149852f2646e955a0a0acfb0f13286f7bddcf182013db059d8946a4e3807181911c2be80377edf7bf8806af396cf0bd11cc84a58255383b0541f388f05f46b619fd385e7142681196229de033a0af219072e49282cf9691b483855ac209e826bfd30badfd140641e22c62cfee806071fadc417caf47ee6af436b1969451b96af439d23899591bc7019b71cb0de558b5e1fa322f91df4cb16c9cdc221a710172461ac1dac7836a44d9e1576929d9c94ef6d3f67c3fd35e472c708d98a7695f8b0db80b04e6fa68e49a14dd40c0f4b0766d9020054f96b3c5498cd466e013865e7b632f87606dcbf4e7b193defee3f2e11ed5e7edc7c40c8c9ac1545c873ae3af31df8eacead034154872dc4c0dee8351f401769209db7906c424275133812ac33fb330f0269505961fb83db7524a47809c22257a73993919514ab04892d0ce0acb0def418bfc7e150aa3ed0c18d277d3a24e79438ca91524ae9ec1dad65da2c47cd03e18c9fb58bb7dff7681ebb1db2bb60b4003ec5f3358904da0481382854037da8c6ef9bdec16758737151bbdb73bf18da9b962cffca6199a1b959231fc83a2b83326e363a7a82c5a6ce658ef972d9f2998a3da475566a971227420610e3e7e0c9812f99ef6841f1ecb7b9975a1fa0107a53a9ac017d8a272982747476a3aab7ff53524e12727477e6b5ff8ea0f1e394aacfd013953fe6825414f06eba110a8fc95fe080c949970f901a94f603af3ec080fe773472dcab0fc040f5b264409a05f78dc4bc79438256dd1a7790b633d90e6adb25249349ce62c2dbef2d9027797758c9a0085477f8deb637066045e435201e5ab892918a60e31be62e4b6d0189ee85e7d01893fce4651f4280c701051133169005614107d048f963d6c5cf65837c37385e4c8a06a378202defa1227169cdd1f56405611d9649e1a86d6c29470b6bd1cebf99387fa13532c6434888c3362fca0fd077330c425800956d1c388789c42bf660645fec50e75949b781e0d9c447ad100e76cd770e49c690926df4e1d1df02d2ef999580aed7fc3a6caf53a950a1746769bb479aac988e45ab81429672c24f6e9340da0512e4d54ad627173b7622e4aa00e992946344c4c1e407c0e361ce62918d150088b627124faeea0ac626e736f1fbd0b513f73df69e85b4d730f3b6029ca68920ad8a1f6b1862333247301c352309f570dc69329968b0fd7e7fa7e2e20834092a9a586a928d48ef7a2d4bff78173a077b38bb4e25c41e2640af07c4f08ada608252560debef1e1e66df9d1037e5b3e18de348a058b10cd14597f6bb3a187521a4182a345f1284d5d25d4fca9208ad9a27c0bd2b0471a04884b8089a2c10048ee6f6111d14381e5abfac854c53c1e0aa72610c98c9cb0fdc71969cee249a5f95bf6fb0cad2e095a8af2d6a8b5d535b800bc84205331151216a8459de51fee01db4f2d2d8f3900908a4ef6eece43f7546bc373cb77560d76a76315921ac5b364e9d9c079d4d4625db1acc0581045d61b87298d406dcd666953f7236846921b8059d0c91cebf6058188c0733fe127024d3beb34b24f5feffaf5ca2e7fbe9c5d0ebbfe2fd903798968c4adce4e14e71395b8726cd40754d4d68163fc75a42987ff3732110ccd4edf5df0964d2b2f7e20d040bf72af6f29c44daad7b770a08faa492ed3fd502e7704b6410e1badcf539880120d5384cdf4f0bf7f08f335867228e4f9411a875407a560d167bc300c05ef43e91fe00afa1b1bcf43700344765d3f625bc0af1804f63ead4a36fab30dcda79c9afab9d4d086bba937fc738902d4682420c830c1c6ffcbc954cf9f0198c5c7ba99302337ff0f7327046e096aad279d1f02e4f555f5c994203e6fee8637aaae1d9945bea72114413b81a3067158ea5824bda3545e7314b1d3f58c8cbc5dcea4816ed26a1339db110d4f27985d739afc4a9115226d35155da4d67541781357312990b14cce4df7f1859ea22c0fe69f80e97931c5fb13cccd483a86d147d2ac5afda61a8f7a03271eb95044e482c08a6279d890cbe1285274598a053d82f8d6a81ce151a050b0ce2897b6d018258974445f4b27255e85e242e9dd4686eda3550b018a5ec81a2c812d8404434b88992f841a502904e3284ee2f64b322911674e49e26955bc348dce2bfbc9c5ad028c8a507847bbea908a91fc9ba94b15337a621354f4fb55272364bb7707b32a761abb8a41fe6709cc3ffeaf324229d0a8498059d08f97a7ed29646a384fc3893493211db29c196b0e53793da356ac4887727f8fd41309061c5a1544409e0080691914eaca5917e682c11e6ba7c2c2e7fb106e394f8ac04d6ae8d0aaaf85a962f27fe1f1d6ec29b06694f62887e1408351e5bd7708751a76425c45895898f81e8728620e19ca2225ee43e25f7cf07354a23065c39bbd218bdcc4443c87e960aff357c96319b16cf4453ce912882166ee57f11ed3478bd7f4b0d862dc1a33a6a7d29a58f86925c4d8876d46d6def64bafa072d6237c575c237a26959dfc1ae580ed8be267ea5987b6f320c4d78ec33eb6b1d318419fbad900307154ee31013ac64e3863bbee85463fd490029e1051b38831e1e5534df925c6577d1d160f95a385aaf94914e3881fa96b11a48651a593088806a418af826f563c9fb6d881bf98c87f6baa728f996314639432d6d4390bc8a36bf7d56ae1f68ee4898f83356a6d39834c532554e4873203916c0714bfee07f3c80b050427915b3f56e54d1b9048119dae93e4ebfea530522292f8cfd7c2337a197cd31c4d6ad8ae8cf6693e58088800d74864a7521f7cc1572b3e0ad7f3359ca276d4cf338bee3517e8256cc86c4e284353541f8a183d3df669228f2592d69be4351d540383c41a8c90b0c97e440b04c0156fcc5a6d7c3d84b5cb071a3120d54411763369f3ce5e4960f6a62a363cfe7ca6aa60a677473bec569ca69a2f5db13dedba389537b4418f8a434b3d7a1736401eea2ba49ef4511bfc8092f792132ac142fc7683dccaf718233ec07287c2e49abf54a5f98223f591ac04ed8bd225fc6bbf7f5aa5961880c43062234a22f05324dca22293481aba0e18519c04a2065139137f082161cb8fd498e102bcfac44f33889910c6524596dc2cc4e9f0bab44ddc5cd54c25a8f532cb6ef62c04ffbceedbbb2324a13ffbccce21a5964a0a7fa93c77e138f125ba3ef4862255943a7df6245aa30213642f8259d42047c09da0e3a30daaef0127fa454f900e9048e93bbabdff18a2cf79d0ba145d0c7435390532697066c37ec91604136b3c31a69507066b9e0cea91bfc49827597f428163476b1e3feb79f47792549f1a1f7243bb51ac5fba50cbc49eb8079231bf2663712eb5de80c1c995fb8943b1e5210bbca614ba1682d2c03e93007ae1104d272890db7dd0068e601e0d453faa008bd0484e0db2c4267b0925abb59dcd64e20fed5e9b435b91bee5b16a5ea1a3aee2ce512aa4171293b8d1b2f176e84e154926f21630c024aa5c653567bcf2abc51d8b9a0c95d25009f5a5e52755a6a73c720a2f3712dbf291f6d6c94738d0371d6d985e2720feab7d563f4875650bea033892e4eeee1dd92a4e269531dad10858e4089aeea98e7c302e95b92d7946319d153bd9b3cb568356020b167aa94e3b7cef30f673d39a1df178bfcabe252c543b6c5b41469363864b0827f2e589156e7d320fba9ce6c3198c53b7b6e53ad4da9ca374483221bc1620668193b943f00ad0b5db58d2761d5d4942b5ebdd0a35ea323a3f4512d395014e04f5955ddaa5d2a8e5c7722ad141298b8d1c2909306b50986809705c370c372de652646ec96b3bd806b3d9926b10ad05f222dadd7df5fe7adab69403a161065d3603172c01c7d5eb6073df62e4232aaf49fb99910262062fb53661f424bc75e6b4811b682704d92934e9bf252ca458f61e514fa9527e6e49532c58c8f38b9d62c76013660bc5dd98601e0afd3ba91e666aab874c81ffa42a601b9d65fe556c375743aa3fdb240b633d221269785d64192ef8cde39c925063f0d3e2911be2c70546552148a5afdb6465f57482f531646f93debad3acc871a6bda7ec8c6daf0d91fd6a21c24728ee44a999bbe1f6852ac8874970c103470ab3bb6c0abff1543283e83be73e0b1584f7f04e5aabaa7920a07c8870a3fa29ee20ad62b36e1cb0e24b01a0c682a109dd3cefbf00777a17bae608d92e285e933d9da72f66e89140a2d7baf78b04867b2b1c7192c78f5bdb8fd5e7a9a9052d71e02d788c62cb316ad66b18c321a34071eb17231416a14fa65d12cea78bb89c488ba8ab1749eeb51e1c008a2ac1b17c20aff8d8d81ef90d366a376638ad184d9d81f5b8c9715e32e15c39ebc5f56fad1bcb1024008d4bb4ed3d048a220cb92c254bf99c6d858b469ec3e7fd6bdec4c4d521226e4915b2e6231c2305661d2294b42ed9f710d8eca84a8d158e3127ac709a1619ba97e965a90721fb5c13eebc0f87575f4bab0c0c21a2511e34a3dc22200eb7533397eaed31b89e41a436f8331c22b5c22aaf2d60610206c36f1db81829aa9785cee0a9fb01865a419aaf4b8f8ce8078c1da127c0e27659ba4d5d5cd2b4b080eb4f04cae72cc726ca095849396d1eb780139fc848a8cd2eee2f3c5b7ceab849844d96926fcd82c2659d573e384f48d96994f86fbdd02532190a5dc51ce21c0995b811717bb3d2c57c7021f31e6877cf9dc9ae25b3bb235f380e6ab440a84cc162896b0f873942fb446dd4b16ffce9330fc872842a16c6eecda34683650129adc45634300dcdb3909af0bc15b9a3a41492d50673a0093cc448196a4c2656630243f24506bb3aa9a1520ec642195180263640c8d77b2f83562a21f82a62c8daf6b528f3b34002ec60600a312d31c3aceca348ad01b8a103789874bf901cfae26f6516cfc0637ca8b8c12448ba773cd292c1ecef4e2f33a3eb6a65dff0ef70ea1fb5a8deda3d3f5d5ba2b9f4157fbf5a353cfa6998a21838509130d4397c79e7ef0704ef9d51010dd1643ac9ad5d8e04adacfaeed9336bf517b5880b62789594b92ebac5075f641d986d19ca1f5fe94183290744443a6b43a6df534f31c385aa0e6c4a78c92b3bf9f71f38f9b7f86c95d96304ffb153d37e8abe250c2af8b585f663b627f19a3f93b6a6c87f082905c7197970e231679c6d934743edc676a9dadff7afeed031d2f9f737e0d6f70ae43f463f9cf34e769ed0e12c281d985a902be7a809f4a5bdf7a57a6e004e1553ab2e208655258dd9f046bdf8fd2eee521a6dfacd19814dbc5ab0cdd99c31f8f2546500a79cb17c02ef278950343c495504d70c75056d83a3f56fa6167e54504724230602caffb5f1f6bb7116475a414edae0d352b64294b13ef7d01dd405356b17c87b47441557467fab57bb58318cef9c9da983caa8222368312c985d2dcb301f112ba5deccec60cafd4273c82c1b874b0e1146270ea0fa33c2392c275b6db64d56300f23c9d8b7a3c2d2073181f3e55d295a75a796a12234a5beaf834a30032a0452d24d759928c1830b7d53ee95ede5a2cb9c643bb37d4bb3fe016acc5c9487d14f208d946124e7efa1d2f653f9b8ef79852d7fed03902537b92d42d8e2191b72e70b5d7dbc9710175bcca85ea309040e7928f36242daf62a64c5dd5629ec5d7764546cc0a808b698f90e5d161fcc03474a1b174e65d873730fa7253e594f0b2e20b09f283d5916a1a57377ba1b2600eb0cc9f1ed15d2f887e415c8ce2299153e5fe0c9cb7c471e05744d3d562c3631d185e4bd598a9a885ac003e5e7fb161433714418aaa9b0e98ab96c16e72e5fb2dfa70d4490c7e0be19f8f87ebfe094a0bd23aea20de12e5029fd04e91e545003170aae048d43c5ebf7f200c53ef6fd8f99dbd6f6a99eabb0ab18c9eb0abc2c762422925c858d7c1a2c3d373527c0931363bf9b52dbeefb3460ab61a4eed71df7c7ee0d88c5bb59ae5009c4d5a770c7309bde5a0bf10e1c9213cfe23d9900d33a5c33db926d0965b5169cf7c64542b828fd8f32dbee4e7907e4084f0daccc1a0e52dcab8bb614d9425d86f03424bc6c61e156d960c476cd92c4550e1955756f6fa929c2c16c1477a3a1cb664e3d98b7de12a3a4ccd49cb63a6aebb68c4e30261a3c7f0723c082f8c530df20fc1d8d1c796d3d571ae978316f3564db5100d44e8aa3db4cfea6986080fdd83492f135945ec8e927c32281ff54104ebb4eebb550ebd7725cb9b2260d6cf2b8899731546e5525a4383c77fab010934c1f840c5a06289fe7d28ac89a8a1ccc79c85ad2582dcb3395d4fec9335962864d009737509735777ed85ac170097431f6148c25cbe837470025605ff6b0b031d0196658b61638434940460c2468a1a4fc90216ae88591589e361f5096360d52b9abfadff95817fa3e476cdabe940b6c91d63532d859c23814f48508a7c4e3f136da1166cc527623dabb4eedeb33d04e207837f38b5247783aa356d0776870a6d123a4a1f234c350c75ed7dc302b18b248d079e21f4657bd2f8d95c3eeb5c5b2b2d3299070f340d73d94a56de3bc98b46af74c344bedcf63b53b6a16075c512efc22ac37c7b4d57d7d4f29a1aaa878e68845434c50341190dcdbf6db8ee7b0a6cf24046cf20c98363a1da0f8173acbe629361c3375ff72426bcdbaf4f25021123c16170cd9b82b0e1590b2070f0edb40b1e21c07a4f04d187bd195f157c0990ca3e0728db094153c5ba6ad5242e56438781875ea0e3af5f4b2a8b8feae0b177325405c6af638483d9519829871581adde2e52b8db3004674a7eb6837641941dc2e4ef009cc5846f8705313135586b3a0eb880e62268e8a4463e692d1c51a5715aa51e967392da5770033b8050ead990b21ddcb45c59078f245d647279319bbda766a1134526c3e3f06bcacc8718515249bd3b965096eadb2bbdcf839bdda97bb94903a8e4e76fc8992da1f5f436c3bd495d177e3aeb5fa9acd3c52ec6cc68734f151cad1a61972a623d51a48214ba0c9d63af7fd7c7a7ca89a90e6ede0ce39d3a7fbdaa2e4ad3faa39f4f2c7ebcb07c46d647e7824f3d33326121495b790b2a738b915483b94835bfa3bbe8d19a125da201d725321387b7d62f216803965903071e9527cf78da59e0ecaec74a7dbee9106f06a1e8829585da03e8341aebe4f0bb0a88349d5cd9d0e63dd82bd13a96337bb19d3001c5d3bd13a74b31bbbc3e7ff2dcc78823abba99bbbb13b4ffbafa89193aeb3dbbad1eddd18dd753fd5fdbb9b8591df568bf3b3a395754c6fa0903e7421ff68db49bb076a325193bda9626370fedea9c1ec9349711a47b01402195d981f58c4f2e05e52e66b2321dd944021132311072c99ba41c7f14b3ad178eefbc81b6ed80054467d067f5bbd3ffbbd3f91ea7fffe2d54f84fabcbf5e2fdfb7460bbafe60ef4a69af208365435c364e78f602ddc6c22cd02ccc2e81cbff4d42e9dc18091ead09cff43ff752a478f12c627babc5d1c18efcc06f68159fa7cc0c3ad2fbc4f63330f6eec84e7d5a16ee74a1ac680d3354d10009ad8c17a8664ee3df85c65765321c5539cfb8a181aefd48bb571c26fb5305aef3dce5b0ed117e8af91db50762154361b5822469a6d3543e0249493a1e5bb4eef31f62e3f6c5cf8a0afa35b18357a30ac675cab0b10184fbecd0f0251659d61444793ef8750f36ba1adaca994626c819197b0a0830b07cf60e42cd8fbf7a545b86129909aaae6699c84ac50a214aa5a10e1c5289ad19dac0805f587f18fff03ece7218441026bbe1c91a8a041b87575787a7d70078f337e6764a64d1913c900ec183f172a7da0921dc461ed1ae1cdac809e12a78087c4d3f43c98d99fddfce7dbf1a905ade24aefb84d831d7b29de80e3cb72401e8719b8ad58af7c74b7e1eae8767fbfb8b97caa12883fcdf120c616c7b1bd98c933cf2b76082dd4a3571e4c678bea0b5f9218651844e3181d18c370e55eca21fb9c77c63e4667ea0a9f8d1cb9c61a447d017ed58f5084a9bcec40c7a366424ddb37507b2c50750a92dd3fa05d8dc5aef442013453395356588c77286193f5dce76db51cc48efb4d4bc91a92464fa4ff8a32035519bcc17e6f22aa39e5aee71a059f78c228f6102949698f45b2181167030eb7abf4f60b3d2b32359815245dd81f747bd92ea9c03a3c209fc30c700f219f53b338a3bd8eff91aa4505a282c87dc86b9b7a88b09e43717179f11ba05aacd6317d09001e008c8b2bbf9ebd07893c2492ee7efbb8c972bf4fbd744203d53d1195516f4a343d85abca8c4f2a0677bd6c3afd5a61a45cb4bfa9498aa861201a56c60bd9a06902c68f23bb321a3633db7affc4cb8dba039f15bb10baec7195e4b832cc44300dd0082f2faafc091207a5987299e69d282829186777195304dc4803ac32983a34c50aeab78f7bb1155a10f7670fe927a0444aeb6770778970b3af6ad63312ea889955206f1488b51bbed4549cb8453312c6600575d054ce57c2e6b7853660fed82499028dca22d82f667fe9ea0ed948b110419c8935b803f0066dc03aeb808d7652d59a80011ae321154954bc99c000e5286c7356aebb035e5f5800d61ffb7091d82755b31dd0b22095ef1ddfd2bf906f1b4b4aa62208606a1b38207400cce402d19f41fa205abe334ba89182ea3180815f4a9d8f9904e28d5ad03a2de77d1abdde0b0ab23810b085c19baf5b07eff93abd10b802a6a36bd1a3e0022118b8f1ef49ac1e83e05d0ff9031133efe66fce299d7642c5e996b34df85805c0ace2204c80e750a46379a2bc6e8b63bd9c9ae7fce49aa45ec360688904f82d8333c58e292cadb18f744ee3ee6d6027f2f747dd8e922ff5df5a384005d5c021e1d49e4dc713f80531860fc23ae1c918e6bafdd51d89385f93175e4ba73d3bfd43873ddaeaaaa30217860e14bc23fdd29b207dc30fcbc63b835f6f79fa7f401fe9e0d537ce8ec38926c83f6a579c6bcbcb2879e7490f5b92b04625e16dff01dda7890ffb24fafa8b2f5bef2c622c5cbae4388b86bee7a7c74b9e6ab70427066039de9658764d288fd55a455066cbaefc9239687a559ec0c2a053bd33ed6cb5cc5a8fa436da14ee5b784a0dd63e938a31fecbd6583bb0a9e1b83c984976e2232bed087b7822e7366bf8bea7e7bc1f64fe6a3ab10e17396a4a9889f836f172ac8bf0a87aabe028a56b681058ba520a5272bfc88e8758866ebbd7477e0f2dcce48fd590ea834ab1535b0aa411cf6a86e6fe4c33b1adf1ba97173d5a62bcebb11d7a63c34fd330071ac291b23ad72fc131c5f00048c7dd198bc6e05d9b42494527351133b3baa8c5a1e983dccdb5d5ae92688314809e3dfed9e054601d4500f49d2abce258df80c7428272e9d2e6144c8fe7a66a98e83031eb0c80201d08e762f82e659bc6b8354711965056d2026df588cf8361f19a324c7398bce23e83bbb18a22e1e81c60c9706ff3b0b60d08b0406ec67d8c8b1c3da711c88d770375bc90f1247ad226c5d06bb416da62206ab00e8c2486412ebd152586de0706f93590a8da5534878a1b4f1ff81d6a811798d359c118531c6c7b88b751a8f66c45ee54a1fae67980cf0e46845468ddf7029ca677eea9a880601a008fe160218f3b7872f624ba61f45efa68206a2dc42da99c66e260c0844e7d8652c21f5378debfe6a55071c689f04409fbdcdbbd2b890371457f79e68712008fa778bd2a609b955e7ff26df343b87210c4e9b92349f489cd11ad84f369e3d17464b1f4dc189303fd83d5803c2d13d3156db4ba4e8e881494b9b1bb7a50781990de5ab9ac1fcda14a38fd4c82486a26ec01ed6182b1661bac00a24fe6798385ea09eee933b87fe3db4630cc4dcd8cb0031a46d045ce891b97eb61ce2449d5afd9b13d579d3c03e55acaf82be27d6e3e90dac1a00e0ec79579016e7051662368e0865bacb3296f1acb0e3ed2b830543b47c35842548152009d6563350b89a2f454030c5d3abc6e06174114e2c57176bf72e7be7b8d15a5900891ac860bb7c3b35aa6a0790d49bb70363e2260d59bd24b7555135efd03a3baaf9c3994e69b8570429e8fdf7caa8c9c570c8c6c5e68b06249d4bcbeb9a8c1b1285f4af6ef9efe3e720d9c6acd59b6dd4cacad2e7d71b01c1628e69b7c446ca454809d04a084d61f0e6ae4619be7a8d39a06d48dc28189876f299aa41d8958c6a6efa55adbd8364ba600ca512c072139ad7cd05ef7245387331302cef8b6eef38960578566d71b1462f53eecec5bdde43074826439daf4c77edb3e431272a098bf2fb43ccf07877a0be11637fc22e158df007a2a09fc9583dcc8eb50094306498c0fecd742f2af6ae393d42c395aa988b85af874d8f1aaa8d24a3a92339f6295596510e62e8c95243732f7c079594ef739080aca1a007208877fd6cd6d06284f89a93cf86b1e0c6f014e324ad30da66913e52083982b4cedd3d75670d678cf5cd600da746805c74e1cb6ffa787fb42570f82cc31a7e83ad3828df361a5964171d0c73f8591f0d4382845493eb577a908a8b81f5bb19749619dba7ab3bca8b7d05c63c7f5b0a35569578a9f3d20c127ecfca0ed7fbd9a42c10c17cea33469ccd88707700bd10fdda0fc6e7cf079dde757eddd2cab5c0f96f6a0212c1d8263a801cdb1774e08639d36eeca3664c3fd3e158626a93e4e3367417f5cdff3983f78ac81c668e22a1bd1ace888cc68b9b5b4394db094b1d8e2faa61188450fd3a19391f3e4193326cb2764a40a8f94c81af7f9d3048e1ece3ce8f54e7f94a0b01ed3a0524d9aae40f56a311e323c538879ab321dca3b638dd6952758c8121eac54d38e1c95d67b51ea870dea952942334bad77724f52c6d62de9afed4c6de0ede67466380ea0a06fe42452a6afb863d86cbf13192eeef9ff2bdc5730a01063b1867921cd55847aac597283b7f7c0016170aee0e6c91a1f00067879b1e1337125c68667c41809906efb6540fde7031c3e215d90fae24c8593323cdbb4a9956d9124965e916d2567c4462d031be935e76a497093bc16167c8ea82f98ca6c88e5189415bd6d10b239158ff604d9e9eed6418afcdd2cc49fc937ec54906a72e25f30e3f43122f39ee4db8b1d729fe13362ef42111520f999da0c3e72affa78565e8d6a8d2552982bb8be4fd08c49e3c020dff16a4c3212aefa8f97c4807ff12ccb0dbe646fc29fce419d71808cbd93026eb0d8634b700e4e589cdd75f2d025163fb325a35fc02c5120e249e245445c6147b23df724c67819e862dc086a980c2450f5bfbc909b4deed914738d805e3678e7180a15abf5f46bbd3f230e98767a3c5ce6f8ffaffcc36708b3e4af95585915fc8c759822e4d24cfb6fa92ca9669b0717cceff6bcc01f7a926c1e72a3ec7003e919fdd6da04012c4f009b297f6e353959dacb48be73798a095f143de648148efb950a1c3f9cd2a2758e7746ce22e3f34776d24876606ec3b849e7025be97293b863efc5de7670763186417d596537f1d12aa1be9a197e3182f02ad44dfc53860fe3d291445dacb8dc1df8df6d04071980e7d2e42491e55a865c51c9b763f5244525203ad5a50514a7946e049aa30c8f7419884b26fb22f85971d6e32213b8d6a6094b618b0ab43da7f1af50953ee65f1818d71ed7b71745f0dc87578a2e79171632213a452487d684a4e8a684541acd73ac052f7e0ff0fd39d72cfa5e1e5c6cf59e9ee0c00fe2890d4303dea09826072b58a81e0a38cdddd757625fabf660c76c4429191120af68b83237e30ae8c676a4258d71bc778090846a2e6c1061397b824833a6ba9f96d6adc98ee25513ec3f7f52189e6b44d1b88fd87f7a94a89a6625814d6934f992095042852a22569c0c47049fd8bb5680a81cd8c4919a80f32745910262290516f9600ea329447d5d4288b5737c13dc71a4ca66e62dd46478cab5198a7e7019d6aa1d4d6e65ad91009a02685944db6b6deb952cb4b762e690bfdf0cc2aac8f6d25adc789546afc7fe9940a238e874c300b9b8187aa56962d576cf2907f87e1b9a3969684ba45693ec62a4c1d12656ec53930f77107593342e0c9dc2d53d83665b68eb225f4dea4c6ce6ef13167ab4c8ab27bd461d5004c8dd8cf3a5397480084bfc72d66e431263b9be99c40bf6d6d35bdbe879b7938631ea04729fb76b85438250752dc624177c7d2ce7ac3ccf560321a227ffb73a1c91bc7ef530fd78408ee7ad2a6040a017057f2a0f855d5d863630113ac8034587324e502b8dd459bbbc619c4fc7f837543ba52a4f4717c096eb207500c255b7880e9626e146581db1b4b5b3bc00f813e2c2cf8642a3bebcc1526b71b299f9c2e2862a1b0292c97d209c03b429f6dae7cac4b236147f09def799011789681a68d2508fc3e9982a9f8543a8bdff8d49ee6b9c0f100ef39341a1bff302ad8062e96e4480860afa8720be26662c3b8576a472439c004818c72454313152eb8eb416c5beadb0b882e34ba7f5ece099b386ccc0510efbaa17065b85dec5abc924e84ba7afc5d546c2da84f7d08e83cc7a989c7a3fe9319b1f312ee803d717dc4e6eeea09eab1243497ddb816721dfe77a87600665f90af65c0b19b590224e7de79a0b33e3eae3219c26e9d729600db21ad8e74f457f15e225a33ba9e400d12e9c6ca908c9add373c0487151568f4dfff276802af99d33d054322c8ca52c25404140e32d4852c73dbf771d094582509bf25cf99c7c76cd2875509bfc7aad1e0f3023a84cec1c3ed1c2ea6ed49135eb9746054e37f8a6d44d146dea831dc97bdfe2bd3be33b942115712472aa5b6f9442d78a0ee5be189199d92cd13e51bf414e632e616add713f9844b50f4f6351c98dac7803ebade5ac7d93e1d16649cf41ad8f938c31c3e1fe66f35846ea3cc05c85c78ae215e283ab481c31b2a4d1dfaed976aefc7c440b8433761fe4d82857e8ebe02be576de1a48002238e8ed83cb8e2148388bac8901c709ff35b09dc4530e5442349e0f398c3620101d7022276d28f180217db20591bda3b8340414e8b33aefef1d55dc5b8d077c25712c2c92bb760c6546fd2fe48c28dd334d6cad69eba6529efa3699f054065ed1e2e8c0904f8508126594ba6062c9752da2d3f9c11efbc1d6366a9c2a6fb259b64fecbf84c845de38146d71393265b5a9ae672ab6306282b357bdb79b21e99cdeeff42a1480f39ce3d3146857d146b468ba112b4ecfd97334fb1800f36b73e800a326fa57acf8c0140f4d9129c095245c1556609fc0cd909b80773e4fb40a241e79fb0d4962c3b1634190cbc3ba0a6bf9adb1907f08ba6bf41416516e971a330bc6403c8e53e967321748b57546bf1d4b2a236e5f97a31e2e29e8a4556a07ee0bfb0e09e15899705b369e8fde797b24aa5cb09154d914a7e7526b6bd9e3c534ea96fd740b3c57498c2c93dffa4546c7a158d284933b581b5f24a7b48b2b57776cfd99d534c1df4f4c7ffec22d0b014d806281c5749c17695daa2a32a6a411d5fa58417342405a4cfcb210696e4c6ee07b8232f14c20f0eac08fbde5f9858fc9d3e586051fe58393902734252e2ab0bf9a175c9ea0bb2d4d0aabb3ab0c656f185582cb2435430f8689dc8c3f0697840348f33baff9181c8f10794a90e2349812fcf81920d58b45bd17740d13ce0b6447836a05e1914fdca83fce8f0eb9c03c8ef3a601721782b63b82f5501d1312593630e989b3110824676f45260ece7c9edc63ca6762fd4d31e64bbff35b48f7c81034fba49f7bdf57a2e01656efcd698a2ed6b4ad182e62304b124d9414e6af5fc6276647627a9a75b77ee839ddab7b6241f9a96c45e697aaf7e8db6b2eb0ee88f11d95b0493470d7a79ac28c7e7d5ca416ace7ba62134d124ed593310dd29407868a965bb305163d39a785a439bcbff51e35f3bf76cb3a739e85c1d183f338a7a2bfd9f64a3247a630cad6f8428715b59d51dca74ad4ac99b1cbf835de56c5b7a2974f446453b126e654cc4b2ed5a66e692c876096799534679ea8a3bfc752b63d56d6a93f8c20da42d9bf782b70f39f27a5fb107e76a189c75e1f5efbdc324fd930b3c4542b5758eba45481158a45264c4f9795b7eeb22c7cda212bad2162fd6473d869cc7dfe0a6c6e683652314be418246a2849454fa2e10781ab0a89e7ef1c54ccf93fd6eecf5291a02a01c00f8f444403a09233b06d642018489b3fa5592d1047ea22eef2c3a9a38699680059f4e48464983277f8a27db794b9d483436f28b2fcb8a25cbd00ef943995ff39842f4db014b3c0bfab25380191e252701e732f5136395eb4d58ce352e35a33ed3b1a7c2b8c71c8164b13396a499aeae6b698b9b08d44c9b9dd2728b380e4ba6d0222b6b7faf2f414e0014bcccee84a494504a9d16b2d5e1d35e3271518fb2c6bb523e9d0b67eddce645d248b1b50fa7f6c17ca176cf761471b5ede876fc5aeb0c8d6866f92776f136b3fbcb5a0dc5df5a1b7b2dd36739011606729c1ccccd916cb547eefa9f6c1e2277d350e714f1aefa1e244f293b260a895a52375c102464725ba66be5bcdbfa4a49e489a6ca8e38618fa97213adc2331e111d576116aeea332ee91c7515fe8194cd1c868ac7455d1dd4e17cc34b2a47b68e501a7cb7c9e1c8fca8fa565bab77ec1ce09a9ef4b2b48b29a08f677daec5dfd843f47ca1c60986b5999147fe0d75c1ff8d35f9adf4c31415ec2fb20dfdf2b0e8e1b62bbe43b5bd18a7b3bc025e431e7f5a392e41076dc90d9168eca1fc19be3409c63a16a0ad8794c4d805e2f84523d8511626d5a0b6a480a34e5709b40b9952655687a20f881a453399660649090a2091916f44b207dd3dadc9736f8261c9d17c22c6f061edaf04be4a4961319c3916a4f785abe6ad96d47bb5fc829f5b2949e3845ca274e9d81f8ffecc1e6ee660bfaf41e5e58403625fc7fff879cd03059b3d291546dd09fcf1b469eb68f30097b8afdcd9f2e7ceb41d894b9d5f0178bdd3b2537f48b8719df1f47a3e415393b096024f46999f3d8864606fa8d05e9f1f2f57e14219ad127be7163ca8940359631f3ca4f0718dad08ac6e589d46efaff27687113bea2406e43dd9aa40e5d7b9149cb4d7df8853565e8131aa2a2789e0f377aa6f227de1ee729159ad8fb52b76cb6f5fd9d0dc1abffa5209429302f071c487253cf20b060b336009bf6f43f4fd2e523ff8aeacce5aff00aa151a3465b7aaeb09b9f965520c95b0da2561aa07c03188440a6c37f25c07c251ed5f2244a5df02d204f5089bc349389d771cc01f34001da0b140b15bf48bdd31f209f18b2e6095c0799a30a80a65b60b844a6b423e56418ed79af0f6370eca090869420c70648e2771cd894984bc14878626edbb249b4564f7a17a485c4532d837fec041ea69860cd6e15a1a640cc09484181a803d23e936060be1c058af92b40e2d4602ca16ca16b3414055f94108c6423756d4f5761f11d4dd3fe211fbc02a11cfe4879569f1f11d88e64adbeac3e22b58ba1bab0c02255cbabf24ea75f0fbf7efdcbf44efed96c4d469db3d02742d40f2a444dfea5279cd4f0e34c451b702d88060d84c84dcc7084d993ec78388b0056215c18d11833a74c816ec9d4a33d29117eb62f292ba6448b9441686e3132212ff945aca685991e84c3d5a1a75b3ca5f958b00fec9763a3d706e483170f605f394d141c96d4c35a517ce89acdf4cc584d0d5ddcd728382c71a8e7742d5151ca56a5978e3ba5127e8595ecebf95ece1c1ee21500971859cab5a28c36693bd14dcfc39bc647d9309f9ef2a2e2dfa1d3d8750ac1bded6c2fe3734cfa8018cd7dc5ece04c010f297059e36f36460a3a134b908f156eb0d3f757273e4c728003a7000c721b330c090564201fbfa98eb89333eca477ea3beb8a300271d358c23e668a373a6b892442feaf94e79f5fc4d261f7ae7d4b8ad255b960811490393ea4f9526eca4cabd38ab185677df17e192d9a7f591c9ea9b09fb0120b189038f5f5292f3eeebe9652427f4467d49392d34c825e992287fb005c63307fe980db860356e33e77d239be703326c0c3bfcdaa8a5c16d6b6824dd7227b3ab065d293b7798520cb41382d44415f195b83aae92601784fdd3c7a84797a8223d2a27b95fc716d89813fafe315649c95ec9b9b6e955fa1aad78dd15d34e0c01ae63ebdf67fdab1e3ec8b9558599915e31c0f49d1fc1d4d2d9c2771f3fa4588d939ed49be1d0f652d7f2cd288a704bdf7230ba604f3f225ec051b56f3806c0dc029039a727d581c148beffe323213cf54149b4d2d03938a11f33d59280d3efc9a6b07f948cdc18cb7f1254288001b9b8a31de3fb37711dd3f8af443dda11b8a9d67b4c9614a7334499efdef0bcea61759135e47c23c20919f26000e0fb615d224c6e4c1fe72f07fb441ffbfc1ea721d9534e360ed1ab28367fa111903a911d416639eab0876ae0489c1e5c985eee080ed64e9ec8b5f251b9820ffc1504d421a828586c6bbdabc95dc1db285e87a29eed11cb2cda9f95d8d02c33788dbef65758afc7efd960a4d1aa9ec916024f55fd9e9193e375b6f72cdc68567355029a474c6f8cf18c0a0f6928029ee23d309637e81c71d19cb99c897ca6b60c03a00ec734845733f4f876b2a1d2466eb261c7be3c71e5c58140bea69413d2089d2d9d153ac543cb621d1ada95f770148641150977d2818b88fda6280f00f801c0141f80cf9c880e60e61c77d9453777d39380244f1c53d74e1c0bed4b71ae452faf0235b976fa0641af1426f0e68b7aa6d151ca60d81904257a057d913bc2bdcb86583e79499ac765465ecd82940faff1c42b376eb0a2e41c44adb66dbe96bd92fb118ac819f74c8fd0503857a55183bc91fdc56b1853c50a966874273144961c70cfbcebb38563dac17a7a33391112f5d1d0d91ac40d76919f0961a85f97de2a40d3224904e624fb000a0bcbd3383a46bba76b36bddca118f83997e7f4998390e014ae7e3e54aa791daa074451380d731d205cd88ccc3b5d8a80c6e28d4326f623e3c76b1df90ce0703edbf1ae2ac0daa8654916dc42503ef4f1060e6fb8750cbc674a681f8bb4c7461cb9e67d6b32325a038786c655ce448b4e0370bde04b0122012687dc49e6035b58709b0524dbad9e34d81b91f337e10629f981d3adfc1d52574a3ee59860daa8b94dd41a123d7d5e13e3287a163a9e10844ca24897b8973785dd79c0f0b3ecb5573ced6c301e21346fb6dce7dfd1fa2bbb8051d1b0d274ea570b833d8e0591fac3192349f762d952934369673518c5d3ae3d6e46c5ef70c3801b16ef720115a7caa8855c5b0efd190d32e5400f343be0e5d31aaf0f80e138154526aa43ce27e8f6db9737831ad10386964d800f8f4f48b212e94800c162c8de73834f6bc207389989bcb35253a2e0d55c693751f3f907983963aa83bdf4d70df34c32cbab2ddc5e67bb990d76b304aaf9ea3083dcca081007bf29df33a1cd582446e110687fc8d2faeb7f8300540743f5b922e541fa813bcdeb63485352ebcbcb2739a5d63f7876bd6ed00048a21bd40c6ca36ea914373a34174b56dda049290d65129d91621d6a77836220a17dfd5f6cc7b3841f75ea07cee4bd87ed1cc1edb9495e01226354d8e7ffbffc93e6f9173e9f344e168313bd02597ef1ed4781e8cfeb602828ab2d5f98acfde48c0ba10cc6d2a0266349399584552ca18734478bd42aae0921a83d6a2d8030b17c14c43bf46c9e747aa54fe2ee3c54c0c1c3df8c0cfa37978359976f8071ab96e1dae3b1d5a7bf40f900496b73cf7d6806dc45b3d2ff01798192672401fc7f6e7dd34a92a05fffc98ffd6c2102ea1d1173be12161468b96b59552c892f9b478556228622dd4fe7a242b69e2980ca90f43ea253955c786941b1d25ef96e470e6481bef67af3e1fded0396e587581001c8f70144a540d607d032cc3d701e539587d12f48adff222fdc93f9bcc275661ccef5573b41e62e3d53bfa97bd7667dc42237713fac52ab08d9c205e842ecb3646f412c072ddd83672a849b104935070f3d99113483ed1220b946a06462cc59f21013989fc09068b8c6abe27770135262c34473c5127cdab96fbe43d0dcec672f1173d12f5cc27b319ced6ddf14c18856c38380074040b97b6172fcd30cacf1590541338102e61b744ed2a3a0d9eba7d1dc0a9a0cc7c97e7f056371d484fea045a1cb5f4374b5b4840e301e96ecc22bf747c08d6d4e0bcb92c262c9ba43fcdddf315da1390ec11e3acc64dca00cdafc89118d388006ed08bab34f0590863095699e7a881ab9b98185085660c5694d1aa1c0cd8c638b1894f1ea2ce2c469dd6e4d087fb38e7bc37a25d0180e515bfb6267a2022dc26a97fce4cb181ed63ef460eb6c08c5ca58e1e11e2c3138eb8a053d0e0e82d193462a3d10ccb26a001e0a8b07b2ba89fe674c495fc8a232290164c594f89e8706df7b504005892cfcab9cdf48822ded8cbcdb9bf1d303fc2571b2b48a3641b75d405585fb5adb8c2d6d0963b27c7d9f05730a734b0081f552c3c776a068871891850bbbda47d66189140f141aca0ffdd1216ae217d7ec50a7bdfebf8ee3f2deaf182a28e2268bbe3ad5231af0f2956a23b2546bf55badb5111355f46da1c0441d9c56d7e51a7f89174890652077aef41cf0251c8321d05267f5864bbd71a33ef074af4d577ff4fa26a447becfda08cb4d58a0b87f338dad32c107618d4752e294219acefa0a88984bc0fb8a7813084253fe2913e9f56f22ebf5414e4a3096ac2226bea500428befac985a943afbd5c6d721447c8fca1fa67267b83fe40a8a349c5d3a66bd22ae195afcfa82619461ba5cc46904717997edde599819c78557037e6655ae874414dd9d870cfda15302de772dbcb39e274a3c7ba60df06fa92bcf63cc72542564ad17bcbebc04601a2fa9813f101a0816cc7d4860d27dfb1a83f10a25d321e1096b184c6641e48480c4159ed64fb13747aa83ae13f6bd5d4a702bf07a861f74e096ca59a8723b88b13330a53d2cdfa8cbe6692ed69d52719ec662d9726d1683f73fc86eac1d18e221ac52c0e423ebff7f3bb082c6044aaf46a5d4ba201e3c65a26c0e4289bba7d062140bfc557462ea4292d93b5e54234aa797dbd91bd58cd9e71d906b1eda55f5625b0870c36cc77be4f7fb98bd49beaa1a3bd589c11043526687e1cbffa11d0fce6276948117a1af79a17d775d14c8f5aa70243a33b4208f466eba008c954fa8b42bf030fca9b99d244fef5a2e30a0b5435ca8a80b9799e659b863a6ce1a333d494c56946b33788dc679d6931b40a24eb06fc519ce8d848844b7e5f834c4e279aa08a23ced63ee979b9f02f72f744734110a4904b337a62240edd3f8fbb3bce9af373221adddeededafd0b5e17fd9a29b0c8f2c6ae2e15cad0eea231023b3cd3cffa9a82da4a582996a98876f012b866759846d1ef46fd549b91e61b86b406a2ee5c28eb782d5f8aa790ff1ea7081b3be8c11f17042b449985ae0c41a21f29b354a06bccb5bf5aba78b216cc2141d4042c15442c5d52fdfdbb198018fe5b9708ef7488786c090247d7e3cbb09bac345fc5f482d69af8fa5c5e411262a128ec38d48e2aa007a589d9f2625556637abe98a1ea080e2837c612bc6a7bf6dfacb0b2a31600ffd9be05a866913ab869b91dfdcc533e5ee4fcec3376b2f9a21c2abd2ae1932d1edbf0716d4a1b36ff9848d799efbd4ebd5bbefc207a60eed5a8040a0bf1947160ea94cc4239665a0309f4aecdd49fe6d496d340829a7fe3b40f5d97fa3da34b7c1804f06e6e35105fb71026c972a8a434fdb74468cac14378e4fd26cb98b45990811295bd3d02230a123e8f5df0f8e2eb1ed818f0e44478389198696de852e2f7cc24cfc99f51743c8fbc15cbe0874aacb93e4aeee8219bc96aae19e32d11112b6bbe51a522a2d96d84d60bdad14d1034c9b28045c44f506a1f01cddbb5a866ead9f9331cbf1903cd732603cdab91a2cdc3f2ea6ca47bad6baa626d69dd2339ba1f34cf2ffc563227935024779e906653ed762d3c32002bb21c90467bcf53568471a01b298642debd96051a2ece7ff58cab23c00df7ba11d7a541da92d073c9ea3918c80918c97c20f40c2bee7d20295344285b28df2a43b5f32b9b41959b93966af081f8e855ce056939987e4cce18ad06b6c239e0c012cf815ef857da11671239742247297b653e98cc2390fd7bcb118fbef9f23ab0d96b707603b179da87dba500b09d011db02eac62e8ed172279dc6c188a0b958412fdfda4e3858fa170fc377f79939202ccdcb1cd4acee2389dc03f23a3c2b0366b514daf77984f5e7b0f10777159bf7a622258b449e912d93fdfbcf83c7f215461a0d2bc15a1e94046833698579294c8699f100bb18ee14721bfdacb441442f3400d48980cc9b946980bf118ff89fdc8e07a408248253ea5e86659db71f2a0a81a82d6eac70d2124671fffc3fbcca6a761e37af9646ed6e6bd71fac6b192f92a259f7bd7ffaccb4da95d098e0499c4d734bdf5596f13d33f349301795aa380ff0f8395e519756dfeaeb3432e731d3ac769f560294e4cfa48b43fff2af894c8bd017a037b60c7da4428edd9d106e98f3868d81906e8698c89f7b6df80ff6dcce7f46f8784038d97c698cf0a4eb3fe29d162d40996286ef4b18861db7446acd6b69b98d680c392aa1c9af697b791376d3c29d637a7094809f696186f8f529b096dfb0ca8f97e61ad82813a2c07873413ade7b8ff11f113d061af0bb896ba1771ecd7233adac6dd6a45c1ec218ed9ef7a8236def1a03dc4060b46e65aa6ae61c18b5d0618a918527ee6f39d45979a3ecdb59c8f5a7c0bdda1ebc7a1eab4e0793abb0232547c7a47227c12adcb43350fc4acbb4f41b36ebbb641641a35f3e3932f02f7a1572f574f0bc287379dd9ad00078e1249c0f1174daba398008d64dccb480e04bd20bcda8b0055a840b3b1ea48ae15a752c0c70f63576a1ea935dec979367902ff0eb0a5699585ec9470bba6f4b2d1dcf3828e0da8771667be237a5ad58047f7676eb5e7f406c107db24ea65b7892ca22d0043ba327e036c65114383d60b000491d09f5eed0e60107c1d3b4ffaff7f1739ae8324680427fa3cb0f9905d28367c93ab064e60496d6e434c74c40eb4aa932810f21dce468a8bc5dbed422b62a6fcb15775cf0ed15e46837faa11b09f0cf76e8aed9d251aede9965938f7e878ba5b595cde82c57807ca0cec04fec2fc3a2bdc41db0b64bfecb00475b56f2e0e3aafbc3ddc4c4409c676b24f1085c90b585321653801cd49f7ea0cb281cc49f86c0c37f048892a00d78bf7b38334b4ffb40806b2bb9c87dfcd8f893534db157af542577de837965617994f43e2c07d4e21ca38a69726979804da53dce09dec35dc547e01724be7d743901aa6303af641af499ae6777fd6865cb47174c45ed25d6c686979b510a7c672b5034acf0ed0c0981563b26a253bc5b297f402f3fbd4d8e3d65921135144b7292a818eab0fc648b212d843d290b11c848a972b2037e3b0e75204c8cf0c84ac7441c03006ee260538292601fb4a071a93f1776cc98039b27d9f90e03789040b1064a42d7b343e7f6406adb12998d15d941c3ca7761ad655cb40a0b7f8105a96a034d8807ac386d6bd40dc3ead929a44e6897ab2749ba20ddec86229a4a890cb525472c982de68520a234a5394cf64bb238e579198620e2845b21a3be2a941d1822238252d919c87e12bb5be11cc6bb6889ace7cdcd311147377e2c9f0c7d8e23457a05c1cfdc0577c7eb7ef46f316fdc1fe44293f2ab27595401187b7ce3279a28c70bc5adc903cf5c2a58845dbfd86ff806ff55517403c6f37762504eb361201f4e70516004aa84228a0113f6f9f0614abf9457bfd9b034965ead61a08e1a1a72bb3f0f3cae9283db0201c845b10fe30f3ec4a8e98a08b7c7710674803e83f3f2472391f6452763073b31e0a24a51c2707a4f9221b077cb50922a87db6fde8ff6afba116e7d0b3c2b77d4d2b07c084ed596ea43af9283a3640b5b15924794687c8ff9edc8c7208f1ce3b7e59b7901fca49f7238fce6b24a19ecc0f17b02feda80b15f7424d13da1c91a3f2bfc7016fa4b3b948f7d2d591cc0367d545c0d3c8103b89c35ff1bf93df6d7e285be22f0a143f798037b75e8dde57c4d244d77ca81b411736e72f2a9fa50ceb527527c8d7627dcbbb00be456bc3d629d510f37081e28aa8f9c1703381d86b1666916c55b4331e679f19c8df50fb5244061bf36cb50e027d45755372338a6fa7ce1ab13f467f7513fe562fd139e6f695d225ea275e845ed645e3744bd723cbe99cc822d6348a00b69171ec41a6432153412fd00f082d9ef609aa0c9233bab23f17b9fb318a079f31a85488b3159f9dbc50edaa79a800cae46bc0a69f933e3103b4781d112f1eb2514f413fb420d4afa17bd2b9432ca7a8e582b0c3cf63f6a96af7097385890b4bb08810001598ba042505f8e79e0ec9184c611fd6fe0959824cb2507d4e3a951685b3124202d397dd2cdaa1625a85542efe6120f8c3f8ace201e23daeece762cd48b2e51318861ca18e2213939e63e3f45a460b0b4df1551236b8f1a6fb9647075c45e194d3d57de9cca34553b80a07f1abc6e33fcd9f51db3fe3c3475843a36c5d881ce649c57f60b5f710f95d748470bbed0a875016837be0ea425fc0a4f9cc84fae5acf933b6abb447c39fba315cb1040b9ac729420dfca75b20557737c5248e18a500188c6b438866f0b98fe53400634ce03b9178bdeb8fe190ea3728ef0c7d2d4a64f28b9fff41d01d6c117ee487fda9348422e3e5d11ac0c7952bea4d8d203092e1359c06439d06d50fb55d9376937ef433296e5bfd4467e75b47b6fbd8190de88de3b862b24394dd1224eda4dd30711521a89c4290853471a0a36e552fdad50ec7184f70370b241c44dd611915dabc9ab3f90faba354897c8c70583efc9b66ffcd810c7ad5df977cabae4483fb84d18995d87549bc8142db13d40d521b8f7ba9826eef0d29926457dcf4dfb75ab68ae532a9800305f875235806e9da7d9b32c15b3b8a00b866473f22ff21ad06d10f18b5e2820e120598d54cc1b9125ce0e9bb7f5be882cab7a6657863cdc79a4284b9d2ed4d2da19d246318aa5df05d8815b60333f6a9c397ef2eeeb1ddc4e051574c211e3f20eae661929fb4a8239e81b7846580beaa3f98038e38f9fb56d68e08e3a11bf3d9fe904881a2a01914c43999409178a6b923a38e6cb2d368d365f7a05ecd6e0de8a84882af6a866dd68588fe82639c4aa367d764a70c18d49ebea6f75e3cd416915a7f217c70227a01606f87bfb64fe4f9f8b39f11db0f6aa371f72c5deeae805ba627362aee59d94b3e10620dd961b64ed430a6fdddf213b8847622bc881b05711661282147052f62fb411b8956fa5839c51fb3a0358153112dd55f4b22fa1a44a3ba7059c78177a84976eabd853184c6e4466170441ad8e4efc2e07b552cf52fda262cd2bb1b2cb7b27d19ef07e3fc69db774210da6fb13826c409d89e817d2bbc917ff3bf23325eda6608d3fe41734b10ebcbf9f5d921012bcc3e3ef12a546e3631e5a4e279554be05080bb03d9e9c5c83bf3b4828e7b70b12ce6a35c857c68dbb152cd6dbb86665a55bd2f0b686344df10838a6a13d0086f801647aa98a0ae87f10da2fd8e5b829c91d8645287a0307177fc93cdd3511a07de95c6c552517d49af02f61f51f0326a63240d3af901cc8ff01ad043e5748706bc3a422c2d54406ed27ea996018cc8b26d8e669fca70843b255ba2bdc9c23b5b909d1080085992c1b8017d60aaaf13d57ea1d8489903c01b177e3a94d00a59ecbd0b945afe7e1ae9544832051b46dab2869a238af6f119818e2e421516bfe6ff632666f89eaa3767f72c7cd07016d15ca86bb3d53b0ab5e35a9c91bfc5d35538ac67353f0f8f69527775cf2c7b29537ad0d83e0109d7537f3ffad3d08b86c67c6f80486ffa24a03952adcd4ed3e6ad788732a046f11e39648146fee3e064d8769247c5e10b219267e85432289dcaa379c3591758255396c0acaf2898cbbe191a35dddc0a92bf343b7a1e801784ec51125e33f50cc03f09688a892e4118dcc0bcb3b96c95a46c87da4a59254724887fc9df63dec6e7ab02182a96b018e559c069555f0d2471ff3dc28070a80d98eac0e35c960e85cb86a1fd1605ed4b4f720726adb0cfe5f511846ac4fc5cdcfb1970806903440787f74a2cb7f1d910810407062dcd3a38b81e57f0570c1d5c99de5d87887163019916f44fe047218b33d100a5d0fff44308be39d54317bc16ba68d2ac682aa8e049f8b2b3f7af6b5266c50a6ebbeb722568637ce9ea5f3786e0a3fec9380638a67f23e3242a06e6aac7d15df918477737c7cf667bae45b8c4a94113e3a0f4137ae64309f94801cd80f0e4b6454510b8501822e4e326c7e760f2544646c19fe109adeccec1f154cb9daae279cc9d2f24b25cf8f4c3b294e9562975920cf1aa6fa59b21bb2ae897294276c7a057e664d36c63fb93792ba4c3aa8673374a09fa3bc6c3faa36b066d449cbac4e552bd1f75130a8f863d803f9a9b0090c38c4f50881fa42623e3f274ea7867f11e34b46489193cbb2497e0d607a4165ef9c5b9407e4530d7201af60989efb1ec278a0e2bfc324687030673978606dffdf59d5c19e2cbc917110d614bbc0eade6ebd468486bf6aad52bc8446f72e24a601e62572cb571305d947dab0eaec75d44a3c4e60cb52a92f9248ffc9ed5f4c3abb1e01791be32686ec0f83376a8f1ff9277cab7c84439a84bf4955048125fc5072fa4e6e0e26508f299057977ee6beb1ac5439ac71eed0ff5518919df570d44e0d3736165789ef329be936aab2ed133d788102b9229850aab0fc5bb98c3fcee0832c5236ebf388290279e3ac7ebce98b23a88be77c6b12f248cdf4bad82b9512e9377f0f8162f89e269a352ac225c5b78ee37d4b61163de9bfe16d542a01b87f7172402e9e27fa3fac0f57bff7b99a8c4e6f0c9f8bc0964aa6c55137f6f0a3a5ff372a875a5c08571614847509048803bb734cd43f77d155a1f0e39e70f5579cf064b1a070f4b1522734c24e2fd2cf9976b47a8981b57aaa90ddc7b091f9148efdecf13596136f8ee6df56fa30224639fd58f163165a418603304f3a3c823dcccfefe7817f91050c84da2f606b122581785954184dfbf386715ef639ba1035b68e73278ce01afc03f9765cbaf51739e0eac65bda5420605f64fdb503b5eae5d367a8d62834baf9b706768dc74c49af8eb89b8fae21ac8b46a48aa986f828ae91e2534bdb79bef3b5931f764235234e7f48ee051323608759249171f7bad7991a8d59ad7b2696e1abbc8fb06d57bf051ca778c2c7823f3f3ad9be403f6dcc8d28a854fe0e3d9c83c0dab04a0400f844deb3ed08dcaca31104b62dd71824b0f9e2edf6b3b3106ed9c479bae95e1059b0dea9f687025feb04b223d4c26f12db7b97245c2e9b9836478df41051b6f5a01176db25b5749a738daad44e82f70560c3cd7aec98f6ff5862e339448bd737460651c9e78e486c13f34f92cacc4c8f220f0ef741772040e80981deec5aa05ec113e7ab339428f925a4a915005bb34ffad7e3aac4f6e3a4068df091b896f34dafdef399cf5a621a9830e8777d038589dc1053bcb5e5a25b3bd59ea6eb8b2fce6040205dd5659c5493e82f1c2171967eaaff559eaaba6a9fa0c0c18447418e5b7a08adcbf6a8170b4336cc00a0461ee750367042edaa3f7e6d71253b0f334153d977d45c321558f222e0ddfb58210f9304904884d234f9440081351775f7664c11a031f10266acf0706f64f591fc91ec96cc2738918875455c91bcd2a7195a3722f10424b82626880e1f7bbd90a54dc9a41212dcbb1bcf14671ce029a89ca150bfeffd032c0b2427446d6ee6018287784da9887804e5c87d8512935af248ef1cc6c84008f1449e6af8e49208f12d031328abc5187445ec01a735abdb28c1f6e3fc12b20ec8a54a4cde5d881833c6b2371216eb94712a8cbc8390458d839d54891af1704d3763d24ae85cbe0483e70470601ead1e5580a8f63168e4919eb82a42413016e48f9c2a0621a224aea93dde434a49b9abd28eb2ee7622ec35fcda7d338c1a99bef4a5a8177c1336000bc70935b7a121fd2a3a501ae5ebda2bd039ec61ee829bc839354f775ee0dbe2ad9d3601b55a506df1f77ace925c66e40e4072001308774ad8ab261c5bf4867db1a22dfa68082aa460a1df64b9d68fd2d026192c8949c6de69b49fd749c9bab50df65a661d60e3a01878a3842ca8e8e6c66788d917ab182f8eb95f3fb951b5c0fbcc5696b684a3acc4fdb962ca7f994dd0d9226f2028812cecface0a6690a93361282a167eaee0af4a7a325db6ec45ecac9fa14560522d5c925b084199b40450cba8debdf335bfa9e82d2369132aecd504b4e5ae85a23c5c4390c2561941044b3c9207549813687b1aefc436430dc27ba2824aa50b2a12eb05fda64be0ac9467d7b63fdb8ccc590fbc68b75c531fd5e938a5df17c602ebff3697520023362e542406a9aa8283c46ab6686e0c35004ec6fd65508f4a4f6064a1f8a04057e3170c05735543d6314c9385283c2ff01368f760eb324e2b11247203f135048b82c4b0786af49c56b3a4841b80e917b79bdd739408f81480bd3538f89369f301d0681157a7b5c697bf3d03c50e89167f9fcfc1dbe6ed6bbef1cca16d249d26f7b6d8a8f00cff1f56627ef9c9ccd38b132ecd171f1285be9d5c15b858f0422224f01b112dd8682f214e7fe2ea64e808e3dd1cdec9d6826cf60d716086906798274797816b0d6aa49119560403e34a3b019a2f580cfbe1d8c79f4d48b9b090463674a735d480f9e02e75d25042737e0ade17784af89fa5fee7321cd84b3683a39cc8d9d2b33a497b4bbcade9630c594cb147c41ecbb2e82a7134747a7222f6ae2fea0c33bd52ca51faa8cef40f6963ce1c100b52ecc5167f342d98b30f089f92102572a0e3154e2880e6f7676991171f68e2a961751713f5e95d2ad1b4acefc009944f8ddce3319f04034af5cb64815c8ee7060f18e87e9d0f84d6da088a198ae8c4c4e010022dc409468d4447fa7c041473cac015f3b6702e436d17405179e6b5e09c989772006a1b2baf2929625a8c47b7b68e419e0400a206d903af9eb60c9d0e48db11259455eaaaacba40232e8472bc58ff3037369a1266f2110eed95a16c0b4477aa82e989670d3170308b9485502619a38f711aebd71a137b19ada17440011b77336e2eec9442b41aa8f565581a68ab10663bc6d4c2da5635d8b1a4a56e1a00f348c5a56da02dc1fc44978c228d49dfced83d6dbccf4cfd0c38d3712e5d2fcc294c14aca97709c5dab64757f7d0ef1fc7ef12aefc575ddc5ed076a0e0266e2466d3bf1bc9bd95c4b32c6ad1945c81e1329eb7f8c453136d72d2a7b116b0add8087c4715f5b51c3dd11d07da8bffc6a87c16aa085761dafb2fa5bd59a94034c74e2d7b82cee0e4ca84eecdc8eb38a25b4b13451269910632e208fb56199a968b489cdc0d85451af341114a1e97de79a1124a026ff9955c6fb029215be571478b7eeb54eb1aec804c56839529d67518d446155c08a20814f95216fa1c5b18aa1b4a846538b1a14b0b4ead61947399454d249e8f945b04c5ecc25359d0c888505802190c828b3b94281362d5943cb40ccdf5104dccbf0ec61ea95eee89906277b03bbb28f57cebde66c758eb601fc4eb4c8e5816c3503ea7c50b856c56738aa56ae81fe3156dc5ccf68a4fbe7a0edd07abef69b254a6a50a9d34e123d0d4a90d0d849f735c33462cc49c378f40ded8358f4eb5cbb3a522e08588a6ffebc51ac48849a901d4467cc59ad69e598f29ec6eb69633c248572bd833e829e4cb02054973140a8e7dab720feda238bea182a5f210c2906f5bd6da18c7db337ae3a87ef1f53ba80135e0095c3483a525f5cdc9aa6efcdc3bb3fc6b10ca73140302825a55ac4c3a7082a2d68ccc54279036ff711adbb1dc5dd1402e86e03142bbd25e12ae91824766a851e08958a68e5852e818add56bc87815984331e98f41b364c45840ddbb5c16b4c19aa43ba08c458854a9a5034653e7e0d2c4d1339864f80e432aaa27423581911ce00d620b8ba89e6b391d7b9606e09bb74976746720f3db7e24a3b48512d88bda4f80e222431c70eb021459080622255d9f35fe6f1322a05739d66a9845121a14b850b5050bc0b6480a0b75088963bf5f80bc3acc2ae1038f9851bab4132e8ff2eea8cf45c39302d0c2d137861dbb5692b8e1d1fff7f5262c831b0769f96597a9ae0302c6b98b5b29f14305add628ff447a101a2ee3f4a55966f8c8eb3f546eb294f7b6acfd4d638e129ac551e7bb7d01bf5a63be7d10c68f4060d594600b3232387e6d426108c0039e3ec064f6b71e21743abbbb06e77e491257e6f6fa59c80a9dfb3ff87377b585aa04a758e76f7765727b13e23b16c1e398005f8ce53a0cf11ba4e597ce99d57cf7df7af9cb40e28fc13711c180d101c51965cd98b3a17176a86176306a4b828a841a93c86fcd3fcc52e32fa9f0c43f275dca34614f27c4350e2efc05b3504268c7703c6a69e516d3be040c06c0e71c865a7592f28379fcb299c93e2f7b3c0b97bd87fa881c3d23461d7fa6feafa0c4416e342efc0764e66954e2fb774bd19da1add7affc60c6af1ce62a0f8997d6c90aa116723baa9b668d387b7e067a00cf417db7d76f203ac4e494688e94e0f5f821198d23a0ce1530406a8afaf796e08954ed0320cc8592ce32bc32c5f0709da6f69f531276488a11ad8407bd90db3747e46599e51595229c2554842cef61fdc056a87521886b4975e806694327c906ac8e97a7e84cc93efdfc8da7280b9d4ec1239176c3c3a92f85631da95b87ee10b912b8297c38e2338500da02ec95c0e056e30500eb04f16d88586dac579f0d59b2e849b348843bb63d72b9c736d29401ca2ae575c5a72e4e5f2dff03bb01c6424826420e81fed6577a9794289ac81ba5bdf7c4801697622179e418b3471aa16d2bff14f24238dbdc53e8ea91a94d64f2c61a602b825a0d99a93519b3d7eb957ca048d96178594613b43273f0a72e4d868d72403f244583841f493fcd75353bb7bc43ca8b31e63504cbb3dd6bb8785b421a3eb90ff698ee0e8545b963a2ea3a8123b73fbb4a50a6c1632062a49a1914d3533763432d40c7809a0bd50c4ba9b6eb4705ba7d6340a07c9ed4c3d6edd01b91d6b391698b397200e8239d9ad0102f145d0e4232317af9ff4e690effc0f430cc8af0e3a3030c433381df4d4cbb69eaea4180b713166bc41e28e12e034794b1ee8094900cd521bf7106caa139cafcda10cb6e1d6b75c72e9d562263e8c45e9d94ef500e08e6337dbc08d777550f25323d86980201810911329e8619c4090fc26fe49e3d709817fbff6e861cd1c0152a4031be5f99ac50d2a58c41b49802602225bd3d09d2f2fd52d923ce94de419647cb0f1feed47b230a6f1400c9c27fe4f929b72ac37ea2de39ecbb70aae78f20ba126c3a6edf2db819e3b741a1e009e19c797b406c13105553ab61f6d35594a473e2ccdf7413094a5511f38caf86ad7c82043da969063faa55a13c9643e9abe48e12c1545630a04fe5b88252be90b7dde27b14dd4b054c0950fb707e370e80d945be407c0470479ce52566283a9fd5702b947a84e47b25aa07c994e28bb25861e44197d240dcf33cc5c40e04006f099e3628e6abad2bbd0ae4bd8a05657e77eb9cc1500ac16716b18bd21f34e9a990f713a5b96220035f5c1ac9d90cbe01dac83185994c7d61999e5811a7931b5d3710ee228fc305d9eb0565230bc3044886d3b585f6de06d18300a477ef7cd8bf59edc2fe4a984823383029e4aea16283e54f2a90fb3daf7f1124976a116dd6930ef01cde22cd641b03ebda63fa3a60013bbf5ac1b63cb8d8706d78bed5bac098b7bc49eff62dd9cf056aa3d802f896363674f619cfb6e818e838a62104891d6e9bf9c3b8df6d3fe806662a88c4167fb39e24b387467c15fa27bcbee3e420641a2dd39d3fa6110dfb623e0bac03e07627027f7aa437a5c2c2668ebeb7b6b16baf9686609ee5b372119c7c4f438c6da2865ddd4f124f59c09ccd7a4aca6641b5b1e65d06db24b3920f9bd1ae4ca354d401cf53f307c224809a2c16d4a9511682fff531467ca06161bbb9d6da1c039988c12864468de5b56d7d74dec08413af3ef96d521ad8c4ceb0cf5ca0ecdce7aef1962826af0b9cca40d0a3fcdae88dea402346592735b25fef7cfa19baf0d8067fb96c43034108a4743ede6f504797f0ced9bf9a34032ba06d575422b88aa39ada3e89596097133b74f9f21ec8dcc4c676f4fea6adcebe9ead79d4782e8d3c173560cf1775968bc8349f7830bee868ed58645a13367019958d23b89eb6523b4563cd687019087e090bcc703601788d6e62252fe5c119f12d46de285d5d3af808d6b2380e3421197df1386c1037a053c38acf0a998279afd1d3449a76a069a33644da63ab179b23e71f897758d92a8473cf2ac8f73d7e42eb06f758dd0058c5a0f6620afee1cc4200d058e5c88ad8297d5fb7ad1be0ffa7170a76004f0dd1c502f4a697ff84c9a4f9056f5d01f4220557b990d0b8c65069e502e3c5e2788fffb0b869f92d1d25da2adfadc02e178038dac7cdee8f2fb0691cf1bfd64cb4a4cec94417da8f0c3bd7fa66a8c51ff1e4a4c57d3698ee0bdfc7c0cbdf867c558c8a0d71fa3ae036e4a9430a78fd63b884cef7a753c2e806c7405ad0347a657cf15e041dedd0b3f4e38519470e09532bd472eba7a152eab8bcfc2bbf317fa7eb4a85c67dab0e03475ef5fd92bff2b863379a5897a5bbfa01ee48a50be39efbe84e20020b953f3a0e8ab90a6f803150ac9a6fee6015a27a7604380c2857480757773b1b1babf4dc7375a9b36a36aebb48a76afe61e6c50ea0dc3bdd6fd86f5fecd18b03ef68977752155ece005b22ad7893701918a59bf1818d3ddf989b9b079deb2e3b9cfa8f10a8f7246c84e4c5528f7f80b30b0c7eca9f70003a3132438b57f10e786379d8543f036af3f92ddf98623ab84d663dd06c50e4dc122ed39b0ef81e680be7d5081cc9f9fc9a581cf3542ebfe92608ca45972a09b42170af0f04137d19add19f30e08c5e9e2cef4cc1b504899fab2749e3240697118e053bad91546ddd4739cf02934ddb0708f9bc8a4494b1bffb0f0aa147d01281a8d9a38bb6997b5477ec568eb83ceb5a0c17153b0e4aa2b0c7032056e9e9cb52d905da5ea67cb1b5e5f8629db8d30edcca5076cd48a0390d31f4af78ef85e7725400bb359dfa0340396425a03357b55b7cb121a743df4c5b42a9036cf567fcd391d15a2511d60a28b3ffabbf01c29459f54f14114d7bcf68abc12848d03eacc9a8c51205e91690e89fb19a1efc7537a896e8c779816a73b476032f34ed5146e778de47e6522ed6c387a9cdb7e1337017a63bba3cbb891e9efffcefeb7c629e1fd232543304a83a2ad8d3649125ada44ca94a40c93087008cb0856ae2928660a0a2f54416a27cb52a99475ed64d9ff726df6ccd4cad36efd2cfbba23571c6e77a676e0ade0a826a0999a3d966559d6fca92734bbb3279fdc26660e51b046bf2fc9e7635fd2973453b3a76b509065eba7cc33c996b3593bd90debb3853d497a519745db542a346a7e9122468c1c39e24832126bfe7892067fba24ec45ee2b4f72a33cdff21b535e5eabb8ea3cb794a7833ecd2e2d0e9a7f3e96ea1a191792245de3f7e4a3112fbc56d72acacc4aa4c1ba4583d3f3d51581afb28575d42275cbb22cab263fe99692b223d7a7d7dff18de7705a3dd7937ba227d9d3ce5a9c3d3dc1619665d9955deb4faec95469bd28f49e4e7f72723a9dfce92d9b733aa9d2e2a8d9b71024d27d49956254128e9aadfe94984d6e13337f445470f839cad76bd5e0f6e319b16612bd518bd4a20ec548b6beced057d96dd422b816659eb35b67dd22cf5a94e79fe49c684fdf2f755f852a38b4ac9bd1d72ccbb2db532464d656ae7dccf5c4feb4394bf82a739fc2fdc9d6853bf59fabd426afd59584f964f34a9267aa7688516a6df8774f2d0e5f95c057b9337dbd269514ed94a2f2b55e5eaa6b52de5b54fef4d4e4599ee270e52ddc25615fe9a0bfbd67efd4043267f4666f7fa326147bfef4a2a0843b8072385ed9deadbbb27df6d69fac6c78cb41f6f44fc2ec4ba889f7d1e630798a7598fc86759c9e2ee12b0be3797afb271c5b58f05c4949794fa92959469d6e5e3f7b9ae29ed1af9b53f7525de3a969253169269a3dbda6474179f7554e49c1214fcae5a238c1a73fb928bf5d93d3cd81b799de7e0a8e2647c9fea6a9cac9abf80ae5b337fdb661943765dad7faf451fef42727bf6d29afc24591f227970be2f92aa7e09393373dca8d79bbe1c997feb4fdf6284b58aa7dfdfadb67d96f77cb8197f1987c76971840aed9adf54dc093b7cf6ea537dc0194038fbeb436b63fd96ecca690fef727377462cb8117aa602887f6295ec257ab6cf2d6c47463bef17a35a26cbf7443150ced00caf6bba4d97598afb49f1687498e66af17bdc1d370287d4790708750765cb3f94d066f05877ff6d91c6a70166970bef6376d556b565187f88d6ba11be5f05a0dc9f5ce9ff9e3365f92a3e66398e79d4e455d93fd1c81afdca86ba4cc5ee4365796b3ec2f9b936136013cd9c240b0c7ac13bec29162058765026a703e4faebed53724257549350f5e6cd0d4a3c1f9d7ed4a94e7b56a70fe4d7f49799ab6c8f3e77f495f12934fd7b8ff7c1310fd942acf9f3c7d8bae995813a07f5eabd9f85a396afe1cae158a8913cde3ce001f424d2deb72b72c27b27fc8d357ca8fd66f77aa6734e233b6f77429638cddcf3524cf6be8a24215790ac9b36e3f332379fe76bdc825d6b2cf328a65d8a5283ee4d0d9a0175d435c0941b3ca9827aeebbabebbb2ebeaacebf234ab7479da755d57e96a5ec4ba46ebef702873f79af6a5cf6e38a7f7737a8fbd4ac97b314fc4a4629e28c999f3a741e751ba1368061e7d5fc51af35ad99174cdf4bee4fd881f556dce8b727666574396bf7917b38ba3d0673f87e58a43e7226b31aa189f9827628cf1e91af9968c73065e8c8fb4d3931a1222a39292ebc2a1ed2e776d8e9aaf9292dbaf852091d735db3b86bd79ad2dbd94a5cf4a1e731bee4b4abe9e4afe2ae150e6122d97b8bd51f2d697dc98b192eb47eedb13deecdfae8c1e9048460ac50739e38f4a422591416dce854ab26c8ec41adc9ef064a4429e19edac6e3de17aeb95a03f2f6cc5970175d40d195f5afd37a87b37e6c4ba18b9c8d1df8bb0174599ca064f3a3179bafd089c1ee6100c099e3bfd8e324d4303aabc7350789262349128295769ede05bb672f0426c7ab8c4fcfeebcae08af1a131a9981e9ac5f85c988b62a676324dc3e14e76b38cc63c11f304969a73a8f125347d4572bf945f5196b367f678a906b72db5a552d24b7929bac200edfd95c81efb06449c1e1968be924186619e2ced0d297bdee876cca737ed8d39291739f4525cd81b34d39503649efcd6f3704bf0362356e4a8458b726583e7a5b694cfe6c9d4960a92e5f4d952a6548e3f38e1726667384a92c12db210ca01c8110b2f20b98672f69675639557865e6f98fc4625491d4c786e19a928f14edb9c7e69375383b14390486e1c5eef8f3d8761dc67ef6138dc992a5c9025bca8db30967986fd86c32d7bbf5c145ec5fed3de0879b2fc0bebd0f0957db833257dc7b08e0b235133c5579d960f6a7ca99dc417911be9801aac4335d6a13a54871a9446bc2971542ea2dc4f1ba703ea9a8ece062fec803aa006bb0e35d8f4ad3ae4471d909c1fd6a1b0039a3cb27c2c0c5ee8477528f60e1e1c29df537e07954aa552a9542a954aa552a9542a954aa552a9542a954aa552a9542a954aa52222a40624cae1cecc345cc28b9af6cf9e48e6a494ce961dfdfb7f4ed1852bf2cd118b2e04e5a2a03a844a722c23d5a094510613e236da37b5e894d193c3f914bb20912c3fcb249e5e7415e59e6f499c45ee8be812720dc96d24439ede812395734e0a042fbc72ff55a46b28166bc4ad0ee5f8c3b4eca0fae28b2fbef8e28b2fbef0e163c3c176031f3e7cf8d8543e7c385266871cb1d0021ff2a9db020ea40ca828ca118b290090231654fcc8dd0f62aca1e34dd2405484052251209a624812729b08c9ddf9c797f0242877d670a7e34d86dca66298e79d4effe08caf45524a29a5dc7edcdd7d2372543f8679dee9f47fa51cd58f619e773afd83608ad2d080e0ffe9e459218eeab78e1cd58f619e773afd83200d0d08febb50360382ffa793e771465eac21f3f1db8757bfca5c2dfc9b9e7163ae4518e679a7d33f086298e79d4eff2088619e773afdd3d06098e79d4eff2048430382ffa793e70dc130cf3b9dfe41b04d686840f0ff74f2bc21210cf3bcd3e91fc764a5e36a3fe3ca2c738104e06b500daa4135a806d5a05ad4d5a2ae1675b5a8ab45dd873479fbd97eb69fed67fbd9886c6adb88b68d68db88b68d68db88b68da8942aa54aa952aa942aa572bf15628f686840f0ff74f23c7b648fec913db247f628f773429c1127c40971429c502effe2a2f068db1c17b65d13d59e6c307f7714413a1fb54f8e8e2e31442ceb84ba209d501704e32242e79cb81b9a5a180952ba8884627c378598d7edd3dd7376b523471179f6d715020a0aa225e921fae9951666c9d3749f74ce49a997271095968ccefdcc18e3ac3c725755832559e5fa699b4bc8512d24547db4245a5283ddfd24e5feaec70f8faeb15ee2b7309b2f1fcbb2aca022933b6271ab243823475555835d7f6a10cf3a62f9b21fe5adfa382a2897b295d436b157a9231f4ffa4901e5e933311785e742399c4159f865dd2e9bb2f4bc662cded492d78c1817bb20ffe250e34b587f727b110e2b53e1cdc9c52778f27dc3b08fd6c7182351945b8f14be3dbdd5e8e461f0c28b2889688bea466e23571876250e8ab637659ed22717aaa0fe383179dc2f2a88106128e2f661c42a92a5a745165a0cd16228d31cb1d02209b94f5868d1239fba47bd11b36c9f31c618236663bc2eff3192524a0c2b5a83bb7b967590114a29d5b4951bea765dd755eb2acbb26cdb92bca8b5566be3907c6ad0da1c24f9d4a0b539f686951fafcc323e17b168c21016579043b7c51366f251b72364d69c19965dd99433a3d9cc3ccb3acb6476f2ccfa0c29cbb2ce32cf664633ebcab20c935916bda78c19473f43c3f4cc7d3ae6eeeed37d4eb7dca7bbbbfb749feeeeeeeeeeeed37dbabbbbbbbbbbbbbbbbbbfb749feeeeeeeeeeeeeeeeeed3dddddddddda7fb9c2edde7e6ee5a16a38cf7835aa7cfee6ed9b1636cea6048cd69a9d575f7e439aa09d773b42fdfe2585d66eb0011bfd069ffa9b44f6d1339f3b9cb7ec8f22f1f56252060842903119c29f225327d89bf39e4fe3e3988a0542ac561042525254748e0791e1c4ad0759d174c701cd74513d6da9509b66d7bc34eadd50d27d034ad0d28c8b2cc480a300c63830aaeeb5ac30a2ccb52030b68f4972d981998738763c0dd057d81eedc18750bc41a7e71968ef96ed999d92bf37580982706c1697157522cafbeb0cef3ba4b43a3655d7761340131c3b44a7fb339f337eb745a560242b0c0951d4b0008db4b0c4da704045c4220d6c08012d2080bc4a2933a9c8e94422d1649c0e22c6e2bc2db9eb34de4d4cf5e5afb12e81a0e87d6c26ae6b9f696d5a73aeacf97f5298e558593c2abdc56eb731647c51b67b1c9d19757b59c6c6e3ab52e2cd3e84f99b27d8283fcd1dce3b380c0513483a0c1ad47adf45a39d7aebed1793d90590d18593fe7534bb316a096b5128845b15eb106a675253687d2a9c4944994b4cfbac18820e2d34c35e8c768329927967f2929c983171b4c49d968d0d098984c6c3bf93beae42822a8a8d81810bc329f9cd82672fc2f947e016368e2aa64150210e44aafe7eadb25b3f52bf3579c3359d4f3a6476b72d6a33486659af5da8fd55e1fa698628a29a69842ca29629489b27d4e1a343402684b84e52fff3120685d268fe56404afa9bf1b6152e7a2568bce183bc6eeeeeedabbbdebeee983b67c4e896199cda1d7ec29fc793cda9dc49aee53fec3a03e1dc32e779fee337ee8eeefeed37dd218638c9647f7ebfac165d19e0b4be11f629645e7f7132519925772244a6284fc829e1c898cf8e4308621f7c3e488051980728e58837e7f357d36877f38be7c9313942c2b49c18387423fbe4fff10d36666441939d35d76ffbc54e2759cddaa9661735ed4a2ff2198c3cb1283f29dce534a122f3698a2725db8fbe0c50655562e0c0382390ac88a75596f519f385237ada1c665d383fd138f8361299c6a536bcc324f0db6a433f41c7fa2fabd5f767f4c4a0ec11cb32000700810d4366d5ef5416d03ab66790cc13b4c19c1d64324800f86837dfc0804c3fd85975d0cc84d5b4ea817477fd269f93545dd82b620c438639c34c619e39c963f11e38c71c68f779a4c1fcbc92dbfb01e1e4f3e28bdc7934daf4d4a29b1cbe6f1c0062396bebd4c3c7d4edffc069e7cff19e39cd865d199755ad46f10a4a17979910c700cf3bcd9a61c4acb12ddde701b32cac4247a6420036bdb9a091b36647b9c94e5468e0d4f5a1b36b08c8b3252664a8b0bac1a35d82f65e046d7df881104fb6d036244cd772ee65bd7d7b951cb2d81e6cbe6704bf02eb08d6037727db5aebf5a7ec7ec33dcf9eaaf7df5f45c78fa602f55d2b9686262a936cc57e2a2d3a22dbda7d369d1cbc2542a954aa5ba70fa72aa4c95a93255a6ca54992a53655a7fbf734bf0fa6fd89cb639ee96cd9973da1c4aa9cdb12ccbb2ae2db339d7755dd7856d9acdd9921c1d091182550ce36edc2839ca32cffa31779f4dbf7d76cfee9f3f674caadbbddbbbe5c45a5a43b811b34c92644b22936c495229214292080925d992c87c74244488949209d586ecc38dad850d073ebef0e1e38bed06b5084fe5c506674e3736e726a7a5d4b2bceb3235182f0cc32c3a2b8fcb6d0fedee1e7da6b01f47b951ac717d1399453557438ece861c5f0b03f6e336d3c7c7cad965c2098acd4b3fc37ede2676bc88f2ef33c46814511e7d1501e04faf11378aa0e5464c38914da71503a9d7a299d7a49765398e49f98da18931f3c6f8b8cf9823e24b6b1e068f885f1896615846314a2d47253d75cb08b5546059d79ceed28330efbca8f125442112e7572fbc95c5a30b2ff47a783dba1a377a278f062790855de1f164ba8223fb9a65d7cbea7b5e8f06279d3e6e19d0d5a4fa93e2114c1fa06b25bbbf7b0587fb5dc1e1e146850da8c1e9d66f5468707e8f06bbf0c2adc7d623ab18112fac4935a9c1d980c6a9431c8581c10bebd6a36b92d0700b92da7cf254e5f9932750d08f3ce756459e34dca88065357aa6150c3c1d9995759685313e98d62bf2fc5887e4f9ab06673de23a1cd7a38aa4c1b9f1f0c26bb56dd64df99bfe2ccb687db72a0e298fbbbbd3eb5fdd9f6617e5e44f9e883939a1965533cb7ab77edb7878ab2333439267a72c8bbeddc928f74cec48e59d0c8a1414a9143541d9c976b29d6c274bcdd44c4181a552a0f076b29dec04873b190e77322c954f7e9ba91dcf3b590a8a99da09342f555ebe2cface7ed7edf755d9523a87fab656fbbe4fd3b44e72a81bf26414f79db6f23d8d1c8d641a39d3d9ef6d0e21e44cf75cd771341aec2cf7dd985158101c52bdb55cb0e55b3ea5e563b4fc8b6f2d71c6d8f2dc8c1929315e66fcccd799193340f053c08f01fe4b6fe08df993dbd222e363622ef8dc3d99e166be193b33f3d2e6ccc4c43c17f31f0ebd98b7336ecc33356e1bccad733bb9a18489b9a0a6e11524b8d7fe06f73c5993893cd9ee74defec661ba987bfa93ee6f1abce1e79897d6868c8f89b9a7e7c2d357cefe0a876d74e6fe3319c9f26f12d03695a56be2902e8a64f9e189e6a70b3c780124a57ceeb330b00d974a7363c62a2ab77b706f7fb3f7bfa0aea1796bada579fc15df066a5036907d1a9a2bb3bdd25a6bb9fb616d87ca9599c602750d7ef9dd23462d6e8e928fbf6d0ef664d44ebfe1f094b5ff2e87c369afff7057541ec6ab7cc95d51f98853f241dc959494f7ee4aca479cd2772d259a5778fe700b40e60f7f4f83693468431a59fbafe5bf0fe37f38a4912df751fb2f94f19f4ccc832fed0d1ddbcf2c8375c0e050e6989769c13b1d46bcd319e6411c4e1a8375c0bccc6bdf1609192c849cd164e09dce3058c7f634bbcd41f38685903316471cd2c81fe6ba18197fd3d5dee88e1185b26f31f837fd7d1f6fc8c384e728639f461ad1bda591616070b8d3424823be0ec3e09027c37c77adb5d6be6573ec8d77d73ecc05431e6b6bbc8d4329f3ddd3c8c83c8daee95ee6a9cd91c14478d188cceda21072e60bbf17421af1c5cf6221fabbdda36eccd2dab03d120773577bef469cefded09efbba71f66a9bf76120de7337e6bddb38dd0b218d88b97bcd7ecc4b1a59c6ed98db40adc1c40d87335b1bb5e730d620f7f6f67f37768fffa6b98f3607675b603a1cf264fc2d1ff1bfbcb4393fbc44dd98bb161ad3e680bf5dd0be0cfb32f839ee51f665eccbb07fea1a8ba5cc5b9aefdeb20a90f1a8ff627ee63f1ccef80e7b5907f7dd73fff5db98a37b2ec7f6379cf98b18c7f6da6f58c3f16f9cbbdcf70db56f7904c4fcb6000ebf7c3030e18e1c16af686f7f5bd13e7e8743d3f08e6c9f0bb58fc1c5fc4d7737ec1e067351781ddee9978f3647cc6f5807eab9dfe90eef748ef90f4f8b04c681c29106ef7896f1dd73389cc17386cc77326f65c8bc95b11cf7d9cf6acffd2763bf530087b5ce7e9dfd9b3e9d6ac0b716775fbbeb7df7d407cffea941691bdc1ea442d4fe0b77e4fe1af335e6cac0116360aeb436220e7972fc4fe66130d620cc73b73f5e14cc479b4306c70661c06f790ec7066370047f03b7bf71193794f131be23a8813bddaf3df8dc7318d4f06fdb7f61c7cb7dec1a99e7601e068713e665647038612e18139fbba18c07e21bfcbe45dbf06f1beab7d7beac7d5f1c1173d2daf81ee66f3c83a18c0fe2616ee80417b6bc0cbcd3e0b7a070c8933799c1ede20fe2863bb9e581b8a10a72cbc7b8e18edcf25ed774d8d43611e70513e1fdf003666247de911967fcd2c6dc415d83712873dfef58584e2793c9f3b68d25474dbb39bee7c299ed8d7f5787fdf86f2d66e2c228e81cb14b07754d74d93013eef2f21ba883ee0ded3f5ed91ec6f615b3392d980817dfc29b2d7766af6bb4ff70288bf0ecbb19bc976cbf08affbb76fadfccce6744559e8a1808fe5b9ff6ecc38dcb1df7777892d5b018031d6e415f1a4fd5ebb2b1c46e27bfb1fdeec7317897e96152458debec53afa593e668ce5ba5083b1c3404c7ee59a1ab57259f1dfdb2eaa50a272bd3078dcd7592a6cb7791b16b6dbec73ff7552ae8cf0424ffe7b261e2b992493ac528eb48ffc56d922291d9645b228870df459c31f1d7f58bbe99386f2376e5140f3e964eda3e01d9a4f4e4cf08ac59ea951f2b33a78310ac9a22fbdf72156f27d38b42537dadfb40ca38066ad6ed77f1a8c3463d7a2f2a75f21abc8d28a56963f5eae222aa2e4afbc08937255d44639fec0b3d2d10a6051e3cbcd31058b369fdf6d1ceb7c3fcab87fcae9af1f1e983fdac48979f8046629b7f0238734d93fc63dd8c1e37f20da44199fc63bea002c353a36ac06040dfad3eb4570be025cc7743be4395fde2279fe014c3f3f66b210e5f973e295f931873b57a68f21413110175cdf3f25d0bf438a89a98540ff05020b8720f053c61a9447331b428d2f21cdceb6bd34d8d95bdf98272f767766be2e6bcb2eac02f1791ceec37f0173a4a1912316aa206f11b4d87bb7cdd1beb312b45887773b9b63adf6716ef102e15e9bf255302db33918267fe2fa37ed2f36c7c29f81a00df711ecbf5e7a382c05f616fb8d8bc2c3b4af98080fd3301c1836e1e96911d4b0c5312f7b7d6b3bf342c195dd9e4e79deb69840b3b996052b1ce5991cada88251aed22717b410946772e4c215aa5cad6db64d8f143b569ebfe3397e949809d9873ef421295b177602cfd64f8a5d58c63131c5b30f976c38987660862ffc000a247ca1072958e193051a644108d918321d5c008a226ba0820f55dc60880e57d861e8c7068415b12ccb4ab9f404e184ec13ab01128200c100098810f230861a2b8c1cd9b460c51d2e2d6401065bd080a3431f0186a2210cd9c10b48f880139e86c8e14b6f4f2aa1f2c8a20c4450e8c21678b0028ea7ae588316ae88c39b4e286bc829395ab1450f0a8623237421074eb04111d86083211cb9c1e2419fe029c2143d98c112cc4085902de0f81c828080c120658a286c47b082860b5b900391316871862852a2d0fedf35fe062bc6a0058d3f11910b552043f63f22126d5bdca17b88b2685012215a1d699fae69493b2557ed332351248a44447dbba741d92d8f1a949dea54fb744df7744dd8a92c91b42a098944d2fd53857b4164c513393c0dd9227eefa037eded4bcb6b0d7bf19e22b6d5c7a28d7fc5db3569da6fb8b57bf2b4379d347cc29e77caa1d1a0c561fcfae1b66dbfd5ad6edb562fd6a076a7a6691a113428391261010d9e673a5d9628237f665a90831ce210872347e000072fbce8a28bd5ea3232c1ca070f88dc20040d44de30ed511228daeaeeee9ffa82206830447323412b72f6063c582c5a0f53c8598e447a18031893e35b5af04c2550f1200965c0031c7c4081d36ec802d0c190109ab00514bee0049c6e03667dccb014f2e5075da3c5e8bcccc7949c34184545990d01249ef9b07a1f3d2f062548a552299c02bc7781082b921b320321c2b7182d9d629ccedf34e6e33612a78989f97c42b9df4728d6c8320124d6975b4273c6871f153ea158c3f337943fa12f099f12bea26f482ec0871f1191027cf86591fb13f205f984745ee64a9c5a146be87c7fe522d6f0bebf9a411a51c4a51d081c6ea97a94bb63e0baca9d51ed8c628d2c4bacafec16a5d3e771643eec90bce5b9338a353af7776a883580f8fe6e0dd28820bebf33328a0238e2c36f02f83cce111f7a3db9bdce48d7c4f8fece28d690b981b8415c4dcec88f7173ee11170332373aca751065e4b7dc17f9d8fd916f819b22649090902142cd459491cf72db0c7246fe0f57952557245f0adc00dc09e43e40ed63e576117007fdc8f28db83897c66d1f22d94594f142cec8bfb747943992e50be05ee00e713f703da98192e41451467eca9554c819f97f2b706986ac8a8c562b8832f24f970572463e8c1b43803b813b73bda8284719f9281747cec87791af33a400170077861311c5769f93526b52cbba2e0ccb2e2ccb34add64dabdb662dc77596eb3acf2b29297925a5d2f7994c2626272828a7534a8acaca5c59f1962b3ad764d3b9214bd6f9137b43d61314944de79eec0d9975be9e361d9daf5165aaa8784b158cc3746e88615ca4c2d3f90f5cf7c07d47e97c07ee8da3749e0357031bb852035766e04a0c5c7981db16b85d81db431ca5f314b86de4289d9fc0f594a3745e02d7831ca5f311b83a0f81abf30fd0792574de0157e71ba0f30cd0f924743e87ce2fe0eabc02743e013a8fc4d57904e83c8eabf307d0f91b3a3a9fa3f3475c9d3780cee3e87cd6f91b9d2fc0d57902e8fc00745e003a6f84ced7d0f922aece13a1f3363a5fa3f343e83c0d9d0f80ce0ba1f300d0f9b639fc752e1512c7aec19b42620d22ccc76d64be679ee6fb3121b7f14007be1f5b653e99504694addc0603dfaff968426e6301b7a9c03705bebffab8cd04bebf0ab98d04be7d60208052e241077c1040bcfc80efc370696159514939c200387f6272f311e04b259e11df7176ab1fdda6e6351a8f7d749b00fcf5d1a24f733dc766c8dc74cc8d19e6fa1011892291581457f12826f9fc001111290ae5ea74437984724399d43efdd340610b853d24a4899a4851d8ab2dc4c24ef2f11f20171aa221e6136e40b9898ae081f196021f9c264623be9a92d7d57061574f720c515aac0f5da2dca28cff776d9cf12fdd2e7a57ce7027d9dfaa64ff6d25fb573913e2172c267bfe4c7108f33060c880e1e282726969015b5858826059590162454525864a4aca4bcae9f4c3090505a39c9cdc1313933731996098becfe52b955a4a25252c259eb7e2759d4ac771299cb527bb6d285bad2755d34cb42c336518f661d755ba2cabc4cafd98d7cdecfd1cbd1e65e4f7dbce5146b6cde1b9b18c32f2dbe6d0fecde6d029add7392179a46b49a8f12504626a3dfa87d70179115ec7434a201e3d7eba79fc0071418686ba1f0dd22041ed2af71f158f39735c9e85e52d211616dcf13075410d763dbaa006bb1e0d763f3a2096af9655afad7f60a5d275958ee452c9b239b28424a794543a4aa2b472145083291f6df76373607cbdb8ea7265ae2c57668f355858deba2c5791d0f5af3ddef231d6b87ce8f9c95594e9872a3d3d997e8571ad1c1bc33cef74fa07f389269ffe0463214751141720972bb3d52db7470a18ff441532b46ddb1d82becb75f96910068c7771c12eb8fbc1405c5731171877622c376618976695920f4f8a5cee7511e228170cf34a2e2e3e0dd2182e3e997e8c245de3f2473190c448ea1a0b772a18b7fb69904783a6144cba002525657a8fb8b0b0b0b0bccb0d979817491227441c454f291fba00651a6219c3b20f4f8a32f5ae90a360dc98658c2ce8c7184439c61047d17ba4417a8f32bd4777a5f22d37e2dc1b7160dc6bf6e4d2df2fc851f45dee5d25f10139eac3bbcaf2ca0ce3ca5cb10dc6f5ace2bdcbed80ba96db55d9935af1f28b0b4d903b9f2843bff3c9148b3294e2951b622a29d7a7b46a62e2a1d0b3f8dc48e9ae32fd12172053d7859f4fa62d4719cca10b50a6af51a11c763e5e24872a3d99e28d621d40a44e1495a4563d40512bd00a0eed2ee58fa3a2cbeee9a3034ffeecf66e9739f09eeeeef64ede74faac749bee712332814eeeeeeefd9e039f241d2479ddb3372b2a168320202121212121212121212121212121212121212121212121212121212121212121212121a1811552cce10b770042e2424f0dbceec1e20a7bc89653772cb67024bb3ff63c09258824a1c410a0889e6a0b0b59665dee8e611da1631d129bc6e0852cb9814c161c1b25bf638de8ad3284851796a4fcd290aec122d630795922cab29445962522a5a22c4b4659e29e93efbe069d5c294cdfdd271e478a127754dbe7b4b0e0c9252e2253478d314a29e5d6bd5d5578ce94796e43434bb49037ffc6af3b240b7973ce79cd39af39aff7ae1f38a75e3fb07071575094e9bf32576bc3bce44a717de9625fbd4a258dce853c5966eecaee5e5534eab314e36e049205054929ed9cb32e71d91c93f73c21326236092254a89a667396d0baaf261fce39e7bce69cd79c265e69082d29a9f0e8211acba1ca8fca4f17bc5025482548d784415df34345a86b4caac80d12290dc9eee48e72d76cba403e477d5f66c27235d9ae6c0a62722f1f51a6af2524f7975c4358a8b12ccb4e40baff6eec214215a1dc5f2a51f9d143f4579b33b14a5017bcb0a41294fb4b434a5794884a596cf6866661c10b4b1b2e0db9611744c486ccf3bd7bfd68b04f54ac93133abdb12b939163e1aeb73257152e887785213721afa058e3fa7679b14be185a5212a43d2629707465906e1bd098d0665834b6c341a949d2c40119e26ed4bd6944822010738a24169b1b4f67690b5f80688b7d13408bee4d0cb1ae8a0aee94ea71843acfbaefbeed1dd0eba3bb48f781d3e3590d720cec71a4dd33496ef9a95977fc401129084125d63d9c82247c9fad9cb3fd1e89a1f5ee2f0254b22b2fc3e0e112ab2f2e1ee1ba86b7a6cd13f7a486791a550965564f95f67c3e5c1aec1e16344ca95a3e4c720bead6d6be37ef7372e8fba46d3645aaee44ad31a4806c676df2757f208ccb66d5b03c9081376417c63eeb5efeed775fff1d622bc9970c6d3bca4b9d2085f5934e36966bc0e9a57f99b96465d13a145a8448c986a83d8299a81000000007315002020140c094542914812669aaec90714800d8a9c507a5299675998c320658c41841000082040008c88c8c88c8c0900e07d906e37a2d359a2c6b8155bc4940ba35e003817b861ef1fa8de8d2e22751a9f689d9291fd7da8c221e3922bfdc548d2f411061022138b62508da232463b0ea8907c54ba49c8ee7fc3f35c2d7e2e79d2f56e9c08fe97e7f77b1fd2ff6c4bb10a4e089261791c87f54c6958098c5b96d46c364649da29632b60f2d70406f828fe6730285d77e31bbc6e4fb3281ea070ba83b0a7d3f650f0396bd9ecce95bf6673b9c73a90651044e2220f7cc7820627dcfaf124445c02bda9710563ef071b8716ef550ac6a28dbe81cf9f3eac583df3900258efb5cb33b57b777af63c87accfad8f32cb71583565dfbbd7ee78b0c41edc4f2e9a43d9086bb9bb8d682b6a282f4f8aae518158af7c80564b33b54d91489ce8828cc3a1a6935f1579f1f0b9e243447c9ac8a0b3a5d2e506c4ef4e3ddc5cff43d5810f0c0755f94f0a378fe24ac425dbba7928bb89cc0a55be79ec5eaa2fb3c90dfeefc875d4dee88b2381ccdc6eae4a7b86a8e6e640f753f2e910cc6f944b66a96fbfe7b4bdca69f08e05485c3be05c1f5eb035743b2aab182fbc6995d03458dc928968bc006473dae96f949d08fa30f1e5b6e1fb113a586e87510f7896f06aac9c921b0416f948f805e7dc9e4b1bb2e4bca425aa97448d7209f19b4b3e102ff9783f8155703ca090c3bc3e5049c05099c931a5d9cb4bf86695f2222665bed2debb92e5f1da099b7f986bcafe2441a382a12b682d0afaa937cd0045182129f292259e97d0d27109f8572e61fa2e99223402e629c3edfd4d6db419d8246f729918ce0e45b34b3284a3d2e92e21991aa6ac7957da553b5380c0d73062812e3e350e620d04e9e219309676faa3c1778b3c64e0964590e2929b72c9b206cbc20cb7b54cf50b18faebd1843c529daac92368faa921115b8f85862433bc841fa64b3e8bb58c67a2ded3714be68834524c5598cbf30ce8bba0c3ce110f34e0c945c4674e65e4fb4b960ddf9dc374848b6ebae4df493c8dd54530ca88cb66baccdf4b3c8caa137dca880b6d9adcd791380c4a076c728f40c0d0cdbfbe899111bb529363444a163dfee74b8a0fa79b6872474068d220ff4f4261c07d2616ac5bfe70d9fc48d7953a3ea54b2406794c2683006a429c142b93a30a0096fbc1bfd9010ad77ed6b8cbda6f84ef162a1c520d42e007c7448d954c4272eb2aee4dadde40355c75b618ed1fe5d1a41cf8069aba0b71968117bb81c7cad31d90d8c081e16a6070b822f431340008700688f1b2c8a32219d8d82591d3b0d0dd7030401cf80560a6fa5c76e987bcb16f81bd50e71eac658101011620c79f21e0c22ac0af50817f2499bb1b8d0267425060e54821d4e42600708c09b00c2af72f9e04664827f7da5e72b7212340043a1100a10226eaf5ab6bf85246563b3d5621ba4987ebfa19c4159f5332e252c80bf7740c106afeed5ec07fc34d7b7e6d02a300d0db04e06612e0db691160d1ed019ccafe771cb84601b17721f5a5312ec90ac8ee860cdb6403bb95d1183612400623000f563b34583068fc49071879034c703cf71971c0db5eaf00b596011ae75609a7bfd3f6ec230fa0c1b1338032c00048b2530238340420890370cd7301d8c800201ee570a2da21c471f1f6e82c2948f6475a1f1eaca768a899cf84ee13814e4c53e4990824df4822e012a788c0abdd2002acb28308b4daec21d03a9e1c0207fc73235deedc888b9b1b16dccc8db779b9c18caddc28a3931b41f0c88d0528b8dbdc35dc6bc5fb8957bd923a9c0a020231a10d10c84329e8d527616c4ad2ff0fb081ff3fe0c8a6ff00425286a565ade01f5aea2539ae918fac3881b95ebc12f86a4fc14a35dd3aaa5780f5981432f38b5faa910358d0dde8220ddcf244719a6aa3dac212b0cf1455997120e0df3d2a94978180eee9f6a1cba5026493e1299e33e45626fd8351c00e068f4a13550189afa0c1ebe7a28612610c8c5221383ec945dc0a9fd21c2f4f04c0c130fd0e1c345ee4367fd89fccbd056078a725477fa9695fb1b3587fed0d3761a7203b8cfd88be398eccbf808abf5796b12bb53a67a1931351b614c634b72557598e6038d99e49fda29242baa8f83d7132ece6fd8cde5c37d3ca68a7825563fd6ccd4b40ce3915d7a8fc01b5a95bf1cda019c86f4e92cbcfdee7dbd533ff52452f560db9e2d756d607f08c533a96621f16dd58b55f1ac7829a206f04081aef71d6cc04387655aebfe60f61b5223f78d9134bfcb89a209ebbbb41ca7337ddf29a97296f2ec0e1a7340f1b5c5049694ea90a9f6d4da57b055fcfb55a05c201e13a8fa300b74f1d53d01850992e1ec97eb447f447da186c1ae18aae5ecace28fcf937f0d4b8f0c485d8efb34d7f01760a978befbc1f9ef377c4ec7a48eff7dcf99c6ad16a14dde72ebd25404e30bb4d5451e06c5a615d646b6c9209d2a19c8be24784ff38d987eed86d975814fdf108a2178b37334ad7365fe86cfa7d35043b41e3e82314a15982637a95bd5f2b17dfb691714d0f9bf3660d5a534198121b1023c2ae3e1c120d91aef4fd9dda2b89b818c042add988875cb3f813c850e2d08dbf85c6332a100fc9178ddb04a8e106a45e9c9641dd75710adca2fb89ff62b1277d51fbe1a943a5773e13436ac93d8895a7311082ee34789f6c7fe7579d059633b3d008535c0d9f5725d48a936e43839804b6629cc9c141b5ecc2777a0c22936ea97a824130c67488588a4f77e807042e18fb502caf349b23ae5e84d712de0a57402942b1361282c3165576cc92b3d54fba4fa839fe7a9bef475a929da6c0455e78441384f0eca075da869f0a3a90f239c6c27e34ca059e1f8c09155132b831d06c6d064766eed67c4a86003a08ec5cf805ce7c71fbc3d667657957dc7e91f209f2ecb8e28add9428a24aefc4bc1408ed2a0728c3fc849752f0c2643360b18d06e17b41fa1d3c48bcf5370ac4130e1d6f4984a74f3cb7f2c4762fcf94cd035f92481968699192fd4a435acdb79f31e85cc02c3759b77dc2a7a9ffcd098d15189cda2219b8ad961da8d9b787a115649c4031893e297e541e8a46a8a5dc520e8760e0080b5189f40e6c2ec90fc90e7cb698305e4835232b43a387c026a0dc98af9e804c431ec021699217d1d08c6a2e62a760cc56dedb845c081dd7c517ca83a933da9c061617cc30aabcdbed71198c6ca0203641933452b9bd29204cb6f93a347bcc2130db716d3098c0a1a1c519f728228ebd87df5224819b7e96520b3e723d6d842cfd8af2855af4c1b6b106ce57d88103e84574f16b39353cc312c30d0542ec05a603bcbfc7f236156729000711f1e0b9aa9f1eaddd8ca17e123d6db05f66812a3480b750c458bcfb95860f8913aed12233262400c80c9d6169819a920dbed942012fcb6b6a9a644ea06e0199b533872a654a7f90ab16a64b8c7228520868f4faedcd5cf03499e99a1722870d3b4c0b13954f68288bc740121def173e302d7a1a35e346f3d9b44ea178ad26b8e291a3acd0f884f83022b7569aa6a9f10a0edfc29a35651f6078ec52812189c2168bc031f53581505a0f9b8458edf410ad30d371c146355eb46440db6232a2b0edb07347f277be607ba18a3d9ef36f8e8127893c8eeb3b1a89043ed4235f0a5637e9ad9c8dd3f47bd95de5bd09e8c06da0b971536a141f0dad0c6c864c445560914986cf4077bd517afa57c4f1109ab41a8307238c351f63bb23c3c9978349fbe2fcaa7bbe09f03f446361d0cfe6f37108a26c64a5108a7998a463f97af651a7b2a3c9e48896681b3171953cf13080699738ed1bdd480f89672939cd8be852ca12d3e206ac9033e0c71d4a5b3ab1d8e415e4047cd4b9343b078b81bc790c889d1e37a03c90c0195d2ad948e418a70e1f90f5a533cc44d6e79c300059b773c000e5ca79fc204d0f376c1e48ff8ce294d80272bc54879fc83ace092620eb754e1881d4f578c2480fbda03c90c419552ad948e438a7021f90f59d130c51aecce303727ab8c9e681e467344ec13620c73a353c81d47b3c604e0fbd503e90e28cea14d98a72653c7e90d2c38d2a1f2439d135166cfa8778fa1832bfde14ae9c1c8f9232693702690c410b1aefa2bc8b9155980a91d78e190671758c6c19766619b502b0c626549860723c1a2b803e96044a64594950fb728f5ce9e14ae9d3077178d0df618e43342bf429106c0371571638310220bf5fae92b4439ef6658a35f7e9c1f4d3df465ba1f6edd3743a65032ec0374a6491d22deb53289cc7c08fae875eb986ca594ad98af91181c6b6ebb4861b1d10c8ece0a3de630803d1da9859ce517388b1679c92f7320d3f3c3144521e6112e3b55b5b853bf23eeaa8fd605c9b33fef2e68010d2cf3c488f1bf686e5c4dc1726d55030109a22a82b21da604734293278627be0cdaea84aabc20866c1f163427bb8494d98dc14452100289ca8442cedd2f4b94f0813714241ce48eba0bc5d913d4ed26a7a1d222b5f68e9b1b93ed9625f4e4d7e1bbb8d1b438c50e410389f0a0e4ba66f0fb05c3e9cb8ac907bb483c9962de0a8cd6978ade63583459988c3668a07f9593e3711d218bfc021d48e38341c26460e044e1f1664403dc2bb3e050a0c3c96c09bf357b99a4addfdc31465e400af128a311364559b53bc515cc238c3c6aa4bc7e04d98edacfd33e2957e83d9d95eef80a89c602b1eb98cd3eb59bb054d643a06647943ce784412a535a1e24f77028e84a4b270760e6b6ead89da65d1818317415462c8c63e34640f566e67de4e05431a4e1a727e7dd419fb829de4ef52639a268ddb6bf55699039635837f66d7facde09efcd94f47167075ca1d3c9f29e281449f6fecbcae213221f4f29d4d6d48f5f26500ebd446ea8920606ec7a97c8c24ccf1391706fb452e7ec98d1c903e055c0312ca612eb6502f726ebbc8b6fbe10a068150f59ed32c2b454443e2b003941ef767e21d754ef678c22780b1f84e5824c3f3d18d075107689661788577743f029ea7825ad54c35713de719a7e1b757126cb9cf98b5833f6a9aa14a3ac4647cd1d7b87916d6d1234b8889ad0c7797db1d0c972c87f3c411845917d0576654d054e5a07f3fd318c1e526df2cdb46c145522f5583767de8547dbcd1e20009a2dc6d60d0e76d5f4c285c752badcfd3d43d60fe4de8e260974d0aadab4a6f3c7b546ab2873ebbf811aff36ab2ea414ab7f02ed6719daba4018aaaffb522982f677e970f71cfbcc00c466b34e707f456a594f0b118d43dea2e7b40540774b8b14c2888922f6a4587d92cf663b2af7fe27a5c7a0524b44b63ae8b7a9a7c39f36df8e087a2007a22d2199adb43a5a8d0975e915620803a1bbade13f5777b87236a260109da6078fb55f20a1f8cb65ec90d9b9563a439c60e8004e9760dcb26ba138146f3d118b63c0158895efb741556d62a885a309947b52565365739e36f6252b18722c3db31db960a7c5829f64967fe1978e30c70307ca5a7a9c00e36b8f8a5a283b0223e3411bc9c928b4f932df2a8bad154af87054da21369087ddd2496c8712cbd2098ea38dc1f8faa3d3daa69c0edc631fafe230cd35c9afce123f911f940d3c72c263f23b0d3d5729a6cb2a1a5f7e09e18549c87284aa01e1c1e5faf76f4284f39b35a4b828e88493f4602dd576443ea157198099ec88a8e1014404110d7e308d2cc63c65a83f4ff55bb4f28b20bca780a9a89bc9f1ef6cb3bb22ea9b21d568a89d3d26d415175782e167b912e75af8964cd9ce224196fe1df1bb59ebf0754c5a334fcef280962e0556a4239075e057b2b0fbc9ad42c58fc95c6bafec8f02a021b017791f2c61231025e3b51606d6cf136aaa33c7cb1f74367a1da90e13f27352132b7eaa21244603d1f30c8b3ee3c0a8eb4263a1a4a3ea7d374a54f97450b35a2a174b97af23b3f034068a46b066d7bba0a58fcb814cecf24b9330615a93c54e7c26df06db168b2d0c2e2ffd3f44052776064bef545362c9f9c9ef5eab97b1aaf2c6662e3b8686dcc290763bbd4b8fac39c6cc424f56a9163e54d2c25d54896f49c0d2139654a0691cf894c7b3df1cbc0509757738a3d9644cf654ce75b00b2a0cdbf9306ca315fc3fba7ec22a6c77039431cf3c32915a6e3f39b1923995c41809d1631c66a0d24a8a29270abdf403e4b18debc376bed62b2bd30709306b2923642f50d05fa00a16aa668d69eb6d9e9e58403b64614a27d33f5ae23d5754d27ce0e7f32562a57193ba47947588f4c416ec1723332a104f34ea2c7c2ccc7a6a0a826949d76d152946e314fb0f49722c6e953d8db31816305a09b2b812e843df070473a15a8444fe3b7fc5276175ea5db65e8d4b763778a2e84011187ce340f934230f39beef6dd7653007f48242837fd76dada150fef6331ddd59eca6a070b30d2372fdbab8645b612d37d7bf6f17f58a32b388136c270e3de21495bfcc141c0b81e4680ff63eadc22c76a47e174ec4d4a45e98d448c06d966592eaeb7fc21c2a9f023eea591cb15166bee30a4a51288eb6961b84dda81e5a334bb9e125926da7aad1f2c70726e01e81ed401fcf543b27f505fae7a39f651956b29480c003ec91818b55fb29110f6a98fdfc5077e999ccd4f37e6573adaa17cc7c77f4553d0f2431b475be0f07e6ecc6e07e352c438c89734a72d39c6689e03d4c7ebfd404ffbc8c9c980279276cec1f3b64fd09d2cd406571d8894145cbe4c4138949af5de8229abe748093074e80c13089b8e217c09c448731d87d8a6cc93afd45ff489c01345eaa48b7bdded499f502ffe75c3f1c7d38f5f34674d59abf40a6b6eafdce0b9b57d8feb683087b5f6682db7087a7e2814e6334011ddb4f3a21b6c3369e3b8897a2a8df9ba42f51a50d3fab8fba6b2e29b091a06df0b911b40064a5002fa5d9d8d55c0fae5eae7195637fe341a902314f5fd742ec32525394152f75e39cab6c2ebf4cbdb800ecc472429a9303a36897a73ade004e03771050c2757e2d3993d34c419245a54cd1a40d96f471dc4340d665a7e18ba40a32f8b1146b963df52c8870558e13af83ae793940642c15c2f84e649c5c2c74ed582b82a636bf8ad56bcc85906fee3de15ae5a917420889d4a0cb22ca167134bde65a3de61f7ee26bf2c864ab7d6e4af7eb268071fbf9ba3f1cf9088a61ed4f2da3efd69ebaac7c26516b07260d4bc67b79dabe22295ba21c0d8bc51c2aa311c3a0bfd30b633bd05469bcb3381c743c8353cba76fa3eeb4e37ad29b386b7e38278e3654013dde513d0f4c4b4e0f8f4a002442d893758bf8dab7972aa454d0d02b5d8a358889c7d9bb898b2ba2d8203f22628642a9a6c5b9037c6031d653b12673ba222412f08664b60f3b4db1017384cfe2dc6ef7092a707259266e61480230e88b90ea2010488e7adde19de8a93e289025ae8a26829a3c11e1d17e30882ec5eee204019f5d8d7cd786a0a2a2fd5438607861b00f597d23e394cde1f76941e84ecc4758c6faec0a424ffb7f2c63f212d0a422d8cda5635acb3f8d33104c85235146390a2bf0ff710ad52418b06ee9cf80591816de5ebb8fba6f4a696e397da806f3b49fd2693e1d12de495a37a9cb85fa3db4374c2c44a19d8b9ded3f02f4242b7e0a4e20192c8c72547ac51ff470458cf0405397374c147055033c2ddc2389e80d02298c70e400bd1ff899b656de0a400f3b13c897eaa60049c50e5416568d7e05fba16a41110f75664fff5c8b4897f063c963c19a0efe2453925c4e6f96809990cbe3e2502f7b6d0eb513eed6240831d361461efdbaecf8de29c302f09648976c0e8962485ad9610d2f4f06817b4b4b0ff25b5904df62fd53ee06d4b6b0564bb3436d9f9d75cae98c223a3e20a0840b01f37dffa38aaf46f3a47620bc61dba7fa31c42c473735077eaf009020bbe720cf287cc82790bcc683c8bf517ad98321d447e1a2052e41c25d352ac3da589fbe8436a296b0bccc6ca069c2654d0b185f586aaed395ad2cdcbb742f703fdff69a379738207249830df9fb6828e05bd5b026dff606103e0f71af4168f16dc1d1088da4787b19f41037f15eb26819c88a24752e3423b46c8edac8191ea046342ffffde6e2497e1f2aee13a90159943e98bb4a746a1a8d181b83442df8e86a95e96fe953fdbe7c94b897faab88118ec87f6be31fe03e450640ed90ac6bf5191f63c3f3a10ee8172d906f667e893c098272cbf9ed10472ca969383198424d6a1415354d171c8ff70973710c5565d2a75be81989ad2054b1c46813f0ececdca589add4a09ecf840e2fd80f2d9c9ed003d29f071addb0e8bddd1983b15746f81c780d377c1ff972bb3ff22446b81eb3b89caf29ffd64dbb97d61aa934a6d39f58c440d05ed0a87695d5325fe9e96f2912a935cce571c2a98fad74332914b0e84faffaf7b380b197032c13617f7b42fa2ffb8fabf6337cab228a7359db0b495835fe0230152e05d0ffcf94b4273549cec488f536cbb1f34866476fe393e0265c172107acb32c5bf1525c81ea1b38dce33bca53a4fd5b9588dabd916a89d6e07c25fa7f3407b5e1a38b9d5ecded4f399563ed159802905e41e8afaa394dc389b601c37eac1706c714f8d1f18f7813cc0105109580d585c6115eac48e882f888a23ca4d6e0fe3a9f02dc8871e3ad7d28b204cd24893f3d1cd6325656a02160d56d7436d1cc1f6b9d0da35bf3601b1cff06d4770426c44aeda059b77c33cce6033548d7f78cff3b6800b285e521fc49944eaff4dfea959df63982ceac9cc2e96ac5cd302395740225dc70059b4dde6389ca64be1610b6a532cf05a9191039c15a7f9276df342157f64cb7aa828611b127d2c172ef36d6c39fbe455b4e543c54e644b04245b2a260d7277bd284569ad41a5c996cd76a3d3d62dd062f488ad30186a4b75cdc28e1f469a4384fe07c13087e89079a57fe4de43f213c6b211e8d8dfe297672715966a6e48268621e4694dac52877876bf45e88513efb5604c855fc5cdc54dd4a446fab790ce03675353d10fa0338fbcf8271f0f1545e422220d91924487e6fc4cba95c9d4c3c06275203183bbff369ad93f038584a0ff727c840c5b7eed3450f840ed8d486d48280b33ec6500814c691ed491deff871ca151418b109d18cf026a04e58aaa6f84c5cdd65c3245798e1a1ccf5de4c725d446d1cc8f73f8e9cb1b56a92a0ad510d36bda2be82138e8041cc882b7770104bcce274953c6f93224f32b2e48733234f73c2162dc987f74ef55b8caf40a5e02b6411485c867c1d93f123116502300256f33bdf9cd315a789ea0169d4afec5a65fb5f8df3f03c077b3766d1fafd63b60cec6406e214015ce8d11f5538b5a6c9eca1faa27eccd1b7aece91641eff9a2038af46c6f2783688d5ef9453d5e466b41f28c1bc488cd4ec19597448d376365dbf57d772638fce9ea4033111ba4e0d7b6768a28d97aba314975a42574491fbcbdd3633611a8d573106665bc0869fa4164e4c351fb062c5165d7f274347bbcac2ee23859330285dd012f0f2235d6242c348e457e1d378f89cff896d67af3b2dd3f29148190b569bcbf9c69661fa83bb747611b86653aa88ea5c595ce669cfaf940616bc70090cbd609193a61d33986730a6a8a96a054cd82975a3f9633f11832acf2599de006ed6d88bfe10e6d760821b788649f6702a1926df8704d2b4792f3e08d02863cc3117797c404a864d19227410866b8197c6abd351ed068cf39ca2448e61767e52b2149cb98cb4aac91ccdc42163e78feda5e3b9e940837bad2743533572b2256f545648b648ccd547f7cb5c318e5c2ed81443b1e96b769a44e250f217cf85ccd929e91a21a8c4add1e41ecae2b65b020b96a76c40e1e660d1315004803c5a96cd0a8ef64383df93aa5548a7624c6a1a47326b2cd25393a78cf713767d54365639f674cc6d436174673be8fec44196c36ec774348055b524f7fb7c0f7a30d3ba6bd60167d1513ccf3e0b7b1a02ce0bbdc4ec590dd4d4d4e25284f62c7a931d71f2ad687246d70f39759c56b1a74b5f90b2a71918ac025f6850aa3e706ae1ea3eb13327f52225df91f5de3b123202211f23b766b16ffba07b2eb8b0b502658eeaa500579a4e0f4bdc281a299c298acbf022c3921c00ca54d3ad3dfc521c01bf014822d5c4155ab589cf3ccb925384d0d8f09674b088202188b2de730fe0cf9e1e2271731e450e33f7dcc1ee853140a4272da7c2afd3b9d61da5f79db6dad0131453d1e7213d2fd42c3df83371bd52b296ec0e225094c10b6ceb8129b0529378449e1cd0e5f26faacd7b3f33e18b6fe03cb5a6dd9d478737aca161bfd4bc5ab9169f5a3f84b746271d6ec463f46417b02eae91d81e6b9ea4033b4021f208bd444c42108ab954de4bbc8d8e91f4849132acb8358ee425211ee783b91bd1739def44b184726e7772cfb741abf57eb59e517d3e40b383c7256790b1114ad0cc04a7dbd4160f44c12b12a430d61961e528cb7e4ce49fb73e6c141d7c7034c7319052f3836d445043539410f02e7c77940fd673bad800f8c39b3611ee63d6452834253e15d17adabc50ec0823ce720b9750efdbe39a63cea0ad9ab701f4656815c9740d285e5ca78971f02cdb38cce4ea2efa41e60544f8ab95d6696556a653ef9de538ad191fc5872a4514039b52b186903f8f25a69108691487c418bacb062436d7f041d0904bdf8759f680d980d02d2266405b8d6cc91590b2da58b570932ecc4f3adca97bb5412377f5591f1803cb593fc56b1d13f6ae80952a5424450572631fca66f74c55ec1ddacd52078ab1254cfcdbb78f23298defe13ae474bf3dca30dc6bd67ee33cba3f52fd7e8dd1441f87e8080a8df6167074335af9acb2c77d109a5b2d8adacded3d1ec9527ebc6dae368d35e78ae99df89367b22c5cefba5c31fe4c350ecf9a1f9cae959d9f1a5ff480085466ef44f54c90d1941f0a74a4d544189283adbc6bd9f255feaadbbec18bb21d90ee3bba90e47bcef9df2d9164a7be49d88e4ded6cf3c278dd1c8649ea4365608f7011bd84db0999c0f8f62b769a8663738836bac00d7caac27ce3cc54b6d371b3600f7204be8ad98667006021500e3e6e8d23128b1eff1808280771adffd77ed641eaec564579560cb8822991a1a47e3f94d82d1dc0956fcefb3e76c397dcac38e5a1846e4ef66788c6bd2617f8b0fec57fc296e79f32e5b64d9811b47316e924dce8f3d1e79182081911cebb183cfadc67f445ad973b64aadb126d9074f816615bc0cff5c82e28b089b5386cf5e6b51273a25eedbc1f06c0a24397075ca16610be2ee692a403d84e497651206e3b495e7d19f9036eff7d926285396993a4d850ed8b49073cd4b274607226afbb747d85f5b464aca7451d02bc2fe42e3ff7fefdee7ab5dbd12bc2d7607c9c209546bb9b8b95b72e32740d294182a1ad8200d14017df52d2c60f4608ae0ed968021ddf3b8cb847432750f2d4c7f2f50440bb08aed90b82110b4196b3e4bd6b483a95cc4082449aac1b9dcc62075af1315635b6ddf08cd6db635f096baeb1366e831f16d5b19b8e3b33fcf00b2a9f21bcaff127ca27d9b653458dcd30602b135fd0a79cc67704928251b81acea08a915c8e97cabc81df72af02b0572baca67a1ac7cd01e790e3181dc53c515088f401f0c240a96307d025d26505565a818cfdbca874100a19e17e6546a5fa7197c7a2ff9c4d0956f679d7c2e3070f835ca955ef1c183401613465f6f344ae46ae68d0f84b50b5f270a6d60adcfc1724d46ccb943d86f29b53a53fa3a776564eaf061a5ab434a5d674aadce5252908cfa6a337586fff88f729398c3266aebee4fbb8fe9b161261f83210fe397d22b2b1e65c5f5f2cc3eeae2df6e2812d1f407bc04fc4d4fa4d6647a0d649c00d36357e6858b509e297bda079de60e92ac64bad74a8aa362fffae52e3fb52d84abca66bcd890eb0b0d6a8560c10bf15461f19cbd7e75569075f8ed10c67b01e56b99caf71cf7a7f7833bf8a22464f544fbbfe3575f12cbff77f5d6009e563dc1f89eb08fa6ab12a4845261e18b7b3ca664619e5a9552f5fae427a5314a80553ad7a242cfa69640c0222fd37b68ef01dbe9c1abf84c9030935176eaf5a19c860963e67dfd8f4a4fb6b53d63a66c800fbe1d11cb2981f89506276ad5859adced0018e6b8c99bef7265be47b120ae482f4d1b862403ddb0448b9bd0403c72edc1334e0980ad9e91cfb0497ad8e5f1de88bfc9c77e09dbc0d561e717566c5122d30e28a5b51428a16598b24201ffa38551606758fb4acf4ec234212518c3ac87ee053b5ecf1254c38861020f8fea4703e0fdb615c65eba50efb43e5cc7799f09ee142245bd48ff8ec859b2ffb49c77b48c970749e486d44a025b5e09c8ab5348ad2b0498b4ffb3ec1e1cce65f2c112cc8b3d37b71e6c33fe87bc11459dc0e1598519e098f32bcf8eb8f6e6e68801d301b77612915c3cbab9e0d0bd0d5beb186c53b12e11d4fd07ce625fc4c04fd5d7bd649945a5d8458185ec4085c1e0bfd1c46a45b3f79a9b835252e1ba0d5368ae8815bda10c7a87724a6dce0ab8737eaa4fbaa2fead82bc3e392e6201933eb1956d9c3d4b898e43380f75541cf218e46cb462047330e1bc07ab43ff59e5867ce5762e48e720b3725e065aa46e06afb6f055d01d534913e4e8dda2fc257aa9b31d368b709bd32081d22f82ef2d7be0d9fd14d2e5ef097cf9b470f5c9189efb7daa1ecbd080e9f434b01e847ae7311a2b06cf3e5e16a31efff0dfab051f024092c0623e8358c88148bfb74b313c27eb7f110649c73c848d0b809a0248fb69c9db06c30285c402335bb3a15b9480734100e211e6604cf32d24cb28a389763fb7a8107025b017cd9724e1dce5a97d3685e54e596df995cb66e3e44270193bae3f9d9c55bf3c14741590bfe0726310843b07bddf2dab2e41b9d433f52600ff8ba1fd77da09284c47b504f84e66681340f4b831fbc8e48c93c4e9263c75a61bf2c47da715adc645eb6ca8f419abaf04a87c9f066e415ac01824ddde05ec6e17ed54470efe67f7f57e59035d8220c03aeb3501346c863db36cabde11af8f7c50cc13c1bee6b10e52c40455c3b4a9089badd7d6502907ba4c61e34e26e376954800396bbad0af94ff518676dc77546ac5062e5fb3616b9923289170df6b6b4cf69421b60dc1a0b5d1e57d91a9edfb484f7348863b383503f1cb60007a9464bd4bef5a39fa00b51005f41aa09a1ae10a8161286cb01f84afb54fc8cdde4869eae423746ac4312e96363da92f7616829c9a8a17a987280307d80a0614eaf2830c82139046730684a9a988e410145656ece41745f90e6f72988e7a652e939085a319e9785e762d0d19de15ba1826ec770ffc945e1f9344b862a307137d6f1ba4e2cf43266c96945f7e39801621cb150220b081d13345ff524a16809302e978883261b8600edb5c21cdab86e6248be22e88b5e9fd3b362156e6b25a204d50e4f00d891a4ad5499b1cf70aa712c579a2510e7e94007691972e982a834cd3a2636f663549800a9142006399e92481178feca195bf77276d0fc91e63a8a39320090474e591ce216ae83310072206767cfb29e0e43daf2dcd8bd7c81695de8b9419805e337a44c749ad7c9e90f50bf8945da4038df893f1db5e7fbf4248ae4eb7ac4b8fb071a36609ee5608c9d5c7319f255992d690a625df59a9255227dac8a5118845a39dda223175f4955b6d4070883d057e5571dca7a625a9be30eda52f95da8cf706dbab2692bfba5276ee2a2e410040e3d31ba6b590b1c3cfab08d77ffebbdc1e13fdef4d7c6449f92f053f7947f0c77b05d3d95db404cb851c30d52f23ff93e23ba2a53246c9a022fb093af0dcc79bdbe35c314b91ddea9441678d9f9d030d5836bae1ff74e7fd6c9e2bbf1ad9a876fbe8e780869a7433f7ad584f94395b5afcd9536277ed65092d5dd64792e4c02b7e5e8c984e2d15cf4a00fd6bcbc08c7484387ad4c0947ce8eb67d0ab1f1cd6a1a1e8a0c38d5f7a6db9574f499dac99b8b2b4a289b565edac068949dd2266e50b79a8e56739fbee82b99d6786746b024bed02766df01147934789558083d52b62f8fe47f6229dd7758a7b5dc3b9ce311647f84533073596473f04112d1e3ec519ef4c25f423fb055d3fde4df304b931c13e61ab37bc495f97ebadebc470013d08eb17a9a7d6f71dcf6a60830719619b40ae36360a1ba8189e262bd318c0e2fff613a29943c93df7ef0c96eabfda93eb97146283e2b4d2d7eac71ae3b2ebea7769d696db3a231634a853ff6d2f25e228c0430ab258ae0b6e883206b0a1fb42804fb911ff914d4897e6b63eab839a34d3b1eda6dff559b5cfd942be848123e14bd846ad54517e5653273dea3d4c51bc34018a366ae306dbef5304ea297ad295ed045e6dea878522449fb53dc26234b3816a29475cfe26c5b7ca57a66d21bc75161525ce0a82f1828d29b90528c211185f8e068df5afecdc3ab0ed0ae3f005c5981471f6b91a74e9114f4a0e178373f158eefc243ef997d30d10efaf6d309f42942a2a6d7fd236d706fca6463ea5a4646205a655dc5ff1fe24611b682ab44f7e6762b000bc6a9d3bff959a2f80cd45d3c57f274577205bb9bbe2bc93d92ef0a4681fb85ee2bc057483f26e5d888f9fbfe316a4b46e203b248396311e8c90b74bca160701039d6b1bc2f7bf74ac63907b17553e0df6a9bb9b243976ea6988210db9ffc27e85a0d37a1c738c56d41992647491a8e285d285b33a521877133014b124bfae559d39dca381f4df59c0ac6a282618a53b93cf7dd1a94f04f8e202bb33f21b7bbb9f7c10da1b136c7014673453d0cd60226b0848415ecf5c739500f98bc7a82542174bad4358c78a22fc1fa422aaa0355cb01e2ca8e0c0ba1346fee9cf17aca244c6c21e74400567f0649dca60dd4258545694a18894019c201bd70b4cfea44327cb8d471e5740a440af0a8e15a7258c6f905d0050404973092d7059ed95fddb5169da96733467e25e35988f6dfb40b9453a15fcf348db6e5f1cdb3692dd470d0e6d44d1e36519bcf575bc986721ce0586963ba1c7b60de478654e9c16700c0c4d663c1ac4fae43f9510760d6205255293d1add996a168e5c9701cc6aee9d3969ea05baa9ae69f5e17bcf258cad64a2aa61f50a5c6c21b6b5e244906629c10bfe52c6c9d0acee7c7732534f88f7c0c89524fc5c60e53c4203f7c0bd8a43e18d36a5a220bcd508304079d649ffb96d8e136d4537d64a45f59c70bab85f0ff4038f9ebf38110bedf033aeef65ed6f629dd29701f3e9ab5fd4213d38afcd4a66a04902a40585bd1d038055579dc2f2c46de6ee2bf8e6a083baf2a9f3a648a8b858cdb28ca666457c11ad5ccfdc94dd6a0a0920624e5cc207742537fd9141c3bf6973ff8eccc40d9ceca842ce1ec946d1a60966d766d1cd0a644e26243bffaa1dd967a78978e6782dc7c4ef5740a971a30dcd9e9a4ad5b3afd5c737187b4c76774e642d448297911604b1b23004c335f3abc485bbc3a904f52725395a93c4a8f4858b7a51f12338ff8feb4a55100bd20d780c970f9707855c51e31b25db4605209374ac6a05fdad1da9f0da0ca37855de1cbe4b6e21620c4492084919ecdc92a90f98991f5f296c9a41645109a6e6759f4eb8c5d932a9deec344abe54d38dd536b8685f6b40260e109040307f5056e8fa98835020049ff4f1f357c0bcc61fbf9bc2349703e2554fa0351e31a1f854bcf0d71c401b63d042a7619a0f03dbe9c53d746899c4376faeecfcafa7c7644de1aeffff7312273836f1c5778323b22b77c8666cc9dc503467701d9f5cb7de4db57797a2eda60645cc475ea5b154751a451be6480ffbc7d288ab4ffd6b3d0b48beed955255bacc0b959e7cf882b2ec5acea0764b5dcc40adf98b845aace1e33964e0b7c887d3420909a3ce978c0ec0023c72f7a937189799328d69baf2c1a2b19825f1532d9eaebf0b672d0c3bb5b11d0e29f79db2bb0b7b6b759c081d79686a6970205822a55a206a93b09a6daf7006fd263224a9b3da2d8f782e86ae6e3155eb0a89e8b0a9e6b1e1fa96b3e2a431128d0bea62200987a702f6b5d6e0fdcca184cd36534c23b1ea984016a2161f29b7c918fdbde35a98148ae3cf90fd03f7e8e31313a4db1ec449a22bebfd79424fd3649507be005eb7159004fd6121cc70891fea003724c8c4bb43094a6e063beebc94c06c6f297c6eccdd747fe35d739962991be5e0c6c23f48da09b077885b7cf00760036a88551c5d04a5ef5569840e47c2905d71873a60553ba1225f528a32f02a425f9fa71ee2d37eaf30037986c4cea7f65e430bfa2362c8b2cf156b3f5c0e5871628f888b5fb1ff124974920d24da755ed50b4aa20ac61058834d49e68b5cd75df3c26cc5c215b4d80b47835f98ee5a2e2358436ad7d87f9fe41158df599e9f837a002ff172c8a731521c3edc246e3cfe2f4550c968104346ebf8b14afe8c613ccb036f3f9119e83f831b7ef93d8deade4c3209a6cf41652fa9941b2e358dec46df5b2a7e05e56b36d95f66e41da61d012db0a1ea8bf2b8e1e5d27390ee1d29bdbaba327d67380db4bd3bfc6a192c899ffed7e7d3457ec01360dffcdae6e24a8f09604e4b92720e9434faeda834b4b9802ed56d1d5e3a901e6ff19bfedd14ae10d3084c94f2e3d235140099bd2a749493137d2f763041a41424c0b475f196cdfe381d7f66c704e946c798bc56075f27bdd39d000b0134f260181e65944171718ee0fd847ee03f681ffc03fe03eb21f4aec286162f2147bc84ef2f741c8a025983c55a58cc5380df7ae8ccf67efada7299c73e1b6881c36d1ddf31960d0beb6a5fe9fb93323fd28d244dcfd9d8443e6fa8c9a1161037a43d18544599e8fac54cd1fa14d26a8670124080ac4b3b2a6f07d41c47de82ad04ac630397d7acb6e47b97c3d625b289cfc6e3b12cdb63ee6907528fa44a6fde35c46e85cee277c49f8232b13af2e579d146fe17af22a66c413f4e9907b8a2aa15d17c86e466b2e97d8f6cf7714975226e448d200678b84c822c9e64945d5ae9a5bbb9dd5b79de7d06c7e3116e424950047adae786a2908f9b2363000e6b7eca2fa88fce0e569c0a5779c6619515951a38545bf627e1707e2d0c541e5622ff5aab9916f34162897487464676303d52ac824feea69ddde536d64d137f858440f8ea5962b8b7f69245dfad0decc3583837335f86b143b5afdf7ffc11b85d15ca96a730a2a7ce6cb8b90978325767ccaf56bbe5f761067ca8c6fa82071fa1531a255ef543b05b19a2e57e7ecaa0dc27d333221f72dcd43a043aa467dfa1e04c93298c4ee06ddaf70c91a1d5adc4cc6df156f377db0411cdbfa8f6a7341ee916defb37f609b66848d18ac744990047e6f1d4c50e189ff4852602579bd15b9ab3982a10b004a1599589a27aa0a7bde08af7ce37da099a607dae36dd8c53e9da29ad8362ea185bf60a78866988087209e691fefb883f75c1ba5f9e02a22daa19669edb33bd677afc387a705e76f0f7cc9dfc88a24fb3850d51d422bfac59e59800ffc1fc6a75de57800966298974f1f9e9bdedb2070ccb04f929bab553ce52a71c6932e8de891b115591478080ff5281c4558b4cbb56e5d8a22bf1467fb097f4abbb1f33b045ee6660d0bacf50d3d526b10eff15e98fd1f1fca60ed815054a0754d6167f61a957a024ca759b0ee47df91cf917101db20b83ca3e6f841ddf9e78ed1fdc036f2dbcd38dde2ea924976db2de6d49c2da4df9cc68b0cf2ee228aab6b7ec73999e8e1803f384ed079623b05220546f28966303ed6d0775629e0708c56a3bff0fc901a66021e0c1595a8dd69cd5de6a6fdc01a9424561616db67aaa264994d80d31d5f7f6e5449a0d5bc5d81b4851299579e22c87aa89afcbca5d5701f14be35374aef6b4f0d086cdb44def6cd0648dee29b5ddff1f2ed7d386dedc6c1986941c3bf939226721e403d0242af81332c388aa762dca4121937212943481f9c3428326afc4ba08a400014ab154ca9a4afc84dd2af0a25c1864a03e446a76ee411fb09bd6a22c3162fe9e524ed080cbed1450905aa694ea8484e07bd5d9403a2f6d2ffa2b6ebc676b29c44fc69759adbef0acad5d7f28ede65d39848181320ee0afa04507ad937c8be7ce4d523c2a57c35098ebd040b3429efd6f39c9a8b28d7717fb6f0a884281878a06a021bc72cf9448751fda9202d27fbe994a5f37290e209868c10307be76d99be25de323a8d20b4767e6dadc9fa1646518d7aa8b956bceb5ccbc93a8cf3d1920a891aac411f69bc7631877dab5974d15e19410c8844d39224f35d4e05bba08e2fbe3771acddbc1386c16df0fed309a17f58d769c6d7f4df9ad9a3b87f5bee417ac9c81df672f32462afe9c176b6b87224730c5cff075f80b82f4dd7bb790691a4cf29cf4ca7657bc80858cd3960facac5f4e374e8c20bf876e5e28d52d5aee1b7d8b54047ca2d0e16034ace162fd53425b7163b43a9129b1687a5f96f9984d6438bc6797cdfa0bd47d094d8e7f2000329e9da04772a00f3cde9fa5aa4d44c3fdcf236756d968597c13e1f963a08615d0f9b71583bc273a8e4fb40bfaeab11fe6109f4ef67b911358427f72676bd2a4d90679a716932e1b852eeec628b6af758777e86c4ce4ad8f79728183c2b619f6b9c0b38ea5cd08909ce454ba3be7092bdfae67ab90db5f88ca6a394f8b510b21e26ba2083a104129ed221e8947955ee99754a1190cdfbae4ff872f15f924e669e6851c9958e48da3ff21ab8f1c31eeab63eccedc407e36f3df794c4cca6a78ddbc13923b4985f9577b9ced20e1ecfe9468e475e83cd9b714da186768ba2cb53c51aa670db5b713b237cd73eeb22fbfe7b19b5aba069cc4a2f261fa017083d5a85ba5797541e5e896e86d4bb43fbbd8f92e463936057496d5425798a18d907ead26037d0090621a6e3233961435f2a0db0685e09c45f9d6709986da16a221d60d1406eb01e661ea63aa62ab8dc08946af721f296b3569a53154918f3cb145b77fb9b942dca9d0ee5b9b0b42f92b5da078498a7831e0b29f5768d99497bd9fa1804a9976e77b8be66e4d60f64b87e36f55c1bae4b1cae84f551f5ff866b4a9c7f6d7884305c6939ffd586f388d6db55b8e66d55a303487d2a0fae3d98f683c5d837bcfce080cfc0954920b81276a5ac552d4b5b9453f8510988451594559414cf4b5dcf46ea01fe37fa87bff52470c0408c932ea165c5c5e9a890e8cb637a76e4f260c5296aebc4098ad354e5a760bfc4a911ef23544cc40923d4e774db879356c78770040ea7dac075a335194eae75b4c0395a38a55b8b870be3e1f539e1547bc254fd8f84937643420608a77a42cdbb0fde94d2cb472c18c78fec9bef475d4a4d638ea68c4e1c9867d34db130b8587ef3c5a31d170622b55b54bce26ce820f7ef099e8adb141df6ab479620b42a16cd410d3ebd17127df469c42f86c42dc8f322797dd5e8b00284c0cc1a94428cae312c4f0586a76ee1a7f224fba5688cccc152a7e59885416d5454634acebe5e3b7a54a4acf57661f0b51f3822cf477d7a16b437286220548f14defadde4023d80726e471908cb51aa92b6fe5634073ab4fbba52dffe2b1476b44239edb50163db9f3a6534bd65f711189fa0971d7e544e3c92ff8096433759e66a521f9d27cd86b0f88b577b513692cc0a31dbb35881b3384c56ef1468c4172348dd3a5edd9ea4dcbc6c57b1be382d33439050ea12a2c9fba9310ab0e98d8c517ed64be03e614b42ef844c7d2d03e725e15557cb56f62f2080fd19e7fa7da6fd3ce4cbb98c093eff955eb310f059e8dcfcf0e3a2552baeb7bdb55b096b9c3b66f842c79a3e6acea25d74426b9ceccaec6dd0db9843001316908432f8f567c0efac146d24ff8dd78adc8e98eccfd5e183585e30783168ac2df379a94e5b7a560eb4bb621c36f05eeee3d6b134d74a0cf9ab19642dbb59e1345570df37037050c538f5133d87ab52cb7a82d721287e2d232ca347e7896759d10c3d18844dec4a7d55262ad0c9796764a9f8c63873c805f2115c17512cb26a8db14ca8a8e774113f0c912a602422dd59deb702f4173bf894c616d50342afa4f20f22c3f77b1bf369fc4ce8254b6cc9ab4b3c5cf656f1d17ba6608b648b87f9cc80f85fea0119b823e9e7386533ce8ede279000bc660d1d9c0c71935c191cb0ba68ea58f72e725f936eb3d35a0a16cf7e9dbd134e1205aadecec2a6b43a0689bcfa3f1e1b3358dfe5039b3a45cdbe6c5100f8bc1ea7a705ed4679b942ffa890a30fbb4c2d387b3785ff10d9b0475fac20b41e9537d85a38d44aaf9264b87d32b6d1f6b86c854eb6f7705f26f47cf95abba30a2f0aa86359b1767f8c466c446577c3079c5c77042cf938304ddcc9aba4e529b1b5123d8434da254d51be4afea0bf9488ea393199b6e7fe8777e62e8120e20505ed625573961db68452498d8ac2c360d1d89dc8bc6e897322f941058ff3aae7455915e27a379ff2f8611cf0fa466deb2d51894d09d1bb2005797f18f8c2a8186c83ca8efc516f3e93728a6dd6aa22f4b01b8aa0182c1154f902457584b2ed32fbbe0b0b1731d4053b922f532c106c9f0a43c981def5215751a7944a63354ede652c60ee16bcf89b8b0703e209441869dad7d5d39f78764ddf5b8315d2706275b40711825027f2c6215e490a231ce3dd2714997cba924c22771ed884421af573eae402dddee8150d25961b5bb38e88022ccc654e0e6c345288d21f2e355cfca177f2f048f4bf433afc6ab458841ee6204c1a18b880230fc0aab6e8c359181436e6bb55f1974ff581dd78c8101cd2428e5d1aee710b98c17b08a804e177d63f1a69a391bee710357e63476a7b4a933c390b3f03cbd338a435f7e47f28695b925724976f927ab86ba34919c6c9cc5b7c8dec8d71d53d924994c29d85e22a391285a01f80213d031661e54c745a79ce62c94463876ee86a1b40277a811452204ec765541813702387350ab68fdc53854d01875f3609f5db1eff612caf0702d285e539ad03161512e812d59896eb5f11869c9c06a178d0c6a9ab2db082b3f7f7774da0c0ceb8184088adcc6b2de7dd24fc1d2a75de45c881d76eb60889855a458e0ab79a7ee72dab35eab8d838fc8197bb96fe6d9cf3e8b9da4cc271f2b667b41caa7ea02cd2a734ce4a41b3bf6a421840aaa25676ed789c4c0c39999a6298191cee145227ae0b26e54cd856e26e224b9ccc129f9509d23d2dcd293962e12ad04abd9282595c63312d895285bd34cf8aa7962cce962cac5b520b94b503f746c9c89af9653949b262877f804b6d0c29394ae0ce265ac1572e7129af4b029b2a2bea5db2f06332e62533b2ec5add4b7be9c0a94509fe699620403d5912030bd41cff1a7431e000a2979a09d1a5fa09379164760946d3285e9bd1e50c9efabc64b84be83c3e5c2c81c0d0972c57d7beee994141a014525b8f46f2d4a5c9341be9981d62c6d67a376cdf1415042795ba32aaaa83657761ec15b8a49a2657d1d94db288864f38c5408fbb1f6b86d425e4cd5bd98c2af12a3c227c812a79f9b626d89f60b8f6384f4ec857c22b90d043b2c2d11af7a42b8275fca08fd28c813f3228ee8e583afb2e8693d1cfa3cfe5af58fa52f40bcdc2bd28a82a6e54bc7c78bf503d6585428dd6c9e8838eb4caa1229f0c05b6d76ba153c9181d8846fd998955da05cf85e043fa07783f81f52199da6a6f239c4bafc994b7c816b0b0fb3d15caf99ae8397075983894213f003cfd59f6561165f25e64667b540e60c3008b92110a46563b2ebcde24b07f0582e0ca4840a33cd55501e4531dd89f80ee1174e15adb32ef0f012cf8a590a228411a25ac6dba896de5afd09cf2f7679072095c61b713e2a1f354c46c61779ec6a0850950e2cbaa158b5b201e1e007029d08fcf3ea2ba3086897bc13b72c8d2350efaec09bec348fd33db4184d2442b83b4c75984cab15cb5bc86011e2c6b88b75bff8a92e8211ce4385407a18bd73c2ca5ca210fc88d81c41da51da1d77fe197021b308eff072bce40d29002cd65c530f6174fa5792b4b148531f5fdbbaf80169adc8c7a7c3b08f457a4a29dd217c7af21822383776b1c85b4b441506a5934f03aef5cc586e60fac680187534fd657c14915c3c60cac229f5852bf959484fd9996cf9e1a7aad84cdf5ba8c82d455587af1812eee29c576ebe54c9cc2a1802cb944296193869fc2117426fd285ecfc7947e13bac464385f65380cb2884d6c2a934e9b2e31a4590199a4d95fad67e261b13bd76d5ebb04965bd5cfb25d3a215981a340d896fdd5b85844ce72f8c28b190d88a8aecadef0fdf26691e16df9ed1ec18c9b39acd785934ab1e7010bfeda8dfa5d4dab749fd4f63fdbab64f4f820c498d797830f8a54a3bd94a0cf958ec6a7890ad70ed958c51d05f0dce55f49f440c22b09570cf0fc4f4caead332c4b87275f910936131320db1649af51ab474053877c471f8d8cfb4dad60b4c2d9415cb576d3bda74f454d0502180c34f460c7c772b122c99baeecb5f916bf450f10996c59e9f5840faf7b905c43a0e4b70f2d4250dcb1c7efbfcd39f61d56246f9d8a1afa44edf5c1efb2c2e3f217a90f9f45f6b59e44fe56ceccaf924fc73c367d3e816ff31824727638cb64c2e27aef647a0ee1fe0c387fbbea79d588294ae644986741c97de4f9f93397876025ec4ae90be80ad19c04cda7e307c0307813f61f092f248a5f51b065cfec783c7d0a653cead106e720c3a68939540c2296351a0c4a2b289d26db8ef17a8172e394ede0d17b524563080ff8aa2d2ce3ecbf47ee258041e5e841b248168fec838fd80496a7607c3cf416ccdfdcbb7c9421c29c1f4dd871823ef47a0d8527ee4d7e50875efce1e0875e110b697077ac8c476e91122a451f96551bc1b499b5cfc6dfc98cd5b246d21b419d85d0dbe53724bdc42dc8564493fa88b237ba6550593df061094e8297cbc55fcd7bb734084d2fbb93cf893cca17ac5152d719215b4191dca00ce010b7d643a0632aaebf1e834b5c7e997fec24d1d720bf4a0969f5cb9a5e302ff317f6d9223542d2a01fa5441659efc89b16be16d11c4d02f3bbc28c6834bdc147dc38a24f5e6b26b1091c4d10b102344822ab659042862c7931ed90b2b5335d3436f820f980c723ada605b9b45b77424f143c380bca460a1c9c3cbb0a81d1cfae1428d071be60232158d121374de848964e2141ffea215791d0857d80881f6ec43aa7ca61a56f97bad97e9189b443d5672dd63b24745a7042e2c0423af8a0fc41ecd42b127b12ba7e30886407ac664c5d09d16da7de664e78d6eb23469b205361d0cf886c2b3877f66c524efa0715b249a7909fb8b333c8f14d2789437dc6fdfa93064aa92804fad92e28e853aff20fb7da2039d42ff42291506481e7317db41cbd2c50f575ac0ee8343d99fe4a9aed02bef9c38526083a0179107acefbf2660c5aa867cf87c77bc7142dfc443b07b407f9600cfcdc5667b8185253ecd7388aa7a6afd87a0999d99d5c11c30d7ab3132dfa894916db7a35a917b9af0e1681eec43117eaad71f73fc5d6fb25a558bcdfb4c1973feae10aa05a2c6284032c2042907113d0d3210a1327eed3192ae32fdfbe1821ced422d08b21b59dcde8784f28f9ff28680d3ba6ea4d9b1b5baa63f10dbc30b1cac3050683b13d7a4891d7cd8168da0813647e7056d48062339a88ac4dba282a67233265e3f0d296541490960eb7447d70db6187f235900b99d1e9299688ffcabe6a06b051f3014e0fce628490cff508e3ed318093147b3424ab745cd544aa82f4b598057f6d2bb10db9f362b1b83dc38fe8e169d81568888262cbf30b7e79a62658b532f3af90933c7f69e801f2e562a75c64782e089f0629fa0151066e7bb4eb872e3263ed030953a658de06d2996174c265649d63b3fed15fbcf2995604e1e1080902cd0e694b24b8ea10a1c9f12df8c2b0029cbd817463ca954dee2429120d94acb3e41e4ed32347f8507797725be4e852f34f6b67ccc8ef544803202cec26719a544185fa06f0c6770befd61703d7a2cafa2e61fa038b0f28d63fe5e9f8fb0b58f495b996be46bed2089e377a77f42a192a6313fe0766132c42bbcaac83b3414fe9a9a95b5470e55d718de74c051c8963f257446f8f7ec2e245d7619f5e94a25adb2c7473b0dad406d30617eb8c229d212be5ca501ee46245774daaa1a4f9e91c0709dcd98cb0eb09c698ab1d82841a8579e1cb63defcd523de51744145e1f68f78da496f0c838aba5054e1ba7d3fc48074e0c024c4d1777609f1d70dd4d108df5b7cfe6c83acc92f67cf4f0b411ea4f3e107e5f2520b734255e1445d3929496c0c203168c775047ece4521a9c98691c630dd1a86bf16e4291d44cbd73ecbddc2417969e52d2c495081322f0651400f766abb2411c9096beb24ee80e877f6fc191952e31ddbd41876cfb374344438d1790534983cdbeb89e5b99010ecf96fd38568b2c1085e24328b6a662e2386030dd01f8f7500d72f7a191611e25a94b3755cf78c7070137540826b83565cbfeede2a0dbd5c9cec1a1c611f6a75f2e62d6ab5a682f44ba79b4d702db76b4a45d057b03665a042c5ac3d415e206f51c62bb5f88bba7ccbe5e9ecd42ccf27a7cc9e4df0efa68166291cbfd1ebfa990a14b2b1c85cf7bfd0312f4a2bb751c4dffdf5207dfb26d0517c31e9c7a850979d42f7a110dfdeba0e79108ec35665a6e26f58813a15c10c05c7e6bdb67802d45c97106de0ee3c3804527dd924e8174bb2c5730b4e2c7f3611ce4cffa8fc03cc8186e44df1229f527bf1d5b90fcd2d6294f721ccf75ca4946672080116e3077fc5f8e68d9e9fcf30e583bdf3f44d88e97267a710cd19e3e2c5caed41c4ff594beeeb04506e01c8bca8415472f380300aae8cf33e756793f93d04abb6778baee0032d49ed8a51582c4a15d8b28d3da869741817966504fa55b82b333bd887641e732108d3cb6dab6bbf79b62358ebca781a69a4b0244658f52bc12bdfb085ff84edc6d3460b461c2f6b666a86881657a816da2196e3e7301b557af9f200b51d0abfada0ed114010a5da484653d0732de6dab0eb8aeb00769d0082474cd3003f939c6253c7cdd670ff32041e0782c7ced2f641a3a1aa7d985da3c59296028ef258d2cadc292581c19122dfd0201085540fd2b89d905fd992720f7f81346fe05c1e07c8aabf436069ef71585cb9c72d40cf221980243bca5ef102d72b86256e7ff2b6dc8722fddc441c32c93fb6014265b68255dcaa8d0512ecd0aea0a6cd1c0ef3c81f58a3dee3f73cef951e937be090350169e778325703e04cb3efdf9f7377382dc04ce1cd8a8e836197b4ed1e0a6075db290222a5ca51e41398c5f17a99fb55b21c1b29babf0de402cdcdb7d4b109225b63b35aff87502d097241cc8e47a173815701fed3aa43ec7d4086b418bfe6b89f7f923cfaaa06de17e1a1ef558698e94ccc6444360da3bdf1a07da7acb60a657f2907598869b2a9e9952d34e2caa8362c818613196ea4c90eac80f3b3815a39dd0be749e09290af5131680b85011794613c3e0c2aa7752f40e07537a39f44a31d6daec51eb64763d096385b2439dfce4fb9aa1f6fa047ab96797646eee15c092c78462f6ea83634a39673fdc938d6340613f746cd74c21bba12b675a1e657d367b473d39acbbae6349331a61deba6ad7bda1fec3db7d8271db1fee4ef9331b7bce5fea396ed70e7ef00c7e0dc125662e0f685e3bd69621066014ce6c8f28175ddfb893eeb6802a032910c68f4ec271b12c743deb5f87d53a9828dcae3369247e69a55f32036ffa00d7659e1f963fd372be4a14763f3aa44f5a04eb636b40066ece6ff2f4b9a835f3253921bd4008fb2ce363b1a9c3ada45fca90d0b1716adc261b21e5a4e24b4224e86faac82f50f5ff691dc4a3fcf53ea91b04f6151ab9a4d5ee28a88732b04c029abf4b5438fdda56241bdcb8989f5c048561d4d0bf70c18ae47ca13a3690f0857a36a125d5e66435ac25869ecb7b166496420e95bde10230f4720f46dab64258524859bb08cfa5bc659ab36536bd3e59a39c628c6a6e056244e9d84365a47e97265f456a096107083fcbc5d2189dcb2b1c8b761f1b86e0b221e82353a23ae9e613e6a109ae3d6b884eab8984cdadee56107ff17e02b7e5842eda29ec9ce448a1d57db1c35696c21e4c4875b1db090ecfc9e65e1dc33aaea7558c88878a4996dbd0247968aa1de8d627ec9dbc4867ac5df91b9b0271485eca390fcb16c91f449dfabe1b5ac962f14b2cfc9c616e88fd7a0316c46485c4b44f9167ad7d6d00c4614714997e899d8a48fdaa4c5b594dc2105424b41338ef8838be81a1d6b71cabeb6d84fec11144462181c923b4124f0c5897ed8e35c996678959ca4a0bb9e668ac29be62679934c25b81a28bd887601ceb6bd04ed15e6c50485cbf08309804661e5a4cc72ee0e47a121b678b90042aeb28339c3669e51f931f71011810f489c6a98abed56dd0f902e0b7147fd2d24b64a05fad01317fd181156bd838bf7c4e4b83b4a6fb9a24cc8e656189afc1519587c3527ecb76c610c0f4937af630d2d57c138f90c7f68197638ad1e15b7f02b5ab2d12b58862e2ad24b791ac6b501838c16c8f1e0186383423eb0c369efa985fc3896a41426b6547bdd19180eae7fc13043e54a0f2fd7600eb891c618bae5e377b19814e7c90c01372d86ce32e21f6950037cf62be7fae1ee80c83fd8fdf8ba393e2da032799cb48162e2b16932d9ae6348c3e431d2069aa9c7a79d89e3d30614d38f499309e3a73dd396ed98ac3c238eed98662ba550d1d40de08774fb80fd60b207144de75af41121c8bd91da775b100548857e45ba15b5f48a2e0e8f7793d5c4641c6ac9cbac88ddf83900a2d69e16aa2d2f15c43e2111db32686a6e3aa3dc71be6c7c3db2259290144a0cb0e1db6f7f9d3eea2f985dd7006b0f5fabb7c67fd55a6b40c478ea4541ef134baa352775e802619978313894474c416011b7a87265a89cce939f3aa81712350e42615e288de8f3d396e789198deaafdc37826663ff0ea136093f3b6e13bbda5e760ca232f14a0d435ff358c74581dd5fe6d1907f44789ece44e44113a29e9721fc134ef7c96d1f0efc6be7e13ae7c7e6e253cabea0814c483e908c86b906c5508816511cee0fa2d2b2ab7eac5dc4f556ad94073bf0039207e8ef593e19a0ca3c8069eecc88b7dba75783b3aad3325bae01f48035c4c22ef0026aa2b50a89ec0f47dc710b73907424ec3f76fd6ac9fef8db5cc94d037f0799f7aa15e2744e4390327aa4af33b53ca0ad8586e5c1b43d9630c6083318d361098cbf41455d0cc76b29f46fe8e22eee8a4071a277d3a74b56e57fe807913baf7af944bbf6b6095aa8457a81969d016262a9866465ef97e7a64a897d180b4272c1f02a5769cc16db5d8777ec609f999697ca856f1c358eb942286ba158fa1e4ff9c3f004ccbc4a90455b299e31aad1574697acfeed17e150f2a1fafa74b7773e8a3968293cf495f354ffee653f3f6bfc9b2a10fec11806b3e5f83622bc2db2890d15c632bca08dbfb76f70fa087acb9afcbad2d779549e524987a1ab37509868e52b7a22e1940f5e8110fdb5b95ad4609fbb2ef46e920e6f29bd1d1471c54c85b926edfb33f2f9919bfaa86cda9b60b4c683e04b0ae3e52d6cbf28df9c8cfffbe2fe002af2d9e3231a9a91d090eb0a5d5194c6ed031a9526ba1417b5202152cfa6c9cd905cfb168d912d78aba3a3ffc6fc001130a4637eaa1f3242fdf4507a221d177b282aef1f9820819ae608cb1090595b0d56aa59ac527f357635719ca999588bded5e113d17aaa339c71a401c2dc96b13de11559a917dbab2e67ecae569a6ac6e40c14a9ddd51d2e67fb195e23b3837acb2102952883cded2c787e5d9c5dc31811e9c8bc852ce979dec2154e8017a38de1bcab3f0d82e6a5341005fd04db133a2702a21a5a7d106b6b7ec622fa7478467860d635ca58bf40b459eca57175b7ec10791d8ae10f0dcb8c495efe825c53befdf0bc5d1f23c07c2df7a02a14e59d87637621b52e564126a213068c2aa355ac3eded8ea9ff02dd81860eb206b345702e4a9d52fad8771504d1f12865e43f06caa5a7967c95cab5b4eb173a0743f4bea34d9f6a94c6355f557d7eee1f651f271fb29d90f94ebd9daac3355dfc6b1cd380950794bb9620ef6dfaa66780c01024b3f3954422285a8585747102da7f83944b8c40eacb22e0385038ca347a2df4838fca5c17158101c8732e0388ebf40ef4901bc4103fa9d3a8a5b20d6596d0ec602f966ca1674dbbfd36e0a3a6455768b5ef5816bef5e3ff5fb96baa114b2a1c357e5ed7ba8bdf0b13ff0d01d001ab63afbcc3e65d90e06962627e46691a8fccfa36cdb6ee21d9ff779b5b5b5ddddbd724b296592320c0961083a08a7b9a2edfa66126bbe62a691354da2d344ba44a6d12b6612ed0a0468fb7819d592aa20a46513a273a842f2668311ae9b9f5e42c47f6a4d5955ebd700548a929cad8d65273012592788c13e696cacda78b5f15f6b6f92131ead3e28a595ba68b99599525a624aeb755debcee38e9f5e9a6bce814a65551c579ef9ef7b38e7c75bf6f25a14ea5a5fa2a43b01a034f64315d03f986dbd6c91cfdaeee509b49dd31943b141d8f65b77b35f16529042165944210a1d93912688e766b4bd4b82249b595a92a529591aada8a9a88b157543451d51515754d4191575473749b693663729e92629dd24da4daadd24a6212b33a489c42295d11fb1920c21b5b818abe99954359126db4ab2a4ed4d56a6481b8947aa268d849b66db7f3bb266ae5919a73b2d22d6d0ab9a44a6243bd736a55cdb8c726d33cab5cd28d736a35cdb8c72928d8631b658b61d9fb869fbe39c24d73279e624db1fe323f62bd55adf22d186aa2bccda59c724ca80033e48daf96e3849ce99030c38c20e46784194224346be45121cb06cea8449111f1240c0b9e0072620e104329045a1c94ee9610241ac00092dc0228b2349f80f7a2041104c402004a9490b4650c50f48e4a00a2834f1610440501b5c22760c88897befbd3d720868d83abe9c4e4116193b57f6d082263c30e17e9bce68306892b114f7de7befbd394901321f7a0003191358d4b04801b677dfd7f73e100f6e76d224045788c089278860f7094fc8b8867befbdf7deab05131738fe0106454c92b8077c0a30c0c06cab6cea8489117010def744b744a44f3729864851040e5471051324579ca0089dc20b9ab678220a267a30c25a61877042032a9e35d35261d326362862779b36b1c1d10a3c4a775a9881124a43f769b77fa53c2dcc00095a43b76f879d77d3d3ee7121b52ec0b34716c91659229a2b55776befc5f65e8c73de70cedba675fe36ad39aeebbccb759de77d1fe87d1f0886219dc9be0f0c994e600b75f3204f1b5ba190667ee4461e7322a6da4c09a926a944d5a8c69aaa2b59fbf1204f5a5b611e258fa7e08d93a887f4108ac745ba487487db55fb6633d2bd4ff623d11dbb2fd23d82eeccbcff45a2f2d8f7bf481709e9f779912e942bbb4adcc5e3fd2fd28ce551d39281a244b5e66beb2da967de92db571e7586a64606cd8c0c1934d6e2199a9a960c9a53edc4b4b9c5ef5fd36ac9a099e161f14cf694744d6bdb82707c82361f9f20adb92d08e7c62768c3f109d2dc867373e313b4696ec3b9f109b238cfd4b464d078de98f2b9f94ae6191e15cbf069c9c0ad968c6de3b00c9f9b960cecd392b171d8e7e6a625037f447b66e3b0977d6eac8c1af415e733097e5f797c3e4085599aa01a1a5b534393b3b6344138353436a88626ebf70fc2c1a9a1b159dbaea8080cc2f9683e1b570e9b2f470e1b100c3f1b974e0e9bcf95c3060c3f978e4e0e9b0f0c3f974e0e9b8df3b0cf4d4b46d69d0dc2a9a1292a4aa9e4c8f94ce26cf3d6ca81d3da70705a5d076ead1c3938ad2d074eab03b71c393938adcdda0edc449c2307a7a56d745e937846671b9fece3c3715fb6d1f1c9363e9b739f8d8e8e4fe6be7cc2363a3e5abb5e93a3be41697c13848382b4f6b02b08df0469effd6f5cae20ac3d1c8e372e146ac60feae7671c53a819af1fd48c9f31859af17afda0c6146ac6eba703c52d470e0ef79db28d8e8ff6427ce30a1a5259c9c93873413936419c8d4d1008a2b8a01cd32688cbb10902515c8e69da04711883286e25c7b409ca59e7f539db964eabf57d624be7d5d2697da2ceeb653f516546e7d5eaba19df91b97375dd56e3c2a9d970706a3cefb4d5b866e0d4b87036f74eae19337036efb4a5b26b064ed7fd7c47b6743958ba9cc327fbf8745d9873fcf8e41c3e5d989b72fc34fdf8e42ecc6353534b8e1f16161a3a5874e8686951b1d0e0d1c14243478b8a85060f8f0e9616150b0d1e1d206a85cb316d3e5145ebbc6ebc536a73cdc0e9c231e7f8f1696a5a6179793b5ef67c5e2e1fcfe5f211c515cfe7b5e3f2f15e2e1f71c57bedecb87cbc9cc515cfc56bc7e533a3e3e970d08ca0a0d3492568064fd08ca093ca0c1e1e7c527199c1b36d347e2367b69f6ddb5a3fad5618a65a3f345a3fad30f54383860d53aa991f1aadefd3f11fb97d39dfa7736ef4cd0d088e3a47c78dceb90147dd94a3a349c78d0647ddd2d4b4e5e8b8f93ef33f12e6d379f9361d9c0d07e7fb509b8e89b3e9e07ca8ada663d64c9ced436d2cb51a8c8ef9f26263c7cb8e1d3030312f366aec78b1b10326e6c5468d1a3b5e60625e6cd4d821aeb8f05e3bae2315976e064f8e30a5e27e68d880638bced171f3a158361d13a7566369a101b2006e200e8d1c1c302707279572017168b0908303d2c8c149b980345860210707dcb6940b0883060b39383a2c39933da54f87cea7a3338eaa4f470d9d4f87cee6a3aa460d1d9f2f67d5f742c7c75a4bce586b719019148442b504993682cc20548b69c34610c6a89618d386d63b5e9333faa5b57e8922cb6bc74b64697aed68da61451698a6a699d78e5618ee7c48ea70461872336c381b9bd369859bb163c3cdb039ad70b5193bb51d1beeb4c2bdd46a7ac68e4d18f27c4892e18ffe90fc50ffdce89b9b3054d13f3c37fae72654d14a3f3c4a3c373a54d12e9494c81f9e7f180d4f030d24593e6cd3f0301ac8f2617bd3f064f9b04d43ca05064883859c23d58b4f470d1d544b8c67da70b1c074af1d394e2b2fdc8c1d9b50c585fee1b9a14c5e84787e44fb23a2578697ece8794c5a7246579c3aba4856c637dabdf9f374c5a976428248746aeaf9538c9de250cf8c13d349eb211efa5962de3fe529284747e5994ada919a953cc8baedcef320eb01b6fd421e64dddbf778dd1f110ff2001516e2ecfce0843f3f382b2b3021cecefec109777e705660de7f67ef1f9c70db566042158a6ed1cefec1b116f6d6f2641e16f4e1c9f10173727c54545e401f1e588e0fc893e3f3670a69739597f7e781c1727cc09c555ec072e80ef1c0727caca5e12d3963697c6fb1fd8268e8047d3a3a41a9948b2f88060d3a411f0d9da0948baf89060d4d34e8047d18a75c7c6453d30c0d1a7482388e85e7c8194e47b59cd7d2e16a792e576b1c5dbc960e165c2d4f87ab35ba78351d2cd45870b53c6b4717ef6bb5191d2cb85a355e2439b37b91ac335f611fd147d4d598396aba1c396a5028555763d6c851d399396a50aa4ec9aca15423470d1101b70c62fd865adf3ae1dd2bcb0016241091ce902c1d19fa2620d095f3c093c1f3a8bbfc7154fa9e10b1fee72c9c33c565adb7f4ea7ef2bc3b6449a77e956037c0c2134752c0831b4421f6e4c692404aa2e85eeb197042079efc70c4d01494c07cca7677920329dbddad779b3a614244a44410d707210f001183224320d0028add42091e9448a22fd0b681249e889b3a5162468591cd072346361f9a50ebe72d446befc5d8af23dd22dbb4dd1d609b9c09790bd1a35a775a8713aa147a990125f432c3f8a94f95423c3b2842061b5f080c550a09a15e28f539d4082189184c0809cc2351bd10d8e63f92de1044fab60991ee8f81534cb14f93280826309f9849e3480ad521444190c1504410f177971342bd942bc6dab55d0bc4cec5ad3a1688e7f82bdad2aa86bf2b4d22b3c85d58777f6a6d12e957cc595a6badcd2293080893887bce243281308bb449140093e8158b2ddd1d4428c4d3fc6e088e08881711ccdd8b4b1ff7574baf58f727c6f8cf150dff3589708757f884bbe7deebb80b635faebb77c82cbaff8ac504f04f9c666cb7c45b3d40b463007899afff8ac562ee6a21fa5e0178af7c8d5aa462eea2efd11ddf7706cf503a738eac510b67d517fa91f68dadf2d4abf2549eaa6abf4ce334a6b019d206bc01400a803cc5009032e479ed2a06915d9f45bee0a8b31da3cb423c4dd94ab6e48992bbec14767d130adda1a7b835a62eedc22e17cd66ec158b7185b35620daf569389663d745032fc67fdebf8f5fa54291434e1e3824deb72ad5f738267da81ee357bda722b54a455524ddfa6294b78308824c7461d77d0703f32aad332e57356b561890b3c691fbf35e8e1c2f8733fe9b7bd8534b0d14f8a96c3a53a2497f8fd564f7a796203688dd30aa87513dcc7b30303014a65375424239d023bc80480c86fa1c5025929817b5c73dd308e5a190e4479d2ffe458ffb887918dfe3a87185f2d47b85fffc76fcbba2e97b57b5156db5b4a2e5152d63b385e6c11088e72a13c194993367cd7c0bcd8ac95d32fe46ae274b9e3541ecae790ae2d06f6fd4e8b7b2251c6dfdf9a945bd70f8575adc156db5a4b4c35d3f462cc650fd18443180a81f430837298dce8490b4ebaf982c872f90bb5c560bb007f15cf1209e2bda2d410d88e78ab669abd577abe7567fb52d4f1511c4fbf83e2e817ab80bbfea4f8e5391660f77712a8ee3be7b4f45f600aaa17b0ea8861ef79a356719a9f027fefbf702620db406ea4f5cf600babb867b9ff5de12235c267f8f751047ebf37b75cb20f3b77c8b3c5bbe86f461dfbefe0ac2903599cbb3a5c6feb541ecd62dafcb150db95a6a21690b19e3675af03d53ae4020e63765ce3267eecafacf7beffd3cd2cc99f66e7903509e2a17cdca983353964973890c7fddf966bb92e22ef24f5486559e7a83200056f81ebb02f9e263ac481baa0a6449de7d9ab4fc2f82d81df33d0e0306181ff35e0c797fc77cce3167dd37d87de2b05f04b11bc658bee4a7b0d592bf209366ab18fa1110b2f37b3b88b11793e84d2326224ca6c480c3778c2b9c553f86528fa740f214b79dc245733159d37c395d4d2e4a33e6a2994466ac07d9c6d974d6c306b657bf71aca30a6694b2555f2ebd711c6b74e7eefa291e524420d0783520a27e7c4bfaae423cc71f9784a8b9eb7c0121c55da7296372d7f922bac25da7191b9bdc75be8ab6bbf06333e62e5cbebcb3eabf8078153991a26807f10dc4c68ec06ffb2272d7b5e6f8f5cdd94b0877b90ea265f9aea4cf955497a78aa5a42eb302a35d2635b3f39397ccd9e6ecac1a69e7a8845ddf53fdf714bca1fa1e6f215d4bceaa9eeaeb7b2af2c4df5253e4f8993c5f3bff99c3c198a6914a0d94e8f2f94d235bdf54e235c6af97e557be3e0e40d6447deaed8f24cbe5c5bdd8eac122fe5851e160554a20d405116035500f6b52180ed6a4b0d5d625a534277e90d21cf0da2dffbd8af401fe797a0f7ecb7bf55379ae9a8b5602d1cbef5a72572e21f0dad9557317dddf9751a83287170c89f7b2254646684bb22546466aac12017256add97359e9b35c9249ac4d674e1c6d53664d73a9e5b535479449b3a629b332952b69a74bd004a27e17dd9bb2255beac7f74995424866181fc592419542dccb9c2cadeb0134579a51288d13459bce94a0ecd3dc74e64406b64973179d31a1b45d5c02443a7382b6f5c6f6f15b13f5b705f4ee831e8afcc8ef552ad547762001e8d6651e1ff53e6379bbd22748de66144a83a36e93960211bf2d290d04526db81bfc161244e517ad397efeba357d5999fa28d286bb33fe8bc47510f1a37eac7bcc8fca41f20652a76cfce748c365fe1ecf40eeca3566546595e6aefcd965eeca25851131b2a42e11a1d14e4a4b8294a454996a135151122c7e7d294cb42567d503582cc49567f991664d95af230b9922b232f55780aca952fea754aab1a4568676a68a469a959982789a26cd5cf2faa614b3c95da61674a772d6d4d9bcd9ccd9a4bd6279a6840e22aa69e372a4d97f8246674c34db94c7714577c05d9f967f5c25a69d4485077638abbe0f55225d3467d51bf79d68a22cba09e0041395a15b972bdad2b7ad0ffbb85c2dad6aeeb2656b7b9724f5d26f4fdf537be5aab6a2692d72236da459192bc2ea48b3e62a0a95a9af845dbf0aa65da3b02bcd9a14c63436ad689b11a31c2c810a33972f2ee4b74a3b9742761896a799c43651628818cc9b216a23ab9ab3aa3ba133c718ac7e1d635b93a6912933979847da7bef4fd3c887f7dcf738489a326779a0e7799e0792e69169641a318df4f7b869641a318f40aee3b8d29c9932d3c845338d5c2e9abb34d51c1d63636c6544ecbe2b4f9369d78d6c594294186cb5e4acba83c87d57ae68cea2396b89fbef4f10e41ee4de07f8dd485bd57e7f26cda4ad6abea275e46a6945e3deebaa775c39d67e4573d749693577ad966852767d2053b6652613ad89b6eb27e9a7e00bf475e983ae68ceaaa4f70426192c93a7de360bf177dffa38ad41bd6dfbe2dffa2db77ffa5bbfe516effae6f6bbebbbac7d1db77fc19c0bdea03018f2acfa73dd2fe4497ff0fb6cc1d867ebc53e5b2ffb6cb55af6d952d967eb44edb37582fb6c75fb6c7161cbdb676bdc67cb65af64eea22b875150d7dffefc8d889aeb7824ea9c47994c8be378f472d73fca564c2e2a460087b02ab02af022bc88279e78024481174102d739c3ca3155493e6eeae40418d8dea64e8cb2d8278b0605151595eb5effa5d6fdf282def6f5b6e5cb0bf6bdbc80bfb675ddc26bdf7fb9f66582fb724b1cbb3ecdd76621d6cf658fb3cefad9b3678b2434baf4b76d7bb91befcdf3966d5b6e434110bb245bef8d2d9343c4b3fb2ea96ba253aaf40b8daadd4155c2488920dc89124877ebedf6089e01c4fa77c549124af7de774b8a589f15a340b4ef3f7874f5b9abf32db4eb475ff438ee6de5084016206719dcada5b30238cb3e7929abd3db0bb97077f511c4ee4c8002c8e0eef9fdfd7397eb0f0bc1f3403ffae83b11eefade939c6e8423b91297f9927dbacca3501e4f526bfc93e04b5ea341d8f4bd08d4d51181f2b811ee047520501e47eac1a637e0c1a64f2b8f2ba935fea73fd19485face203bbc94857a0ac260b788fa53886b4cae949a915dbb3567dd24f8021b0f49b2a9b8586cff6e0adb5f6322d8882c90eab562df80eedc26b892ca73a5d41a7f2dfc3ee1d6f0f6ea568ff4df9a776be569f546deb79465bf0a6d44a8aa4790645b3f22721610b6c859f62d91ca5a2355ad96082377592396c8be05c2ba947daa5ce62cfb1f1079b0eea23649111e5d9d35b6ad0572967da65fe56cfb42f6edff08025483d6a2a852fdb358de6aed25c4932aed1d5e63454aec56da491c2531447dc2fb56717305c65d3194551fd30c56caaafbf4b1f159818d4f211b534af34db8b6bcd9bfe6fbb90cfe985cd58adeead687ab22c2a8569f73bef6576bbdaa958dc1cccc4c9321c8ec5b4badc5f75a6cedb5d6be1396aece16a93f2adb2ebae8a268dd9dc96cb7fc8a01d0a794c6ebdbb2a7fae74c9758c13ec5ed4450dd2177c8d5e1ea8034233724217caf2f5212ee0643df3b2489bb2149f162cb485a7431404714e1608058dbb61d61f492b79c733e42062c2eb6bc6ddb760413a04bde72cef908a54fb5e56ddbb62396c696bce59cf311589c58b6bc6ddb860406b695bce59c33123ca454b6bc6ddb868409c254de72ce1909242be396b76ddb904842a3f2965b9c464207e31531c69c2e8231c6f8091b6724a0acd853de90a862252cc2813f841f095c783440753317ae06515c740db2506d1d58c9474eb807ad06202533485d9a1227296b730f5a0d404aa0803420254ad0403d683500e5c0889ba14b4e9b3a5182c5c69b3a5152450c21bc676d31d8acad015f1f3007b27d727219683e49331809114107a400c2148e7e38021418bec0c6494cb0f196f1125272067256bd25c633cec218638cb78c31c618638cef8cded44993214d84e7514b6f3672edadde813ba4123f675177eb2af6b5b3dc5a6bed7556692da5714a43dfab3b8e4a69a8638ceb0f627d7a800ad35686d28035e7216707421476be39e79c73ce99879c4b908409f83271aee421e76c47b0734e126567a01a6816b5a913263b08c248d2b7456c88eed4bf3b6c4d7a05e2e9d56a9ea64110cf1bbbfb3c319d62dbdfbbf703ef5732443a75b53b8ea3a58994d2dcb037ee95c930c639e77c63dbb6ed92d6c81ad53c8927696a92c9ea501dea946ccd59383aa58ee62cbcfd6dc0fbec942cad36acdfc28582e34271d6f5ed6f83d76e08940688ddf595280dcdd2ca43b73f92bbc6f70f95b80b159ee109b6ff191a79451e10db1bea94ac4944e543256b0575854f50967752b63f2dcf8ea9bba2d362bb47a406feb38b0205feb393627ba784dd2d2174b1c5ac19d2ec163158110d4b7d1111b6b211591925776d46e113d4b50d41592edbd1ee5a481f509765b256d826b6279da72dc6c2b9b2fd69aa46eafd65fbbb509efb5beca5daab3dd3da395798481ec17fc923431a866fd0fb4ba57ee8612b3fe4945364b704b5f157214329ce6202c9500b2b28cff7fe6193d7d84a2243b62953a6c090dc2fa282216982cafb87522a8f4a7983dee1fb87545017f8fedd12d524b2bd7fc703ba236a5159407283de82d24072832a9c4277c2570162a74cd9dfa7523f24f5dfe3f55736226b764da88cbb2b94396b08ea0a95a02c7f77d9c2506665fc75490e6958ea43adcf50b6ebd066a13090f45d49bdf1919557218fe0711cc7f1b5b3c6a76025b23daee38feff9a742fa6629a282a51e93431a4664c869ca942d6230fc451eb67224550e3d2cf53d8ec9221a867f851c52c17039844e51298fa44a4bb34b24eb54c1fc6a66489d024342a9cd79c239419d93dbf56faae644edfa9dcc3ad955e924dbfe31cbc5c8c07b67d5d5cab6e0fe56a5420085b540776dc186165a6881d65a2b75e2e1f04e38bc3f91a047ce707ab0d494d6ad4fdf7b1efdb1b9fc1dc995a73e491ffafd4fa568653ccfd356c6d35f3791a4d59ae15fef4f3f60c995670ea707df2bc3927ed7755c05bf12477dadbfbe0b9b5a99ba3b12733a93270efba41fc49e38fc50e570e3613c84b6d65a70868cdfd2b7f9efcf56522b737349adcc0cd4ca589925b6e7de3b79ef7924c59f479d0596de83fe5e0c6279e47bd159dd53eaa67699ee3bedac6e0bffe43d0e9be31e7cabcbd3027b7b4ab9a7200c5e79247cea2c7d2acf1cf6f674fbc2122ce973ffd1b7e00d20756baeac200e30bf47e2a8bf6ddd6bf27481dbfe6e2edcec7a2d79f6e8f08d52ff9e28adf5561beaf6b79f3f08b8b30bf5adbeb7f4f1e2427d5c02d9ca1b1a700ad9f585ec5c46007f10bc711901fc37a0362e23503f0858df99704f9e77dff3aa3bf50cc6d0e31ec37d772f83605c7ebea4d3766d1285f418c018eadfa7f4f1dffa3720074e435c87ed2b35d8aa21622a9b3d037eb29a8488820d7e40a349324001071bbf6cbc512519501023834fd20c32cca000822f29498619509bcea080012ca250e44ae0eef3cb3a5bfb5ab4322e26600a910cfcc04914391002764b6a778ff7b8b7ad75263692c2665608b1edebedb5109219b8c7a5107eae14e29e0522104adbfa29ecf35f1829b4b7984d675668416115b4b11d04dfe07b7b6f8658ff46ce9bd6e449ed8bb55e4bdb3ec770247caf86e4d0c342ea35c25208897e2124f9c3e71e8330d0dfded3e00b9ef79aa4ce3a9d4a1ffefaf30b362429cce90bf73daefbfcb4cb4fc9108998a9efedb79717acc581147f2ba06c3aab42b64f5dc5d0e69ee2d7ffc40a259bceaa48b2559bceaa28dade897e15d256c6d22e0848411870e9833a4b5b5348084c839496362c8008751d2b63e9024ee5b995a28f737bea2cec63fb4a5dad9de5f7f04ff77e5fa93f8331e4a7a7fdef371439f430d4bb5029445d87be10ea73a0ae233e751d0c837f7e0cc270faf07bac778f490f259e60389567f8f73e489e3a886ffb1de7dd4f08e54018e853ac5fc8e2cf35bfb0cbd0ef0d3ceaaeaa77d1b68f5ac2d0c60fe32e3a45d3b6fff242f8f6c34f05ffe6e9dfc018ecdb4f88a77ffb7e037108d9fa3bf58b7afb948f9717f0778fbfebde1f24cfeeaffe903cc5df40d4534a33befef0d4bf7dbf9127eafdfffe07c6601f558231e018f49f3429962f2f9cbefb5309e3ac7a6eeff8b721153644a9cda9df7d744ff747fae01e575d9e42f6897f2b359ee9effb54dc7583dd7a7fe5e9a44ffaa9560109405bd8bedcb892d4babb90b0fa141ebd119962b158cc964188f5bd62fa821bbcc3b55609f8c64f2570ab2fe13d60b53d0f57953743d45814dff3bc73b5b5b3f08ba4035adb2b31273e16c907acb657fad0e7b7ebbee76a7bb8ec3aaeeba8589eff7a814688dc13c05de2e9c5f71f00ea457f14e99d48ef43d27b90f49ee5bdbff75fe925fe1efb1cb991b8d462c52538c2b576ad32b4ce95035a3b7b4736d2fe46daf7babf64579e2d6fcb9ffbe37204a2eec81c84f8d6f1df3f59fbfcd63d83e08dacafb27de8611c0cc4fcb47e7903dedb7fded66d361ed0dab8f4f1d1b68b87a8944e3134c5052e6ad3991298a628ba804783443a5bc2d1dede92a7f561ff7acf99ffbe0b208efcf7eb007a3e1c5e4877eaae174400850da15364b118f899d42f2edc58cc6e0aba20c636c616c44197c4621b67d206fc3600a14cb1d80e326eef83e4cdbd87bfefdbde734c1bdb10247724101b9b529aeebfef3a1b82e4edbd508fb0710904c6066263574ac36d20754a01e80cb76d600184e060533a73dadfb6eff18fee44a0f6d88fd2dca760059144fb4236f9c29a92375cf03c2bc1d80636814aa572b7ce025d90c3aee5a5342aa2a852f96aecded5ae55b4d61db0ba2fd47d0ad91a05de18eb8fee5f0abce10055751755dbbfaaacb08037c416f08688afcabaaaaab8f014b2f5d735d14dd9c1a7e22c5aebbde2c91e81249e7a5b7b6445af7a579a5db6904b75292f954aa53e30954a85271135a6525e63c25208524091226aebae648918d45aad5d028a93259e5c4aef12575c29f812a1380a4829a54e9a143521aa4d8edc48adb5d65a6badb5d65a6badb5d65ac9242c694eeb277a89169b70778e7b829484ceebba3cd494a9b89d0ebc24c872cedf7765a0b5d620784f2a701188a7131449502c213222499418882851dc66990abd447f4750230a7569b328211853e3784593d8b2e92c4a2ca5924a35cda0987297a4b09d6685ca8a8aca8da968b415969515a628ba22178a25dd044b0b0bcb12149a4e820f2d5f2a954ab5b44441c44ec20554332460b1552e2e5c5c38263213ad645c72f1e2c2c52c0a26b6ff97f2c10bcccbcbb7e92c8aa52f0ab1091d0551144c5c9060626062a43892020552f0a08a420b269d24e6454c8cd1dd740605ed55847801e3c50b2888bc4d67511835652aee0f30be870103bc81290dfd2ea925854c0aa4d9d293d9d2128d041dbcff62626262fe59a4901f0c18306090e4caa6b32842283f9224c9b25c6a8aa203fae2c265fcbc8e8309650ca1e926449bcd39df9c73ce79b3475c52920c333481c1ed80b54adb5a6bad6d596badb576cbd9629b955842b7c9a08414529c0c349fa4197c740f304708d1030fa42003529c5c2246c8c10ab66dcb3e885703f57056ce447e60821545a6a820081b2c01c33750daf8053dd8f8723facc9952c6f2d29014bde7e18917bc04d58f00f1a0e4c41f00b80707fdc2545485dccd48356c3863340b58082089a5004881e8c408a1536c6f7c712a6d0fea0e1c014e4c7922d3ca61f4c76b03f70600af283090f9789e947902076ec650a2a0e31dadb653f20b2dd9f6cff6f07fc2ec2169cf8297e4c33ddca725b5b69b0be96af9e97d37867e1b2ec295fcef297ebdb044f496f195feb9586e0e7759c56498d28f1e4a26a615989817971f1305e94e48e0a9bbe0a600bdbf6f7565e3d3c29b0fdbd18195f1b9e15d8fede0a5ec7e91b9e42dbdf03004a3c85200e4f0b6c7f8fa56a61595149e5f0cc61fb7b320fe3450ccc8b8b2df40220c302c00a31562a943af4f70410d63f7d24c1524b1f75c6849117d6df6e451e5d9d2b264a3b586b7b0f52cb3fc74725fee3d148c4012c8cfb1e87bdc356cf911636ce469995f10ac6b0da2bd91893c17c25ef8afc93b57a15fe7ccdc85d55d835e6898b5d615c2ffe64d9aba45ae3d415f39567d5c4ca094ae37f86bb7ed5ab59e559293da93c2b28499567456ba2f2ac965651501aff15664f7685c52049320695b1af028dce0bbbfe4aa9f2ac6a502acf4a0aadf28c48b5260aba33b260a9f28c47b5c6bf548281b2ddfdaf8e9301656dcbe005f01b35aa4959fe230b56523ef0fdc7a3f0bf875949d90e3e1e915e858701e305c68b17e48b9818173130db5d605eb67dd58b0b17312e5c5c605c54aa16554b8b8b1696eddedffa2db7cfb2a2627f45259562498de3cae82a28514cd56ff9dffa2db79ffa5bbfe5f647f0fb4e9fe7855eb71df5b706a07ca8d42a1d6a6ad4299a01000000287317000020100a08234190e44014a7927c14800d5f8c545854548fc6a3c11c85511cc731c828638c21c600638ca9219a6d000aa36aeac3ed72126f9296bc5b19cd6e33f317e0a5ae911a92d16c1488ca868686a66c4d71f0eb14c2581de117208256d05c715f09f641848c0607bf3253d78f8e17142750b2760c8281742cd581702e1eaebef5eb065042bd582467f3dafcdb07807e0d883503d66dc8bce8ccd12c508c04d7b0ca2c6f741b4dc8a7a58eefccbf8ceaa07ba0f9bba601656756b9191d7af8d49ab51ad8bd679b8a9fa045ffe9dc8c49a9d894f2dd8a846375dea35a2e89cea6397a4ed0524349786037e473770cb2e5aa8df634ad187c275fff1262cd525fb76390508f0b1685584f2428ff70f36a7e1688cc2c57f0a0ed6d98cbd098e73eddd0cf959ac40afcf1896e72bdd43814f7a928c25e5b3aec7dc077427553142590a3ab99e9a9777aab3e2efa5b4e8158763a4fa60fc6eea7d920ffa87734fd07f1a48db71e004e663652570223f9763d9da0e79cd88b6218b22bdc08d0701e0f32e79b700ae7e2c69df3519c02464970015c4506eb1d11841354ea523ab56758484f11cf13d8606ecaf350c2485619a8852cb05a975256256271ce7ab407d42a99ee424b951705c36042013d76d57345e18880ab9697e3d953f65ffd4509d705aa9015093b39ce98a6766a81951b23c682ce88379c3a1d49f77ea74cca5bfb87ee0d29112472672031a79f07612e57254975ccffc165d6ad96d9aba842ee28eb9ef63c2503a0eaafb82d953b613080130ff3064f92756db62a9b1ba02078d62b0bb4a7558c339b123a4305318be51ebd632b702011af94111b52612b298100280f145ac86b8fe9f84569602cb8aa840af5600c54ad3394cecb4d60e09dd2e33dbf341519ae134b4915390d316cf17066069af72ecc895492639325ac3b536ab358642b9b0005e2f4af456d1c6187de8cc23341bacd401ce5d417dba345557c0042fea54caa4eca9e6b6fd0341cf6fc06187e764206f31acbc28738a123cfe91ff7220769c81197f92a2a7ed0c837885621f11d558d193f6027182df366438933ad43da486b661da583d092df9a48d2c24f098a52228d1603b020b8318849be453a20f95067e2af35132c60410611b4eaa35ae266f7c81fea9aafc6b9fb5c30ae04383bcf33b536267e598b3e3036f7c0a739ecdfc1b7612921e25f4853ee9501e3d08fe20b6a9576e6088032225d9c4df065cf220230cf48cfdfe4f7761d73ed854f8f546f7ec89432afe09b9b92c9295cd77c2d17f4bcacdd73ccae66efe034861959ebb584985f20d5850370a4b3813628e9e3a00c835158d590bce73df457c34030a8943dc81a8ea651cc622b4a196b55099f2939e7383381c733014aea73b60c69ca551f4174ba90ae4840cd6b894f6ef4ba8b434a92579899449412dbc6697731c8459e5e0311ab6c41c0e672302ad5b26c000cdf34ee1c8070110e9b024778b036d4166deeb96e45760570326e4fc10b81cc4247521501c1bb6e84644f534eb0617da2855ac10031a07b3aab51528f4dd8bbfac5e6eadc0483ec0ba8a54e1493bc17c2a58585e5115f67c9227539a492c50a4772f0827de3f50c26e0d30ffd225b4c12e347d0581c123de0516c2686e44520aa3bb629135d0292ca1e6762dde0825f3073111ebb1fe4fb3b5140f6d52a7ffa3ef015e8e156ceac201d44f3fbdd630f9c3db1528cad84cf4c7e99fd11193da9565f1bb99cbff8152e901494fa23d4db208656e98a657fbc87e994abdd3ec08341b399e04f75c9637d2c5b0e25b082f970af344fcb79aa0ed9cd87fde5db313b309dd5d50c8ec25034ff957598709db54cb80f45dd4fab0959b774c3c9c4d40a6b272a9fa328913271b6367164635111ba5197ba19e91436dde374b798de605cff57f6b4f3ffd111f29d30217ff010f77a1d8908395d51343b86774d53dc3d838a14be64e649f1c9cdffc0f0c9056233526a6d9ca3c5b9977d7c397344a29cfb6835bb8ef4446afda1c48fc0f8e1055f0ada46aa83c76189f73eca087693d61ca9efac7a7cec0938ae0501efca7cc069ef42314f8edce630c3456556eb622b4d49df351e66a719037d3bd1e6c98e1a6015f84a3fa9b8c78941e890a7e37cb2721ecab8e5c92315a52b4f41f4f2fe6ef915a3e93aef78f48f44d17ecaa585c6caad74b20d5b08089dc405def1ff812d89a55956286c14295d5b7fb9fa9ff941d6b13015fc492f2bdbc3dc9b020efd8062fd1d9062a22c6e17699ffd32a7a0eb83e191defcf17b09508a046cf9b07a269a6a30157a3968892b1df576a7fb980e93d3c57f56c406fdbc50430424fa0f86c2cf5a48fa3e092e6088c8b14bd03d6ffcace00ecaf7f7f15eeb39696c5b807ee64520a1439628860acc658b3f41a12d81a8989c76b12449a03a053aff1a95ad4b5dc2e583a480c4743cd12fa504db7d2df7bb76bf9e0fb13a383f00a3498c1732ef902d19dce08a43e581d20c476b94cbde856cf9aba2935056d1a3319405eec4cecf97946273b178b3d8a620449e53c34f3dd486a65c00fee68fd49f1a1a67aa6ae25f51342011de295fc58552edeb1ae18ba5f3fd7e0280bd83945450fbc565ce1f626b8addcb7845d8714bc63f7cc277df1d6c9714f056d1fcb52505663a682f66862fff7bd41db64dc59088dab3ae533ad6a32ac5ec5be8e9297a65ea11fd33c51b9e1499cb5e3330cee7238f319a921df8ccb0fe147b3573deb055bbed519e43c83be2e8138e164052776736c708cbb3857e0ca5f06b7dac2311e905f15d1e62c3dfb673ccb1e06cd9f396260bc27b4628aed658f393653bfbc8bb2e1a3e808c46a4be8eaa5bda33de87362b5eab8d6db1650c3f367c5729ebecdbdc0d6cfe2cdd6216fdbe4c13e3d327c7040ee8e1178a8b454d9d6b584bff058a0c7c270f4bebe9ff3d8c97e63ec5c46ab85cb61e032a4e586a4cf828c3bb5941a29728340183d11c68a611334918182dd9675a1724098d8f8d3579f9f21d7c6048e3d1d595f4fec83544b103eb7aa388d39c001a452c36ce506ad35b0f3494ed728ac82ea943d04b8d625c6d1ba4d6b72fbf58ff0af2051551e98ec1069a4076e0028900ba4083b0839a7193217e5c8acb3153133eeb84b5cdb36e27863c1629d6856961e59a6eb2807bd7cae3bc0995071929d072bec5563a9995844710899711a8c99e8a0d570962f809618c26f4e1eee184b2148d16b08c720537ad4ac54c9471872bad6318de8331709bcd83df5954fd9a5ae1a0a7e1c7eb8c45a3eaadaa6ae0a04ffdb45f1d6426d24d375152919987ac13bbfa63aa644b4c50b1b13b6e5c7432e1f683f1a84efcbaf4229dc15d5bd902de069c9c2b9cca1ba9f4d79489922fa28b0d650fb6f982af173fef1d76b6cd7a8de5b77bd8ce4cc2d842f99a256a4943646f270ec98f945d76d489a7aaf2b781f4b40a4789047342bb020bd83227cfe02b6f70418d6ce24fec0acb145f83577e77b10c5c272182a4322a080fe0d9381cafae9eae0737c72ad229bf7f576a500df458bd90de82208fc52b8d30c98e364ef56eb5b6aa1e4e0251a1820f8759b7ca55a0b4dc06a69af2da4a3df70aebe349c0c57f532d24941e593433055af73e5e18d5d9e56e035fc80d12984b2eafc4f5fd7305b5cabdab1e6fda9aae3b83fe4dc4de5acede95954e013f5ff6fb254231a543b2ba3a8025f6d4e2479857a6f43b4df5d84a41cdd241e12f1d462e6ee0a3fda90c4a2d7dfb06f6ca61158fef33122fbe0b010a01ccd23a2150b967ba20241fd15feafb1c1988e345913f65d3e90fee8e10bd008bdfcda9beea7543fbcb09a0fd16b18c9f63406ce33f7882a240371e5d45783afacc7af5d17c9f81ab9e2048faa1698b6e42a9c1dcc112b06062fc8e5e885502455f99fe715606b6c1ecc7e236a5eb0ab4c9c9af52b452a346bf1e4fe45d1d702d134dcccafa3e5206a058e94cdb86ebeca812db4b1ae146333c9cd0c313ea40460c6494c18c1a98d04348ec53f1c8ab6d1f62a6fc6a0a2e52768cd9355c1432c191f1cf212a693cd36704043d8977527ac00b2bd2d753f2a83ab5a28508e08d83d0308941388d06e2ead115a3a3d906c9336ca07e730658a374c5a1d0adee0572ceb1a8caf4b4667c628be9ad06129dd2abd12295b82af739fa349f605c0554137d7cbd0d389f75dc57318d11e3111834f3791f6393b67abca35fceefd449041521602050e304a358d6f0378bec9dd9c71de5ac597357a72091647be3cfe6bdd587deb1aa91aceb1cca30a2e6aea78c2321a93144524de632803984fdf393de29a5de72335d4da922675e6606f8ca0e66ade6ff4eb76b1841742540c310c288bbcbfccbd56c0716d953c47d6d3855711c811a23d2b1aa19ebedd9c3b1405bff2af6502d018801c0601a0a277068264e1c14bca0663b2b20c1c04d0d9da51f79dc878ac6289e7f9a271cc54286dbda32ecbd65a00465871ff56a0a35c2e321493419c1be990ec282e65c4f390a2b11b98e613f2e5440eaf1ab2c0fc3d71c7ded8a1ee8183982bd852da2beee755b462e76bddc679ff2786d80621a271ca1d4a3d0b99b7b3c3b3f0615d518511d763deb613d87fc780b14bfe61b7dafa726315ee7ec55b26991deb6df720989d7aa449da90e6fa2cfd3ee2dbc4a9484139d59fd97b503cd3a16b51cf5ff6ab04cc364ea6e4f91f6741978d6b350ab1e5c7a6ae092212cdd4d61f2fe5f92181c54ec42d22de2f797fc42d1fb429a6a1d50e5bcd058a4782349502af39a358edbd00b320f733d65dd8fa95274dd3fe6a7fc0ffd1a748eabd10ca5f13c2f029d584d158546900418b2549a62347b7047ae2f3a4eabc11008988d07d55168ef7ff0811b674beff978877a5616a83ac3ba1dcc4d806b3041cacf51cb0466ec7c9c37e6e8eae7be7602c2122182e9bd88259eaeba55e4aa5745e89cb1e2b338dd38f0fd1a631246e2de253e59443f26db0c350fd61327930c2be31e66fa2e737b21877233fc0557f2ba0a99b4583b887530564c47bc45391f80c265188faa21902dd2e480d087d4df52df3c64b63b99e100ff589c1eac50613ca605b7b400220c6ee4125843d3b2ce8d9b88030e78a1ae1bb53ede682e2ef83a3df02764c9d72828c78e48a439accf971f12099d738ede314e280ae1e27da3b5e3f501798d7bc4d7863047119a8883be8030ffde4b949588d5a5066fedced02b213e981aaef747e03ca0e0707c60d34ea94e49a8bc398678bcdb077defa9da44e36f8f814e6b5edc0e863c94b4f8ecacbc5b0260e712d1452c2040a465503daab08bc502dc33c06922a0e9427f10b4f2b53ead1326f72be186a734ff88b27a66a95f38e52927240ee1dc350b19a9b7f3492cfd2733d75fb99b1b69334c7a6efc51033574caa790bd5749b2732f99c7a7914889edc0c54512d1278605ad0120b788b4d5c541621c22d81372938abdbcf97a23163a58ce746065a721c5d82e3a8a50d60bce169f45f509ff661d5fb96214ba03b0311c34869c65d881c24f3683943ce268b01dd9649326a8e9d6568d5458c1a65197f88e1ff7321afcbe9ed09732045e4a304b133af72f6054324414c706088e7cd439c8784edf2efc19844320c20ae7564ea51706a7d94106af1ad3710a90a3779da93815f8f845d724920a64fca2378da008327cc3daa09931a50383d9c231c27ce63ea42733df1e933d9ab7e21ebe556f26a2d792170c27ccbcb4b897984e81a0c18c8788fff27d838c0825ef551745d400b570c82af8f72c9b51d4cd17e60a278afb1a37fc349116a6a0472f83269ce6f8b58c5e0270d19ca639cee2afe5ca1f4f4ee3dd7fd6a5894382132c269b3048fc2bdc8169544c54e2d0769d342eb38846d79105f7e0e8ec625581635be0c8255c75e248a125f945055272f0c24078ce0bc5ded7b68f31b7339088be6028ec01f5b08440c82d2317a51fc16daa7c05192006c9283c7ffeb33ea3d5b6907bd512a798d50793bbe59e19287b42da7ba209ca61b269c22c779c515545842771439c693d8611a33d086a4cb5050d547bc7bb6401dc8c29791375b2765ba89814b1d31514a140711bd7a9d62d05d7af7b4f5047c7076a39e4337c148dfc64f4deb7d4bf47a062b3c18e002be145662655ae37d70648d5e478922654372059aacc4043822d2799d1362366d3c6e926767bed331f7664acfc0c293b5160339c87a43f1b9ea8e2de333575ba0fa4f34f6131f4fb139832bff27321e5165a574f14161baff6732658af8e08c2e9f587389baff6f884ac4ee9d9629f4b79af9e68695c7040668337a2921f144d9250214c883346563ef425f174a90f7b85d302fb4a0199c195640164352112643e0e40cb079914f78868a176f58590cdd333a23d8df57cf309eea88ddfb6a34b9f38251e2ccab87e26b4e620a242a63fa5420d99410747278d8b06683d9d214cae6ae25c847d7995613fa3d02a64020c1c8d06b0a828d2e25eb38d237f69d8001dafed271f0853fcc10d579285c990cc307c4c3f73abc52e29666041954483aa9295ce2a29d15c2531c2de8969c84aa2355ac99aa34293b68c868626456184d2308557b29eafa4242b467f0c758525ff4bdcb2828c255f8dc60d06ed53dcc36196c89ed03a050a0802fc4ab8846f4fa60dea69ad1d58cd104568d1983ca807440dbb0588064256c83a209a1aecaccb187fc6b216fa7d4407ab7fa128f1969306c99dd596e7e3947d558ea29aece77ee10c5b47ffc7df12442b90907ddbc220bae01c6ea0efaf121a88fa4f278967a80e2b5352aa9709b501ebb19c418affa7c377040a0d324768254d2973ebb0155e1cb370e9ba5d603a44ecc146fb6bac8f0b12ee4ecd0786be92edd805f4b8f59ae93dd39b087db11e10019a9676c06af21fe3ed90f8b5a9c2ed0d7ee37461ed01c933563867cbf567e8904e0582f653a25fa6808cd7be9dbbf428cd98dc4d314486a0f43c2b5585a46707a9901ce64c99ea3f61232627c9d006681104a122036883ac3306d82c133ea08502e693032cb1224c9c4a12e34eec6673b600c686d559505e08122f0ffc6a1722198737b91eb00dce2b445c7f3266d30ce23b771e1aafb589382710a8fe02c5230a4c9de8a6f99cbaba5787b221a2f82d886371c1943d764151dbe66650947d9588c2f844dc2c952ef637bb2900320ed805029aa7352637639694214f06ebf68e65e0003d03086cc4fa61529f69135c14fa7d70659966ff192854c6e16f172efd901a8b6cac8ef6f0c0f9513ce7ca752838039b64ffface76f6e260a55eb125de515b09ce85aca81f864811ecd7b35e0adb4760a0b3b004b4b0f9154c10e54b96a230936638d0a0e21c3cb7d83c0f71f306c5ced8bda910106ebe1ad810afab515c264bb1bff48d50808307af187c9c3e20885429a55fdbfd70af34ff81935f5e1c441e593f1470aa1b6c5c344019b2958b5a54bb606c05c676a53201ac270255bf34883606a71e1a8f3400fab2400014a3cee416900a147cca51e49ca434d84300aeadea7935b3855459c47d9b44adc23ffcd69c506737949e52d198dbae1ca1ce1fc8518727d91a6cf154948e7b310c224165f6daf9a189590fe373a7444ee7e33315d004c67af131826624b1dec9553b0809142036e6265ab38dda816176cf1eb3ebd7d150e8e8c316a0bd0c9bb69309c1bd1258ada5beb492588b9b7b372b74e417e388529e76f63a84b6819699f61e09a03240fd28a65166f12f3ed3f1b14cbbb8bc34b9b569f0d2613c179fe9e3bf7ecf9ef7681700befc4a94f01cccf47138c8e50b2d84a81a2692a06c8dcf577c9a234d191019ab15edc432899c2b0599f0c700bddf00a9af9f2c6d9f718a702bcdff8190b33e8e7f1b482cb026035ed836b0fc6a1f4caea9fa82571fa1520f0bd52a88161056ab80e8d823190c48823118a0ff535c45ed5944a9523c514af415630d8aa498d1436e02584fb0ccf70002f7fc1b93890d700381f7036e7f7235a8442f8d0909e6575624f8c9c07efffca91c74810f6c2f8a574f855290520f5618a8475f573aca7de085228005a571d62b5aa40261ea58ed5d3bfbd6b725b900c987a97499270bd42cf1f702507acb5e9d64fb5e3a61cbfad9c3828513f421e7ce80749ef2d5919ef45ad5891b819ea8a91bbee387af77b864c7e2df015fcae0e1d95fcfa38371f365573a8deb4ea7e7ea679f807864ddc3173e662b3075959bf9375b57956b2b17e4420cebadc9ab33adee9ea7500b8aeed8064abf3537bdd874f627c88859a5d2e2ae03b444df97516626fdf0d28f07f61f24bcb4dcd544552d22b59c23a0c8ede90000bea71cc5306004ee5ced58814dadab013f5f9b4808c304ee0fbf150ea06832f774f2b4aa0b014f0c3b87eb264334d16e234b0f939d9ea1bc61fba894eb688d2dd60257a92ac2cc2814f10d44c721350e34ab3932bb3d996fb424c17a1466a7fb2a0c6ccb5628e2267032b94789a343f7c0b79b3b4e21253246020efbba44f3864cb231dc12566e2cddf0f46c8b7eb390b7a598124a73f0188f3a8b05554bb6f7ab724daa1a05cd232a4a32d1e5936292079ddb1f41beef596fa6904e45d92e5045d90f341398affc91a018f3a4f2c01a854644bf7a53a7e218e07be9e6188a3a74104896340ee48b6e83dea80de509ff1f3f0d239081db6b5b27a78d82f251a218ca38263ea50e09cc964a66741412a9a3ac5d3ba5c1b82cea00db51ba6e8bea42f72f928ccd219fcbe754eb4525243e80989b561c8c5a6b37de4d75a243c9a26a067865a11db2c10622c0c02897b2749c8a3ed06c8c852352a21bcd294561483a8b13060c5facd2a45ba289b6d4e976519c3a9ace14112add918ca300674adebb0f137cf798f260874c57156af2cc6b09e6485795b20a4e9cf11050e3a80f8d2188286a7610142a995376621f64c56638ffb8ff00e8e3f284eda103a0f80328aa51e1a80ddd932a387f1fa96b526c28ada9523f0841d0a9a1e2a2ab21ddd5d98481586c21017d1ad01f5526838ace94c3b65c33e5ad00f9502e89b8d465fa169a260bc8a176ea1a2994db2392d7d9ce40486c13b56020878cf5f535e7818a1b6960ac615bbb30e56b004514e88b50ebc2e6b62c33e96c9b887941b1446909618b3b60e49235741cc53e921b8e8641442b72caa3cf65695350b62ad0d3b92a18164e9114b977bf2474caeaacab294eb241a7e6be006f52995e681837900c3f979242058ebba0a42549e37cb876a2716966c18568416a6fe44e0bdc92c37db9e33e33ed6d614eaa28ce37df4217034ad3dd870b31651423fb1cbb907c17ce893e6dc2096d55a059add926a3d4f3562937e9cc5466b633716f40da36c69bf90957986df6178822807013411c243bb0deca991d287ec2f8af5fe716f4451190e9f8c3c72b4ae44f801644a80432bc8bf2afb80ee173c69584281003ccc9c1224ebe4a20c861f9d4fc472d27365b80c00df89ae49a45573fa00f566c69da692450b232d2d55d787a632ae28d858e7fd426903112750711fee1319e90b43947c817ed6bea4dd4f1af8abd6adadc42a77717169815995ba720fa6210ae10569d03e00f2f0b6a5ce8bb47a9a56ed94c5ac7bd0b4390190915e7007f0b343c1250c61e1cd31bd2282e493891cfcb8890d9e2147503ae29a7ab5596ef60f446abca628d93faadaad58c6be12ab02cdeacd8b9b5f43b02d5963c7d5f0461d4ba1455ea28a029d6020f4a17f82174013f846ee081d6051c90ba78fe60fc9e7b2c3e782074810f32e91e886a8bae9be8dc5e0329b9799e3c65104fb2190ebf791cbd5316230a79bbc1ffe6bdb706bdef47b749d37f19036f23736e9c7f2e650b0158c81682b21eacb64d0e359a8677fe30e5fc6bbf357d88c9b4cdf2c6a32702bcc1f860e21532ec60e68fe571847a13dedb40ddc8249847330da1e958728f3749b5f41b869efafb2ed90b7d27f5e219810c87ba600288c72b2a18316931ec9f1a1006554c36ea77b827957fd40e308bc9799640c491c03478ba5208e8070044b0022f96db92efc75c4513785258781998f1f250e447dc6b38aa8704d60c9c8ae99df4363a227dd3d9add1bcb2904ba1ad22240c80c6ce087a8f69a4450752cf2d276b49bb569c6a816f05c0581159f181d2566112a434c9907277fe3ebf8d381a6bd7d15d0cc54d75662c978b6fd026d59c98d81f17044d455a87c6c92688840e286c333ecdb4f26ec570b49f2ad4c4f6719602e52769498894b4c4a19eab0f5d704ec8e9a4438dd8316b564cb10fe4f22f350683fcdd4eb8f015564b03d3b3979d2ebcaf4f018bc879fb922d3f7c32194c584dd63ff1f996f0fa3073a447e76a893ecd50722791b2e87fdb9004b946207444c821183444f2e3d02c5635b0b3a6ce353e551e87feba52363bb51a130aa20624250aa1c3a103f0a9cd7e0b80a0a40234bc2f8578b474578dcf97ac21bafd30676c1b1db7efb5e654a251a0db5bd50f334a50dc1c2f2f890e96624590ede57cc87b0d2aefcb0900464c06e8562a98a02177383a56d07335bba0f4c4884e3201a0268944dd41859a25d319abd1d7a766c1a675968d91b3278c08dc815108ff7e439ad12ddb6101556b191180e22f45c9f80e59e54574bad84b638f773da4b7fdf832faac3752e32fecc34e05a073b75d12dd2b8a33edbd75435d516c76e4bf17e006463d87e71f51e16815c573517a6dfe183e830a8da07bfc9cbc9670fe84af1e2319bb4efabf20a8e5d98b8d82aa0412c119ea623b6157b35da66fc05d1213027c8083cb23d8e3497bcdfe7eb41bbf3e316413e5142fdf5fdd99e46295c716e50a70727629c67d141c30b0abdb59e61fe8d3a182e736c7c52f01a470aac4e85612674e06f0cec01dc7ae4614d7ad4eae9c6a928fa214a4f6a0cd49bb2c825cde7a943b126e5e80841823b22841400559d76e5169d35f0c6d3d7c04dee96b4c02372b4672ea429dc351e638d445e7274e308a750c3e4d8950260dc05b3aa575cc07820110ba45249f509a12a5103e207ea94bd8ec31076a2f9676ba7b59aa9a71524e09ca040598fd83a14ce04a9b75c2bc3ccc17fc990dd35a3e1c54d0c33bfea67a6210f63c4e2c0abd0a36135dfac6fc2612363be4cb6a8b933234776aef7ab0ee8f34c61e19867514722ec1e2bcfc8eda3743696877f064976ec9e8c897429714f91627d5a684881eb9a90e1b7c472e9fba037dd4924e6f3115bfbd5be3253c2e4c0f5e296d38bf134bc3f7c476010d205c913daa113d82245a74d158230a479e8b6c38d980bb68bf37bed8dbc3286bd183d33657fa53579efe01ab4d8da25b6ab3ae76c5404bb34ab4bc3f42a66c765907837c1fe4cd33d958b4561aecd346912f3c83c04a12fd4c83bf2da1995f2a77e941734e717647cefc1ac323c027cea9661cc6306b6dbf5402e4bac00d4ae08a64673d2bdc7cb510cbd624d8a5cc56f761988620005869d1f5f4456e85e73a5bd849192636cb352497b87d735407b0527fa36adebe6992f838c8455c7da8281553f7ef23692017a30dda4ec8c2b04b9c8bf99f71ae1e58ee2fe1800c2f0564ce071376f90727d853cb78e6b4582a553a8140dde70598ac0ae79f2c5b405cafabb9e3869b2e57b2c92ad6293e7643ffb8fa28d60b2bbe180fe785eecc2eda18ecf9f0bec06eb6312afca40174ad6a12adc97da2526cc97534134003f3462e8e81d3b333788f0bb8fb4987d5b468ea8861a79dc68752aeca259d0756f10aac603a78451c9585728126c85df4283efa60cd7d9954aacee2dfd024e7f18c6fde400afe1678e41bfd93e13faf2eda4206ec4de558ee96fae12e2f696a7664048d8b624c4e68b0836e267067a7829031bfe7fa98425de3ca3daee225763b71b2738c4ba4d98b5fd2c534074e882e13bac5988e13b147c85854b100ad04d0a46d0f2744b02a9b7562e84bed0019e84ab177e2c7c4b75961f8a857fa10aadd8241f782cab1bf943906abe118f56b87182a7548d01320fd05c23f027acef6bffd4545208693a8e4078622d950c9ae090807eba4cd27191424e5ca015482f2502479334ea0a1c8b4fe21410c0457c498fd77a4f2facc7264b3a768aa01a6ac6f7cffda092b8265c66535bf110d9e1fb994d800a045b61ecc1c77655d61a4a6bf5874e9f1093d99f6c68f7f6580015023daf1efe7b8368ed2c211d2aec46a8bd29a158b46d9f41d706a3800cf03eef2b835a6c381f6cf0edd35de35a985b7b699e277a63074c68a788d1c5b4d613360000c9874045ea38ba25609f21ad4df8d770e1955e0b2c91b7e186dad39ea20afe9f3da69cf788dbd32a8a93cf11a5055fc5202e4a1d46b2fd656c66924589c2ffb04d4d3423d118189d7c893a94128cc5d7ffa241332905f7090bf47429de9b51f549701c67ed4f26d7e75d23b7d72fe3fa876bacb49d66883bb5f33dd5eadf50e62aba1eec09174146e97f4a2d011b065be50b7b68b1a63134ce8c4abf8d2be0ab73867484e9b8740e54ce57390449bf65de7a4622d8a1ef622cb942ccca040a07ac7ccb617f63fcfe751a89fe207a6060c8675d960e7a2bcc632779a2c8b76cb4f6da1d982d6c9293c9f74e824a68a51a2255f2c55b999542f0a0fd5dc7784aea3fee2e666c32c53157335d82dcdde5f26bd303a28c04f6dfdcb79b3fa4a54b309fc50d14becd4905e24656ca67124c710700140b8eaac90a7af703ac40ef43b013acba71f858a377df44870e374760b3b7e302d3db6db532bde0c986cd08400376bfb6be5409168bfaa2137a56f47eaa7db08742739e1cb0dc8a795f455b5623b5f1555f7edcbbf18ec9294b6b582d6b601e9d856cd99b536cb445d3daae72fe388929701955c679208f64fb5e415fd9757ed4a2426e9d2e467929374b8ac12c16aa38792d07caa87ffd0357b1ff89e41fbdc0c963dcf19c5346a60ddd42d2e0cfa8d1d62e4314407a7913a7fdf63c38d3cbdd7a4a78b189926b883fc80d9a53c8b8b4f0aca75055f604664022e064765adfcdd01549892a33b927e7604e227b37b97ea3643da86f941f1804acbdcca0e493715a17dcb11fd945a94de7abdc83c0a57772a64a343e76f28382f730a10d976aaff6b2b419330819024623880dd098385e945f61ecf678be69497831830c80ef854eb1afaf8178b3703878e3cb4645e39d1ae1597811d6b569f396bc1c5b0468ea8deb497a740370494a522509fbd65b864a5e7247f2907810524e491c9d86b5105b045b4d7a5e0f30e06472bd3343f935a51088522ef996c491491a200ba33654a99fe1ae79f3dc82625335c6d2cf42abca3d940a3f62b7eeaf1ca3f2f70ca0f2e5930b04a4f6e3cdf5c7d861d087a0947891494b484f3882fd9378ab4bd6c2b693049b97822b03b6576863706384977c7e84c13976e7e17d7a9bd7cb749538853876a0b174925aedc73fe76f090effdaf8c04e6ae31bfb81776b505e5147ca188920cf99f8ee6bd3ffd28041a30fe8369017de4866c24c7d47e37957d727417812347fc271cd39d7b917a383fd36aa804ef9b5f3f51f47cb0af49f539ee6f9ab0a451ddd535260ad494d38fd2db2e6c4e6c3c5114509130603d62d096337211eb221040f1e9013f842c083e9ab7ba94baac661176e9487a7eec6680ec2389c96fc74c071b80d18f9248b0e1fbb14ee3f19ca167f1ea60f2103ff5a678206b72ef09c19a5156d806e4eed65b5df4cf138b00e0341a787078e0b9ae5c043aca64a41ec6ebad27744d775b01b8ec37afa4991aa91b44fe823f790c01afcbbcb9359cec255a36881b8e7fc9967e205047752ff482c70aa361ad86990449e52c17ec022960a72e6b70fccb2f4c87f4d7b4cee61a14fbbcfb03f762c5c6a269a4488fce0f6325edbe087c0b7388d5eea42bbd79dc3934630dfacbc2d11ff656eab51ee54b25437aed62bf04d10fe8b69970e376cb9cf81d6dd520513c3dc4cc51803d49e270c63d55a7ac98a677d0d8678289eee44dac6a830c28747aab2779a348e791590080f76ed96c30370ec1519b5c88f185dfca42ab49a041e2eba64d86c8552ac22c1590e7176d69de8a71fa11afbbb8d567a780c2a02236dffa5ee0468626b3fb8cacfbfe63236318aa0223b54e3c3fa845bfa795d7c085b5d3b6679ee20d565e65b8f52249bef12266129af20db80154e9d019112621e55a47e90d28992d98e93ebaaba5798aa04fbaad442ab5621df27600cfa49e9819cf1963c2eda43401eadcb35bf063b43f185e8b0c1a52c03857b39cb789f99b9bd4ee5ad8e46005bf252537ad87a3c8ba0292140a22cc7518386be92552151da3090acdbd32d2fe57491bebb3a92778ab6161fd7a5453f66245e90b5f8a68f5a4fa5ffb4da554e0530264d74965edc4a20f1f486523fe238352b782bbaf991c5400a3a757f3e8c72c731282500b692e7107d6a9905c8a60d2e9fdad884440c43694177e817264c2de2c230dd97c34eea56544861a4198406192bbeb8db5b4938e3bc41754e45978bfda667a5e9bbd2147583419d2e79c7febb66ac1e129e04cbcdaa17014e9e7fa7746a33b9b6926af96ee3205fa84c5ebcb6162df2cd4f210a4c67cbc08e589eb27e819107e818e47b68f93317ec6642cb10bc5dc8903dad69689098c58a70f1e8b0341bb3cdd9d3eea95f3c2a46aa05e084d2ca9f6a9ff816f7895f7343f30adba16a0c26404bbeb4ff82c5709927c2a7fe03a07b27d2bb0b7871af7c3849085ae94b248fa1274c0cc9c102f9bf0f79193d6c56cc626794f073945d7d827f08da8b67c01a83f208a2615522cce67b2e9bb2cc2b080754970157c6048475c16813394e235c60238fe35da43dbebea98750878dac7c421224d4c2c54453fa9673389d91dc3269c400b2b6801b4c0e6bf7e251cc90f519fe5ed5c5a637c291ad5174337ac955eaf7a8793dfc9c4b5c4b7451f79b9914933811c57aad12ca831c29771e810ec59f728b3c9d4345271035f9998a7716696f54490080f531acbb93bf46419e2867e35be239dd3bc1cc2b57a35a5a8c2f86f651a272b47441d1bd9b89ef576168e2d4c79271f87e161f2e7206acd89c111159bdc9b4d76541fa74022758b64693cc1e984251b57a93978e8a4b59a57fa80756fed2e76bd0850216bf5dc589dd36cb3c0c82727e57b158c3e72c3e3e6bf2062ac78832c3088ab471648d9cc41c6cbcabc0c8ba2a3420c62da8e1cb0477fa1505fb979cbbdefe755f2f49501077e5f3891a07ecb128375a16117281ed0ccf08e50e6527f04377e28c4181df7bbf3103df01393c854932fa085f2d12dee607e4002384f66f1419af9d02a3b3a27a96e6486733e5128c2a14342908b73d40b8ad6d1ad280107871c4bf1e6080f7c23ce74ac830efc6b76b29680496fe1ade042de7f4cce38335c9267ce2a24f67929460a6788a2c201eee3e036a3d74dbb99cf351541cb21c6efd08563daa569e003da4b8729fcaf317107494578e52e25ec4c870f6f5e749e2fa91cefc7787db28e0d72d3e8f91d58d66b37f4ff6ea9dbb33210c20a276097844801ec32bbd478754448640a0ae43592f6749609440e7280840aea8174936682b82f249995f50ded109323aca115404b69de306c01e84dcfb02fe005b46ccb0b7469c96b5043f142cc4cb5dafb023ad62521816fd0b13e3c700615923934282d8e1e8846dfa898d8b017498c98742e6644c3b8db3c4f1e9a026ff849379953ee8681027641e73bbe6af04afbdd09b2fb2580bb81349398218c4c6b966072c1217c002afc808a4842a2232ff725abc569b46c82700c084a05261211aef7e4f00d1fb7178aa92f790bd77502d2d1503aa8d7ada0e6262b972a6f6557ec1239979961bd97a96f08d3883f80ba377040b2c64c459404d3557efc479fab8f66a97b16e50b8c42c17466d4fb91c0946a836973ff636ebe7862d2eb6ec046137dd9b4784cd1f7ce8ac460f35d53ce1eacb1f0a88aae5964935b7e5f4daa39e76daa971dda62e5ccf1c59eaf8e074db4b43b34997f6e46db9255ac7e38308ac0ad0d35eb1ccd01d4b5eb4e91602a7a0176acd2fc6ea6fe239e0a1e6d5d38b57afb8489de1e87eff2676659ecd2cba2c8daa7fd8e41040bb17815487d0c60ba65408ecf9a404800f5b668a5806aec17b58cbb6ae81150b4c19af8ccebd9f25b2ad4487c8cf31950398096dd67304d618964feaf40f5f770d898348f489abd218c72f5c857067adac08ae4a4a4c006249006fc0f7bbeb7beb8e8d13f01ba11f9594f8f7215c77cf168938cc6baee23e18dc7f73a3dd3e01fa0505b6cebc4a2fad7b55b4dd16a667012327c33ccccfdf2080712bb61586ba77d05c99447d658e47bb6ad2e1867251956fea69efc0016033f006941dd0e6e8063fb08ee04ce0c39e5748004c45ddb604544183cf12a352009a1b38ac7b8a9e6b246ce8fc994cb6f42675a518585d77ed4edee615171021280926f75e018273606572a0b6005f914006ffa973b6b43d4b034d34f52ca116ca8d5b89bc159b138b460f2aeb2f1fe276f86fddd8f27c1ef4562a9dd2b050fc30b460aa9316bddba14651484291996a6c6954347abe28d7a2513912bceae5ce264eb959047ca6cb7eb6128509023b6ee4a223bcaef8d0d5163ed580586bf3cced90412cd64cc8f7ee2c7b59685e7802c24a844a34bd5c9b0f7efd6b8b882856bca23a9127c290b9cac4f6b594e2a02cf983024a89eb8ca42a1af47204e902ee4ff1ea89010a4513376f45b43a964c48b68417040165c0c0a922b600f3b3b435aa5b68480ec6a9228acf3f1a3f72a436283f93d93a4f4773b7edd1e4146035b577b236f291c402ea05c74f580f31f79584773b6b17b506448ea829c8d4d03e4604447bc4ba764ca0ed9aacecb2c3698f146c6ccfbba4ac4d536c6e638e48c278a9c8ee4db7da45ddb2dc43572c7e5c16bdcb02e00dc2c36c1c1d7b91995f26d931b3e70efc074480abe1247033c2c0d97b29095827321a703b08996aa22be8aad44196c8a88f0eedaa3be0235cfb845f2e66b1f36d03817944ad95930d4947051f404b4e4f71588b164304c4125a8158c4d783d58cd722e106a78c1258039fb891c34fd5d2a5a6d14ea573ea74ae1fcebd97578e46a59e85efb9e74a705f96102f159343b88a193ee984e39452026fe862591274379bcd0cf6308ee11021239248b7119dac2c912dc3dca0394439889a4e20b922358919e9e1102aefae251bace643e70073851c0970f34f5b0a2033166ef8bd2f8e012d1333951d1cb95c652c8589a3952d5204ada2390b316a1490788d4ac4e1df8121668ede7350edc52f094805b143373fd058c5597605d92af55b0ce9962a1d2e88f081dcfe868b2b848f5ee44bd68deabc4717a3b7d458582e607372689305781726556e6f4f4358bbe9e499f76a8f729c5c13046e2c00827d95a6ee4051da7e41722c4358dfdc6ef28d72acc6b1817a2fff2264dcdccae3f0228104602988ce7f45a0c0239707db0fbb52e49c3b8e98304a487c3ea90f522400f7a9220b4b02ab68292710cbe1a62373b2386fd23b1d4223184badf0ff1ccdcd05e17f4a3495a1334897d2d14ed6cc35774196051d2379b6139800e9c7eaa8f03a3aa2551aa65a36fe2e83d6ff8f71514d0aeb5bbae60c1f12e3da76c18258795526accdeb834fb4d3fcc2325bc4b305296ed802be6746618e6fe27e1d344d4043d52414829db08019faf0d951d3ca6d0fb0db2448de7ea52879901831614dbfce774a03e12e27f9cd5b166e86179acd3a2fb32eee4a5aebe680ec0801fd54475e7c17178ac618dc01413548369d2a3b2f048427b5f6f86dba8674f2c072b0574c7e3c8ccac47c6ddef66fef7b4eb2621feeb68ca78d72a92a9c88680da2e3a4312ae6207112c3f43b57617089f1d23b0307b1055fe98fd4e25446dc87404bd1a734dfeaf7b66ab6e5fb42c3442d2b358bfa04fbb1ab7bd5cac80ccc49d3a39de33829dcbbd19e489937f6ca421be30fa3e77cdaceba666e6c499545cd09a27624fa8630e05d57f24fb103315238f14d798c8d563b5a41843b1ce383d80fc5fdb5fcf6c0228dacad1c2808bb5ce7e1651a7dd77b684e221d6e2faa554bb981b3f3512376f2c0c10663972ed7916568e39952123b4a051936967e19ac05c715b00068bc1c631aa7ebd5ee44190ef4b14e4d7894a2997f7a3058973d31e4b6b14afb3f6a7facb11ce4c548c61c485984d3c1a73882c400cc31497f382590d41a9b074b314f974111b3584c03a99792697067d98e6547d268457971ddc451087d39918567f0b282d39d63f9882b2c212ea439a4a5e90201bd327a888eb383d5ec91dfcf1d7d95cfbde59571f4da0758e688909b616cc2cb0291aeb4a1e44a60564db53758b9a2f0ee143fbefd047a024648fc8c916d78b50e86dac2912e59976058b1aff665374201b123d41338dfd9688ae4a0b7fe4411ea193219848127e4aa78b10548db0a2174526f223759741ece4a53c88a4297d701177ece909e44d770d49cd965579177426476b12ab93204cb17d1d48466fe88968e9a49ca4c3dadd273170f670ca0a3a5e360c453428e18936966214ad5e43f00e75e493a8d0629cc594c073f3fdfe64a1cf1a8f6db844575101bd96b484847ed63b158b22a02635c642beeacbd9b047745e202fa50ca24ce6dac8e212c444691110d7d1314223d82fde8c48e057178d0ac865984883518888dd2599f8450b7e9280b41357910fe397c9985d5a5165362fe03c84826dcffecfcc193eafff38d7ed2dec00c18392566034cb6b1353e5570bca635b620d4c59a2db27c427a0892b1142c4d057df7a06ef540e0993fc08710cc9a7f27066333218da68e63313619810743c1525bd8c1ae2134c86e08e840e66746e1c2c4564b1e2726863133a13b88e158fb5482059edec8c684f48c5412a8e11b48f3f526b9b42ee5124892e44f24319efd28d4afa7d4219345f115d18a734789b0d35848c5122c5f81f37eca75cc4f331201170d3631dd098a083d6debd566a1502a5be9c03abcf0feca328a9cb60ee91da251fa11cf3803679b7fd4e6e809d6d30264ae5a28974fe0a966d15d17827485e9f0931f90a617c1b30f66a02dda7474cf76b5637a631529f7cad542f95b4a77c3541f48efb3eb32ed735c69d65844521c4f04b9063ddaf4ba758b7597a6e83f315f14b36878e0b7bcc642145e556336621dbcf1a906ecfef3278bbdd33986362d5e18774eb1ca1c2a55058759ae7d8f6a722fa1d4ac6ffde6a4fa087410a4b4f8d87b4524bf6e317220c2d86f721ba1c9138e4fc5617439ba399944cca104cc9faba391c30dde2362ba23d200f024da2688ac917c604c7faaeded02259b290ab88ea0b5722b143383217d23c1c331a0c67d7c518642761a2d1e16bddc809ea70e6c248a36299146802b70cab72ae72a29b5a94114aa74c039d7d2bf84fe5732e7777bdce6f35db43f5ef3ff064ef7206a56e0d6be38dfbe19b82eba68bfd23237badd480f54d947b17073977f88c4d22c396684eab919a5fd2605d9ab9993cf93dbe47f075a9a579f9155ac96466387c8279b497dc7cd559eeee6c573c3c36c0c92df16274f1d729ec118c18e9fc1248d869250ee8d36b1a76c0234f2b4839c44bbf5cf40906162177f0c3b4517aa7b939bbb9589a1b5c36c142b52e33a19b2a6e000f5777c77e97b83429d10b7c0d6a4118d244801580aa50fa2496aad82c955006164d56af300d0a9ef43e4500718fdeaa80ab85e39fc21eb63883bb936bde26d2c784c59426cd0f236dddb7b25f6401ad8171e006b4674632cc28fa43d17d10397df3ffa68a2342530f5934d399f252214eacaa142508a8110b16e3419c8dd3dc459d2bcba5c186285087e22dccf25f06dc3af35a3742c863d3a64f018b2628d0ce98d394e9f0fbcc039f1cf09abc19000c54b1e3603bbe5718d45604cc8431ec515552dc8d815fb1fb1d1e0610fd9fd66b8add59b2e5969f9b10412581ce8899f76c6ed6af80b0e6f273adc0920185306a4ed9bc5f2041b00689803aef8de446a73d098af6c1613ee920f9e56a01a11549adb5369652d79d5735765b00d1db855aabfff21373231f667fc92b11ef0010a47622a1fa655ec5d3c8ca97de4e1486531299e93193f52b25413fd413322cfb711580640b6408e89f2894a081b0e64627fb213b8fa252baecc88c55f166c58e67c07abcff9789f49b36c3c34a3dd7162a5928c8af8bc69f9a5ee55582a208bb4115dce23221b285366735120d066d94d5b6b4ad06a98d2442e6033780f0991684b3f999aaa02868082155516c256f2e641966af549bd46e7401f2c27518a6a2a3a94a2ba9e4300c19eb74a0a72312664d2d52055d0b57f003d2e730ec0b583792f405b0f19c2506c3f182531c86dd9374868a884f60c68bbb454a0ec36ea01bdde0954127ec20499fc330687ccfeae5a2e08e0a50c5da076e64fbd86118a8b4bfcb93a8f179e4d80ec3e04efab87ca1b56d5e92c4144986a35b4a9232be554b835b7e2aa8f3593af37f6696c276ddd6ec81a32ae71311e1e40d3b83b4d0e826eabc9046deb4049112f8faef26c01e47e075cc1243681548819fb1a9c4fb5c9f1e8f7437ac460f3a8b230eb8757a8e4a08d93916f3d5c70185e751e7a87789b9fba1704229fd1115da1c356853ad3167d22c7537c15c3e5fb473f586eba73e6f496d186d13177de7a32740859b5ccc12318ac244c5baf1f786ca30e6aec051669e64c601f9578b5eb61ce503ee1764b8bff5ade7a319390405e38cf8941150a3485207abd9f0714fab60ceaa4183ad037b98bf909822d90ac805aabf8d768643582b208ce201888d1bb61398d9b36d9411d5d37103b435c82359bb977334814a76244fe1c0cefc132d48e9cecf11cc0044416cb8f748f6c5a2968d2a3f7e854e683f3dff9d7f3043ab1e47aff091308b6b241c5bac1fa3e3aadab1dd951e38bcbed926a1695fef854f09e5f1d0082dfaef09f7e0198eada01ae185c1e29f40c823898edc777de0911a154bb01f84e97fa69d7783c54f9419cafe02fd4ff69f23d2fd499a93abf3af3d651e3a185f915a83fd42d2555ea3b30b8a9770642753d940bd35f3d85316aba63fa0313ac53f8c105d3647c4ecd55371dc8322e611a01a2eba17e07ac7d5d1da60e932f2151458ad5e285c564929171ff71d5343da584644cb17b6f45aa421bcc0f8d440c1faef0059aa0ad0b2fae3dcb1a48884114459a8092d920a1936093321af0c94559cd2fcccd33ce6aac49781c98ad88f157f24b41d7c86abb5d9689c7adb4febab1d6a7351cabff1f22e0d3f05e022cb4a7ddf76f0560b7af7aceaddae8f636a5baadf2a2bf26b7141a69b3a6a8c83c2e0dc6067f0538a9e3854a6e140a29b0d8ccbc203451b491d8d3439f18beb51d0d4f5ace8aa4905eaef8f5a6c7f0d7f7571f26b84e13315665b1e46f990c4479498ff6d9b74f233e9854c747eeffc8c8ee0fb7c93cc7ac8a3d16754b69f7ac213e71ee79af2e18dcee406edd36484954f6523777e86ef0ab4f0383a49b290f97f789eab61f534efeabfd5c92643fe938ef8f3ead852116565f4b23d63d52b683779f9fffbb9432662f696440d5c930820b26f20dc9bef784718506ef919f79f2f73d93080423ae255c68ba2f8d2946b2a62e89c5d0bb700508c65a0ce81546aa945ef868281fa868887b26af1e603a4642a07890ce642783e148a2f7f4a679414e4aaea2e57b366c0f6455f31c8fe4d47ac511c2d8cbf8c489b8da041ce9ad7ef304d56ffc67cb557032c636fe64243b323f56639eaf6ba0a5ddb5c4513a2c35a5dfbeda1c1afcccb603e11da693cae65c0754068f91a2ab6973176376825a0e24196428e0afc15fdd83aa242087ea1ba77861c8b68e7c165ab54d88352a1416b1fd7e33a03819d30441827d511b6c5fed25b377e94a687dd484728e43f8a48b8f398c7252d8cead971f2882443206473f6244c4753e8fa1277c7964a432e19fc76fc68372e1ed34006a4081bf7abaaf668022ebb01ef5c9585972471528b46f23c842513a475ad2e9a70277b4da0bbc51efc925317e64fdcc804e94ca6187414abcbdb6b8e6eb580f0a832f6c4647f07c902535f8e7fa4c32aa494fca43292a6df8cad4d434b743b6658a389b62183ba5af527eff7142cb2d61320fac35c8b387a7394369c2a9ab43c04a833a5cf4ba68ca2785dcbeaf2dafa3fc9d668f9f85d4ee0948b300955b9f50ea3d750e5088b717c463a2c3953a24fae90247567ac76dfdef5d253b7d9074b876d8b8c52a57fd753854b07982d5814e479197fa35e765a87a5419a0c8cffa9b5c313c64a66d390a6303b4ba755d85eb49d93d03b2645bac6cdc5a3ef09779141ad94f8b0afbb36e2ce99aec13e71bfa1dba7c474868ceff6e5b0f6278ec2c6ac28582e118e58658277a5c312674afac40a41a4eeecd24da34c6439869c6cc12a69e4a39478f2352f7457b152ce5d01838ac2adfcd2a3fc7dfc3efa18723ae42d8dcb048a94c4f44c29496102fc38d2db8c418bdaa50044f8955ab6e989a55642af70c85c837be4e6ea384aaebbd1dac11f54ceace95247a8ab8bb2240cd6cce176a76a02a49dcf977a61ae9882f206e35c7cd9ee130ebe9d29e70800e9719fd9822c272e0a59a4c26a1dd6adbf197fa056da15e67691b8d136b87527a28dab7452c68147314fe64fc9f895bae89a0b17c2a28ce1f122810cb8e180841a6338ed1be6e0cd0e68a81dc32b1f4106dc00ef1840de0e2f9064d3e0a7ae8e9e89ede64a40f21a26f138dd5dbeefcf5fdc237588816be4a792b15099233d40fa4d30cd8e14e767c8f3ab81148a8e9dcc0f182c21de4517ddc7013ac654c6d9a17a79a2e1078af61e9550a7419e2556b505c53ec8ae2ca65234994b20a231c6721eaac377dd2cd4ea5e0ab0cdaead0aa2c3fc8c3c4ce27bcc1381bd789af39f4c28a1247aa0e71399f5692df37ce88bb713b1b7469ed97ac0f0ce3458c54415be5421e4a7c3c547efd5c9a67c8720a8a1809b5577c440e6529f5d822ce77e74a3384d82449d27baf06ae10b2b58c6f42262289e9da809a315e2f6bbdacd8068efebc8a840ea18ebab63512d10286b789243e2a1d11d6bc9e634914d044d99d7cfbfb6877b3752b2759125e5187b14f1caee3409bb6257edb9192359d4aa7e6e2468c09b17a8aaad8a8b2e4e74ee34a424b2555574784a63cf70ea926215ad86633a775a3a3df9b4f699943301d0156a572e46c43353608981961e6985a8a877566fd36a13d90f424eb742198df0c8cc0700fcadf39d9304d0d63dbf977512f29bcc9841814d8a4673f64045678ca27a5483dc5a5aa8d5bc9560927d83644c0bf3093dc1d31fc4a0402de989e4feb302242a1a4a6398669901c9b8be64c60c1a2c6154c6db0211254338e1a11a6c6fe8a256f7a500d7ec1b24a37acceffa014f9621830a2d56a738dfe98613e4a48778d298b567c256e17537d820671003850df0eb980d66700225d370df822c67dde856e067f5158a4920662049856d3c45693f0b899990b5e8aa176cd059d2486104f817dcc61998460869dc0ec1969387c677ac4a36a3513e3534675e3ddfb61ddcba13d9c6559e14e3c8a38827fb9364fc0a5d75cdcd88615190f439912003de540151ad7c692b909eda97fe406705926f6211a2702721a5960f6c42852154e614a4229248166458a2f067a4d5934b6b7f493b25016578ae42de0216da4888cd35f27389b5a9dc935a40fa2d1a66458ab167a479d589c1d87e59b2aa2bb4f3905b70f095594213896dc655176eb79a2a2c1e90862936d9a61bd421daceca1b2c32f5de77ba5a4d0365e7e3cb69b05439ae9e3aebd203352ffa8f562ffca880fabc2d20430acefc4e40c1af8b9641d038a186232ae5e3586c12b6c22198019267f00d4b1b54657c50642c0b27ef056251608aa3b09c3d50d19847398fd5e1abce2c6a55bf1a5eee96c4329ca0813a0174b1f1121a6fd8c69a7552671c5a2b329d01251937f695a06d9e49f48ff92f064ee34f6c281f9b182cc894c8345cf610f6a945abf3251cfc78e5dc9cb9caff9c5a28b1c05da07706646599c822b8ee093af82c69a23c41fc1bbe61064c400b34ae4bd065b8199ad59ca47ec4e22904114a94700fc7dd436be2f0754b3107cafee7cbd650a972d09765a05b11c0acf0040e884be05b0ba993529854121a675878f6b50d2edd59c1d655929463dc23982bbb63227625bb68afc547bd983ab3097d5a81fc557c6915e0fc9c143148befa4a1fa055a5ce5cba385179e709d539452ea376331c752b23be1bea1952e781ccb632eabd57d521769628eb9422df2c92b5eec501ecccbc639f686faec056fc88ef8c116366c7a19dc3d3dad04df931fc758bdc05019031abca0adff4eae6ef5238da4560bf3ebac661383da2b375fa8a2d3269c713450fd4fb2c66cd903123d107d0187c020e2bad25af16e20d14a6f6d75c93bd91deaec3489a8c8ecee7681e8179548b0e1268d3f68e7001f676fa3f33123f70208f9176540abd2d35167741866adb5e95ca57d6419e54eb79aeb1d2d450e75aa38d43ea054fc54e482eb5891db309c0b46c5ad290332258b98835ddc5f0a020c66d64af74cd3a68c2ba70e359eb1c187c1689d0e7abf3b16382f69f3bf3ba2500a8d2f9d0c2547ce80df6b093d2163883fd90e35fa9c29213253eb18824527716d6624ad6aba76a733f428fdab61649f51f0e7992999948323def1229918da65c8d5746dd011673f7bfe1e395aee39d86db9a12f9c99539fe2b2d0c3910f223d64822259f466ace828adb95d5db2da9ad2f301935773a4af11fdc3935a0b3768cba13ec3a653594622c195bd57d935270f83057e9c6c38a674d815108a4f0c51a5245be19b54b75444033e25388d3ad53662b3cb228b99c78760a9de9d0aee01b9463d371b950543a9c5dcc447ab7ac3d51718677a58425674278c4129224feecd69a72464099d131d0a916aa9bc2aa51402193f533fe87a5646c40b21a80f85b992aa5b58871af191f519065d3377811dc9fb0f6cd20c7e29a7948c1dc14f6496f10f52d4e33f9a6d3df6935b812440cdc31042e5d048d0e56106058451de8651b1da6c4431445a16341277f6efe3940e25f0a08b228998b42425cd85e139a484925b239f44bd2e46e4a7031df068854599de6e9918d52e7b2fdfff944c0a26d41a3666059a1f046d2f6de7b6f2953590f4f0fa70d50c4282218f5e64452b1989858462515ab896885e844bc4274225a215e414d9f7845134fb69831a94aa5279e932d2480a24eaef01ee065e13dd982d5841545c97b223e11b3f09c78567859b09a94542c262c2327ac26245115442955056d9258a2a529540a0a0585efbd125ff8b17ccfd279a7500cc11249e5f227d2b3909e8585f42c2e2921d3fb8b4422b9b874a416d29b4e1fe4e2d2f22d2e2cefe2d2123ef87dc7427ad3079d4ea4ea625d89aaa010fcbada52c32c78f0c2e1e5536000e50583272f5ac5cba7bc208a5757e5e5754ffa507fa2ef42dfe5e442df2544a58482c0174fa75348494fc3dff5e5028a5f0af25ea42234e60a4127558d774905a15e4b20a1c4ebf431574e8f72791f3a17fa29a196ef5e2e2fef724a0579af13fd1a2e5f43e54377a24bba17ea7da842a76f7997f7a1d617aa460d5ac3c68d7f5105d508512e3752356abcfc0b4161d08728175afaf05b529e8b3f985e255510f82455107d8930d417bb2a2e3504820bd070419497cdcba7b8c0a8e5bbaeeb545e3d05d197d8bd83424b9078f992eee5e12b88aabc5f0289fa315762d0f01a844314422977558db9128306d5a1f3dedf5d70860b4e203e65115337eaca5f6cc9000a143f683f5885aa2a8892ea5795d7629edef42c26d3b7fc4b8ba9e54d2815a9c5c4720a554230504a9e6885c973048556e8192f4a55a8979b5427f164746a39a55a54412c54e5d515045021952ea67b514451e958fce5009410e9bf575048a5e549ef430dc5130faa846598516f5ac4ef5e3ca962d0a82ca0487ff05e24aa0a4f5057dd7ba9504a484628253c41bdf9c8a8372165f942324e462c9fcaeb0a6c79002a7c0fa5380045cde8ce109fd0a1516f3cfa0a025f07e55356e0a4bb526f82422a21957ae353a6d0a033a3def894159cd1a11173053a03c6a041673ecfc8f75ad251d5279e54a4a76f2aa9c24f0c1fa4625d7566d0d07482015c99d20514efc86de0b585012d0c6861c00e14e9e5f5262886d0f3c0cf13c58e44aad42b752a77d1528b47c32eba2b3ede5702297cdff77d1f151768c21048d082134c61c5023a1f025edff7855dd7c53a1cf0fbbecfa7a3d2f2f2292688c2cab70227983a0a8a2530e3a889134c60099c80578c314504c7888114e1cba78c71868f142bbc0ff409820a50e7755dd781df165f8c4aad0ab992127a474b78b18002484003503ed005110e00c50052700076312ab52a6401be2a9a08412956c00238a9c2f791be2a556224cb2b68d542060c4c1773e3465d553175f46ba5a159ad72e43802d375289428d61b1e4ba7f2c01c31a8fceb0b71d5122fd28b2495a80a697d7f21f5691549de7fbf84c9e4b476ee02c31096fade9358784a2c5d7def3d954a14c2c2e3a5f13275ee995cfc15b204a1b5d4791f0d9d446aa95f496798beefac886698e1f27d20e98580f53b9427869406d117187e1f7eaa2aee32e0c30044fdee81c4f7beaa9c10bdfa9f4a0b2f55539d10f0c30f3b960ffcf0c31628ea97eabacefbbccffb3c9deefbbeaf03411004bf541886611876a9effbbeef6b8182c47244d4e9de54d2a2537917f37d2a21e057598eb84ef75f8aa6f1aa29d7719d25a8c7c2a4aee8535f3910742788baec789f10f00ab4044694d25abb2ab452ea4d198307e2183118c30925702284baa3510229a0c0001538791ff87d52aef0aca0948221942dbaaeeb42910c2952beeffb4452151c8461482a49b922c50a894422954a6338094d472614a5b4d67ac68b7ed799e143453150158beffb401014bd53e82a510c54104a14c5936704f3a258a044315041620925b2780b13284ff52da78a05ea868b0bcb8e5347a15e5e5e7aa06ab0ecd460d9f1cff33caf868d17940d1b366cd870a1c55d86beaa7e48c55fc0f0a640c30c32c400c30b2ec0b4c0028e1b366abc841dc80118647c60dc00047114010c344010043d1034c1f1640a08ba80a92b9a02010e40500608a21086132f614451230c0968208c12d8b061c3060e1c60802186b1021c3870e06081051038f178d042184c80213571a1858a175e80000c2f5fc440860c2e0061862921a0020d380ef02e5aa4bc50d9980280134d8991e34453359c686a8c2729558b8b028eae7c4dc01553c0d842a5ea72e0d2c27232954862156faa1d083e65314299a0381427fc2fc584147e4f4a35c9d1f1c230844154f9789fc445e713c550a5c5f7a53c9559963cea45abe789c00a58bf7082e8538300aa2215b5fe0d980e67890e546182a30c44e00029a042a75201b2e0e5050712644009557c0102230841a77a475d57465d55e970d0c5d44a2bad95d64a6ba5b5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6ba595d64a6ba5b5d25a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb4d25a69adb4565a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6ba595d64a6ba5b5d25a6badb5d65a6badb5d65a6badb5d65a6badb5d64a2bad95d64a6ba5b5d65a6badb5d65a6badb5d65a6ba595d64a6ba5b5d25a6badb5d65a6badb4d25a69adb4565a6ba595d64a6ba5b5d25a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d65a6badb5d64a3fc8f4bc239917984c3d50b57a807aed4ed503a84f0477c2eec3ae7a401445d1d4529fbebf3c5b77e555554274098f561e7c9e6734a50b346e7471461755bc70526bad5e64e105033ccff3ba90224601411014495d3cf1420aa9442a7971c58b27c078f18292a954ea820acc1747a693e9f44516748a1765e4f842012693c9743a7d21e58b282d6298589c7042899ed1abb3f291fec55310ccebf59f8a0a9587920aff94229d5e5a388b0f015c422d48a697d8e174544c21142aa4d77738b5fbd20bca2bc833eaac88aace8c108a68d202fc52caab22bec22e05aa8e50414ee2e96532f296f03cf00c93e708ba61f432a54aa8ae13bbf757bd29557550472ad411a8421d79a8a39391918882d1f9aa8ec9d4a53ca30e47147f8b577dd1a8538146465f754a2a171c70810a421da18eea0de92b4925aac254f65e41a8a320174f75126f88f513c28d90e491625e1896c2522886611886a4cf0b43d21786dee785e0e7795ef879e1f7799e177ae1e7856129f4bcf0ebc2b0147a5ef8d5300c23f4422f2c852552034017ba88f2821a9e17a3f1bab00bbbb00bcd78e97caa0441052808afab127a5e18650ae2573f21846158ba7551aa84ef91c42e9808430a1659d9e2d1176278eb428acf4a170768d141142944108c920093e7799e17e509c98bc205491ce3e8036b105480beeffbbe087dc28f7a54c84f0cc3effba29c007cf99428649428f0011780dde7f3811988950a49fcc00e3efa5f10548048a208450c3f60a57b41c309554005885274a604784fa270f182a92bcff33c101ce3080441300cc52827083f2a3ee0820fccc06ba5555edf0e3e60c5ab4aa0ee355e402ba52f66d4aed628428852c58b3285ceebba2851ba387a75c1441752785ff8c428d605a9ebbaee280a51b24042094250c601743a6f8a57d7051aafae8b03bcbacff3bcae49d70da00a3be042ca117c108510e8749e14afae8b42c6abeb3acf09a90b575e15cff34aa1170c287d37afc8ca2e855e016c80e27d514e5fcc4aad0a098223f8bc9b17525a4050dca0d8848b0b6e5ebce014763151650504412f0a2f9e8082a396ea5325082a40417c32e0a204a0077e9ff785024c21088220088220b87a81a0f7799ff71940000d78820b09c480054718820e142fd00b1dbcc00f38e105821ef88921f84514ef26aaaa5801411ce0e76d2bb73de50b1c7c4145ec60c2308952fc0a146ac6938a83a0cec9113177c400904842095f8252ef090f88f53b18cff35ef5bffad9c0c0e45e616a77f22b4c9ea3bbc9c1fdcc7e19fd39e48f59f2353a6e1f24be743ce962eae30f125faef383502f970f00d4f039de3b9c1bde8695f9446c1f8021ef4008fd4fea290d32c0f095be8004f99d179ec2b070e369950e47c8d320f1d5f3de537e10ea55fb20f185e41d09edc9d90751013cb5f1d485e5bfc33995c40e6788a744bc11ef1d8efdd8572c505414512818987732dc6f8aeaaafe007c55efbb5117535f1c520589289c2a0805b3554130af5541bfcaaaa055fd25aa9ceea6a255f093534a7dd1a60a124d29d58990aa3e0952d5b256513455104a9ca9429c1e3634cfc2a13ea132810a1550e7a6b4e8e16b1d4ead52cde862ea0318b0baa18607c011adf2e9dc94163e7cacc3e98cba2dba982c7cd56141af38591d3d181d948e0abd42af783a37a5054f47a59bd2b520f51566860f7a271d4e67a58bb9e2e4d5e9dc9416477ec8adc311f2c2d747b5d031a17bc2932755e7a6b410e26ba8afefd3e1d47880c70028368260a040a13a37a5c5101feb703ca32ec6f395afc8e870e87b4e56302854ad64dc9416b21fd2e150275d4c51bda1061880dfd0283c880ee7f4b53ea9450bef6f8ab4e32b8faf5fad7438385fbf5ee9707a7cfdcea8c3d1e177f8fa9d930e8787afdf5dd1e1f4f0f5bb271d8e0f5b74383a40be7e07468713e4eb77523a1c21cff3f587af45be1af9fa9d191d8ecfd7efac743847be7e77a5c301fafa9e518793e4eb7b471d8e92afef39f1aee87084f8fa2ea260a8113da24ee815a42a08664cc95236e55d4c4c15e43878512354414ee5458950053919025005f915b782440594f22ee64705842a8842e95111a101500d5109a9b2a30aaa60fc500555282f950f55caa5ca51057557dca878ec50057546352a1a5550f7444615d46df1a2cf4ac5a8823a305ef45737a86a48552baf2e46a54a753134a882ea91773132a86250bde042cabb18185510250347ca86918b2a883aa157ac6872a8b724f612f29ebcea77a9aa72002c61a3a395d20a84ea080d93d32c504e6a57753c12d8a0891980918515a650f19ef02850c597937ae353b238c2eba63ba3a5a5e56505be041840f94115624003285cc100a91e14cc144fb4d429ae204d818518265005e0e7022f07a72e5c054105c8478a219ca8f848c104d127082a403e524c21a442c507680a23b189c92406a802179c723004299820c514c02198a64cf184184698e28abaf2720a01a244c02485c505285fc1d01c3031886198e8cbbd294d54a1ef39825e07d47b2f5255972a4dfe29278cba1b30cf727485295c80024a204204a6f0041d175f4e75e5752c3b9e1427c028804855529cd8e2e5a9603a2adc247ed0f7f4fbbe0a7e9f2a07e57daf9a86bb57bd77b0f3bca7283089b47a8a0a3ca094761e102827830a68a8a8a084cfa3a8c2033c0a98606230759de73221f8795da555803286c9c5538da1bf84151c88410cbed8c1135a00011a36409a810c61a012f002bba8c1110f0e08430320d80110cc40814e6d62819602bc9071c5095f5c11838934a828830c09e804899e13af20949331ba201806a45601bba4cd605ab6636b66e72bc37946e7ab91ccd4b4adb95c3be3db0da761d766f30c9577c635fd18ef9ab6b5775d9defd0cd7f779989487bf3bd3398ced99b5b318a79680bddf3d0bf171aba0bfd58a02d54b4f170bcb3c29b21aca2f8791da55e9d02e1f5403dd4e1f3ea94d2ae0ea134a495d20e3ca2d24ac3cac2114a411a7aa52cadae82e0aaf4d4abd573423d4a6b8942a152927fd4abdda534a8525a452415864a2be8558a844a29582910b4054abb2a9ae0ebc216ca02a538c48e3ea160a5b476305abd1269473d511f22fd72743bb57a355d8ecb0d8562624075cf6b05a8d7adbcafd2cebf04d02050af8e42a19c3af568a54aa062c581d2fad5da51aa83ce50919e6aad15fc416fa8d5ab94a66b995c106da02c355ea80ba05f75817ab4a35e7dea97a8e7b504fd63548ace5326a0fe51570a6a4741ea8594857657d42aba3a9ad3d15abdaf27d28a7e9486345e0f2f34b49640b1524a6948a98bd6ba830ea4a4ea75435455893a194a32552a86b4fa5067a832743274de3975a160ad94c543755e75a1d64a41eacd282907357d957eb40587524a290c3500a08954a94c3c85950241454abb4a3d3a84ca507bd418aaa986f5a31dadb49a6ae8d1eeeb7ad08eae28899e28a53ad0196aa90ba9e8d14aa98b5290857a837a957e26dad51968d7d5ea558ff6a895be504b944445af524a5d54865a0a3bea891ea514e7a90b5197c3473b4aa21e0c25915ca62160988102c0a3b58235bc148583c63484d24a2ba554c643bf391212502b485afe404030830a10164138e3c7028106082054719f940edc081062708da4c480400f16d8488f0db212002c667042101b034d8f14cc4c0e105a3080635972dc6051a237965a8147953422c0e3c9155ca64a15666055d9a2b26216c0393ca1c12187672d61862a7f9ae1490b35fc898d223cf655e1ef11c0bd7377f7e1ee475c89fb0feebe72d46907ae73cb6e4bc24026a51a58601413b274a4307481147e5d87e304c4448f4a5c812531c73bdd38850238ed8ea563117140800618812d3524792c1619723660544a72223d560b1375070c1f128f823b94c0880722405e0850bd924724e60646ee04fd5c3726aaf742275303a31c7c9cc0e1a2e3442784890218b9405272bad100a3202d9ca22e45c12886005448ea583e21cf005130217a2f5d0d0d4c486102241c6cc044bcb280966afa7c78097b783fdc21a03461e35b9582946c88550f87b0471320c042481331a0628689184f9cc0c8849b3980002c362ef40b23176e9828853dc092d8d2e1f008e96428050999e821c38f3804869d2025d290d30fb983142394c7ba29853d6cb08025d38eca080b1895c42133c8a030fa3ad4474120c0d2a70388c3ab07138e748338042c852eb4fc7099c1eb21b5702386243888ab9e23363051125ba10e161d383c3ee1c90b5ff85cdd0de9e4ddf03e84a4b0e4cd7c3f78393ed00f862ef5b1404312c7aec71546628905120e134e8ca86987b8f2727839c00b18e1d0e201f972f86620e5f06270a9e96468c2a83543bb5927e375df00544620009f2dc871600354a440e1c005b2786289248ab4d0ec8e31238810228824487e7c880460882b47c7ca861a00f05e0a50d0838f1a542fb8103e71410bb4b000103b3db864c07132812710230c0d6ca1451614c0e2090490ac6e70400364422c4109307c002aca990f1d4ae1165538c121e500075c6ce1ea71d3c20d53490c6380e10b2f88b8a4919e00f004d989c0140628408d2a3c44c0810d5c60092549706e606e7831a0e284243e78b82185a0042210012a8cf4f8d0e18613ad42a5429d42bde259792554332a10be2a5407f506d506a41a9c68506350c5a8425d10cd21caf0c5c0e2426da1e2a0375e6c7c35ea0b45792dd5f4952a4914ab473b4a416771e960e84660e44961e41101715815a16c4cbc54c0e8fb4ea10d3a60c2c3a2c66be1940506c0278c3c2224164a31c010c08824004f886e06d3064f621031072c753938b0c04804c3e806114c90703a2998742c4a38fdc0e84bc3e83bbd6003a3d396f9801109a6a5863a7c339f1547384c2e2ca0092f0a239714ea3b99971911e6258d26be1cc49c7087cea5db41dc9d8c47a4871458023360d499c0173c96a9a6a3dec96395827c398402005f004b60d0e9c6e906a905138e50009d159a005fe8a034f19161544390677b580d3278ae930bf8e2d14ea6fbe1f9b0e0086ba824447d60f8d2b93e1c2d1434759f77eabaae76612776a4520c5e1722096bb8f8945e4230a45de8edf0663c2abad0553132ad7860c0a825034cbc801e0c229026bc1f34a182bda7718522e4000731a032850c1ced278d2b54e16447a7071e70f0b90425ccdc807211c3218430d293c60bc69042031534572cc08706fce00630500109bee08016332d1b60330ac06d2a74860213acf0a006344041174b28610411420461a44748101a666881052a8811020e6c4089246032c4804f1a5c5a7ee083253616a334ae2085281031440b2cbcdc4005291883045f78d1012aa63000cc08012831d2c3038317a4c00522b862c80e74008317a8000524188105b280c2090230c1ca0d6a40821188e101264697e4d97961b13284327e3005052108230a1755487149253c3b312f2c3078c1140838a00a26973422003c41767470b5b0783e843260f08215a420046144e90017079882491101e0e1410717ce8e9a981a2f9ea73184327cb0822929404108c2e8001707a8620a299804a10b581144f430d342a30a447e7069e9810c313889028a2094d04c400a2872451a20a5d15dc1b3c257854a051103de052a17550b6a536b3a1ada32c954569743f72cd04065a831842f742e5498af05ca02c9468d1a1dca73616941b1dc38b9608aa1f442124530ec40f0fb3aeaee7ee3ee2f78c9dd6b705448c4af29b3fb2cf36de692782c4f1ce8a8700677171d15b2e0ee36380ab412f3faee9c6cf57fc9529fe5ebf277f93ae4b2cdb636befd8dcfd7e58323408161b87b8ba3c00cb8c79e7696e7ad117dccf3b0c3af78d8e1cf92766548b8bbc951e012f7d8cff0ebf2774e5644abd51ac2dd5fdce98bbb03c051608eebdcd23379a3c01740cfc9f36efb1ae5a8af0cf2bc2a477d1ef89e7c6dd3ce6bfe0cff673ccb76ebbfb4d36617e2bbe9dccab5d1766d33772c4ded2210f719dc451ebe1d5edfbdd2e05e67a044e851f33e3e67dc88438f1e393d707adcf4e0d163470f1d3d6c7ad4f4a0e9d12327270727e7268747ce8e1c1d393639353934393d70727070706e7078e0ecc0d181638353834383d3e326e706e7e6e686c7cd8e1b1d373637353734373d78e4f0c0e171c383078f1d3c74f0b0e151c38386478f1d393b7076dcece0b163c70e1d3b6c76d4eca0d9d143478e0e1c1d373a78e8d8a143870e1b1d353a6874f4b0c9b1c1b1b9b1e161b3c346878d8d4d8d0d8d4d8f9a9c1a9c9a9b1a1e353b6a74d4d8d4d4d4d0d4f4a0c9a1c1a1b9a1e141b38346078d0d4d0d0d0d8d8cc6fdba3b0c8eeaa4e0ae73cb863b8b28b156a555129fc40fe09f55629506f0ee34ee9e72f7992e0b9d5b3a5fd22c71b2999bf1f8ffef5e6570af31b85718dcddf37ae3e509aa6ec7dd4f8eea7a7437b8bb0b8eea5ade158bbdabc48ac5deb567d7fc2fc562768d56e6ff3dbbe62af62ef29aa59d69cb030fd50c777f475532dc5f971b27fbd7e5aded7769f2c461d9cff06f1cfea24b768eaa5d4479d60d37fcb64f5ea1b13cedcdbdbe5093a831c41577d7c61521c239631d77af8eaa4adcbdd5caed9b6de734b2313eb2af907ddead4b7de2f1e471af2e649cf3cecd78ff9077df7039e31ffa0ed94b842c4d3b74f2641c648671f639af10bc6fb93cba5cfa0e95bbb495f906cbcdee95854a70388a3ef15d9a37fdb16d63351c45b7bb696f5a7014dde1ee371c45df79c8579fa5bbb3b87f2d4fd0b94562dbcc78875049c82005eece82a31cca79cddfe1afec4913876bfa635e97ab2fbae459fe1dc2b69b61374ba4ddfd73af332867a2736bbc4330229bdd3d06f72ac4dd611ce543b8cead6d9bcd8c59cf8cd834ed4c2edb2c2bcd8c73be7fda27ef9971fbe63f71b9ed3eafed9a375bf9bbb4793fed2cf7b6b68c676fdd2b8cbb53af37dc6b0bee9505f78ac33df77a8364842b4c2ec5c8e8e51dc9082a30690028fcd223c1e4e8753ef0bf47020925ea77af047def9520bd58522181841224d5f7a04a09f045d5d1eb741faa9400559faa7b7f25407ad6a3238fc991a76a22f4bde7edd48e0680fa476be77de02b2c0a430a060882ddf77d5f0722e1bd3ccf5305557f90760f2ef1f2fa0493bfc9f36a2ac8fbee0582aa20cf0b5a8286c0247638b5096de23139d2c0921e5e42ddfb8b7e134fa581253dbcbaa74a44ff144a0b94f7ddd7cff1ed60f21c6287537a3fa5ea9b28d53925a1447d5065549f3e751d53ea88ea985e4c994292f7a49a62e2bde9692a09f169154fae634a2d21a69af4a0d33d29c5e488ea74dfa4071def9d05a8337d29e53aa7d411d5393d29c5a4490f3aa53fa23aa4377d0908d7119998fef4349504e9a9a84a420340a4a79f44e92bea0443f83dbc84bad722e7812726a507534c4e4f4f2aa3eee95315932494e89ea432ea9ef4241593a3d7397dc72244f7a754124a745f521975cf024407d47dad475487f462ea88ea885f4a95de544ddfb1ecc00084f7a717a263222a5942e7a44a420340a5a79f04e96b12a5a7ef435722a59a6860490faff0a94e1aaf5025a445aebe1639efff63810108161f1d1365f1f1de597cbaff96a06017ee3638c3064c30b9bbfb3b8fda7955bcef0c30f43e100c43512481a1289248a592a9643a9d58585a5a5c4e2c2d2d2e2e28d40bad5de779df077a1f0886a128924291442a954ca653c9743ab1b0b4b4b85017971345bdd440d11ad4868d13bd71e34471782ae886a782580ee3c20b37280bb485164e14c66560f2de739cc0eee49df1aaa1955735c365aa938e254875d691cbd477c262329958bc94f7bbbe584ca81758defb20d108cbe94d2696d1e964c5ab3e4b7dd1495d552f6889eaa554a75490f87a89d7e9bd94b7a47b81af93122fd1f4610450412ee213318bfa2e2727502c4fdff3bc0fdf544fa71469899729c562f2f252fe2a85df87a9ee4155a77a72a2e2044c2c5660e9baae3bd5da7dcbf72d153c7d6d696979169396ea52eba9fea9a5e57da82eb5e574fabe6369a9aa93aa09ab09ab09ab890776817af13c8f65c58be7bd3c8bc90b2b0a8f75c46ae29dfec5a3ffe275c5b2c2c5abe1a54ea7671979efc28ae2e5e57da835bc9793c73a226dd20ba4175510757954cae5594d584d584d584d3c230a3641ecc4ee29489dbebfa8fb1248509611137fcab2c2296519b198382b0a5a2ab18e5847a552490cdaa4922a6809518441814f30798e2051caab7bcfe8f38e3ca3d2a909d289943a91b04005794e3c271d8ef8e489e7447ce23991004aa8f4df2b487c72fa276216e2166206c4371dfbd6d6d8fc2bc3d5368d56e67d3e2ebafbc4e3ac3c6f6d7f2c860bba443f2bff6a9c1dafec63312ca1119b3a2e17d02a86d337cff0bd336dc73f4b9b2e4f5b1bafedf3be43d77cbc4b7394d9355a69be26c2a6692ff91a9b3f965b976769cb775f529be66b87bbc73bf436a6a6ed10970be876f3eac7f286f713ed2b7bda59de6eb6c8b7b62ecd8ff900da21a66f6d93f6e6bfe479f7597ebe43f7fc3b9ea57ef29eb8cf99b6bb4bd70e90919e6fe54bda5bcbf6f6589bf659dfd2385c0edd7c6bc5eebe3f4f3bcb2b8bd9e5e3ad6fb859dbeaf5d76eb6082bdfdabe34bc7fe36ea68dd167b91affd6b636edc640df02c293ad891bcb7d96a6899bddecadb9aecdf68cf7f6a3edcde3c983813479ef786f3fa3cdbb68070305b936fc639b383bbb404edcb34f1cfe31bb4770be429cb8e773807f0870f722bc060c3bf09acd6a8dc3e9f22f897b2e8947570d0fda010df7d56ffbae9acb0533cd72a62fcdde60377b6bb07db5866d1cbe241e61fbea1176cbbc617a5f5d54ce6ebec14cb31482d576490413cad676b3bbe77007a3e0ee441ca543d18ccc86470d8dcd0e9b4b33b3c921499b1d3c6a687266333bb3e9415393437343d2e4cc68461de3ccb8352ecfd4194c8b5b72712e87ce1dd3de1f8dd3e7d527fe71b3cfc6f8c82d3390ae3a6c6a2a0d1d8197240747b988b857245e7bb8435866ff9e98fc5cbeb825afcbdaa656503d7cd0e3053d0e108bfddb9fe1c76ddc6de3f053e1a81c33bc877be26bc39a359e397db325957e9cf6e582b95c3b8f7bbcf14deb5dcafe2ced7dedf4476bbbdb4a20d2eab07e866dbbb4d9f09893bdcc9aa51dd2652e6f6d7f4e96f39dddfc2cd96f7db735ef11e50f79f325333e916423404e24f7e620365b9f9bf1ecead04e9c95e44b662333231b6784dc45779ff8c7c9b371cf0fd2bce56c973a27cf2e75f089a4e89227cf0d87b3907236c3e993e79eb4f2e7c7c63d765b20a63df3dd434e1e5d1611cad696efb64a866c9c116d875c12ff48a2cb22a4bd436cb63e4e851a2c515f5b09345af3768fd87d8b68eb63b3f541f128e2ee2d9d5b66b9713366b9712ed78e0c38edc499685fad33be434218035121ef92d7a1a6ed10bc2f69017707e23548407077f2de9dd3c9d7675b20ad9bf1d69fef0dc893a7d5a5bee7a5693c5ed2fe89cba5c53b46c6fede3c8b69e1fd773ced99ef10a63dde7fc3bdbe6197cfda7bf65a7d8bbcfbe67edf70cecac7fa3199b336bb2d694d59a94f7cd337bf2e1f08cf8fb695b169f1dfdaae8df69ef849f3d67e9f386c7b7d4be3bf5922edf3e4cd3747da9bcdd7a5654b0463a04be21f40363e4ffb83bc4223263294afbe4736eec1b35611b17d352c36c4e3fdb736daf1b5d5e5e7f23eafbefa77d13dcdd2ee0be4b3cdb6efcf2eba3d414068caf88cbfdcc1fa083196b332dfa1d7c15f190e36c6f92fcd66bc7fa80c80d015ccec3b54cee0b87b8bb4fdd638dbd69756923d30584b9ba61d9fbc3fc327d6a6697fe44e5b0463202bc3e9dccd24b1cde582c1746ecdccc06c30974b9fb8d4e7dd4537df4bde2c91161ab109bb63c6339d5b19a66db6b713db6c789c99a1b43bba53eb4e63eed4e67669da9d7111996cb3c9ccecb8e9c123a7066706c7da1e36a30e1bd9dd714383438323b32f8db434994b23cb2c93a1e9dc9295a6cb85bb43e5b64365be244c5bd3b4b0dab8adccbce3697fe460ba03808a1c82c8e188bbd32d26c0858f8d109081e3eeb487030c61c48901202086bbd32060200328303fa84115ee4ea19c9e0082810347e071770a05126888c9df0e1870775a826e891904800647d4dcbd160000372420841a56c00277efa09004233c900114302009ee4e79b0f998c0022a8b03ee5e89ecf43004286e80420aeedee1a0828a12167085183270f7af0109b84269e0ba820fee4ecb80421548a0b10021e0b87be78058c8801a0b827ee09ed3aa199291c9ed32db9b8f6d0c225784b34f6e9766b9915c99ed16b943e51eaf69e21ff9d2ec698bccec25926d4572b37b75b2ad0826713ff9de6e362bc124ee476f6cfe9c169b2411ce3f34ee95ed118de46603926fb6d9faecf3e65b3b7934ce1c4f9e9b6ded47db6c7d70b47276e21f67492bb3111f7b234f9b8598762c33deba1ca26f654deff3da72d6479f3603697dc7923c796e36bbb5cceafcccd4967b9561b9d71c708871af2b967bbdc1ddf188479c75eefe30bb575692387bd2b4b5d9de4e6c2bafccca4e9b693140dc024641105ddf5b6ec35646f0221af245de8d7b487b8710dd9e1fd2de21482e897f644c9ee50f19e77bc4cff067accba1927c9b2f79ad891b4d3bde6c776f1b007777392a77e4ee35b8570fb8fb0e7fe981e906a31b74b861e5f9d2b235ff8b481cca062ab6bbcb208eb22117599bb6b73f8970a6dd6cb8bfb57db3e521375baee98b5b728f98f7bc3723375b1e528319eebe7adae764bbb4e57bfbd3d676c6361e1c55c315ee5e9eb89546d530801a8270771f3245f74f7cbe7dbc7f9f57bf2ebf868aca61c6ca86b39545d68669f7cc6185affeffa5093277af71548e1f3952abffdc2e477bb3e39bf73c6d6d2c7749c3f7244d1c26b23e458e0cf95bdb9afc39778c1cd11a676b453b4a769004b91bdbee11d38e988826673323271106423b4bda5992d962d969e49a636ebcb39288cdd607a522c39de67599db37db05a208109504544c7cce3cf1eb12b6c446b29e07182cdfd2e5d23ff29dcd703aaa0fa5f25406346e08224c8bdba3b5e13c7b20ee8e83a35240a472781bb88ea3de8ad893f76f6d5f536663f90e61d81dcba17cb5c67dce342deeb4b6276fbedb9a7f657fdab1655a1c590e95e459fe49de3b16dd7d69244ef6a6bbfbe0a867791144fc3da2d4cf7a96cdf6a6f51d71befd95bd6996444f0e9577bcf90ed9dab5e11f7797c15134a0418394276f2e714b6e7e16ed2ccfd2da6e266f6db437bfb644af4f224c9eb6f63520140d12a0e1560411cf22cb1f8288d6b5e171e3b08ca368a071f719fea1d7270e062e140db555e447106f7b325ba21b1292e7d2acd6b7481159c26e389c69e4590ac176d13d7d00b1c378935c3d9b61d8cd78cce57deeb8fb0e8e9a21e6aeedd3ce923cefedefc68db7e83ede6fb3bdfd0b35c30a9f44f7c471940c669838f2d6468d7b6de1eea4bd351d8e9241c83d4696309bed2df62d9badcf5b4bde7097c423797117b7649fb7bc95e3cd3e6ada0e21edadc1c625fbc4e11146d3b67b44a961b07cc9f3ea4bb330f2da72393bf178bb5997aba66867976369de6c3cfaeefdcaed72df9f5bfb61da219c6fb7d7254f3cde1fda590a8d56873ccb1f76c6b217696fed8585ecf3ea9b7d4e5ceeb1cc5bdf237876f290b7bce1c6d1c8cdf887adb4e60fd2de5cdb365b9fdbcdc2866e370bcb785bd3c4a3cb4533e423e666dcb627adfc79d6c6dd740964b5edd6356d6bb0bb2d5992a71df5cd78849d3e7c649c64bc497c903cfbbcb693566a6d7d903c40723b8c3789ce5d21582edf213cea92d4b7ccfb6697eb2c6d6db4d9de601b9356c8c4b7f192f8870f1f39b81dc69bc49d52b181348d90e74bef4bcb1628a7f32d67e5c63df7e75e9add3fb4b2c8894b9d6f12dbdd3ce48fbb4f1e218e72e1666b6fff2c6d77977f4dda59ea7fb9bb8da35ca0f1163e49182bb83b1247c16c510411ac2188f896695e226d9f453bcbad7339fb19e6f956ce3471b3bffb9a371b1ec9927c7dc99fe1af8ddbeaecf396e3f9aa49a2afb6d7bc472eedb44748981f773fe22818eadedafad26838fdbb462b6d7f6fb96d3f5f990d77fead6d5611440c41c4dfdab6e168d9d6f6df8d7bbef544b7e787e8f618698107ad7bcbedd7fbbc433bee6ec3512d6cc0dd8b38aa05ebee408e6a81c5dd5b4510b1b1a959e4590a0d41444bdf9ab6a6febbed589a371c49de5d6a7cbbe43eefd07d5dd680beb5b1a93f662c67e5786f5a863c4ba11579da8fc14e5c6a7d75ecde6eb6f631f22c85627fdea19236c34fde9df1ede6bfe3796733fca77d5dfecdb706b4b1f9736d25d0c52db13723e459fe00bbddaccbd5a386070f9bac5dae7b96e68961b6f288bee58be8f6b8fb0d8e62c189b7c86bc3e99b5988b9b7c8ab71f6b6cf9b33ee87bbf370140b331441c4be1a360411df226f69de6ef6cf7b65af6dedf7d59fdb65c6b58db34f747bb2cd0683ed6b9af6e6ee34380ac70ddc53b9fbc3589a329ccf0b20c8ce8e0e0d8c06669384064603ab4932eab2c8bd418e3a77f7dc1d47111c3bfcf17e4db3e6ecc94b3b6d6dbce1bfb8b3dc271e1fef276f99f7e3b000dc91f01acc49ee6e84bb07e1a81b47ee362d9a56cdd08e8e9123403f31ea740baa73ebca70de9aa645d3b291394b335fdb8c0e9b9cf1f690913d7ad8dc8ce3ad91b1e1b125c3d57649cbe5ad4bdacd35d41cee1500ee55e5a81b3e4622353262c2a864e46e64e4d5c83b233780914301857bc949ee7ee4fe8491938c8c983082c2c8ddc8e809376ac2dd1dcf4e9e4bda4cbb21d9da12297779f21c519af62c83ece4ccdbed453bcbbc7f5c2ed84defd1de6cf887cb355e128f3eb4b6e608cbf756646d42233665a6dd78c38aaccdc70e272ef7cd4891b58da53ecbbc8b2eec6a2bf361a303b743be3e45d696af8f76b9e805dc3de6a8972cf67873c6e36f7cfecdf635d1e79f954fde3dde5bd17d5dfedf1ad0eb1083650c8b7d6d97444fde9a2ecf72f63a3ab7f42e6da569bb5be7dc6b8ade9b838cbab4b95cfabc4278bb5c5ae3b6dd3f773cad6975768d565e253220d756ee13772497f1b6e4698b9836df9b11d3da32eed1da9a3f6ae3b6375d02d139eba3af00708fcead9ab6b599191c1d3a78581e3d666a6c2c0d8e8e7107a943c78e1c9a8b2373b7cd5bcb707a466f1c161a6f6d9c093586b8e25ca024e0e23379dff2354ddcd533f7aae33f4b746ed90ccd8c59dbc622582da6c86a48ec65ce5227f632dfba67c65f73c5622fc38ac5c414590d7996ceb3866ebead62efb2099da5f9038822afffe4a12677b7f11a3500c149a2dbd3d277089ba5cd26ed9a667996f8b62d2b679ea5cc894b7ceed1cefe9e973cf14de6ca4e5dea12877d7338bc25ef99ef78ead2ce5edb8f216fc6ab7ccfbfb7346fb6f2634e8bcbf3e296dc6c837cebb72e4d1c1e73a7fd6d7333d3d6aeecc46f923766f6b995deb8c766ebd38a11e13316abf91c5ec74c7bc94bf4dbda6bdbb73b8e56b75eff35c773df9f1aad1c823110691aa9628a2a782b5ffd98c41adbf65992acd80cdf6c5fd66e9baf0d77ee5c9bd5db0ae5aed06b32e3913471ed73d99ea5399b61978cad4cc014eeefca6709b38d4509a0f177ed92bc797c57024077779d71b7abad6062c512777be2666f6fd6f636dc796ba3dd69e96bca2c99c3c7489efb43ec0a15dd9e9606d2d2b113c7f2be3a777fb8e16aade4c9b2f6fa965b57110377dac93362ad5fb827777f2075eefe807b704f152d4e9ce00409ee1936f32ef2ce689c79cb380dd3b975b3913333371b098399a6c5309d5b5438f177e5ac4ebed8e5a29da590dd1a76d356e360fb6a9d5b333ae34c92af2318a8455e167973b9751419f0d6357124b6bd2e491e1b913de2d2278f8bb4d8fc76482f28aae8dc82a2055080f13cf8f877414100ad75ee867fe8dc9ab1b95ca4a39e2080b76a861e6f6bdeee89c3b393873c71416ef6c977e8f610214920e44d425e8d6f5a66cb215bbbb2bf1b0fbdbe99b72623f5b768678969277ed6b77659d3b6f6fa967e7bb4802322567ae86356ad2fb2710fed2cb52e8b6c9c246766bb8331902e00140528a2000170f756ccea63564f747b5a26ce5be3fe9a375fa2d73be3190e38fcad6d203caf6ffd0cbf6a5fad8ad1b7dca5598ea50d9f78bc26795a5bbeb58d652b5cdeb16f5dda49d48a616dbb7ad76b9cf5c13f180319c9dd1f5c4c9c70f7d659ce9876c4e66bf2957313ab693b24f6ac58ec4fdb8ab9a919cb5b6eaf9ebcb1b726aed9f3669bb3e62565aeaddc3e45b648cb6ebb3aafd98a595d128fe785e5f0363a622f64f7c732dea30d725e5c0d48e6e6dbdbd8bde580623fc35b9f25cebcbd8d0e9224ede7f2bd5d6d755a64ee0ac56256337c8f2835ae11653ccb15dda18c73634cee0aad3e57646d9675b3d5b46b5ef2b5ade54e5b0487836cdcb371cf3565f64452daf2f5c13de4896466de1fdc0383c1603ab766646c63d18c6d2ccad836165d98cb651b8b12e08312337737f94b15585062c8bb6045d6f6ac77b9f22d73b6b2d7dade7e382a89337ca8b44364cb514964e131ab97c959f37599049984cf69cd8bc98f593d110ecbccf2d059caccf2509023496ada0e097224c9dd78e86a6c8e37d81dd225091b35ec6e7ce648d2e66e5984f34de3b02d77e2d3eef3daf678836e262d6c00ab16795e6d667b1f63a02b1c51867beb339e9556c9b77edb234a700418b923aea8fd492bf51145fea33dc2c7dd853226daf73c8245779cbe72ebca342e88b4af6f696d6bb4b33cb355425a6ce6ac8f69ef1197ab66c8e5d24086dcca9ab6ddcd433bcb13977d74eefea077b4bee7dd9648beb39c84e7e68dcdad6f6966bba36dcde7c4e5d5d8bc65063a89306962fc83bce4798998e64b23d1a6d5f886b38fadb4e62dc93b665c02d1d71c4f24fbfe902590bbedfed93f356d87dcf1b438ad79f0ece421c23d7766f58944e7ee0fda0e29ba3db9c8bd4176d1edd9d8fc1152d376c8c6f8c8cc88be79eb92882679f6b5d18144eb5bea5b6a6d1b83b8337b6d65f6a9ed52c9ce76ff90270e1fd945b7e79ab732036120f29e787681e48a70bec1c61387cff37569a7356fd75602edb46272fb63e3cb7c4d6cf5b131f6f9ee6bb3d9deb49511e168e5ecf17ed3964365de329c6fafcbbfb21d9d978ecc022185c632cb5edad6c853e35bb9b53559337caf8e098d56669a7686c3b9d5b3f49591e62d731b8773f9e280f8d689ff867bf29ef69ae36b6d6faf77696fb627c243bea56fb8bf6769e6ac8d45dedbad14d22cbdb1a9cf7276c99f6fc5e8ac6debb6cad593b7a89ce56e38efd3c4f866af92584f8d4c4f8c455e5cc98ac5fe2c7fc7043992e4edbee1c4e4eabcfa2cad79fb5cb6fac43ded2c6ff8f65766dad1beb635997c6fba8c59e580be95b3429876f74f4c2608234a80be453bcb93e6ccb87d4ffc97e859bab47fc7d3c8b762438084f4ec108101f5ec1411b2f303eb31c203f403c911a09f1e233f60477680f42089d1aeccd67636c397b479bfbd4abe95b73ef1883bd2f32d5d5e594bcf308dbc26113e8564ce128f32f66b234ee7b2b57f9e57e3da389e9675cd9bcd06f9d62d46e6c47fb5799f7696b57d854a7375b3b64f3bb1f9583f2bdfa14b846bcfd2261ef1c6f9f66359bbd94c3b4b01bc8afce6f9962ddffd63695adbdbf1bc38737696bb7c6d4d99cdd23ee31990919e07fa41520437de9f07c0b770d8e7d5fa9e364c9e369be53e714ff3babc39f3d6f6b6b72cbadf75a7ea95276edb4bca7ec78d11365f3d80a2591a9196c6a429b3ba245f975f5f3ab8d7b15a5bb9c7374d4bf4787fce12fd59debcb1a9bd02951f33cd5228f6197fec0ad91dbb44af436dc4b71daf435ab97d6756d7b4cd230d87cfbbe306f7b3f275b827cee359e62c916977dce05e7739ee3e84a3c6213cb6b1f913dbb932ab239383e53a5c8ca3480ff86f7b853e77855c2e1459738f61e5aed0ca3d1e779f396a5c82bbd3d8d8e820b2476cb94d5c1199955d991d3dd915b145852bcee8310d900529471523811a2a365c78a2d5dd34901c3d041d39410171062ff7ea837beda1959f3c2dd1b374c9f32dcde3f3ba61a7c8eb48101cf9fbb465b643bbaced9889b12cf6f673e61d2a7dc4ac627f6b4a5ee7ab439a38fc636b3c0403e15d923bdbc4e97b842c752e699a2ff21ec999a62d77b63e44570979c91fbbb4954474eefed0ca5da1192eb245be482b66da7227f65bdb6bfeb6e659da9def68da9f6fd92bfb9cb5d9b3b4c5a8c813371b677237950c87d5b86d996f38df6e3646f2c4fe9a5768b419e85bd9ce1eebbffde7d296b28c7559c3e59724699fb4354d9eb8d9893f9741b6b644b6b63e270f79eedc8cdbb820274fb641300622cf1dd3b4b61f8c81766ef6072ef3f5b9da5e22d90859eee082e813973f700f100c94232db6dd225797f608d1ed3979b4be9986b3cfc993b3e60532cb49dcfda5074709b13d97efd07df2925746da5bcbd96c3820fbea7b4413fde823e425c9574bcfca678d37c99397bcac21d2400dc1c510b6923c712c7d5e77b78e1ac2e5ff238ec4f9a661329c49192142e00e84e6ac8d366b970b06bbdbde3cde8d9395799f7824b299aced92883c71b39bef9089b52ec95d92175fa1114692f6665a996fd95e737c8200460461455f93b44fde3d2b6b5a094a4919343a8cb0f9535f3377dad7d796ad8f4de7d668d3b29191b9a61db51232dc9d84dd3b5312c51dcfce12f60077bfe3894f981224dcb5be264c492da7c4c75d498ebbefab95c490040d77d7b92b94c40c54121a14dd530c774ff2c461b511df6e9223774f42c24e220ccb5d21581296bb9f38d888874adc920b83edd226c3e92437dcc912b6af8621b9e2fa9638f09c0c8abb36ef79b3e51aac7c006c898d44728467486e1ac9107718ec05bf80e41d96f10ce6ee308e42e230201eb8fb894b32df1b9014770d03da02f6a202308e3c5fa18c8960b319063237ec02b98601e5b8067a777777711490e839f376b33f57ecb6a4ddd7f653e5870c77f7ca1a3eb4e0270a7fbc71befdc6ddcef249abf37384bb679cb39d41f981999971ba699d11ea48cc6356305db6725708463bcb94cead8db3c96e5a36362d1a19192973cbbc3f09007145e7564d8bc6a6452333dea15dca8068011024a8f155770f1d0504187ee25226f3f6ddab0f52ad0182531aec736b6cbbfbb4d9e268972827fbdb9ab9321e9fd75bfbf87cf2baae6ce364323fbe65f55fa2af8d258b089b269ec9f07867b3abf12de3b6c6edd116ddbfac4bb35bff6c459ed79ef7c9d392d7b427ad347124b6ed229c3f775adb13e1da23f916797326027ada5992a73dede3bf27ce387ddec7fbf5ad58be3718acc8da5a318dc3ffbb30d1feab6bbbbc3fc3329a75331e3736afecf70de5df1ad0c6c99eb4e19fd8e7cc32db8c6fb6bb7f7ceb73261e63f7c43db173c7d2d0f0781e9e86c7e3f0658cb4b76685303661b4b37c5de27dbb595beed6f6d7c6b246642bad393eed2c6d78bce17e865fdf12a2a93971f886fb3bb3fa5d33fc76f6fbb46769c33434343532343435cfca9932abf32dbae6addc26cef6369cfeeb224f1cd6f996de57cb709ab477ebb3d43e3fc37f498bb3ec653ea65fb1b1bc198ff734f22dbded95ed6cef907c4b7de4c43f74c89b9b951beb8d93b46618e79b4c2e6f7dc7d3fedf6d83b8571edceb0e789fe5bb571ddcabcbbdf670af39ee15c75142a2400931aa37ee95878b5e77b8db4c922f9ccb3596f99e9746de1349152c41d2f0df9634cbdabfeb88912347766030f21e21af69963f10dd1eadef38e27e82c482e8e0fe19e7bce393c3e3e7a7755eb2b4bf85acedf1fe3f4b2cb34f844f215dfe89b5bd47be35de9b7ef2666b8e97fcdccef786f3ed55393cb456655d3e8f9c9f9f27afd6375c21dfba4278e82cedb624fe9ab643c87be2f2edb7bea489577fbb57c8f64588b4b4d656f62e6dc3bfab76fb1397b5d8bdb9b65fcf4e9ed7f9b3f263c8d55f6dda20df8ad9e8c0c55e971f8b3dd64fe232d0d676863f766df6848d37a055a8644db3a59118754ca19919180900000203150030301c120c4583f1a8ac27add43c14800972a85868521f49435212a3308a52c81004082006180023302333a40d085b37ba7b8aa16b61086c44ec3283c5380e5464df53158343226fa4799a1cd0fafc3d40d9203beafdf62865df26c4938efca5b28085c412c3ecaa8f5adf66b99ecc8693adb30cf43b38603ea448266f05e6a107185580ed531584a60957d5062fff8d60bc614c4f8022fa85350dc55480cfa0d739e272875de281a39481d08ec2f6187000a6c8d790bca5b51612cbcdb0d804ffe669b09a5425bb5881e941d98e6d35e56a0674df36d5a6cc6e021bf10355f884b599d65c35b79e6f18fe1ada471cfc3024796bf4b0fa13f6ac4a32bd6413866b735beb6ba53d9e3da76758784ce817ae904f17fa51979ada26ea94e38d4aa5b27d7a0f963e7209329a4641834d1b94e5567b29e3e5679c719c93c7d6a2b7382818d5402d9b043e0c10f8cff876f9a69e56dd925bbc389a4efbec357052e28d9ee588a68d4c1b28100fe5af31540f3b9b66b6a113cf20c2571851568d72e0475b9e2c6882db06c5731659b48142647be1741122ef109651059f31b20e998066f66bbca7fe4d1f2c23b88ee55dc3498247c41b0d35fa2d800fda6c04923dfdc5909691c703909acb28980a608d9c307c903698d59ad7c2fc0e6c6b6236e894c49f99abf0ee32a0096cb20772da55db90dcf9ae7a9af93acdfb9d7b6d137f33db4bfd31ced2acb44dd63900361a6c645cfbfd40e800b89e45c938856ae1a2abaa812a197ee85c746d7b94b1176719a02212d780934835a2aa3edbf337044b00c296ead3be220d428fc8c3395a3d6781c6e177e86561851ee26cf020b1e8a746db82fee321a1a3f9cd4e6f10cafbd923874162ea8acf677e5d2908d2e47cd3666c3185427a01ddef956c2741a53557cace9197b72c9d5492209be40c93fde986af6b5a2ce2377290ba0af211ee4edd9117839c7ccd6cd0cb0f3a4b57a265b7923b43e0ea9d820ad3fbf74789df0ed7a3f6183b35eaa7aadc794709002417d1249f2a1108dc8f96e9bcbe8e68c14fb19e610ba6a89ba3f7d01580842051c9879be3602675ad0473da4013d5f3af336efabe2f10ed64ae60caaaf2a4db55ce31e4e5784867a7c072fb3007fd82b1d9fa06acc153dd64a09c465098e6f3268d03c6790c44e8a893670767491bf09c072ac744f39a254736ba65c987e1723d2de3a08a2d08f386c7be06a36f7b4924984207435f9d19bc38fa4512848041d17dcca4ac6fb9603501e3e0cdbc037779e43855c493cce1986121de9b898b15b47eb8888a55175cbd9e78422c766a8749a016d622e428c15479e0500d6397760e03c29c63fc07dbdf293e4a0ea8bdc0b45e5821da3611b6cc644c901d9a1820570f63bd81838e5fe870951fb696688c352f68dad6d8eb79ac8c3a08526cd0c8b8dbc6de9d063b1c0562e0a78a98bbb0b896d588e79cd315a45b139ef0f2dc1dd4831cec693bfd039dd1d562716211e66de3a45c2ba680e5ac1b8315dfad403969d40b8a4d378c412b1d79ad04661ee697fe1dcfb46da60f3b5c202559b2188a442e41b6425aa5c218cb4ba52e0186428013f9e730b9780838f985f0ad916d99aa69856eb309293e3efb3395af69f1f3b9740a7e0526740c87b8e9336971e733d273c9e9067d84d30603cf899510e22d131e1eacef29346fc46e3134e9e423e2db07761207661360baee21b49277758c20f21ce494163cb73fa031565bacd6e18c9694e950c63ece0e30c69d1c1b40531fa0d65aaf22ae5a45a30b4ca9692ad1e79de4e699c3a46fc64d1be2cbcce654562c1e67b271c2a8d8f19c714f2c3356d8a62af83dde41d0712b2a9bd9ba08861e84c30dc930ca4cbbd2ca87c2342a6fdd1a261e5ea85ccf42a0235acf38bdffc9b2a8071e2804f18f61222f38c993448dd37e55e1023fb41134fe710d902c44b54b57aa42689eb45fdb3850731c0043f1416d5873210f89785b80cc9a8bf0958f533d27436a5082c7c6e44881292f3c35f83901aa981c8eed3aad8869d0c1b4a455c2ca9ffc5f0ba301f4b625ef1802560a6534f0c534e7df8463bb92165a5bdc64096ffe113b63134ed220b238b6d9404cea788804ee6a4ec3b371b441e6e25397455dc7c6dae300bb93cc4d82d7c4221241684e04287c27cf7286454ad242a483c1ea233890e7cdc321d8d81d8762fe17593c1b3120be0ce90f0fa9b33b21744fcf69e5398b581b08d99bd51cd664295199a7c81df08f31b4bf8e3c800172bb506a35909f1cdf8dd7049351447b2aced7b65a7a3986c466b1e08966f535241900a01a14c414c2b353777f5c0d1d07f38c414fa78e9faac97bf0fad22fd1efee2a8313baf90a079709ebeb9c7ac040a3feb3940fd0e897e913b2cd5a176bd6d70037d7ea75cc6acc62d684cbe000a14010b8d84d73eff81ccdaabd01cf8efee8942ac6f08a6a567471cc1b58a64e927bc446761c13520a0d1b1f9ed3dcc3a68702ffc6f66b7e1a48b801675151c31624a972a7fa319f0b115220dd4a015a5e6b54e66cf7cc88215acba3e92aba04591046f98cab5dec9de231f835a06375a42839eb52d9d35c2c1978cfa93dde576d5eec8ad1f2f68e3e4454543a4e4e4289e63ef4da2c21cea5de5ab584403722a71239beefb07b8d0093e08ea63814261ef9706b72f140ac1880c9b77d503b2c2b3e8faf5f914aeaeda4c2a70691c6478210fa1fa63f1263f6904d6ca14fd76a984929eaf9634bddfc10286ffa2839a7e6836049d97b0dd3d3eedfb49ac726951424e1cda48bef65bdb804a62cfb1280df1d4d3b0d8fcd0356950d30005d79ff70044e49e46b29161947ca869a0890c252dee489ed6d24ddfb699d18b40511f8db1098492a37a4fb95c1153c613062dfcd4516e50dd070eac99e5c85fc2484a09637404134c9ac1cdb325351ff530b5e43853365597597fa18e3743dc3fb8004cde36be19f0e7cf612b61ecfc8080c1f2aff80f03282992138f8d53d9c351bf05ebb69a5d140bed91718d53b8676e5662f0d9d336e6eecf1b03a14367cb7e4f90bd8347506ed6e02efd410458d659ed5199c4c16c42263d6d17de75362ffeebbc17d65305080b26c1fd3b23186eecea224579b3f3cce4009760db6f95b8cd589d2409892b85000fa0008858e19c5b436687222fb523b81723f93977a7609ce1ab4f3e4a4f62199e851f11c38bc24792c8f04fbfae454c2bf09dc0ba23ac238a93de2ce3c97ebad2ca5773ac4db81199cdf4b2f01c7ebd87992d745aa14ea4cca6bfb5b544591e1efd38a3329de931d8d762f199c49291ec7a4a9f4c26ee98de528e2bf3f99596a99a48d089103377c7a8e122490433846526d8671c94d42cb5cd75b4510fb4921ff3993166ae9baad3ab86aa691c1a3c6eb4e28e737b044d5a6525d3d8726dbc48b57af6effe3cba2183292cc4c61e3554bd1003ebd88b4ceaa95dc36032af60573e8620c931f274796261bec97546fb360257f64eeb0e6bf5008b626775a4397e779d280c5d64c3431831febcb43d9e562afd276bcc8016e4eada7e86d361fa58654ae3a1a3d617f5cc1669fd01495bc17a28c7ea84dd251ce194314efc9590745cce05b0526028b29b1b9a7eb1267662720b8631b424ebc1e9eb02a663468e93c118f12ec5242d2cb1bf45ecda1f3710675fe0721f1a018b4e4c4af0cc0c6083f5623c2e65a508335319b301d1b9c0eac277f5df1aa0f25d67b42b6c48b7eb3897b3b40f0c76af6e4bd461c98d3e1ec10c8cfa2cb1a63ddc8cdb181b2156cd568bc387788d0040c91326f7608edad7a02dba0e9329a42009ccb18044addacd933e52a3185f342d2845058c337f6418e84d999ea7a378ec5b70686b46acacc026ac87a9f0eee396e1868a7b3537ae35bf21fd6f89fa7f81ed9fe0471f5b1788d3f512ca958b831d2fa242e28457e7cdc4f3db22ba43ea1eae6034b506017237d421863f9fc044dd69e8ee128dbc591a03348a4f74642655d3af38e201245cdd6695ec089758851b0d0c0b1f9a16d8529a3477c52082e0b24c5339c4b5c8009812d1f7c737bb6d5397edd8de8c0d7879b79b81fa33238fd31b48721cd0220e93b3b83e96cf5622a9b0546db3f80ebb0b0785aa368a6086a601775017d95426e342cd01ff5639d0e39a479796ae9443784bcdd9987754b5d524530a6c3147e0df05d2238e6d3644e24ca908f74b0470fa13de0642defbc542e6557867e02055a3778be04c99d6ad3d8bd3ce973f42e0e58ad2e3e612c8b7757867784810dbe44d6e773a0f59bb96b68a501b406c55e4fe3fd2db23eed252279b17f6f1f42c5b4512cbb454405a1108c7334440533730197deff3ca3a5fd1061d5300118b86fffc04f01f5fd4146ded4148101d228a60e840d92348d4068036c32b3a9e3d3ab7e9e031e2c7556a56de923ea5f7e2c0032fd78aa440d10706a46255b3887cd23c8e5b3b10f2cf8576bfe55b8e440570502a3848838c67cc2d8e39db46553ef63fc1a84be2f095cd1af2dd8a8434f2ef033999e39fe7b15e6e1880f1241994628cd9b431a89363f0f04322d81328721fd4f9444042a9763ae2ee61259f76f94e1932bf278beb3c17f204038a9666049dd487cf86d3a823476ac701785462c5c888daa2cb6e17eaac5a3120523ef74b5b1ba7e3692f0db1d2b5f6206c884e75ba18fdad57ac82468101f668877fe8dd1e82acceebbb9c98e5851cee915e8d45aefc8e42596da111db5995acaddd1d97239c958dd30aa5f91e35793b1281d855544f8590816d6917c65bfe3c776333fc8a536a6297a24f7994cd6eb2c54a2475b7b9c35f005edeb500590db7df0bef2927403630204ea298c0193eb7b87629858bae35379dcbeca631058192b75933d08420b2f6348e0b7019c9f813b4816c75581ebbe205d61b491da0e2b25369695ca80501a33132a732c3004c5405c4f0613c939d2c03deca3a33d5ee340f3944ea4ec300e282e2f4995f456c0be955cea44efa7410323a0391638918851a44924e4510b16a66b31406b3b9812a24cc9ebe6b1dc27718c36b4aa02228eab3b98a2299091c60f7e79ee39f0d5bf87f39005a9b428985884134eadb214ae01e2b877d0c4c356bc31d95088b2b19eee6735593c50dac7ab02e4331a57c8ccd4e1cae789d4ed4f4702186478ca471a4a52ea7cf2997fbb83bff6675389dcc8c63042795d1193d29b650849c0ff186f93577e6071653c80d945d5e42830602c9c2a9046ed00b37a798d9c52d0d2c39f7b9319ff3a0e41e77130a62d398e960a7c46204e1d4d93d7a3fb6da4f43c68ae7855349fa8dba65af03a616fe839a83ba4866ee4873fd8c3e63daf1dc47d191fb9219d235c0419bead86b0b3242432f94f8a0ec7ad42207ecd21392d262ec9a1ae8dc11be6d9a7c8d3727126b46df3df3c783fe45a8f610f21680fdb97d9d1bfbfed6fe101580ab31e43b752627301333de9181d5e6d49a416ff3206af9ed5b50395a3bfb05ab5c2aca8e2515187ae2088e40c70c4daabdbe12ef216595b9b1e1043475eb59d383642f769dc74a9b219bd54b23ea388c3b7039a1442fced1685921df2a12852c8e62d160b1db9155e0fde10b5c664f71cd8ee9583651d5699c61bea24c24dfe636c278cfb94e9fcea133a89bcb0f684238a5b323e714fb43d662298d8b7cae7f2dab67151c0249c0458a5aceca6666f15c2b11adb93f6e6a3e1615ffb5d5195f3c3cecc92282188741631b806014cf1390006dc0234f05ad0d1c4c98de8c27bdb14b651200da7598473678722b433f6e6053350d75455a2cd95222fa10e773354fb5f7a154596da07301ca82ddb15b540a8845ee35c8987a4a0238390068796ed2c8d5a61b345cb2062ef80c860069755ca23e4725520e4744cb76755f5d4a4927a17eb9be7d66be76edebb50c8637fdc5edbbc9db50ffeeb14a0f905ec5f23a6c5a615bdf5e5e3e2187711af257f035e978016d7ab2fd5812da9d9266b566f46f330c6de3b4f3ab9ddc002ea29c99389aaeb3dbf0f8d787af291d76042797276dafb48cc9b9661c738d12a5c31c32e8ea5926988dacb8cee7688e12f107c06c28cb107e8bc70d73d3a8fe579a311473ddad810b8b0ba505453e9772187ba9a4330a8fb2c7e86445bf65aebe55e02baab44c15ef2dfb8e5cf8d897e1f0e6dd7b2d44a7a47aeac860859b49d8b26456342ba9f61674eec5da106ec1249f72568f82b83ac59664238db3deb3fc5b01063ab73fcc18b304a465b93463fa0366098f92f5e19d3196c920321dfd9bdf3dd56f24c1d4aeb5280371221de78515b7b06f72e23c1d6bef17ef4bbec1113fbd3846e332b17e0667eaeccf0579485bbe03444f83eb7609bd05f84ddc2326978d9bebe6bb41e6c6a42c4c2d8a39ca0f35abeccd5a81cef8c2d1b6a10d74e2923f9968a318846fe52a2b37ef8085550c9d35c0c1833012288800cd7a8a2c572c10cb33161323ce76a71ac17940fac176df0a2b70d8a52f9cf0c7354039c8cd4f75cdcb3830b0115c4d2d61e2acfb71a86aa927d35a61971f19d8ef62c60adc219f07ab05a1e8e3d36aa301f72a5a4edfae993da3336af8e13a3ecbfc548c66c63d3616b7eb85eeb108c45afd1c30dd3790ee355cae81aab9c307ef6bcba4ce56f5ad52e8c626d624d69618c25c3906c7959f7d89abbc0ccc37f1c6de9284af5dab063288a49339bdcbd3740b6f8e219153ec1485033cc1eaf36968ab6dcc2496f9c80ca1501c60747ee721a6f679ad94624fe14861f72ddd88c4893b4f08309eb6db524544493af2a54c0f40dd91f24c85a9a43a263f849dd72fff4ae0a37146af3f8ccc3dc65ce8f03306972d47cb48ebb2c588ee07f09675c5101a22f4ba0e2a3d7dd4b9b6a1a194e7721e3c7a88cee0286f51a71b6b6aabad6142715496dfa8d050ec7102f73c4d7bed03a2e96bf61796c1564c9a264873382aade69e857057ca560c3e1556a748eb8dba0918492578676e4f2e31fa231c057a99416ab2859fdc57ccff2417c0b6a4f7c5565335f4c0da3c29b09c1dc543ccf71d7d34189e8a8c9de59b72cfad368cbfa016c700b9a75eea0b214d8a67d0fa8cb8e70b4454333ff962daa6b98a73de25cd354f3ce2e61e4f424f49a86c674b6600551350c26d189f7f9f4e3725f7a3796b68f0c3316597a47be7f876cb81dae986b064f891eabe98280705a6357837423f2f5693b4b0b6c6dd95f48c727671b6b630d5786c45cdf06bc6afa59f16c776976bf0eb7ea8705d88291d6443e2a1fdc4026aefa0fa202cdb1f55a87269361043573ba872788f0fcbbdb781891768429f22b39683eadb4e3c82804ff75204d8b0fa3b2777fa664a04665e40396bc18af8b4c11f1263b2ecc4a52cabb18f06aad5344b7e9f9cdedb71aaba80a924c33160be248e261e07d21020706f4a45fa8349970bc314a1027bfa026ff85a7b2591343caf936906cf83a78388aa0c79fc921588c352482ea770310dd60313dcbf4ea73c4749f79ab076c05d096f45c1d2302a2ed58f2a4837b0085ea7e265ebc0bb111c5269279a4003711c7ec90511b2e8f9240e9c5abb0a2618198454c689f60b10b198ac08d93eb87b486f0f721f232a69cc00f6d317d95c1d5e9720a9b99f7d4e1b4355fe47d706a5a6d164119c14ecbf4b8881439d301102afeb95d97a34d40a98cc87b8e2760c20e2743b5d299380564abec7a785925e0e6f11816c3921a6fc1e39293a0ae50e8853b1fb55caf104bb19d371420bc9e286f7ed557454a69bcc82576e8474b5ab90ac766fa25ab230ab10356133978340e979360e32e681c7ccbe90531ba52e5cd683239e3f7225bac45c3c34138164dc801cc1e2e224e15b91ed392d0042ca27c7054f808ef783e38b484922fab0f4ddc26980ab5a2623d6990800f8d0cccc001af49c8a7bb88372f0d3d3469a6e6eb6112ab378e13b2c44370933f56ac08dc50a84b637a5146b4fd73026b52529014f771578a062c52207106cb92da672cbed0fc8e0b326f7518dfecb1e65c33b74b5b70c5402ec3e7fbc6418a7439fefe69c4d80179eb55f49827400b1132778d65be3d8a96ac6619d9a7145b8c7e6ef099cd8d98a7644dbc48096e90927247b674fd086769d4393fef0cedf6023cc5e71945ca9f5e03a60a381e76893d7df951b90fd4b7f6a3ea1ae413ab145d48ad8883da94259dc37c3f15ed71a1a16b99ef63a4c957c49d4fc4cad49a4d372fdfeb1a77f1359180bf069982825b1a649a77be708ec611813a5a2e0c79abe5070b81a07a58648cb117ad989d94a9772493d0f9ab9bfe92d1f0aabe4f12d4331cf2d481614246d285ff51b5365d5f935496443a7988e293b3bfaa8497f0d19a8b2d7f09c8a7f3b403864d22f04b8e08b98b3a17179ff01ec2d0b288241598662b9b95705b91bc7aadced17af27e61fceec90b9647ee809e92c0411565afc29f2065d1a927f3de4d45c1773534af754c4a0e2ca4f565a80f4748ce4867e1e4c77a350da24eff9a19d3a33f9a47238f4dd6c8b5c95a9f2a79e32358a95fefbc4519fe0bd4c5767e97138fb84ae10032908a332b1b97020dc3dac4a4b8e9547f2780ac7ef85c98e3b8c4d0ca5170c0a891ea7da500a9f35f484f2e680049a0854984436b5fa87a6f3099a1ec4952ee2b11218395582ec199ba52c1675d510413dd067a18dfd6d2de654299f281d36f71c130403ffa565b3a9c9383f4d6c76f731c964d85b922b32f21a1ce1d4b1969fe31cd418a6d9d9c3c95e45c5832662900e98e49a4a998097d338e1b0f171ec877b0dd3b891551bcc8a0dc4eecaac095981c1fdea988b782cd400545965ac0a499268933076e3ea6e5e81aa610a33b1aec40326a0df35bde5e923cd332ac8151a101c4ff291a84718d559a23f8d0c89c50f21c8b5e08bff71a5a6962f6edf33902f1f71ef4cd08a88f0cc06479f3897025024a2b20b8fecd681f39744622ce48610968cee9bda0a913d1d477311a5be3abb88d93237be5268a2da85be9531bb38cbed51ae2a8ebe77f7b13b9e7d8601a078ad07aaa1dd199b77b2cf81963cff3b669df8a593322d291993e53a18e72c7468f84860a7cc97be3d82ead580d5186ebedfe98f99b95b9ac9c5ae7e39b9b8771606224e53a6cea8e5c0feea301bdb15766795c4e047a93e888bb5d504ea2068700297d8e5def8ed32c9025e0ea4f1aa5e91ecbd70d13af5922689889a26d71e3861851e1561b84da3f36f8a2833c32d5c1c9693fc5f88c9a5419db30f0a171d9d0b95f1446d94c38e8c9ec4a2f3d65cc7f0262d181e09db8a2ee02f9c4229e1ca66b0fae4f648cefe2177d5dfe15a7ffecfd1590afaac2c4b4f59cc5be6c077346f7488f72db9a87276dc4187c7450883e0aa8ae10f883e3c4a02ae1a97ae890319c60989765a1c8bf678a77f97db26cb5f017abace88f28f10e373bdf990ed78e7f60ccb6b4cfb0cd8d02652b53a06cbcbe1f2b6072b4c0abf093fff3e526c831a25520d376691a73afc413e1712606e1308af2dc965b000e55c8fb12ec7fae1cdd1a1ef2bd10292efa207a40896da29c6f0b0c0aa0352dc94b6be2e0c01f70ff1ec9a15d7908f8dc299126a7637669b60a8f3ed170a495087d371ca9932ed6cd5b1518a35ed1bdf10aa9ae8d166b0b57aca387d727a87fea09329687246d8164ebe4b1e817697ad8a4cb982dc80febec45673cf7f60fe7f0e4734679bc91b42a4c20965ad63ce7b2d518144c4835e354191d9eaab9a71dd2b935936c8e27fadcb9f4d2c4e5316a78d9f984919e155815c3eda5199c43875af806286b326d3305a13650bcb5ef01e2be99ffff7e38316882eb37bbb6ec31c1a4ca72c2be0426da6c0f2f5977dbbb1968fe6319c907453cafc37161fbf701fe86a21ed5b6cb9823203993b920ada1ff91a6f4f892e9f3affc2ee1b7055bae1734ed058ca109f40a1e84d6ae575edcc0838cc2e11280980480b849d3adff6a4146f81892b19748eb95f4b45e5b5727a05d3a1e440d78859e0d2a68d59917148a8488cde42bbe1799b8cb534564ed047e13444f7c3c2d7c51be508c40ab169f6b75e86a7c19ef159d0d937a7c6881c9e47ad1cc4ee893483eb41e44b98c487a3efe96790ab1255cfe52fcbfee1f00404bff9f5447271288fbf7c6ada7eb891405da172764169a405716689a546c3660c74883b8bbfbfac42ed597b430f935add7e71ad4f0164704c871c49e4acbfd7b6015995de0393d76353fd7050a3881ad424c1393cb34b1352919bc7a73329734036e80f45b938eaef1ee85d66f9540f579995afc1135b3d2e9b50e3f408b8797f56415b7969275d975cdc50f88528f09e0f23413ffe19a0d7b06091b2a16980cb20906da11da234262256881a803f65f2c4c7e2b76b7f30fd4d26b13a9afc7982c59edcd562504f9b0713a9214979ebb570cc942aed8323fd08b1d27e67c582c10dd21dbbb29f6557c740aa467629e7f6befe2ffca0fa0f136364de4d818cde14652fc8b09df3e37981efd9bb8df787f906907baa84fd1a0ea3eaa73040e499d671047bfa64554c04b3eee82dc7027e649020bf8f9978f2643fddf7317a42336996b66463ef9f5e2ce7a3b4254d2134c8ee24deebd5f9171f3cd4a599685de984d40925ad51c4c86f298b5dc9f822d98035b06818c72de886acf9217d04cd4fec312be36db2a01be87fe42d604b83d4eed82984c4bb30140c590701d0468d878a39e51db787cc9f125412d05b3be17ff796a11cc0f23105421580ed765ccc4c86f96ddd3d18d94744f2b5939f8b6de08df7ff19a1f287ad56fc9dbbb0a5e116d76f43c0558ea4aa852bbfae07238821348d236b0464fce927b00008ed1f15c12577097c48c173f5b664813667b2017f27fcfaec4c327902617751be132aa9e173f5d6d30909f4b52a36786dbb1ef84db4d77f5db1eb55c6ab4bb945e1d60a9c2a2a98dd8f5e207679cf0f9d86add7b0ebb907b386829d5cb97869a56f2881b37060aeacecae3787945a1349ba1d310b9ce626b750cc51a047f062d700492ccfd770b3e036a46dc0591b6dd57f36c36eff69b45da7d3c2658e92da2f355bcbff321ca1813c4d60425bc7516741b98d9c47218563ea6662c40166a2905570ac27e26bfd8c168a0c99aa3783dca8ef9ea27f7df8731eb0df4d1c103b46ca670a273b32b16cdc53e5face784253c45e5462936b26a940269c90d0142577f770522412fd892d5a5cb0574e5dfb1f3450fd5d0751e5c03e0dd0b65e69dd5237f601ec911ea05fbbf662ad91b52f997a9a0d6ab0d57a9ed6ffde0930f636062579a11726368000f0034b35e56a0762d6e7c7f156939a1abf223a0c183936dbeb9cac464b9a6ba34cbffec9608e07fcf49fb85e0618633a92069f1ce0f01b5bf4b88f084900ad8759a4cbf1f03b81900806458fa71a76ff92d7dc05b51d09871543224664cdb72ed546a16a46273097bd23b18127d258481961f6bd0750a2580c6ef3349b2310d843bc8653944e48fc489655c7459d43fdca5304baf0156c8c70f58b167521018cd944818c6de640c93e1c9cef0813d9359be576f0bb90026af3410ce78ddadb8ebfc93d400a9bf6394f4e25859b5d3d57daf0f5555dc1f3594ac859da7bbab08b3e03d149f85b8af31cd8e814c06bc53c0665ea77bf763728e31e3de335a4f3315d1224a8c12e322f4d984a7c1465a3cc89ee5d1994edfbf2dde392516c696b18e39e71203a70b93be4d524ae6fc259380f9d9023f2210ae90d847f47d335f5c98969770eb237866c911b4ebb576c9009334923fa4ed6fc7052d1380f4b2a4f4c8c10e46f042f746e98d21ea971fc899f23d846826bd21cae91d9acf4be4960cffe94b541521f407b29046fbb3c107e492ff1fad45470426efac43b803bae77a1d99eff644bea35b0bfb0fbd173647faddc418ce8e4af2426fbef403167a599dcbe7d4e87d9d5a7a6777e34bef46d54462d4408125c38be001351a106b26cb42a71108ad0965179fb226b43d6ec4c37611f910c0b9d1be1166098f73b41df3138ca5ba885ffda1a85c26a770d2134a3736133bd80cac028b195826e0d22f8446b9ec404256b03430e564b09f4ad605f9e00d44dfefd9df974165cedf9c8c9ce6df5194be61f98bc36154ab3b51188507a5fb3f2effac6634f819378cff9606b7af6add2ce709ffa8b8e22f54c81f00e9bd00e81f16f57b9fa15071ef4cd0f355e82f8b55bfdd4bc3b781b5d7cccb868a904cd2fe1d4146f651c1c9f3ff1a18f751ecfe5e704cea377cf21f7a65d3bf0fed18f9fd96f4d4598fc0c675869c04ebeaeed7a643d053b3bd6622e4678900b50cc4164ff2d4fe41866a6ad98286400700e9b1520047e307b8e5106819fdfb07748918027873f00bfd85da5f408748629ea7fd4c0ba19449b0f321eaea5ea86fd45dec8f72a2721cbc7f9a31ea6d8df5158d7db20397dfb8d41956b3c63d177e89fd1d4bd40833d303a047ccb0e3db8fff6c56fe1be7972974ce5f2daaeef4e320d70e1a9f45cf1a2d45d60d35208ad6bee494bec23d73064e730a7c29499188cfbcfcec50416886eb02db6306a80c1ec430dc185e61a2f98ea6c4ee067fe0c9d33ff1143dc99cc4cfbfffffd70bb9069a521821a8ef5a6afd8bd1a215b2a375b4b4cf3a0039356072274ae46e1b026332280a897f2f6dc431d364a39fd125a6069ab01de9a3acd15519abaa0e47961a60fdbdfc24ef7b4c84291633d434c1ef4a02c58e11912d394ec1efdfe441b1eda2dc16dbc7add7505a6ccc0059113744060e493b07522e8eb682e0603daf40f9d129695f89a759edc436f9416b3cbf7b4fd636b2d40651154770978f195a2f0beda0f7e665de1325c5279ae6d4c028c2f5b482c54efa5764de7d01c533ee16203d90da40b3bf84e0a4742d501641c6101288b0897c1e4d71fad52b12426ff42d50ad547f215d8e08fb9e64086bb1e78bb9efc0c18e85d1c7332395011285a2cd97b6ba4aa4b83a64e0591b07a2ef03d452650db26845b414ad5a2136433f69314bca4125326d5598a565a24538b6b35e7164f6e589ffb2b55e70adc08a48340aeec88dc922283ba34ef4dcee4bc1ac3691947a18de01c93780614c6a52f5cf873ccfce327b85be6c3c9af8ed628f95c7753cb5bf38c116e5747905512125c65d07da810805931b2e525e68dab7ad7cd632554c9ffe6354c6a58c6d8e10f308dee6b2e933fb00f0478dbb922e4e02fd1f1b20c1f3f82be80f9af46ab76e4265fc71a967a16196c93b793d2312bf00d10a35d0f11fecee6f0564208845d1415a3b4575027209ceb0009e872a943a5f74fe0ff316f6277a61fb654f70d5ea95e2e32e1598e83886494e177bf86ebb417785008990d5cb41dfd6e8da77922d966b1a8b3725fdfcd03e60a068bc27ada029f73610e41c04f59f39e57c282ab03d3cef232d6117ec858cfae15e110d0067c4f752e3a3b09a5b49bbfb4a0070cef44fe6118a008a28e86a40c62b18c97cfdb7da1cac5fa4b69fada290089f973854e209e3d48b08f65b41cf3bc0f03a9ee84bc98883d786a6e3c484e0c583cc5092a55505fea4b8cc820944b33350718c5618563c685d71d7adf791c015a37616f27cdee7c84074d436df23491ad63e56f8ac536b58095836f9e8504d484a02a88652ee63c865671e2ef5af30016b64ce1c6310945641cff1f07b932c5354274716041d0a71830a68648803b604608a2748016a9f964e206e3e618e4aee6f446ba70a9668512138353d7e522ad8265e72907d5ca7ceea745f6f9e65c9d81fc2918e6e39114ffecacebd8980ce8c07f95b93f1cb08b63e251957b5ae2d3b9b47539864e54351ca49aa8e88f2b71283a87deadc112fe2b3adb87153679cc5d810bf72772ed60e65aae80b06fd65c2bf6510ba1e257a9f3a2766e197fe1b789c62ad8cffac57188b044d043f0dd3015377c831717287dd530886d6d3c1f348752672941753fcd497c3131d57d5da0a38746d45c738baf2afc9bcd3e793267f8df0ff7ddb91fcd43fb2013eec57f23faff969b92108fa7d0b2526572041a2ef73e6fc8a82f18a12038953b08fe27b43e7297a2aa50f97909362ee85a362aa6db78a3790684e546691da1c5633a893d5271b846f1d6bef047f514331b441718133ded5a03a639d064f8d4a19b21a70ba1bcd75b3d207f601817fa311295ae9f3d6f59f807544865296ca22d0982a47f25b2d05799e4739e89288e10e50bece584e1b2694d653a8068f744648bd95f260a8faab3095236d8f6c8db483149ebe801bc3110ce1ab9233d71018fd282d835b8ff247f18fd7b93812a9399519c63652501dbefa6d3545ccaeae3bb14dfbca98449e4bc7bcf0482567c45ac14ac6736c99f2a925a2f15a7ae56bf3936a3ba96e74fe8fdb82a54149d0238efc97f00594abae1b3a0c4eb1009c7c1feb9e128f3a0db4c6b46a5d8bcf281d7cc68ac79e5928d51ba2d53aa23a1d140c33194e578f23aa6b52a6814f7888c516ce415ecfabce99ba338a690c2dee024ba9b885ea51a4fea7ff9d516357999a1eb329c21c9437cdd89956b15f888b38f04b1f58a813345b37f479a40495fefcc7c5a86ce1611dfee76966a47bf4cb5226a1975f741ea3451776a90efa7ca567a02a36ca9029ec99d1adbb45ec2504b81de7d9506b4ed7b2b884a9fdf19a3d924920eff2e5700600397e826ca440909d9a67421c0013e1186da16de806742b6b66f33bc8f06887464955f2723c2fa966280185ec7b8ef27bb7b5b3c5f6690760f1c92064fe716d151933910d75ad318c655ecb303d02ba98e92f22747a107b5aae0ed0ac3e4d6c02c8bfa56b12aff380c87f828dfbc0f30c3a4010dabb6826105be701a060bba9d52e60d44140eab2201a7dee1c393142d9ec93a2d458a7e7389ea314610f1ec40b6a73e1a9973f65fba0b4fb0b014d26501fbcbdfc81e297c9b3f4a97d6003d5eddc554648c74aed2b83fa608b6d3f80a21425d0078a1079dda33962d7bfea1bf6e88370df0e128590f46b526ece7dc0de71c03f3f6fc3f4c186099bc122d4c5d265106ce4ad781fa820a107b51f309384d1feb8340a005a4cfa415a72494e12112e61daad9aa1160f941089a31f5eb35a01384230f017f1eee9553f79563fd563bf15f9bb481b39cb5c261a5258cefc17488409939820ed2c61f0d665329f2d90302d467438e6f1bb55e955df3b810925c587ea3702b6c2440d8cc9901d8d7ed6d0a819dff4fcc6cc7630710b2290c1cb0c2640b895416e9789e331009b550b7286c38facbec73dc41d26f0d82b5f605d157c48ca8d797af7bd024d060a26768c1596a1b62ceb0641189830caf6a49be7d7509820dfdd8289630c2e6a0d0132cfa79ca50aa205d3a30b4798b05465f2a67a0b34e14ffc50e4b15bad29e5dd337b2a60e2b2feb6bf0b2cab58fe385199e69e165984ae9b9caa615932268b8c7151e357951a6cdd2b0aa71b73bee6c9db6dc314179cc50fe361c61e4da03c97adf32153f0b0a68a98c80733b3c010b71c1434f7a7c4fff84df4573a2396323a7ac20427447b7554a16869f59e816f54f88fa008cd17099e611ee798eed004d4aed19623ba8b9c4693060082e8ee58d4ec5a9756cb61f47ebb5e4e881e9de87a5fc1aedca3261b80465f88735375731c2c102220c8f19b78417a6266d7dde7e38a98f6ab85fb66deb26fd38094706a68fe74f4819cefb0267e97e313d9a6307db668267a8e95ce755eb22135ff46f9a9947d4cc4d43b0e3cf303ccc93db0aebc329f6db40e3dfacd13963152494ab36f9ffa50d3d0154f86a23c750f02f514781978ef40f29b0a16d477046047190a5d291d2f937a8a70e390d5c002c865c82ec57cf838f69be602cca0ab755f370117dc80374e2d5d62fa6508574e9ec3fa387af40e7beb389584aabe0d9d2f06d410585543fb367df68b3d67a2e93971e8b93b730ea569cd1679e972beed8f40745121343857e91d0dc11c7369c70cd01014d22bd73c49392fb2e5a84c3668a56fcd8594345320553b2e0d53f1374730fa96cd632aceebab06fac6b4056a2ce2c096a9f3814e38cdb75233235d80599067cd5a0150ebdfd369692035f8c4d947884b09c74b575d5c1bb5a6a25acd19f33e5041f81e88020fe7fec0832258f0701e0935ff8de2d2f75004fd327b7788bc4425d5285550dd14763816539e4480bd2b17866d29398b75935b997aecbe7ddb5f035182d74d135d9f7464a33b58b1a0b5cad483ea47e10e2344a3b716e029fcf4fb200c4c03af49b158e18e61f0ca1d0360e08fe80117c87d30e9854b6765f5fb75c4a0649fe400b2774f5e4bc4bfbb7bc0d69d976764dce815c131e38c072bdf26624c2dbd2a2292b63c6effb1a91afc5acf79991d9408679b626dd8e04693192674e6549381846d7d55fb6f9b0511019c7f15aa2dd67357103dae67b9822b47ce949b43cf3caa61d070ddb4bdbd736dcbb3805ae83132124d4f028773dd528f624a6599e64e8f40bc1ed84a51bfc60cfb14cd7cbc0e0ebd6ba6c71a23867a82b054440a90a81895b070e37d9a9e67de75575fa028128e76f98723031086453fbd3dcfa357f2789c9ae739587e05ce65dae10474538966cfd370c69e126dd38b428f61a7851a7ad607e38911bac14f64c669a90f000ef4831fda505969600e0acfea11e8f12371834bd678a25043ef392337bee584fa935722e51c99a0e8d372180b2fcc791f8f8a97f30602d2b480fa5bf9707172e1c8080babf474dc9b79dd1a0c96a409debb0fe61d5ea4ee39cc0606746e5af403ac2a497ddd890926037e617c940121df713e40374fe9e53e530f9ce01678316606f4bbfc1acad0c9f8e62158662b6abfc6988debec158285b8725e00d39d28d764940ca051cd9271a7b1559cb2f07b7b1271ad38553666272e343e5520bb1b852282d8ed94cce642462bfa2fe2a991e8437b83aaacbcd32e7f7b9fb34a57bebfdc9ede5ac15048d0219bd6364ed12062fce0c9317d841c359fe64289498ba320a620774da8355befad7c0c972a67f358fe9da5bbab5e9aec5eac2720ddf3dae2505de0d15930cc97a997b040cea633390c31e1a18c5b62602a7979b1964f793ece1d1f58dc515c4acf19f97feee77ae1a7dce9d2a4c4d0b933f5dbe3232ce69fe9a4f768c0b78d6f16df0a2b15c44f27c471767eda630bff43c77a9848dccf9b5e7f07c780180af6f5bf39922f9759e8abc77cf00d43bc955537b33b1a8721a7e7aca9211188bf3f4ee862e4d59aaccfccc168d3ccb7b14b6c23bf69ec947a2bdbd96818b863934c38c010362647a9c5726c66a0e19cca68d71833516a09a69c533de6f0a8e5735292eac6e810a123f3507b8ba227aa9c73ead05ed41717e99488fc30ddd56d5ba78f3191f82913b259bf61263ede18d404caf46465fc85cbfa54c78b4d7e085de4667ef842537b6cd6d8f85606190ef806765fa000dfc10d3f4aca012e62ea359d0687709a9f8986d2bd0b49e4bb421accdc88c2ad2c5b187f236f980f2fea5d67cbf65f8c776b6c99920f713288d0adcee0611be1a2959091f09108db2882df2d0c5407bb7eaf245b8f8718d27b48fcdee3daeaf06c84c06156d7ef6208c8dad826a264fe6cecd7fc97a6b07e4fd8c6ec99a0374d17c8059809da11640d19886bbb97e8d3f61ba067a7708f9545ed6c2de25d2999253d7c4889ca4bdccb2687b9c713bdcb969a804ed395235e9f2be77f49b43f3374fcfc74b38c90b4d14f04c16a3ca54bc0012e88f1e3576c5bde004752b9b81d42b7a0ba1b37594ce6f63d45798927b88abd09181abe37bd7499ee8af25fe128a5e2b590258c6139bdb7f2d749c5abb45c0dcc2463c081bcecaebfe20b910ecb4993e93b247d20068f7491c248a89c0243c4dce8650e6f8fe602f01cf08e530d05abf69c02e5c09602c1b1a95019e4a06328b3e2e727f5967b64f2120e6872d943fc14e3109836e3e6591675b76832f4f149d1e67d787f25829f4cb80bcebf900f94d6cee1d982a2e7eb44f99f15d85005379d1e2ca00cade190166407c26c1378618d3ae63331a3835f2194eae309cee3fc724822c06f5c9d691dc54f7573b87edb28120f23bfc7d3f38336c899d1be604d3c9b4c13f61b5cf2f05f7afd818899dde1b72c32734b4d1333acf82ef8eac965a04eb5cecf1ccc8019eb1bbc2574e67846c30ab0438a9fef0d75ed5d8f3bc09a393586cfb679de97b80c72281ac2bd1c8f15682e73ea472e235a8a5b9b9f3183140796bcfa40e9080b4c1fa78ba2c857163ec71f0e914f37f457b2f9fe1fc33284848bf5ff48f697c12a3429d2128bea06cd9bba7f52cfc0a3da8ceb6b9a4926f5fba1cde0e99bef71e8536bc0ae30cc34fca4ff1f4471767cea197b352e58238e2a9374f5bbbe8e9c33db98f070356de6d4420103eb99e791b37b7c55046803dbeb41b3937140c6d55afc1be5f6e200cf361c9c99b53e3ad02581fba4dfb52f837fddce7a1389830a6e9d051652de0dff49a08e8109d81badeec4ea87fa5fe150667c1047058c2516751b1bcd048fb050d4836f194960872d86354b1e1c9c368155a90dc1f4bb93d245dfa73dc23b9925830302888cded4026d110cf607e8d674a9f45de48507703db9a1226c43a2cb660376a638e97c785ed9374848d102449c080c183f576fd7546128df7a2a1788987d7897513cc248d8b1b0e78e972d495b969ae689c5541f2027afc5ab45ace1f40867903954af62b4983a4060ae71f120b8ac3a80a90397edb35e815f7db137066b7f192c375af4e3bfb6ee4c3fc216530765bbb4cbd079fd5dd260cae439983aa07282891e28bad5d0ee34cceed55c983a584f1374cbbd7e3734d49534f02e5ba8f7a998fe5cf330f3aa2e1f00d03cefbb27cc4706dc038a7144ee1c65f8d4013256b37c060ccc6c5229f0d441dc5e4bd7de6d118a5e3dafb6e24e8ccd8158420da88a8d161b290196111b47ea5e742c15c85609062b67c679f3d28698c45616004311900c6282b828fa4b9987aa4730c9a0910c2d9c5b79bd508338a10aab36a621fbe58596c5a7c6c0e6715c50208a8849601f3323af94a861106275eede66762922820ed49e05b5fd54d374471f68bf317cc3b42db89a26d4d8e457d835fd97508da20b5479c8f2b347e60f9b38467aef8cc07029b67ae981bb825deef3c26aa567f4524be34aee7b6d400f8b64be3f8902f4e07a3cd0a745b7333fa24c3d844c29aaf1649f1324e1443ec134357deda2f21e0ff1aadeb176aeaeeb1a4b4ef7a166689d1bbbff8f38afda7e3b4f08837258dec465b30ef11e1f12c6e6d7757806f46c3f89370ea02ec3b5712dcacf83165d599393adbc0546e054d66d75791725e1164c3d95a5ebbfa7bab91a7313a445a11641030e42e86bd7f5757ba7dc89a6dc66ea538c5bff9efbaf0bee12ccc1675b6812f9060e88ca52b58e422af94d7335a77fe4ab1cc5e9d57bf3a2cfa8d74193052f4e4c4b87aae260b4e5176aa65e733c7c1dfc6fed0eb155c699ded66e9823acb76b87f59ead7bad1b0ce245b52a62257b4a3fd9af6b840860f276364f5e1d52b00a9a3df1dc6766dc1b4be693a4907a96d706434de83f224e2b40089af352722f165d3cd4cae853fb737b3c582239ac6297849e628bfd1fdb942aea8f89a7387d1e321c688ad200a6572a6f6c46bba47ad0442b51c7715b2a0f9022b9812e9ec2ddf3b96ad3bbfc8270415e480697ddac3a0ed8bde277ffb54b70daeb4d5e97ed1d248d8eb8bd4ac2d45f33dd74b0a1d4268caba75d9a86dc8475cba41c16eb2dfbc91b52f3e9cb1001801204289162b4541385aad3029a7f9e511cf9b8e7a18cfed1fad8751ac57cbedfe4c27e965a8d839f6d17674016de8bc577b2f0bd58bf238bde67edfbb1ca6f3de1801d03a1e0d90adeeb3933afd146aa094c52a74c40be93a43151aabb92023cea6cea53d03d27504256da9664f6e444c35f1c6fc4092ca56d6b6e18446ddebd6c595b66ddd43e1e0b490d50c082ad85d505905e6904c4e48d0b8a29e3bd86eeb82fc26d1f9e2baf2e094ec642d59db3f7984ee5b709f2c1f352b70a13724cc7d5b8758c2fb106b23ab6d93b221c160702dfbb0afbb90397f057a636a7639a4e47dd969987aa05c24904423456b56eb79186fa2448551938ed07eab352c3e51ee923ece6eacabab89dafbb09faf81868509b0f5cadab17f5703cbc6a933145f1cd42415cc2a79fafa0402f73a40384c0829d7161aab380611cad3878fad51da6b525e5a1d08e2727832d9de13bd113d19b24d8fbb42af5a07d0d2b0dbd08a38996a111cd34f4708c0fd71072f43616d0027ad725f0e1cdca7b58f06e2cde87256610965021b72134eb18ecd93c005391e0392815f4e988da8df219a6a592d9453574999dbc0dde82369945313788473f32f4fa3761aab1ab489bcd0b59edfa1cc8fecfeaba8ad895d01a84b9da28c2d666f070fb1bfc12eeb69ee0a8a852d0f56d6774dd6dd24d53ca2139d9e7ba4885ae9f02836d6267e77a09ae5503d0a10d02835286d65c2f5ce3bcb5ed176cbfb98e7a0729c267ce24bfccf5199d3244e168854e9d9fd86aa523a1d4450a6ff4754ca62a00ff61e170ef1cc3daa23c5e66271316f5e701b00d6bb38f0b65bcca666c3eebae2824684eeab367ed388036e0200e16f497808b4eb3b56121b4330bc736ed796256c5cfe5e358971b9e43330d216452451511fb326d61a1878f63ad2f5e6169a47a751944c14fdb6c441ffa8754dd12d05d85aaf9b42984b3dcc4c3b29187e02564305e887392490c2f25d4eed3010d3c381427d269db7657b01b3c6a1662d4dc76efbcda1eee3b1a11e1851b865a43db85cdfd4590c146f1d6b8f6c8a67e15625833b055b835aad95f84146f1a6a0f6d1436f3b7d36fdce91cea1af55d8cffb74b9a36da829de85133caf228c4a8bbeddc7bb679dc7534e2848a370c6a06b68b9bfbbb6083cd824d438d914dfb2dcca86660bb70635cd3bfa96aeb54bfa9ef48e7823cfd5d9dbde512ee881d0d52ccc7224edacda3fdd3adfbd623211266587bb05db061a8c9df09176f1bd50c6d146ef237d36ebae95dea1af55d18efb74d34b6da62bbf84143c8f07888abbbefba79b679ba7524628416b78c6a06b60b37f9fba9379cf44ef59bfa2e88e7d9a45bdb7d915df8a03164782cc4aadd75dd3cda3fdd3a1eb155da5ceab6ebdce95c20afb357b3b7bd845da1634388f5a88847758972c47586ba45da8ccd54db6da9f61b52da36a4b76f4b3db8f019647a14533eeb98b83462ea04aa72df79e369f774df51c40929d818d41e6d176fe62f4107360b1b4635479bf59b9041eda14df1a6414d7f23b478635c636053b0b9bf051fdb2a6c1ad41c6cd2ef56ddb6ea39e9dceab6907c26526a32520122a7e4868b47464f1f761b5a85a96dca307182bfc6393a57c4f4e6ca044e8783ada1e0ff8db55ddf6d341d902f32b634a283f61639a323ce03c062f49d9b8c8927a3ddc1047e52bbdfbfc248ea702444a5e0984500ac6f77867fa5e3cb923c7f1ae4537fdcdc375225ae0e4671da5f408454864fd9c6db5ce039123e5d456dbc9c8bc23cb65b7abbcf5bb129747f35c7751607ee36eb3b6616228f42cabcdd2f4e831c631a88d2806ae284d65bcc4acff155484a9d70c1503f1238ca35293d97d33dfffe7ec0cba2d22bf6f13cf67fa63431ab1045dd27fb675f8f4ae0868ea2f1ae9a13399aa046f60adf3fcb58873959b8ba08704185d3ae594771364dcb2bbcff2c5b07374f05c19d2d103e147076107554c7c2e533bcd011d8a66a4825d6aec21afe7e7f25e9e6ba084543b24530bdc140ace121b7467739e93d13c6918cb30e7cac4fb448bd5027bda595085eb9f5eaee974842eeaa8d7eb56216c55e94c45cf827d272112bc69cbbddccfcca7c93f31254143d651c58a5d0f7cb0b5f65aa3a1424a93bab90c9ba6b74045378c45b6bed739c014041fb65dcce2642b33510ddff00c21c11609ac811f1d475356083836d217e96e81adc889f8e83cf1e7fe1a8e4e6c113d9f08ef10013aad95aa31fdb3600c1ce933df6fb46c995df5d2c6c2ad77cce9256a6540887b0e7d29f0cd65506138f38a041f2bb42c32aa56c16ca3427200747a9f6f791cf050c24f15b8dea9292b1ae1da0f9e270de12d4dc9064a91ca16de994792223181a7609329fa79821b56a188444d64c9a1a06a3de7144b3a0bb0d6083f2f986c4210fa2f610f4c1d4dd19b08ee791d10554d9e70ce7a5ddb50d84859b1410d4a7c5a03b50bea8c235588bc7be412581efe16e2740cb5522eee2be741288ba02c9b5ae85f47283d9694965756bea9dec03cd20970147783e7a4aced37f6c48b792cde36f639f094a4079a7fe6f54cfcd1930e27e04b5f63b86048eb281ca6d4cbb5657fe6f661f88fe7b6ce95f22763bde635fa8636dbc40c632c834ae0078851fc10edc31c7d094aa56be7da1969b27fd2a63bed74d92813bfbae4b920c775e4c95800779fa8cd2f4503de4b20ab9ac64db83b64697c385d832a83aa2ee044e90388ffd6875039eab26d4bfd2ff2e3f616eb7bd526559aae079c5849a1ab998966682e6dca3b2b0988910b63022cd1314b3c6939028188655e566130e176da6920b1dbe6e8fccd5583d4c44fabef4c4fef6434a97795a3f993cc7986b99ffb9cbe1afe845cfbeb6ebc365e56b32c2943771b9f9f96987abad50279c5282843d5130c19eb2eb733392d73e44f2baf6909daf9b95dc3174ac94635d6214fc7137e64fbf35031d6366ae90aa75875178c555183fe6d43c7032c6e78f3ad66d003875a891c218444f792450238add72eb409c3a87909a6fc4c73e1857b22d5679e333f7f5e1e75abc3d85fdff1c6beba1faf072a6f49e281bf912838993d197eac06f0b9fcaa227d31763d174ec1d0f84299b69b0b9a5bc6ea9fc10134cd015230800a44ed1dac5c3fd93fe319bed0551790b395caf8786147dba8c885c7f47cdb0d5a4346db77de067f578ea871f02eed6447271fc3cca2c7577a1e67c4d34f7b3786239991ae00422772ab925cbc93ea8544d935afd94237f850bddfcc0947c6fa804767a073fc701b7883e0b850710291288cd1c37922ca6595498dbdc929ea4e56c134b61c80cd548ac112944e171898aa13cd9fd138ca5eb8073a45e45a075991907997df664f0fbd7c4a7872ac7db3217c34adccd01a9069b229432b3bf065feca6c8d6e420b94f9831428a63b94fb764e3a08b4363e0bae9e5d93e52b058cd420436c3cf64ac009a181e4d9874d3b4aa781d4b32febfc81d31150beb1f5c7ee90f7f917333f728221cb47f42c2315366c6909839d9253d40269254dd210f69e0bbe4176ce88a8fcccef07117de67b44765f7e559f46676b52a461f4b7d0bd570f217a56f2f9c7a4e8d65e3b7b2f5559036af93bd91c7536eaf00d360fa25f42e2334515dc54f30c9975d150ad432dce89ee57c2716a5e933ebbfee282d3e0bbe6ba83c450eec46ccf581d6564ea31663e6bebe6e9d3aa7c2a43da657a68c8a7e49a763b18062843488374a6fa53298f4b7a54f93fe71d4d73d0bd7848ee1f51eee9f36bed019566fc2f5131f0f5dbc43bd89f2b6036a2cf0fb2feb1b98bcb1aa8aef3b16b1aeb78237b59c4725e261ded417e932827c0f414245f14fbe322a313406b5cb2b4d5b15f214c7fef7af41767ae6e6103542ef550a2d352b343f0286cf4365185143ad3925b820cfde53807f46b2ad59166588edd6a559fa38853fcadbe59605d5984294309df2fd5cbb1215283c3e691fb9e2e2a8f7cfa2b391de2bd564268fa66c31831be544fc71808f5cdd08748d69a621f1c8bd36f90db1842e3cf8f5ec6ff2cdeb99167668e2d30ad6c2156370b670f5fb45df6fd1321c6b9761d2afdd3d728858ece387bc7fa03f88ca7c3a8e7635fa80628c602499c82b8f39ed321c07fde13a5608b2b51c6c52c0f86a72f125b921fba82779ba6dbc53c2ab36df2b363d331b3497acd721959b622e19ed93b78beb1d88738cae50f48591d378d72ee9c00ba26c8ba0843a676ad35b0220a1ba9784cb946ead2c90104d4cb145fb37e4e84125debdb5a176dff4f8b745eb22b9fa36a12e59e453d288034b86b23e6f7a7ca7158bb677802ab65bac3e98670a515b7b9233cf24249f1c1249f6fa68a07fd984ee22b46dac10d0cbacbf9fb12a9cd1a3f382a70aafa883de43148e0db6611df9c4bcd4acc58472e7ada0fe854b06dc1a9fcde1b8d8884ea4f95cd8f8596cf16b143cffe135ae5066e51a4b15e7b23522368b9c350aba8fc31a3795df18aa6a8ca39dfd15f24aad24c29ace8826764f605565e8f6ae8fd1683910a3a5d39613b669b7c9aff112c459ce4d9afc3375d14e574bc895cd7cd7cc1669af8e5f3bf76c8926b72706bcff50f7e9a2b5c7219e63f1ca442de030d299d8ce9f28c81e1967d2dacf4085059097034fced232bafa01d257258983cd36ab1d5e7ef575c6359079d5e8f01b947d42c6dde1460a4086d82885678e3f751b0723bcbc0b34a5c20f8a96ea0570d60b82cb6d7292c6b79ccb88b7583d41b6106581905990b25f994313b06c01b9f8d7403e971a1a4a9ca9168f66e20c55308d406dd882c0c6008ea94508223c20eb6299dc02365828d651ac212e110845b365f655c856a706f0926896a4d334fe53841314f679d2f6b81207a24350067c77a5a4166a72663dc6bb9df6f122324bf924f47b2e062d6030b45742a9e714bb7e9c881b6824f8e545d3608cf16f1d3301da35d387cccd92624a7c630b6e4de5ac5992127b8925161a96d398cfcc55fded4ce8d98f4043cb36a1161dde1a375cdd0f5351a71a74c65dccd5534562f683b0be3fd3987512df1df511d25fd39088e9433b1b024b1209b9dd242aa0d63e4252dab1526ad3d0a7ce49dd21d4c3e94ac1ab4cf34e87659afc2adcfc49577bd559255c7767c7301291b9338b3a4a69876a3a087b0bbf11c3e0c0af95699bae202e8e5336564bd4e216878f62b634e264b790afba54af13d4548c68050a2d9286690f3c3fb543d832ab3a0116f92fb14e093aedc21a52108f9c27bcf93422c1c48b330614a354f3f04f1a551c67ece17c3a11cef5f9f16c671ea0706a89cec1d8f3e957071d50c45767bf864030cec5d8d9b5a8ae46c1b6c1fa96c64327a199f82393a98498ac9d2d9eb5d138a0efed165a89177ccc1047d53ca35da0a5f39ca12da15f8341b3664f41ba9e5631b6f727a19a3bc031a6ede90a672db862bc1ee1daaff53ed82df4cefb803e40ca1ee9914fa73a3308648ebaf0c76f49ac05d068886364d65ca966f1d98c2382868e8c3349b046b0dc3e41f6957539ece701fc220fcdfa733fd9a3d4f3bba1b571e2bc6161da34a7b233980bed777646438ff5a2f9fbbc9a66851cecfca82ce0cefe38a73eab55684f222335109d68a34dff86bfd5f41e8fb1bc46bf96d898ee7ef44f13e4da4f1665f510386449bf2145fa86acbb37e425bd21aa4b1c50f38c43c1f96eec61c1679c93b453933a8421f1512f755c13a43bae7561a9a69a8c613c705c73578ea09250b580d4e6961a1ac2fde710cfb8e69926508dcdeea396a326aa36c6b51cbc48fbccb1830a55e904427650d22957931a172f5db10d4f1dec4f9e42decff52a6376c8f302a679548d2ddebe51c7f62cf667004e06ae7ff57776701f890ba2bcfea7313199b5ec21daeaf1bb23ab9659eb48b960cdcb78028a3cadc5496962f4497ac5c6326bd9447380172b399a6fb7622b1c07db1959ec08e12c1683c15c5ea8db7031b3d6be2d12e95c7e167bea43948146a687998520d03e849b3c41d466e030a9d21aa386343c2d24ef4b1834850ba0b7611c3d010718e245579f43a92eb8a6d49afb5942c59c0b8459bade196557c1acb219e9f0379c7899c992f85805c265070dd661c14182136d583341767aa4455197ce82ce22ff62a23096ac610720299876cf608f046b06ace9096fd7c55bbcb5e4b715415505928e86032441e28f4b0d6592497ff57eeac6079abefafd3f19e1cbe24018a00cad6c0f536730923a51e0bbb3f171c4ac28c4c40acfefa11196d82c5404d69ccde662c08ea6a220c4f31ef1229a43ba5edecb84a175a47a726b72bb7b341233d1ff535dc908564ff75020e26af09c1786c85207329423c33ed333fcd2f136acc882d25694b220e7b73fdf23500b70541f992ded80cbea9afeb221553ce3a7253bdd7f07d1bb4c60eae894016eee687bb9975cf15d7425f1675e62a896589c20bd5fc477f8b57dd4119b95e4770d9ce85f020b39c3e5c87a5e87a792a1c3e2765acc32317d56e8f77b40286e0fab0c3cbb34a881e5070b301a90871e047b9f074d8d856c695a3e21e10e8e826318ed113b56b7e6ead5dd084ff8e9cf171c3000892477bc0273c68c5358ce78973b417b1138f73d9bb87d8a9a64f3e090dd8f631b7ce891a0b7e3822ae1f2e14691a92f1ce36885082a863df4b2a8c96abf0d5c751660d7730f3738f8047d35eb99188166544009034a48a869657c35371f42c8c01ded47981fab49c918eecb164a6c6facddb7a5abe8c15370f9be6a680216cbed45c3dd75d3ac82e5235fdc2c0869dbd83a2f13891e746bdd7bb513722a48a8fc6515c3d73a5b86cb976be980f305dde72092aa4a8812a8c7b6454d0016a85015fd0c8d9b51174a8c1e18bf470d949c8fe146bfd4f7fd2aa2268d20d29b2ec2e9b2a2aa3f2bc22242e526a61273c150ca2880cd81c2b2a2f1025efaa0fa824ac8698dc16190a24d550188dd240d32ced69233a5111c0480637ada1d5d1358d2705ee4f95b86b9bbfeb9c7904b28a6527ad8865aaab928668a747189b0941814e5bb10582e8deb87b0aaf057af34a197f229c5d7bac81d52ddc591ca1a99fe223ae5707ae2d69a12b6ba64197726bd66950e60cba91cba36fab4480d0d6cb917242cebd01291dcb6afab21aa61b54d9ddc7d9bf4fc30688be4e310face8ab5713d212bf3636013cff2312a7e6f06c15cb7263012afb1f5a937d2c7f16bd5369043f51db10ab6964237e0896b2c4f82a05c269d3bf56717fb7494bb236a69d664d76c878377b289f04ec653141641ff65c00e2d7175163cc6e856933fc0db10636fbf4d92b0ee5d59bfeb33cd1ab8e9cf67b406e0bbac38f653bc015244154689f4bc921ea2f8ad59fbdbcc6e3f80c9572b7d8072f82036c32dff37c393ce0c071f9be10ff053ed5daf83ccc4ec1bbbb1d03ac5403be8545532faf6a6d6a8af3056eb9474de6bb3eb976a0bbbecee391e8339af5b2caf4eda8bed9c7400d0bca1d781d67a36e32ebf80eea66c05bd6df1f8deb827ce0be1063213e48932cfcdb45a53f4674e54895ae1e845627ad74d401a91153da8fe13df77017c53056ae70bcc50107847dc1cb0169715b624772b5c0550da0b5789cb22ae129765d89105da1bda5222b6c80e9d90252964e5c598d9c83fbef158816500ff1e95af6b66b6bbbb8b5bd3b10f1c02782bae062352dcaa8864c10cfe0c740c5d67f3812d356479f8c5deea6fba8e7fbc731d568bbfb9fa602cd6877b567fb3ca9d227c20a00e1fcf234009d5a3aa05e684801c04f8a014012937675bee373b075842da901fc0032a9b9cbfb94304153a4478d121c2021d22a8e81041448788210c0006a52f197f12bdc550d6d9a6b0a7f90b8a183a28364001010a4c072589ce18a1df9d1b72e8dc08e30617fcac1997d8de2f9fd9d602e8a000bb53009b025c1d029c41000c10e0eb10206500721880124ae9c7d3f16b9f460bb9bf41ddf749feb7f8a60e69dcd590f509fdf6785d6b1abe4fb0c4ab6cc91f6d74ef0c9186ce106674867802a5d408da19c207437480521a04ed0c6181ce10b7330413426847004f10c0d911008a7e784db9f6692a16b23ecf9ce5fddf2f5fe51d972ebfc5acd29da56d35cffabf5f0460838ebd23c41334af9a778410811028ebf33898bcbb2344119d20b0607daee771303e994c9ee775fe60104a54c146063a365e3a01d843270040e804c0a4d4ea5aefba02c93c633db760e5b65e7e5d1796da3a747fece549ea3ea6f0b8b264b7dfc7ed586b3da15a644e3451d41ffbaa1300220080850e004c00002294d21f7bdddf358e4906075975ebddd4e7ff9dfa1bda2d7aa2f83a2c7506820b6a8526da0122c883b6367284db530708253a3f6ca1f383124a911cf140203daa2aa8ab3e777ef0412b680522ed6f2347f2c90735acdef1810c4abbceb5e3839253c7878fec59eb0e22c98e0f242a92cfebbdb6764ed2483d893b6943fe96a573c205cff124887bc69593a4ed9c0ca931d9a8883323b73f48d2b288b0d3d475361d93243a148d0e05a343c71bb4438b74a8c91e70b0070fec41450f69e8010a7ae8801e7c508ad554c631b59b6999b11131083f3f4fbdaabf739c7a25a45a9fef4bcb41279cf3a4f8389deb1fbba8c7ceb16ae4bfc56a6b5659b3260f9df23c04600d1fac71ae81e1e10c5b39c683750737dca18b3ba0ee6059555d7dbecfc337fe5c4fed9fdab6db810476f061072728b5f6d97f8cb1ea00813a7ce8b0c615715d812449871a3a08318733a875ffdb4f9236cc42e66022872470393011072ac401047180020e6a8083187020e1e0c161006f38c3faa03cd58efbbfef25e7bf1ab2c6faa3cdf8d5d0f5d515095ad09af64c61b0b41cdfaf862cddf7a77b05591aeb4910679cb1a84307ff930e1db58b42064686e644c4ca2a6bf23730e10626b881056e08811b7c504a6fb6ab9ada7ddcf37d4938e66a946a44a1464a1bd0d08619b421056da869c300d8e0043664c106d31accb00619d8b1eee7a81ab2ba530d75a2ae56c81275d665a8e3fbfb971f697f736e572ab725e69fde9fc4c423cffa0badecc849d28623697fafc1b3066adadff9a4063328b5901c3172e4a4862e405beffd468ed4931ab4a0dfa7861f468ee49934c4a1b437d250461ab0787ed340a25618ca3a576e47d5c5213e6bd0c0053428a1945adfd62c9f0d5d2c34b854bd3f49c8b47a202ae10f593d10d3ea81fcd5e11994886788e20cd7198c380300d22083d21a97284e280f7572f95175af18776d1666e600cbe7fc043e919a069986cc8d3474a47143c45997a7f20fc60c25308319b8194c94d21df486190c500635801e6f9bca596aad2b2d242cb3461fcc33f355fe5c48edbe94263d6c6bbccb30843228a1f4fb60657821831bc81005326851596ec21ffba9c9f021c306c18ecbaf7f6363c620833168600c7c0c633082e2aaa392469a15ca1a085ffd0d0c101831b0400c1410c38d183834ca80061768d8508ad51db5e3dff1265243fc07625454d551378d645db5ab218bff0d7ddf87427db7fb0cc3fd379fe0c9cfaa7bd79a46870e1d3a2c92c440c2304618aa08432a0c44c2200ac387523a05bd718619676ce00cfebbaff6e3548eb1f57d583c335fc56ac8fa3c0ee6b9eb34f64cfe79eaf7a9f1cc7cb5c36ae8f3b20dbf9cafe6af0ebf2aea8fe5fb3e35754765f1cc5c1daa3ed73cb7a369b209b1a93bdf7c7f79f2ac436ebbbd5d67d37536603083522347aa75a3753f81610b7af24b6a1eab8e55bc2239b25fdfd3060cb8fed86b549f3fdca7aee93a5388bbede679a37590aeb351d1a32a47af7c61095f40c217486aadfe46df9357d57f3ed5e7cf53af17b8f002492905426f7881892e58815afb43d64ac4baeb7bd6fc0822491b76ad69baa0bb60ea428e2e14a00b36b8a0072e38810b44e0c248698a4ac5615dd705bab0baa366fd91a40dbf4aa486ac8fa77ec75b55575a4216bff6f7fd1ab23e9867a6864c2a1587e579a5dee2f7d9caff66ab6fcf3ff6f3c40523969cb630da7cea3a1b93a9eb6c545472f4ca0d2dcc00a494bad01b5a48c016cc8882191aa0949ee80d33a430c386c5311ec3937f3e21ffd58c3db5e3ca5764d63d047fdb2a8a3c639bb2b5aefe86e332256bdcb3504616926461015890c2aae6b763ce9634f5d84d2bebd45775cffa6e1d9228d3fefdfbeffecb4dfd34b7674a6932e76f9ee9ba322c22e2b21f26982b8871052ea8555d410a2bc4c10a4aa8f57d682ae8c2783e8e63471e1f495a96ef86156eac00a40a71d099e3cfabd756a10655b0b156e4733b56a1882ad01315884005910a37a8d54f5def97b86f5d413695b1b537a6308429b0600a529411074a911c01656d9ebad7075dbcad2e4308656c80d6189622a7aebad798322c299881e4486d81d1955bd5490a3190c2114a9ef9793e49c1868d4213a2708228040119396285b8db52f7d3e61f6da0e08512bd01051840c1e6096b5024472a08d4c993afc8be53f72f79ea203c61044ff041da90246df8e3d8b1c5d165b6533c81004e3803c911909123966977afd9d63821024ec8714213526842049a00628219488ed48b2b6845e2c454ebfe8a9f7a7f2adbfbd1bd6e8db779adc72a5724c7fa722678412945d11b4cf8accf35b195b2dec3841bf434c94863930106195890e1a1140cad79135ab25a6eda713faa5afa72abfa416f2cc10ceb7eff6deeef197f364b30c28d258c9452bdaba875ae1d647fe7b372abbabf97e0a15adb28410d6add7c6af1471b257c9143095a506b7f27b1a8848b523a86d9867e27a10c9452daf7e364fc7d2613495a96ae33a5f8aaa6725b6d54b84a8e5e31993e1e95322c620a727f884a8e5e31dd18e30263ec1803014858828447821124d8b821861528a5968e2f35d7c1236bbc22573abace3a2a798a27af27ebaf2db3c639fcb167fdf8fbb48c656e5d57e497e2e5f7a3aaa6f2cd389f2cd07d1069ab1846c4b08e6006a5d4d23d95710c4b91af86ac4f56e97c934ff3c11896221e5bfbd71cc101378e20802579589282251858e204a5d4e2ff62ad2b6bea5e7ec79ef72f7e3584eddd56b5b598c2bf1f471b810994d2197ac308498c4085118ca0d66fccffaaee8aecdbc6b014a9ab6c61e88d305261d43028a5f486de28c2088af0004a29486f14010930c6a09486f40618f6061845dc20c21744e8d677454552afb02c2b2ae80acbb26275ae5423b5e3202bbe1ac35224ebdacf2a5c6af7851e8ca9d6bf585761c8fa326d7ffe94a8eba976df6a5b1c62f1f3835f0d591eac08a8d7eff3b12c4f0579b2225f7db092242652ad96da7d9dff4de52a6ad3861fff3836ebff8ba53befcff98d21ece1c610983084210c61a416ff3eaf0c73be1ab22ec7312c45763ecb5287b75bdd735c84e006219821436f082103d4e220de21ffb4a689a9ddf7d59075b38d61295237de36f5bbf2b3ae7abde127d387745610e95c790fae6cd9ed7e526bd0e3b89ffa4bdc4bbd5f68c8b779ce4ff40403fd710e7aa205ca8e07d06bd5151872cbf1fe7e6ad3fe9c71b52391da658d553cdbaa7bb695631b53adbbc12e54ad54b657579dbb4b05a15cacef83aa2018cf57b9adb57efc83f93ed417aa1daf1fd0532d9e71fd584fb5de82a9d65fcceb9b7cefbff9e64fc930d6c421eeb6db8bf270dc755ce4b85b6e3fd45743d5da27d7a488b7164fa03f77ffbeef53a4823ccfa7fa8a7cdfc7aba0229eefe35fed32cc0ae4968718a7de5c43d5ea3887b6f3fca616b50d0d8bdedf804f826b78e77f56715a59d5fe9b8524c159087fddc292df9ce9e18be267956d15b107070f51bd8c95f317af5eb754ebcbf9dbc3b2befaa96c55fa66ac22f5ae961633feef0375f0d4b7669ce3b30eadc09028ea1cb9e3ef1607c3a04e95e36aa201930cd026f01bfb66e5e34e5990524be9676a93524aa2d4a474a30631b42c35eb0a8532b6a1276ff69721f026b4ddb6f4adbb8977c8bfa59b4356fd766b3ecdef173bd7413a3f5beeabf4cd2e3039362607c9b13156d6f8d61559b37e5357d5679c2fad4cb56e063dd735a5e6645de553b52ab7963c39c795779ccfca571d5f7c5681833c0e264fe63f9054c69dff9054c6f65bf86b96ff17cfcbdf7fe368f3da1fc32c7a9ed79f7b1f66dbb9364b6b722fc7965e3fb5f725eede0af474e879fdb9a7d223f774f6faf3b15facf27e0cbdb1ebfd49acc73d4d9e57979eb8713caf3fcfb1a56796a7e7e558b277cffb249873ed9567f6b697634bcf2c71c6f94dfd5c93dbcb6f6a0f0793d633ff6f48d27afbc57c723044e842035d7c79a676df57439dc5cffd38335f0d5967edbe9cbf42ac952d79d5ffe92e48335883d6197c610618a0945a38f6bbedb685cfe046cd2e6558d5e78e0cb6183283aa3240511e033528a531e08252ab9f668f0189c2e00c5a9edc96ab6c61e0050c50940b06c040955fe0c50b50945a59e3fdf58b79a119f2e917544aa9555d4006a5d905a30b6e6033e76b0bead002252dc8cf5b6004b5b81232b20d9570516b55f229b9c1412c2883d6ceb5c9821c169028b55650432b58f27b05e60a6c84a10abca0d41235574191d3ac2aa8670accd0610a72680a48d4e229a0a5357945411939b644c1161505d7d6e209ea70023128a59f04f34f823966cab45377cf3c49500212b08c400ed4ba0fe69393a41d7b68eb8a04f1679cca5f4fce6152bcecd6ebf979d7858fd3757704395b8fe0c7cb087a15f58f362228e324022d3abe2f021e2150a38b4f56d00d8117d96ab292a4a9cb2f4f21b828a546be6a81408d7c8a20580282916e5d7380c0d3f9801a94d2179a215ae6035a6854b53e50a4f3818b5a5aebf2cb0f64bcc5124aad2d946c81d23c5007cd0366506aa93429eec7d11e50e2012c3c50c4a603df012f28a596edc0f755904d07aefc1c73e00c4aa9d57f853baf1c73600556105d7e69e2c0129d0d8c81524b63d2ea9ab1d800289fba3f6979b51a7083064ea0011f94760b3af5aaeaaec914b666693310077c5d3a19c8c9c085813a506af1fd7192b4e7ca825aacfb579f24694f18f068a1868e1664d022035a40a1c50d2d7cc8c28b2c30900590ce05cef0e20258506ae91eb238cf01637d3cc7cda7b875e5f1ddfc1f8fdfa2075e51877884ba9425451d19eb0061ebb3de5a652fa084dd168042c7025e58f9146bbeef6f34cab4f7e3fb1cdb6dda706b93cae3dd2b60c687a45a2479aa15284105682a00b2e6b9af3dabd0a813056e409f025650a052fa21f18c7c96694b22a62d276086091c81528a84762670a9263156f59a093421013528a51f920aaa20d067a94e1270810450d4c857ad6a5d0caaf6ab5e24e0b13ab7269600a55894e105a55870412d192c8a508e2f16224a29cdf91b811d810f04ae008125d6fd7deaeffb6a7db0665c7364085c0002a31962b9e20757845718e001537840041ef00f40b1620e56b4a063054d92353a49dea0845aaa7a31f8e35743b6660bea27a939687fec9d6ffc5191b5ee5f0d7dc49bade7cd5287a01698107872f0e45f0d59f737bf78a55a9fc7c9f9b3acbfadc92fb676ffbd18bcf8b3ede45962ae49d3533198a45b483c235f92931516561658913e24a00adaa08b3d239fc573d86d4d53dbd50bb7aa958d9c8305ba7354a8c54f1166db2759546874545a506a755c3b89f39ba6b6aaaf9fdafb6a0f3f671d56ab4a424571788063718ca0d4faac57f9f78fe593d9862b7eaa16798a96ad7cdbe050eb04e36cc1f983e668393df4a49679763368ef234fed93dd16652ac3225da75572f44a1b28a50ca01d4e026e526a7d56ea93fc36bbce312c45b80f7e8352ba97ec2bb6a78a3428b53ef17bd26e6b3bff2ab8a822c7aae206a5d6f3336b8cb32d4d3528b5db9ae6126a5d986e724129358b504ae9bd4c1b54674d460b4c477741ad4f82f5a85528fdd1c633d9a8883330769b9d1c2ac9e000da29b3e894394832c8934459cf5b6044dd92f2a50e7fa5a640508d906a55d5679a9b2adc40e026850a333a544c800a1d180dd80796ada0cfceb1fab1ffa856134d54d2665deeefa154d664cd36ac9a9ba62d37c8b465e5a655f1073bc8b42ad3aa6a0d26f112631728ddda565177c61f9db02c917cdef1fe408b04d920f5a9518a6fdb0253afebc242e009fa1bdb2d94c800112522d1f91f7c0cfec82b412905423b770ab70577049708a596a8ffab3fda541c38acba22ad0dff7f49e138707c3564a5d4af86ac94961b3a551c38ac0b536dd6f8bbc61102f41b55419d49a6827ea89826134dcb0f1595f087d0b4fcd87fed975b8b1ebfa6bf9a45f5d964ba302a2ae10ff148dbb34e82b71eb9edb6e5daff611ab91d2ff62e0c8e36edb6a6de76bfe987ca3579ab8e4d3f544ca4b3822e9007e9baae53097f48c72bfcc3aec9fd5fa534c78c5746f7bae067a97bb623ca1bb5cac6ab0e38c3d2ffbcf2b0e938800c4aa925e3802eeeb50ef8205903922f745ffd0d121c244528a5f79e9014e0881c8e28e9cf43bfcdf2ab9cb31cf98e2ca18635420123468c8028b57ab63de7bf7b51a655d57cf7daaf9f350d304303c6a0945a5fd7d97cffe951f535a0020de01ab0000658815224473e9e7a9f010fe830608a226b50139f8a98510406459214f11839626dbdf7f3c89a481988b480c887e488ce15c47f554117647db8fd95a757fb6405adc08f4797f544a40e39a30ef982891b33640b3ae4876533c443690ad7213684a441859421e40294d28f8bda866f329960546c6cd468a146063565cda826089a25d0a880c6d26c53c8618a2fa6c8628a23534481a2030a0b1d141774459ce951696656208dcb0f1b1897eeb1d5df785dc7f1f765b58729e3e0c73cb7fe7c5955a99ecabfcfc2b7de073b3359cca0665c64da207303190ac84c2183440c1a3149e8c4e4c4d498228c10640c72a3036409404e202f52c4410a1674a40842b916fa7c18eaf3d42f95c9acef2adb0ce599f96a5d1167b41afa2aa8769ecab31aca509fb225fe6d7e18eac590a7ae64a8baa36275475dd9e7b7d51e3deac7d375a2f676d77d16e3b07c758775bd1dd69ea9d68348cb49dbb90d79d659835684b1ea2a576e4790adcf35c902e3031817c07001636190f8510700d0ce8f37fc48011567403ab80e9e634b14ca3363ddd76159df6de7a206755c41a028ae8802f4e2869732bc80e0857cd95cd648c345894b1097910b8e1628b48ca0a5a5d3e2c4675d559f2fa9b1ae71445ebf0faad6ef787b66be0afa50aacff593095d52d72f46a6eea8a818cc736ccc57f7254b8c6b8873fd956a65138f3958ac6041514a81a01d16202c3fd00e0b102b3be8ac782b2a2b94523ae4fb788d8979d1d64f6d3b8635d55a696d551669b95ed9bcb2f7c482131527079c8238d18e0f2cf838c14a4bdd513fdf27a65b69a9a1afa632467da110ff62ea8e1a830387f5556bf9afacc9e69bdfc74529edf8b041a9d581e20c28bea0180a251d287264287e504ac9d026fc21aacf50084129b728534cd7d9a87436954c9f1e53e861811ea81e3e54d45021828aa83205a5965533eebaaf8ada533f0f7efd6b66be2a6a4ffdbe2fe65b8135eb07cdd2f6073db7a319debfd138199b4c362a4f9aa78d4af8437894f1468e64cd630b9d2be8c4e3079223177f1f0f0fa59487898c4a4dd79942d33cc1749d8d4af7d25d25344a41288da0e49502f0d50afa38e8fbf8d6b573497101f275df078867e6f372de72b13c402a1097baa302f1cc7c397fc77e9ef2931ef72eccfed454d0104fd79a26a66bbdbfdb1de62749b58e9ea0fb0803a39a11f774afa0526fd1c89117dde07a6a8d28d511194129e79aeca706f513b42a8e0c24473c9075e2722892231ce97f8b468ed47ee2b62f362de8cab619a175d7d248d1baa0299c7ad2224029a555ebfebf458f779d8da7faac1991a9815a36333334d9b2581f8242b251b6440600ac0e1d4c0c580f3011606307fb5c63b85e701db9489f1e551f08c32c4eab1d06c27f20461571d628e362c8fabad6fbab1c7fbe0fb3a782eed6aacf9feff358567752d218418a065248d4ea640f6d8e8b65804ec80b210e84c810f7055016209b0e48881d41e8ec88416747097600d9b1001d51e8e8c0404707121d477ca8f0f940e773845ae54a4bd579b575f965cd78a6863e204fd578dbfc21ef7c6b5505892c6d546b5d5915bfd95a55bdefe693b49d9f2d5d67f37d9eeab39775d7e5995a6ba856cbd613bc5eb6a1f7d550ad1d8d557372bdd9e6fb16a686acff9abadfd420d286b8e31df2961ab2b606a93499c3fafe5f3edc61fef7cb577ff4dcc1e3038f0a3cd7b37900d0c941871c30f8ecc7d135634fed1cdb2c8c33ed8f2c3564e120cb3e5a5677ead513a5d20d92cf88adc95180051c61011e5840e989323cb1c513e313a4ce131e27b2e004164e787050a183e3031447ad56e71bf31cbbf3538afaf973778fad55f79af3794e5ad163c30ae276ac2469bdaf66fba4d621cbb2c2fe15c4417cff2a5b6bfe364fbd02e19b6ac9fdf96ae6f8265bee3d095aaf67989b5007e17c871c97debf5804ede0e0c21fd2046fc2a6094a292d423b4c74d161824887094fad424d81f58127f7ee73fb595586e940a530ff30ef927ae41eb79f10789a26dff5d653af42dd6b0f4fbdca3a74ea5515616ab6d6ef55d6f77c6ed6fb4ba8b1840a96f841290d423b0a58430133e828400b6a7d5f25c9bfb604d5effbb1579cb3ad209b6af1f20c37be99f96a270159e82420060990e924802a41032534a0048b1236a8759fa5fe66f1ccbc70bbd2755fb5e60ae49e6a712cc2589f8a3df5fb6ad7b3edbceb0cae3289adde7a54953ff652770b7e4d125f506af1d5dfd4123f0e26fb0349020b99248afc4d12242b07ed246183b6c0542dd341e2060916246c748e88c3113838a2831eec7fb26a8c7883114de818e101233a2308d029620b9d226a50440efdba0bb6d4d007fabe0afac4990b134f8220ce3cb2fa44cd4f5eb50713353fa9d22c260f7f08c7e68963d3a6326996d8660a437d5c9df1eea1deda443a455ca655367f63c915bbdf6e178ee3388ee3b66ddbb66ddbb64dd3344dd3344dd3b22ccbb22ccbb20cc3300cc3300cc3aeeccaaeeccaaeeccaaeeccaaeecca4aa552a9542a954a25128944229148241269341a8d46a3d16834128944229148241289388ee3388ee3386edbb66ddbb66ddb344dd3344dd3342dcbb22ccbb22ccb300cc3300cc3aeebbaaeebbaae0b2b954aa552a9542a954824128944229148a4d168341a8d46a3d1482412894422914824e2388ee3388ee3b86ddbb66ddbb66dd3344dd3344dd3b42ccbb22ccbb22cc3300cc3300cc32eac441a89b84dcbb018d2f6adcb12863200258a6b7f4a88c3cd85e8fd0d58ad6899c72d973c351195267fe5250ba1f4c4012796d293275219d3a0b40ca5275ffe1b6d43e98977da6ff90d5d6a5c58ecca66e15bcbe4d309e3e016fbf88276fc9b71fd247a93bd62f1a3d21906d7b16f0cd6b0664b9edc3e68c993c59fc78903bed43548283d3942514e39464cb5f371034a298a0f11504ab7dedb85525aa9a5283e9818adecde369571df1a3c55ebabc9126a42bb80828815e8716ecd9e6dc625de21c7b79667feca4b6e555cffa0940ea15230a148b3c4a11543275040e9b1e493f99e08df56f8b7739c43e949031890caf87eb72fa812c671d9b5fc86afbbb9daa1e9c2ec7f14f6f6bf8964e3444834adf2209d4638f9384f9216c78be9badfbf79cd0bcd908c2d89aab9f9b4dab6c41b75df65e5b4d273fe9cc9302f34433e9be8aca04d747a42ee993ce7654cd39a9c946142eee7e0973228a599a27447f06d79dc6453814daca0333041169402219591f199c2601122fd2cef83231492137c5b974319f580666f7fc75ea9b798123e0e4962703faa0480144a694951463f50da759ec9f9b6b8b7df34f982a949197662913c3d94564151b82e847505561c7caba871f99b6fab639094611edf6f921fe2fee5d8f1b617c883f850052628103340b0a07039f2fedead99b23ba7d4240c4a57289b17a9cd071dbb3553561d0b6931e3ce4f9a3af6aea3f464888d13215338b1a9e1baf4baf568de5c756f7fa7f4640a4a4dc2c8b1e57e1c9c3a419dcc506a22064ed3ff26c49dd213991c5b526a52c6c52731416ecc509943e2c6a1f404083d5911c5608890125b9225c73cf5afd95f53f32ddb3ec9c292df9c51bd8c59ee1ff75b7ef40f735c5a2e1c92b42c3f64b6c5bd941794941d94d6ee667ca3c37a71c7a81329388ad213184ee9c90f4a4fa25889ff2194d01094d2bab5a873b5400ad028230b39b80129cdc00f28a5298a324548e9c98b8b8918363c941d3bd8233d09bffb55607547a5e2ab3c3e5c552a151f3d69c057834205a92a157f33dd86fcbea6283a463488208210e2c38dd452777eb268b2663f8ab37c2a5b9aaec91a2eea8aa347fd52eaf7554b77bdfbef0faba17a558e93e09a1a3074d51f3bcf61da0bfb84c0937b9ab8b909ac2b4f61104cd7325ae69cb9d484a4d4084a4d6ef8b652522cf8044f8916c50920504aad1abead0eb4200a8e3528ad9d695535b67f0ce7b6db16fe57cbf0c739376320ab9529b8f834dcc52cf70fd36e9bfe9cc52cf70f7eedffe0a5356bcc72ffe09f04d7d870ce39c9b2ff66219c2b8193169b54c6b078d61c83ec3e4f75eb976ad99bad55fbd40ca8163f4d5b75e8b0aa5fa91687a27fea76b183a228400725b569cbae4349801528a5abbff9db3ddf9669cb94adbb2de2084551820eb4d435294cc5efcae3aaa6cae3fec84f53891c4a519420d9bf496880527a5e9526c5dae1940e4263bb6dd162ee3acf537dbe18f43eeb167ed2f7acb9ab0772f13d6b28a55450142438408308220821ac20820842880f7f6ec194fc293cd43705e7af95d271b3f7d183c448fdd12688208210e2088a8244caaefe46df93a31cb1064aad15685a9fbe670d0ddf56ca0faeefc9bdd00538d037a01831004ae965dace4bdc2b4a114428f75219efaee456a5a2871e2af5e2f2a4e584e5e4091404a88082f067c4480521f95e2a1f3bce98e36ad96af9c6967f3cdf33b6253e552bb4e5d6bb5a8c5357e0ef3f41bce39a6db8f9b5219daab67edd7a5fed61b2b605c66e6b5e1cbedfac97b415a4baa689abddf8cb55b69ca3fa195e0cb248562b7f35cb6704e7c1d0b7c0d44c9296b4aa9505bdb123a52386d375184ed761d3863a4511e2094a29df168693429a25f6b0692dfea2ad9fbaffe4cd5ff843be6a4fd5fafa36156f8bc3393e3917bfec9ffac6aefbf38f97b89bfba5675b7e4d9223368045fe67b6dba2587ad632bbdc65890284a9b7defb9118e1dbdaef95610eca0f5fa0b59af65aef33264571e64b5d73b58e82244fa6ddb9caaa63def1f353b54c362af793e9bacfbeed9fa6b19c7ff8b9d60eb2aa6aff62f25e5caec84a92565489ba9e6e74e539fa45a11e0a8502858e3ed5536b5791d4ce484a68d5f1b6e61eee60ed6109bea9d9030af8b65429299ee7796598e3e97b7afa9e3ccc3a7bfdbdef3a7f98b50cb62f3536f96faccdf3c7ab6b8574de6f7ebebaf669ca30c7bbf9391e6e74fef753393ab6b9db07554ba5f3cdab2c51d7f2559573ce4f8db7c5b130cf3ae4a26ea9d68724317e7aeaed1b5bb35a1b5bb37ebefb222eabd9df581204522dfe427e9f24b62f377fcdfd27419b853c096298ae659ec6ae5cbb52a3656aca30279452863971f8010e48800318f4fb70eaf7cd54eba343471d435cab07be68839213a041433804a12abb330bc3ac2b94557a8323b723355962c78913386fd0029b36c50735b8218d37986aed96d8c31ef640e99050c72b37b09193551dd5b4a60d4f08e0861b67157fbdf07152b849a639283559838c8b529a047aa2063d51831a5fdf9aa770f46443990201949a5acb6038de7d01f5c1437d58e20b17cf9886e5f6e7bce30acad5ca9f04f3cfb8679b64057eaa177519eaa789419ae45567cd6d7869cd1aebe3d6ea6d62f27170a5266af8787c1cf74ff1b8f9373f5ef6acb7e87dd6a7f35769f2cb78ffee9ce7ffd86d4d8f085343d522c94f7d125c536bc6ffd9fa38fcbb301fb29ae43ac41ac7f2ae35f97df5bd5b6d8b499cc33f1e6e9efde33f8696a55abca65a332f302f35632b65b9542bc4294d5655e5d5c2c11b973aaf486dfecbf7d58a3643fb6f5ef44ceef2030d1e7c5be1e3781d833d54ceca2da543a089890902a594a49d2d4480526af1fd3827dfd6197738430e2bd0ad37a1ce9f44b75864d7325dcb3c179261b40cea3e3f2d0a0707f96e3bdf16182e300c51dfd421af1957efc6beeac63e919af071bcfb3fe4bee7c9ccc0d4d0b80cf15ca238d1ccd8d4785e97d3b7757fdb91a7a4749de79d292967d7853c2fc786c55a69a933f56fb61e9a98184d1313f357e7ff782a4d4c4c124c131313a4eeb2b4b0256a2ceaff2dea7bd6ec1f425a78cd8376a58254b626412b44d7799e97ff5e3c7ad8b49ec9bb4e249feb7beed12c4fcfa4a2b212ff41151518953c53c2a8807645e5410bae3851b955212345c68fbf4b80c312ae40a995d51df79e4c1706478b2518b1faf37b654c1766eb6e2f8c8b09066f8dc31fd2c1bf5beffd5ed65e27ede8f22478ea16934a8e5ee9bafb391aec3a93e9e33161178e4a1916e9ba0ce79a466ebba9044a6912c8b8095549d8827e482ae8ab4918a2514918438d8e4dfe770c255625abad637c635cd442c219b414f5ee39f2c517095bd4d409fe354b1d22014529b59040a965b33e89f105a51464418f185b586288e183528b8b416d8e50c6279475f6d423707184ef089e1f4bc800ebd675c59768b1645cb251eb6ebb04011d237841a9553f2374805a2bb2fc6db274bcb2b766f99d712ae39bd082dd7a41466e7f8411823068c2284011caa095c427b8a2a9387911425084efab5b17e106c8c8916a818106185dd00fc99123df098c7105563088a006eda7490432a845042c3211509508550d3a042594526b9fba0e6108234a2dd567d56721a4410839108269ed54d69ad7550e22d6891242a5d617667cb105a55ff05859d27add7a26938c8a4af8438290022ce887c40a024d106c58abbeadb9b2f84f645cec81562010b4a06fce00e1c70fd4f881179452fa8322e10f7c50860f94f860a4960f3c14877c5efe68d30332a8b5027ba0a407286af5c0432d1ed4c1ba78b0c4222da8c9140fb8a01c571b1e8c3c0882522b57acfb85b9d8db01153b4040c70b2a788185173abc5842074fa0b4dc3c7c2ac093dbe73fda581faa9f0e40a0831e39a0430e94508b6398ca75b71fe630073d3a392082521c2001072ac0c18fdfa7753fe71ff7578bf359bfc3dc408d1bf840db7a83ef060ab0411ca8f55c735c41960d8060031c1b5835488306df2f4bbc4fbde2fd04797ed3acd6e3d871f71a6c41c51a7894d2e00949a041121ab0d040a50b3974113e4c6660ade5429b914676fbec4b228ef74970d781983c99c840a491c20d0c31cd8efe72183876dd758930b1ebaa490c38d18691404bb223b0f49ab88d5d77c5155658d1757f4ff2b70903d28bb0d12612594c34b237ccc6ae533179014914418d146a18077257dcbe725bb98a357181e892380c1395c26cb35ba974f5d09a658e490b48766445d066a43bcab62c1b711325db480bb16b846522912b892f3eb7230a34618196592bba44e183d76adce85780dd6d048a254e0cefcd48224e0576848525f0962e91865da24b5b99a460f45cc95edba589e166c50c1c4d50c03d268e446e248e4456cbb4ec012627106da19881160bc327fdb571e33531819869dc3f068a300c1b914825930a9870c185a42d1b8dc02765e2959548392625b81a16922ecb8dc091086e18896b6c6342020cdcb61004ff825b38e24a181299cac3c6081193118457cb3071340ab3d7ae12b85d9894890848a27badf8a391764b97686447908dcafe0e53eafd12be59d3752aa14908b2bf48e10d398ebba5ececb6736102022c03c5ab9136cd5aec665b668285c907ae88611b27ba7ec3366b49d7aa834cb6c04677b495c04ce32ecb691713bfa5eb569dc5c4032247cab47b89b0ff2b1b95469be8b431e940089246961b71a3dfc00ddc342d66982b4c380072e015811c291369d696b81002261bf8bfb06b1b6d9cc861e2bd4663d775a6b15b54e7a08906489878ef93384cd3c22b6e57062e46d2421b5a910bb7fb23cb5716759a6020c4326d23bde88e349074afa882c4448bec455614721b2712dd2b8eaeb1eb788dcac9240b8cbbae486433ed1a71db8834ba00c79530d18589ac76c34db4656fae6c4e130b6456bbec55e2accdae28ccaec9462566c370bace04032615c830f112efc8964a97c89632130a68d9e8c1507b8b95481927b213c8c450a469d7287bce6a1b2993801d9540f049184954d244f7ba4cb0b8a38dcbc28c13319b655929f3baced47561e7ad3a46626344e54704366d0bafe73411b65d3024813adbb0a6eb360c04ec865da4511882a2268eb2ad712c297a294c92df753d638da2e93addfbefcef1be8264b3d293b00c248d4a1613695d77e4011aa934022f4bd2c22ffd5fa4b1ebb0e7f55d05878015af5d5aa895eec685a5ab647fecba9b4ca54d224930920862a5128974490f6e2236765d8e06bd9bd092a0132bf0b952a6914aa311560a452136769da77bd73520c76ae15fa4920814af76c59238765d15eff5b0eb4c18e772c9c72f5dd7753757e162bbeec90e9efce6497b1f679fa1090854a20c144352662da6612591b499704291148e4071a4bd08c32eeee26d335e89e20c37aeb461a0dd30bb6da30beb252dfb4b2b8917e32e5249bb63d7e99eb1b7894eeff9b626c6b54dfc0dbb22cb8d306b358e946152ecd208d3b0ac845dd80666a3d5eef9bbaeffa88aac64af10b4d8f657dbb27f131b91b80d2359b0440a416d7435c8659c36e2c00c0cbf341a5d63be440c03c30b725bf88f8d48a3558ac4eb669b0d492227e234d14d21b54dc36ca869244bb225d14854d3dd9036cc02b97b95b6d18b4a962391ae52ea043f868a9b65a31126621ae98a2ef6772ce107b18b1b61a5d16fdb5bd18f5dd775377ff9a36977aaeba218af18da11283e47d2b40de4ae4a96225d96e3441167efb68960e99a722e8c4ad771534b2186e26be205c11003b5ec6adc8f44cc72a24b126d97cd305178ba165573317b35d1936e692b6d9726d2426e54c22ef196b05269746d36fc01621b492b954461b88917a63dd87524f9a18b2d8199165ea3ac04721c2913bfc727fafb17db385229bb230cdb4e2a2d1e664957d3c290c4912ca87159e6800b924456148946a512186e2187c4de1747240c0bff6aa55bba63d779a323ff6156b225ed1fbca008bb63d7818c6c59a9f423d08a3714b58bc43d140d086d582a8924ce96b4f05e501cbb2e3fe975dd8901a4cd8ab68d23852296dd2b0ac7ae632972b92de35e0343510c4b250e1cbb8eb43b75fb0b47e42f86815ab689b80d0cb1edc7aebbab7ceaba55b62ad8909bb12a9f5e47c888bbc06b04625a288a5a28b263d76da2d3eba59862036aa026dab00de4384eb45c5473af4d1c8dbe54ca40d20daf68d45df7619ec92f5dd775bc444312ef5f5108da9074dd12c98e5dd775a52942522666e02561db8804daef3a1521a86dcb44a510d442f06ada5b70ec3a7e63dff4faa7baaeebbc8cade78137211433239b6de05b0e7b7b4191dd9dab60329896859825619715bde8cac2d4097ecb0254ae98ecff47a51769a4d03e775d414ae0350a4936ccc2f082e0360222126fc671f78222d145ba1aa9eba4d0445613ef757177341a6d5a9682c1b60b62e16b9b38ba594974fdb86e069238f002dfdabfe035769dea33aaebc6deb328464f2281237044b2d77665cf8de6aa9b2b9baef3bcaeb3e2e5122fed2f2cd44662e92a894aa2a8bd8e49939f5cece8b2236d2b61a1762f11bc2d23910db35176655909d430ab995842ae9489208903c54dbb2c8885564417c769d736da42d2768944a5d19469a7254d8e5b48b3c42a5d6796b8ebca33cb9c9e0b6d26e248dcf556247258dfcfe26334d242500c419b95ae9228dc4628c4179546220662a5d06a5c891bbb6edb31e461b22208722f2a91b88c0349371bbb6e77ee99de5622b59fe50254ba1ea58b7b4db46d97664b1c077263d779960ac7811a778557bbb2ed8a3878689cd544dcb68957b49138d28f5dd775bd14bbee896ebbe2152f89fb7bfd93366decbaff2dba94ec2dd9cb95c2307b9196dd51d975dceb5c8f5ede519048a39176dd9178b96c64452371ec3a95de296b34226977cbb45156b2253104efd875decdd6d3b7ebbace7402a92c8d8c28c3b63023594ca48db012a78563d7a532bef97099560a2fc86124d27685da76c7aef3ba6edb4aad6d68e0b65da57bb79115b5b0442a8d5dd7755a566aeda5b6e7d9c03c7e6ecf43e2baef89b82c05f3725847849000e9d881840e057c8ef0603c87670159134f24e184d6bb091c9e124d7c98c09e7b4d542796e01e05781270b3f5362534c79144a90024b6eef608ac0923c47e1681793f7a4a20601325e000395ad51540c48d0dc3bf318088cb504819e679a98c476ec7dac929cc99b881790ab09f204056ead0fb8ddd88b8cc0c9f8f06f0c4101e0e01e41022c7964b0481799af43479848d1a001c000001e1f901f3fab6dd87fea91c27d8be241ec39ef31f93cc5b89783f8ee7e1a004d88110763082c99736ff20841dc8e04398fc60080150269c41c989d21b441ca12846ea604300940967e0e24481f8c18713541200b8300e4894522ac40e446080901d82d8800d0480833c6011004a8138a1277c5b2928640b0a79515abbda755da7d63079b9d101e5db4aa126621012e426007c5bbc5bee9127569cd8d8dbe5d3f5fb784cbb55f9ecba4f0d142a7ea0540915c1177c631c5bc609a97fe03fec1fc81ff00fe30fde0f53fcc0fd90043d3139a1e06ee2fd7007d567207c5c918f80403d4c3dea27e7624f173f4847b367baf8416aad351fb1a2e65cec7deabef7851ce0008815e81e26f14920720f95baa3e6273def92da071664e087182028054013f8ad3d7a849bbf5cd5f48312745094db054a6bd71980a2dc25f4afce14880056433dac4fdddf1788ffdd4106d8c0b09c502796aa52732e8b145046d497719f244f194a4f72562661601903c9295cb39f9ffbcdb3a60c8bf06cc835041bf224f992f3949ea82e8989e088332479ba242642e9c949e949cfa748e909bf98d2934d823895cf97ac652ea527557cff1d66cdd2c3531642e9c90272fe9a9ba6a42cc26e326d65f70635b98215c98a6845b6225c115191511152912fa07828f02ecca35bd59b5abfa935c9ab4ca8de2fc957552b92cf3f4a4d967c3c192623c5322ce29285a0c499acb1cbee59c80c499e2f6f57c24b62226378c6689dca58c62c579e046dd73297d43f5c2ecd193e0da5270ee85b9b7a6721d7b4dbc6a40ceca424f776b99971b1a1d4248c939b4cbb9be8848a1b4a4ff095ad1ec88730397f330ca527bf7a20515c128f2c2b32cf507a326e6b527a92da27891251abab573ec47ac87ee9a752e7bfa5ce76b4f9ad632ecceaea958eb3104a4dc2c0c1a40d711ec3b7e138f541488b437c4f29a8b830ab7ca2f4e451b6b4fc04c2a5f8fd97d2932978cfbf4d5628a535323330362c3242a4f08a9c6274ae5b6313942268f06de14e9e650a8693c24f1b2720e52695f0876418ce85e17c4099767a2ae8e351e93a24228cb49954c21f42cab0937422b9b24d7422c9b44c3bc14021e2c2b735f6055ce0021da01da059d02c6a70027a2305a540508480c1b7f557635350ca011f3253356de8a93e03e1518a07141b1f882c2c143e0e49da92c70cb95ee80106cac587524a023a43a9101f3560502a434510820f50fa016ca2f46600947e3d50686610ae76a84413e8c64d0b191a1200d00400d310000030241a0cc76332c17040b30f14800161b45cac601f8ae434c929649021c600000000000000400282008ffd825304b54c84d8116f802f1f54cfc08fa489d45fc0eef7a97bfd5030ae8baa2b6c7f21da5491994f4e6530f21befa188f99e1bb50d136e14fd40321b8e2fa0e98859512769c340eff282a7bf7342648a6e64765bbfa84695ea82097a2597f3e56068a690b51bf4522ca3a7262405263a18c36db737d508c2485a8d1b33b9153b5dca175de94741f89096b55563074b985b6b60eed7e45440a4ec027ac1138c9ea9f9d6632a463c20cdc6f9352136e4c575b07c8d6955f6bd67adbb0e369aa004cad9dc65c3a5cf3ee98eee43b49f7332a460476d9e773751ff726a5b44b9fa9620d32dd55d616710f92d7424918514c11fe5596c34ef828d65b42b7807d4f449b8bde22a1d3d84176ecf424df15ba4f040351fdf412cd45d167aa8f8d20efe0f36a82b4a51a8472c9d9a6ba3aa5a32a7df5aa35155f8012ed0dbc76fbdc17671c2d343aa4c4c87067282ba90a725f6c768a7336ad0d4a85ffe4ef6f9b800e733499fcb9cf92856aecbfc37168e4a502cb4bb3dbb626728e94a7bd2b25f91c68da9b243f9a0b96b0177148a6920a3ee858b439e17d4d70195c8d187b68a331b32e5c6d6a71edd5943c8b4280aeed81380d5ce91e5364ecb930feb226c77f46f3df9be22ba7a1a5f34ad371e24376eacd44b6fa9d04b8fb695ae41c63a0813a7e489c551239357cfa52f647cd4ca1e40596d25029d86cddb1a77b959cf452756077adda3acbbffedc3ffe71d8125acb9ca127045ae5dabc19ef88ac717d2e42804b59c69a45f1644f9537df5c809345b13ab93f242cf6d720e127f76d77fe89b29a59b40340522af28561956d1a2d35bd3bae067a3261f6a991ca75c8c260c53baac6a7f926fa13da247ae2f14171c4f48128427eddd6f3fb2b69bfdb00663a02fe9f9ab109e81167c37c2f1e975c04f10d5a48ae3900c235a4002270070cc6bba72d26eae66088aa1a88d21ba31459b2c249265480cf6e9e7ce30040e5d34c26d749126a1fbb2de9690a04e0164f81e751067126c479d85dc25f473fc40ba0302193d884e0ebf591141bdf8226490bd364155312bf926921e4ae2eb2547a66190516135fe99e4f1dd4017206edf59f31b35c1fa9ac1a815ea7c060a5946946421c38b4ba1c6408826cb398c2928691e80abf4270ce9a0164417c54d1d6bba012f191c4b16f86e2b7a31ee4b46203a681c7212fc9303c593a2630811876ae522665da3ddcdbe5a3fd63c112026d933d2735511f74bbd20ffeec7ab551d6134f305067a9ea90774e73e71e03ff1fc4f778182059915ca9b544c0fe20f9c435235d73b62a2204dde6e5c1e25bf8ada8d5fcf758dcbc08f2c06960703d4d57abe75b689f8ca41e1986fcba470b1aa599a678b4cb8c507b3e18cb6173b750f6a8d597f4afc97b6ebb52c929f5eb2497d3339ef17befa6a99d93910bc962a4f5b2fb52c29da3411c137920f78edf145433dd2d981687fde19457e3ffb596f084cdbf4db772f53834d341d6f177f3a56cfa08dc4203a07996a4c3387b54298bcb41ccc0c1e8ff74b35418c9a840bb5199a033758cb4faea0fb559b8ad14d6b3ffa3dded374adf6349507b613079ed1d7df3f4bd73060267a09d95cb530d2a5bb57183f4839931706429188b23f524276d9d4a3d2382b31b69abe998b5e7a6df514688b2e519e4444c2f6c4ca49d2f55f4c4f175dc9c874a07db1942c8035406b9ed460b7130d88d36f0cf42a74fa90f80f9f8e77a34ce4ba796b291fc1936f07ce9e375b570f84025c73d802cc570b90cbd5df8763384ff5c29c02d5c300fb6bcc96152804f19010bebe6acd43634e7ae1317b8ba116c528e2987280c8855e59485396ecd50a61042006977ba0446bc81204e8800132e23b1f5a7b884e51e757e1076a0fc6d0f4744b1f335c1f04e4cb780058bbf4ed66308ca2e57afbf1bf1956812d4824084363d970a533948f2b66eee6000fa0e7f5091a9ddfaddad643a2391bdfad19d345d563a54206445b32c13628005c151752a1b1a446e7fb3ba420144f953d7028d3903ff0ca94469870717ab3aa58469c1b5e0f434bf49eb936f41b70acd288313014ff6b226025c7908da8b439d55e76ca6f1ea214aa46f947cdda15e68131f9fbb74a0e45a7d1326df5e015e4157190e969829cb4df3f74cfabca8123c30f505781b6e8e563e8762e5d28b9ce129376e1cb0be3800abc5ef93ec641206d8ffbc3805356b5a3ff0927f346d07aa8049d6c48b3355ba9c4a4856c1850ad74ab22bec3e0cdc4a9354e875cee2b8ddf1ca5e63eaf1a3f2368285a52e29edfad5ae99ea4692c491ba7a7fd1e93805c038f5162d4eabf9b9783f96bf4f5616c43ca72ffecb7f6464ea4347e6d5701af5fa700253783a249d975461d44ce1e4b9bc6bd637f61a657b1c794776042b99f23de9b0ec6084c17da655efb7a9f791df0c7aee81b2fd22acb360b9df15cc42af441b20c1b27da5ce69b6ce5e169af86ad4032a06e7df9c4c45912f6256f3df41f0577c2d6e4cbe3d7b7e41a8d3fa44a55729e2aec7d7e33b10bb64c04624e8da5344d5670d2f8fed546ccfb879d88b7e1315d11d478499c811fbc18d1a921e9285396f97042910f69ff4774511665bf8968a2eeb4661466fbed87bbbc17de85711a9956160296431ed6657e7ad4b84ae5fd144df8762fd788dbcf70fab5279b5678ff671509e8ec35eed3b8cf16b14b9eceb2db6bec5aa2c86be8959bef0a6418d723a760b1133b32e91e6e6ead497d1c8a7b24cf899fcbf91be71899f0a91bad2f84cc614faf691ffdcf0bc031d7755b61c42fa76dadcd102098ce5f2b39b584511ef1f4e23c667500b0d63fd6e8222c96506e0e5a28f7df87dc6f049135f5423e04c9fe9a5507fe0b1bf4d3f550c16c6107e48c85e2f157687ea84c898ebdb5171666332b9b00e865241111f9caf6431f0f5f3f2703de647df45c286fe6241a2c028ad8c19ecfc7b73c9240f0c97c348b57474029a3b86d9387e102caa7d0a1ea176204fcb0d6bb85e9f1a8e0d983b372e95963581516a5775e9e7b98dfe0c9687c19651593049e9517bac1ebf194cc3f51c01c307b0646b86c8ed44c2f0492ce92c08f724861b526c5714169d0dd47586f8bb4074af327c47460cb9f23d0929c39860bba862536a63159a06c6b0ea5139a40c195cd59a509e50c3d2aa0ee64801b993852e6f024cfd0171a1331c99d8ac9e5858d70a65c4d61c6c3a082fb2934d6d960e3bfc717fb027741da91b4c348a7343260f70265fd4e511650b5a72a3db17c1bf7fc48b742e6595234569ff344a718140b6ee44986835d2b0bd40fce3814e5a6717b17b833588b1f76b01ae7c2d8470fecd8da8ef03c7323d043dd7888bc30687ea5f7e917c3e3cc85bc6ee33d8f97d101d005172258eae885eeea42e2c4a67b8433b239adbc6ca0db58b75e8e9126afbe7a95f078734dddb2fc15d60a5eab8527a60df0f19d312167529560325d3ddfe5ab6af2d195768844c312293c261136be15a1aeb602176db2743b3248668fd9a795a58b72469e6a619305e9bac2bf163dc0568e3d1667c2f03902d0676038031daa21a3d75315720bcbefd63a288f31d5640110db0f0266fa72651530a2cdb8164925ee846af0872eaa76237539b433938aefdd679ab272f06b35d11fead0acf70a92616a0b13c11c9edd6bb4eb8eb4c0fc810d14ea8c9e846797ccc4099e20f2d58f33d9141fa5b642810f0b7b944b55db5877cad9c8d6a978deb096a7c7632134be5ba98a3b7f6f0dd1a10769f96f7aa225a58373c569f6a3057dd897a3eca33e0f91051a1b822c72674a9803574ceea939e1a6d91ffdfc4a0c30b016ddf30688e6b4f1efa0f8cd62786cc8476cb5721a958a02c7733b931b8e2eee12da61667c3b3cd14631368a65e00e70429edc34848816f3e6ed1b1bc5631672eb7194d9c1ff650bf2e02d55846d978d90ff4bf4243004c74a18ab18fe180e46caa590d0e5c4098f4b5e3e1e0cb91092bb412a3cfa18dbc01d38e0cc850f39954e26f4f79e5a9cafb7ba89429728384c62131bc6c67b0906990aa87154892812bf3ac21ac4abf153265cd308adc7999f68244c39f85ac47cbf4437526e38b6676d8e5ae5807913d1adb44f0f8be61d0cfec558cc2c7a5e924c056104b1234f4680b4130f837e0dd1c8a606aa4c2ed4b6f8c0ac9f8676d0d694f185c95e71ae4a3d0af0f66fb34b3311a79b8043f35a4d77cc4012dde6d73854f27561e0bb2503d8d578cfad3344996bb92b75797e8f9b43a56afd1e1b3fbf3ca052096322def075e566132d27199cc73e54d1c51ae3bf65a992c3f6553e55cbaf65d44906d86189897e6f432ef689c180b701dca4ca8975e4b33900df08e28c63b61f93aa8681f76c59107f3e44eabd81f8f3666fb0fd352a8e1fbc1794ed07fe193ca87b9750b9e7b67d2df80499131ab4c22c7f5d25003a9144897ccbb95b4c08db52fbbeee5d1b27dcfa89b7ce8cb1c84f672272594110677ca0a527a6e946bf1d2bad34a441c2beeba38afce8d927a02be6c2c89317ca79227ffc74b751394d18fdc26da4ebed22672fa990df1eaef588b50e590dc24a127031e0c621e9156e9d8bab4086e7efc703ef3ab3314c0d27a4b686aa4d0b8dcb5484d96eff5aeb8c861a86e1dbdf369a37e90f9dab1bc667ea88b1991d6130ab4618cda421e3b33490c84c0d25985d438964c3301119309a08ac0f3dbcfda3076ef9f0a11b1f7fe8d6c71e86f5471e46160d4bc46634a230591d7f6843c718dbd20123b63acad0ec8e339aa563c667e990a1191a676896c618cea241a2b36894d04c8d2792012309658241e2307df4d8cd8f3cb8f5238f6efaf0f15b1f78e4e6871edcfea147b77df8c88d8f3e72eb430f6fffe8815b3e7ce8c6c71fbaf5b187b77cf0e82d5d37972fb6ec945bcd6de3699334db85d82cbbe6d45a85d5a6519345804c3090101960480230f9c0436ef890076ef28187dcf0210fdce4030fb9e1431eb8c9071e72c3873c70930f3ce4860f79e0261f78c80d1ff2c04d3ef0901b3ee4819b7ce021377cc80337f9c0436ef890076ef28187dcf0210fdce4030fb9e1431eb8c9071e72c3873c70934f1d97541e1d0e31f993b8d3e58de2ccc917c68734468ed7fc80c31a3e74002a7f69e3eb2727bb776daaa65c81b3a94365e65490e11d613266d4931849926840fd9e69bacf57e62d9717f06a1d3388ecece38044a841206246482a22d7f47da933fb4f5bd2ca47b7081e32acc354f02e12d2df0b08948e81996cd01f34da1d0fa03fc9e7d81d33d933c587f18ae1c805586252a99ee132938cbb1799d4e7cea05fd4699bafb22a1eb6559dbf08d09d26828da6574a5883eca2af51aae3b85eaa3b8e2dbaa8ae5c38defbbcbd768913d09d1161544044bc2a274c9a493320daf535771105b813740a73239579537bc9b2528dc1ae05d679fd462722a7c078049cfc91af3d413374ee1a868e14b4f1d7d67bee405a91107208aa0545969d5e60d723bbf7a3ad2313fad24f7534249c87f49f420a57389d00abbd7c4f2404e6e3a2f054092d7fc04415960d9e025cd8f1a021d3ccc93c9f55bf6d20c806e886575918a1cd2abf60cc8222359d62f15d7641559d57cb23d21401186c1ad47789375ddccc0a64db6a19f1286389167abe9f85af92fe92e820bf17155ce56381e1d9deeed936d894e2ddc2d05baed72ffe5784766c84382d9466efc2bf336a9b54cf9150a7abca5200203803b22e1dadff767d96a4299e8e2b2dbaf80c14bbb09e7a9f3dbb2b908ca5cbb12f151d17b0ba3918c205fc16ac5c54346e3188a7f29639460822b6f6817e4f0f6a303a31b0e1451f04cbf3f147893791613ef90802acc6ec0a039bf81472719fc3910fe5a9205108673874ec8808d2f76acf52e8d3df0b96bd2ef0407c49491c74167d842046ae6f175edf35790838bcfb6a39e27e0a041178e57b270c0753485f553ae2e37f62291bb40ea13c149d9418011b2f341c0c2398efa08749a5a728875648a5127400577c9743f3fb4e0ad5d9e51b2b0217c61ac1b7c6d11d0e5a088c2504e3ed3d0b370ef40e5a169468f4695e29a6d1d163427f3847f20165d5042fea6a20cdf986205b09d24098d846e1f4059768e7ae55e7a74bb75f845373dd157bd740203266e5d0757c8d5e4991539c02ebd58722401f342d15ccd20c2c4ab4974b5215fb1034bef3d1131380912d3857f0de743031019a3f69780e61437d4e5aa1367f6cb855d637e5e5010a115bf656b33a7cba87d9437c382b1cdbe6cfb83ff6594986ce8e96c4c8ab0b636feaefff0ee7ec3a0a0cf7a2d30195d4e4980f217398e9edeedf12a96d2921db8b380d7b181896d3fcfe3755f93206efbb68b3e457f79f6bd1b09b78b31305f5f1a047be884704c5dda37f1211077f12fb3803e8bc039db96143672fdf4194c3393e2f364a1feed5f141f073b5ca4e268f34fea7bfcd55d25624ce12151a312ac6a646c55835c2deb8437c5f8ccf7f684d29855ed191b257a001ff47f88f41e08fc70eb4ea6af723883a7d338196b6c70c7ebff992c5604a0537b6fadfef554a9a04eca5c252a2be6bbb351155305970e6f2c974aa73af10b8c066e2a99d6c54dfa4fcf60351b805ca84dc72a73b77ed85ea6a29e9c5a11dba48f0a708fd364fa20de1ae29f4168c1039411f4161b08a6a9cd3b9b9079b62a8d0f4fb4189c5ed802048964f7f1b68b823ef9be2028c101b3e760125529c74c0fb52a9b4d73cf18bbb02964a0b5f8f730b6d8a6224dee5a505fd36382613c380ed1e9c400c77b641f99d34c64e163199eebb907ddd9a3f0a221c4db740fbf3e1e9ae7afa7ed6d72a44227f1c609f6d4f989e2464ff826306ac8f3766e0bf5ff1eaa519fefdd3964aab3965e4bb1e7720baf5832ebaaf0685f0bc516c5feb5e35c91c0aee24d14ccdfb939a53189a8821c829a8cc17bab7d99ca1b540b7df3c27f370790bc2424dafcda58e3d22253f38ce965054a143b700be65f090ee37ba7a66e48a97fe0a5bf0daaf331b5be8c7531b4d357691e3646b4da4d502476e46c5255403e060c20aee70d71de4789735c12cd31b377207d09a66557293f3be0b51518673b2a2662e0e42016c197db3058b0530a465d86699d258d2a0f9a09967d8074aeed9172a3bd6dda0657205e17158ffe1ac13860607b256ecd61e247ac635f622a8ab9b84d7cc4eb3d57c037181f056653baf0dd3ebb83e86e54ae6f527ba9732cbd1b680c4b3ab20093fd1dcbcd0601fea56a97aa5ddefefe89a6f626adbb8a6a790174cc1ff5d866580af804b04a08b9e9000f44dfda3e816ca7e4c421ab9b8a079cbd5bf6c94736774946e5fe8b60e801f0c84191094e5e9377e55e586f9bb9b4df5c5c22bf6b1765dc34ddbab600d10e32d681b42eab31c0a54442f4beb89493faec347dc1bd321b0dfd369219b868ea079a361758e94682b3437427af62c49bd1baeb06341c040c5e324f94814378118bdcad0d47b8b686f30426951cd0dbbd8351fb4c37a9deaf75ca664e6759f948b92c8b36836d5adec07ec41b87fd524754fcf26a6782cc8dcd6cfb2cec5be5eb19817af955eb7618806cf26021b03db64eea0ed414000279f958acaca39b1c7b25be38cdc9cbee87e5101a049158d6a9178c322419bf0de6eba4674490b6327db82de02f6b4ff05d3f69eef99e50c38d4dc2292b83d528eb23aa00ab070f0083326a40b0ae7b2f33a8f5485627001aecd0d53adf26e7428bcfac8fd286da26e69240f6fba2f28b7b0639134286182d13b76b22755d028611b41d93a6bf2fbe67f28a4e86410106cee565987b6417acb72f4696a114a00fdb8270095a275f02c9e7f8b58e9494b70501d8840c61b66cb4ee581c10c72364adb87d12ba60e5610888ad8de5d2192dbaf4b70c729349d964bf4bc76972f74fc963c31333197c8514728760f6c675d635d1e72013f9029c46be41a0e61c3f511901fb2af0bad46532f13a7f3ac3d18371812ea15012579736ab927d548897b565927184e624eb3bffe83b2ef01f61c1f868d1cbb1c5104aa3fdb6648f5afae7757428a49e1e23c9376c40c821a5905798fc492137d60592dbdf68330503eea185d8d183086fe7813a94b4662060ba83623bdca68133de4d5c890bf9f62f3677f2d25a7a6555673904268f0f20598951055ef80cca95f5979ac447cefa77f87933f00f4f3af3a42506624b66b8edd488dd28e860c89f7900f1abee4629c30285bc5cabf9435e3510f2161b32842cff9773d3de068ef15ffe64668fc51bdf7a0f19b43f4fd623f75994ae9822d8e88974e4bde74fb6a4f5b7f0115af4d789b97a245bffc566617377891000caceb440705f546e1c1f12e989a898d85e5ce5b17499b25d79ab8ab339b26e6309f261eaf24839d02c55b87dabe0bd6e80d102080816a23f53170351368dbd6499aef1ab162affffbc9dc0eeefa7dd321def96077a6a5e30c7749acf8635916e7ae77670c3ed8e2d013569d1ecb3cf544e6e1357433f9a51b5929abacf15a1db045b4110b28e2e46528d3ed3dcbdaab3a433957fbe68f38437b8cf9c5e43dd0b4a202842fa10314662d866ebdfde1860d2fcdfe175101fcf23ebafd080fb3db86580ff887ee5f083beca9fec33fca37356e4f87e967b48e8df1b4f72dfaa1a544d548bf026eab5e81afcecc763c181a6a3753666137b7aafac6d693f5d6199a972e746712027cc4c4a998e0843fe8cb47e8f7a44c2438afa007043e38e837cc8ffcd7d3d65512a942ac05b167e78763843e534afbbb31c8ace0f53e047c4610e6e069cbce16169bea6f0f661c3a2c4955bc0fc1b87e67f43df39e57e2a57f9817763b74ef9d42f9e0095e314e4c077f743010a0ab9c9486d1915b1f0f60171e190194db4c3495cf9ee2a080af2d1e383e56b13d39770d18c403944633f76637e5c32701d6d5fed209bad8a2911457a8038ad4600880acb08e4fa5ce5db75d3ab4ff3ad46f88dd17b12dcb7d54c0c26db78d8a32f26fe55b7adb0cda413bda7c08599adc774421f45f60cb9c0c3743cf28d3567083a8e146d01592b9793615883415d4da2ae5872c67d22764c779bee0861116a69e00cdff64c60acd1918e0d86c8f14c734825ec548f44decad2da7d22109daa01d96f725a1bf38253fbcc50b54142da05f618de76f12f09ab81107c829bc387d5e43bc49672d4e472b2513ae7f0aed79c5cdbeb9ff53b3f22cfdc665095c80c8c50d5e52ae0c3c52253bb1c04be8cc1fb91d904213943cfdea5fb9f33594b6d173cc090c28735fdc8a9866f84b9fcd9e2d28838292e69293aaa56c5b81ee4bd5d14feefa7f6e3311640ef43967677fd59fe4d39c25c5798f59990488b738ddeca67c523a29201a59f9b42654b4b09f2943f852b617571aa8b1f894bf6bcf5d45a3b15f79a6d079e9d509cca05afc45a84b776a146ede397f556e94ca9874259350147e486ad949b9361c1d6ba95288a093450744fc73928419d8ea393f4305e3ef8bab836cc522781f399bfd3876e7152b00decaa536752d78daf8f54aa148327a7c8b6e2dc4c9d842c0531c6bf2f0a75a69f1bda05f00e72cb3532f3c6b80d0ef6bae66ecf74682af77916d488b3a2bb69e5ac44bdebb69e2ffc22ff926ee88a593ff017caa6c162d033bbc504a2c05f16786ce2beaa74404a0c26abf3d7369bb2d9c97382c1176ca84629689983048293ca8ece0583bad0d499a606b503184b688f7d995a2bf8066563225f839f0d7341137ff96d3ac6632ca73a10dc142496c8f7b55dcb43daa49eea2be6f5dbeff0793050e87ad57e87abd1bbf3fbf9e4fca236b10df966dbd4eb2e137971e69dee64cfef2aa0e993a1bb94f06d75cc946d4d70530c65945f131b5163f93a5c82207b3720f371dacb9c82fbe76478b42c7dcebc9d631b929994f4be6caf8f709685237b0100d3d4d4661a26865358bc047024ea9e54f10a2d1b612ece4b7d93b41207d7042a8a52209c262fd210d11d4a4e93d76a5b013bc693cc68f6e6fb1a9d6e11118fcc136d4ad7b484d05f1d0cb372aa038ef7b55657875c6925c2cb0e003742f043948b4a44e24c67d4aef9e3feb49dac1c1028e05ffb768bef6eec8c90f77e1ad6ee9004a96bc6ceb92a29d3cc21bf675cdd54b3ace320a51dd31784bf490b0b6b26b9262a64f31fd00476d554dbd2bbbbedec0845dcbde1a4bb81fc5735919582b79660045f8476a6e7e3ac66889ecaed1b9caa1a9c01987fe156c3d3eb28a92c903d80c54f1a904cbc16805073da47be1de98662c4c76453352ea458e20cba26ab99e59d1c1c21e2a0280fe2c01e024c80785faa98e4e906cb1ec99a983e3b14ac47a5dc4899016010ae9195751978a2b5d4ce72c03e87ef62056b56a8a030a543242b85a9438fcdc180c33199a334f37639bdba4febcc1cde8beb90a68be0c7974eb8adb2876a0384b4f85f813434e1912bdcf55708cb832310a03a114405f00c96ea378255a5a4b37ad097232ccb31b807abe1e9d7dccbbd2674b705d59479b53eb0e10e41fe5c140fd8b3ae7d106842afad2a6b383942597c246d888f9188604ba9a88f060f897ef1a453054daf5b4360146a9a04ddab379afc2cd5060966ea45ef5b3ecfcc16b9f16b1fcbbe3bedb253b5267b623e29221ddf61c77ae040acc47cc3bea36a86572b2584e7904d1b6f379b315bf2ac2492a1876d90874bb45ce2d791ff043c6e4b1b00d563e9035df9a9c65884a024e466941ca710af469b7282f2c960075be24183f136df15c3d85d15b81f04c5ff9039cfd5cb1890ef8ed6e865bf39810378fe2aed1900b1bd2e110b33b7c5e34a14a18cc3f6cc79349bbae63177a1a56a929fea261b5e0d270ea10781ee3abcf7bbcc8bbb8665451a1c056bd987ff2cd22459809223dd73b64cb29fbe155d7f553aab424747db5501be10c10a228a51478e112de4e6954f1892a015386ad6b8497c0b8d7807dbf6feab93694237c64b09fae08b918226b6957df54baf97fc59848e212a804d6020c9d27601178f13ffc6e94a03dfe88004c6a9273c824620d4d796274856b2ad4ac476f6086f4c135e7a3d504971ab91a6b521b9dddda89cc2b9bd6c73f1269b143d4739ae948723b985cbba1789965ca5f6ad2524123607540be501e8c74b4a6a1536a251ee5c02aef1971a56a6581d784e5aece73d122e88dd79e93456407e5987c60b214d9f7abe265da417aa253b6d300dbf08e5b9295e26a323a60095f7d878aae3a3d57e38a3ff59dfde6fa8007daee464f99825be1d2451f200727f79396b3b1bb67bb867e2c4898520ac4c5225ba02b9756afcbd54071e06ff1a2a6d6b993181d2be1eef7c4e88a1e4ea3618d861a252df8a33cc35d2e8bdff834f6c33935bc66ef7e342e38b026f3f9f34abe94d7061aed2ae4286f4635009a9657d7bf3785dc5d06dce2202072914a8e9c31e3d01e17a5d1f8a537240d4fcbf028354fe2c142c3bca4be11c4a9b044f8232cc6224fe576284181c08bc586ab39a9e19f0b6820137d303f790d260d07bb7ee8022d651bd1395e14e1e68d10c9759fcf11c96b186fc3ef5997159082f175d584c9fda1f33965507243df9ef4e262f9077849ba776df83a0782db5f9649de5b0b3d05b7f4c3f4b3c9e82e9471ae3d9fed4df13f1d97a55d5c0678b9d66a6048d30f22b5a661079f36ed5e7fcd24d068a20ba35198d1fa97cdfbd6272e2d0773ee2581a56244591751e595b3fca0dd92129413ab1a314334cd4183c3d4d9bc7ec6edde35a6238516f8a217ea3a98132f3a2c253ffca05c08e1e9831ef1a8f0fbb0fe4611696410a30df5ad511870bd099860f8fb53639ffcb01fd467964c57f140b345018f8440b0a0dc4f356bd03db40ce8259e490f0df258b8d1b88e324c15d6b487440eb5e5210d23c64f1d886e0587a44e58e4415b0d7ca49d57222fe8ed7391ec001fa05608af1c87a79c353973b836b437862a004dd1d1116d88f4665a924985add02df27a7a6b1f8e79f9ac0b9a7bb0090bccb8983ea506f178301e035ca174425daa2e906fd2331bdf067687635481b8cc414e6f18941e3698c9b0189c0ed24351688a65d9a8a805ab5fb37c614ccb5592b03b0f3814e39d2e2327a4c067f9885200f77c827e13acc6428775587d27caa9ad6bb946cfb59ed8f1eca96022da2ef90c810ddc58bc0c777ccef8bba6ae3a10a19e6a27ed95d3ee2127fd4f9f0b14509ad2062578c8bff1bdb3f4ebd3068e21cdca392e897d0d9acdbaf2d2a88307f474c289839356adc8413411fd528b5031cd94c83572d33d890098079996ef445add38332f29d76cdb6463181b72daab94aa568221febe0029b266adf25fe176df939aa75b11b65fcfe4f716a399fb1ae81c5355b517180b030be231f11b1a74dc9f73308df70d8a379b08bece614363d7d1177dd8251f5c365ccbd0e128dd96aff40bcbed93c132ed144030c74da84683c8cad3f8bb98c3baf529f9b18b4d32148435a2e4a644d904cab98a20642512cb8e54276003894bfbf82a3719c6ac6a336db097c100722ac53cd9475e2a0060e27cd9b275b21f13b3eb777fba683f6eac3067944024565329664994de0eefeda6f6908d2e5fe25933756e1aa9777298e17b0587308429962b027c15cffbec359f67be8248ae097acda8876f9b7651f775d9838d975135859ee6f80cae45f65248f75bd742f59a1beee3509d7db8bad8472ab03388d8c86002291f739ffac6595f29706dbcc3367dc8436ebebbf0b6e9a51bc36544b1142ba0bade01f2334bbb1da5e1e5ccda9d7d0c3d352d9811f4833d2856525cf3e0813fa1dbc4a6a3e268f0aef1d11d8e86fd235d8fa07a77a2b75d6577916800c00872344659ad91cddac5389fedbe6fdf6a098cc434cfe204dec03bcddeac49490c51d4404716ffb5dee85da7cd6fe821b72bc61f574092ac3e92a6f2e7d49995e82a23cb51aa823d710075f99dad67fd9c41275cd97eba6301e7b919d9587a13e3b382c7cbf6b7c99475ecb27964716ed59adfb6814a0428613d6365bffd92a3db9ef941732f072df6972d4bd105f262ed15e1a58f32aa5d940614b103e8f22f44ae982e1838fb3426d56d36ecc3e65e5a2b722e2d75d9e3548784128202b25aaaefac7a8da085107c77458799b98a93dcd315b798f6adf41dd88a593293cfb8af327349714e7813998da84882b1c7627cc2e8b5002be1209682a807e0a64ed52d2b5b0a979e8241a9db02834d8a7bb9280a30ba6e7e8228beb5dec0ae58746ad3c6b30bf9701bc3a0fc747a4a3278cb3c89090ba3469b62575b3593b0db9620fba630da5a852190c34fe5b781a1bf409389fd5884bc36204e81d25782640516ebd5e79ca9692c424667cc4144d058ea86ad2a9dd97e2b1ce6da3dfc0bf451a0ff89dcf42d55a456d4934c31a470d39062eaa37f13a11a72e773db02ac861f878aba6333080adfaa1a3c22be25812e4ad60769bfb7da0f0fc6d961376074fa9f1193f05aa4172081dc20a7106df72fb6a536783ca338bc070f9dffe25bf33dcc9b0fb4c72e2077c18a73440b310926bde740cfb5fe19bb88dd7173a12749332cbc8885569301ca07c6636d94efcd991761371992442ea68625c345220869977a89f4b47b17380f86fb02b39607b856668ad771d5a1f20a5c9b362e7ead89b3c63004358cc77414d30c4dc351f579ae3e182524ccc9e84054a88532e63b0ef3c0578a1f4be901b0e65b25e81b6ae0b5c1c6258e2463cd0cac8e96e15347a433afc389c5c182c546949c061a330654cde0f947149aa89868d92b36be9422bd689ba0512a5e4ec43bd78a2b71e464b40eb1e19dfe2056803413eb4acc202c9d758443d4806b8bebd2da1438b7a931fb75d257990f81c5b76ccc8068cdec7c99c28d89be9bc8621dbe2ae4d5cd055a918a156ed575135a46f5a6c496d70a3c3711f2b6bc98536a03ac97db84fd03d3543772fc94fea7dc2a5658016bb6b09d08b18d39be359411a4fbf1912eaded031309b4eb1cc4c02e0b67a7a1fa098046eeb2a46aad05a06434866fac31ebe08f6c59bdf22430717789514dd9721910b775d03108efc9cd4f50af4fb25cad33dcd1152c0a0cf1aaf1ebcbde7a69ce97a571d7b1489202f6484dcc201576e24eabe42e49626e74984868f358112f7a69f020c35c5200b498eb898479f9492cab10b48d4ff2cd5e99770ca067df39d4af2c9f872f2ddf5a8534f6082c0c48491ccd7e5ea88fe2b48230f7f4fd7db504313ce504477be3460723f3f45966b49b263da3447dbad41c062cf21236b72fb964d1b4bf251ed27810371cf0609cbc565d5bcb2b42d770494df119c7c2e36b3eaf7198eae1d13a9ff1b3c27e220ea720c75992adc885406a0daec277e670e6f2aeae8e9622bd5f97c280b5da2342e82cb34bbd9383ba48f28affd15fe9394466a103fdd2b61d56d86637061f7e1c257bc1e258854d017dd6556282966a8611ff6363d3151e198c4d1e4aae1ade30e25fa9abd13414001d37d00d5b9424b061160592cbfd59aed1c95b9f1dea0552f9b133bb12e67c541465636ec4b4a40423ff58665491d92ca1e4fbeb301050a8a5d60151588e72e4fed026874109fd35b4cad7e6a6969c05789aa845c0fd8b053313adf87755076daf5632292a75260f6f1fd59e1aca539774075cc7bb0d13236d925952714486440b025daadc8ea34b91688573b229149ec65ccf268ef481d829a01ca638343305b443923a64629244f066d0f68d52c3978aa097537c2ee61908a7376b93777c1272c524b819f86ff5f93115d7b77aa7fa2ee0f71e866026ce7e50fd9f62c039a68f2f3d2e55b544f93c64287df0ffe4db1bdb9fefb163fd6de91cced0e823030188876dbf8901a94ae50fb7c322e0ebda6c1449c4c28846faea0b71e86b732c68e1fdda299260f8bba571045d071de08cd2a61e25b3f8ba1e6e4dce751b5a0f9f5fb580946d8de21bf33ffc05f07644c26f37a8d0a534b649e905b3ce3759e822ea1f9817cb7332e53fae3563cd2e27c93ef29bce44e6b199703a78f3f5c5f57c8c4967b38ad73c80149c5ac93bf61274b51f44fb4a56a572f176715b5d7a517daab59e09f99a3b6b3d2bf0ab44d68af4f7a726d8e855e0d6775eedb4a27547025e99885704abb25ac0dc9faafba088a975546b3508db7b85acea757259ec45ccd9c1033b2a5ad78ba1ef43856547758a43edea66decee67477889afa03b8c25ac0dd87cf0702d5b8900ebca99628f38090afc54aeb5901bf6d37f240bcad74df915ec4172284ad4ec1462fe89ab10cdb8425e6c8d74d7307b6fe4e89cdfda19d288dc32a5ffe5e496ca117d359e9d4b172a7d5b0caac19e39e5900643730513c105ee51fdf38a6611c22ca4b1150421109f8a4c682e69ec1d97241d426f06cb9d83c8ef295335849462b1ea5a09ed9452c3f1311f54c5d875a830f903126d8871f23754202b2a587c0524078f67a012135ea52c8eea887d6b39bed356003ac6f5677303dc146a84ad3aa0e6e53ae704c2b52323c49e4009ab338179f72d3e527fdd50e129779950332709476020432679d6cc96ec1624cd00bb68903a93b1cd90493e22308f17648e8fc27ad74c975bfa5a60e409d33b0c2dfae3e4c564e6d92af47ec02443bd02babbd6731c98214d2f20b2f92b6fd69c3fe3afc025c1a40d521e0ab08a12d817393dd24e1c9cff8e729f27491352cb554bcdee1e43fb4fb5f316b702145b0ddcfdc1213fd25188b64f730ad1ee210d165b714eb210e6f9bd83cb5345020f11b3788e5ff15b7c040cec4c9a142efce2e040095409f5f04e8828b28a06abff90b0e5fdab67d5c7105b0bfc561733be0c2d885dbb830185c9198e77673bb95c8e6c7428c0fdfd272dd81eb0b76cef36a6c67a3b8ace17fd4e8b384f9175983391b53730e0d4b92a3429720efe785789363de50de67471684501f584cec3fb962986da5614eedcf8083ee72e41799d209f894219e53ce58413121782f95fd13a4e2d8b3fb021e34871b785a4e4a4d999c4bf8f0bbc2a8b875440447adeb85fe816134db556df88beebd4b610c719c0973779246c684f7d3f397a6a3ac40a9c6f04c7283955ed8ead08bb78833d783159cbd9ad247f43cb131f2452a6d0bb3ff0926915206590c1d37aeda00006d6797f0e159e8dcf8f2889d891d16f72b427209e88e3558998e790125edc65941b370db17141aa43127011c8c2939ef0c65ecf992e2b1354510121f73a6a09e1a7ee2a5fc91948b297467be2ef21a85d7b6ea96052a9833f26cac1a7df1784667a658a4668abd9d3b0642a3a87a117f5b840bcc69643d1080a258424f85d2d7876b90ac0433411049a98670b7ea5f8295175dd03cde06edd7735169f1a9206de9855aaed1cc9e6e254de9a6f1e948f979c7ade6a5bd903c9e361873464d8712eb535e5ce7122128adb0de4574ed79cbffb6f3428bef367f56a1ab49f334ec7abaa3ab443fdcebfb21cf4fa26a19a5cc7b861177389ce139c8169c860e833daa2f9e2ceea536446497ee91106bc343aadf3b0b62f483e130291169ca228df2e0e1810fb79c3869872d0f4d79c7edce5ec3fa36faead575034057ee84efe8ae3b79778351740a42217eb4fc2b29305573268105198f4b4921ea76fde3adfa7d303ae97919b2197d48a458dc8f837a320cfc9c13536d949f18bc9b186630db3efdcdd54bf953366168f202d8d67b72acf9025e53cf14ed168cf5430eb7962253e754c44919543a64c79ad35a421b8724929a2b25ece4263cb9a0317e6b2c09b0d5bbdba5089b3d5d7ebe468904bbe20ae88c4d4907b0552811cce59002d6321ff6f2be2ffab10e679337b7f2aa8ccd47cb6626eba7be8df1d486f6f390461b6218ffec90517cda342db1d2ca2ad88d9792e892e3727c1da9b547ab2bf7dc11accb3c709035390a5f1ad073c4c2c88aba1e40408c3b2561ab511142777915df0584c5e1d4f35e86f724a4c36cdb1032e90b99f5146c2427d8fbc3036fa9031317e0faee51304722a1981d4df6b5e20b878e33b6312a483117456d792c56747e8ad46ac8b774b07ccc6fbf001cbd7d300e2f59ada91b6a388c43b36cdc032c42770397e997cdcb972cfd139dcedec335f2110063db6c519ccf0dfefacb99af7ac738f57bb51b43ef0fdaf906e7288d09844db963ff69320d120cf13fadffa8da2edea121ff243d1917d0c6f17b72ed4bc0ffba11e60abeb42e990dcd393c9e1bbf6a587c9de3f44ef14b64562e8505565d4f0a3e0647faec0996924dac111295a1bfde137885257b0d868f9f2a748723645dfc65ff93d266ee256f6544336e2a88a736b90c37c2353b5d83470c3212baabbfcc023a19db83dc6582b211c1cd7132baeb9f1ab3d418685b117a6dc514f605fb23b9ca84ad4127639444c11444e7fa32c2553e4b72be7937fdcf54780477ecc7bbe896dd668b83b4431a1be15ec9c0b433db7277ac647279c7f0907d127f0b95216fc13efa563d080839571b9c4f6a7768700a6cab0d7e9339e532db1d38c6d0ee746a96d3deeeea51a7f7478766dd381618929eda0df8ebb82aef3ef30d43b6825de933ebdb2cd2d4a96ba911d2eda12afb7bca933412ea1f47665b3cd136bdca63ac3970b980443056651995a9a42fd7963a8876a33e172303082c353e7f55e5513d02d36e51178a1ac971321799398b0b8133364172c5b16c3298ae607160a89dca49327c78e7a27530aff1e2cb622d6099210245898b8392ec88ffd621efa1077c44c2827cc66f9d12a4b31ebed2b02554d5d66bd337f949b625c35b16f3e5196f357519f6ad5c887d8a3ffe8917c47ddee06d60fe5eceacbb66a5f3eaa6695d8c42a7f412382518370a5dfa4cf947a0e045e3679f21a0874209436aa620538d3640a4a66162fc41d0eb50b1d2cb0591e79e13e51c781f063b88cea12b63e00cc2c82b8b8d038e8e348909fa7f5caee9167854f6583588b70d2629dc07b4624520fd60277a396335f08df7161b9d1dbae0509359d68f0e807f4b3f8ba3a3d982263aa562caa27f74728a48f6589c487297d982b62f80b394d76e5dc0d09f2690ac26c952728c6fc906c2819f36055ad8e49f17da79aba5251883fa681e88e0fc88ef810ed6a75b498254080d7dbe5811cbbfec3f8c78f7c0121cb1225bd0fa788a1d14c51b0c978fefbefcae9db6e435366ca0ac25b3f75e13a674e7c7e1d2a45dc8efa15b35ff3e0b60c6d0087497823eebe3db00ded6ac53f9c2e317f08ba294862971f6a6feb8f2f74a19f89a9c3019cd900842328ea88628235221738db57f205db926f25badced7b785beb8c2c951368d12c86616d446765289771e4eb490f41a58706b7e0cca963c680be6c78fffe4a2074268089b222e2414675dbd4d7f630f10da4824524483aca37d5e9da42a7af3fe7d5b3e9c62b24a6f3793bc8666b000de25ca79cec11e8415bce3a6408636f25ec96c936032688f902e3098824d45dc22ad051a4af779ec369e30c2c6ab8f69e2792135295756d030fc2936e02e9aa729da08672de6bce32dcc0175a3af5802843e00718d6d43a3bbd4348501241bcee1c2999372a06e50a650b39002a6e2915bcb794ddacbbf20de44a7c6e667946e41556410bc37639f398196698ec981e795ab15c81a952de3e27789957f1962c45e19c0a586c4e5764cea489459d8f2a1906516a433a68669e193caa40fb62a366b846de61ec264a14418e66c2287d8939849d0a20d691696c85cdb9a92530d897e33edb4be78dd985c7417083b0f50866a6dd68d3dcc48dd31b97d8ef403d22b654d9d2d84a9120ad5c99b3f488426d54fa3e5b5c83358474a4bb77e69b8f72d6855c829d7c4924bf0a4038a07a77aac898789414f16c5bee99eb4bcf67d032fae4af3d2e2c11602850db9b55875a72f7e1f31d96d4d6886863a2ce200142325b307f671647c25ac5f6640b0e1fa6b6927225fab021545790b58d225fac326ad213349da55646b66d374a37cc94deb9ed856f38d1a7f8587a11d9e08cbc70ab514f44c94af1d7e39d3b3b2c9b7f4d9fc6f5d7e68dfcc0e14030acff6cdffa8d7edc0e3559542812862b99961cb1f99fdc6bdc987eb0cd60aa8ccc075c3e0d62e3da6bcee3e36926bff727874d5d0f5a961178497ff01001c7f6a677f2b508e87f75fdb3ad4d4d31b942c4d86e5f4a9b765208e84bd89f2093517cd386f87f1fc5666597e7ed5d08706c9b6cd48c1f1f7c6cb273b179bb6e3785228ea0928e00cf1f90c4933ca570cde7a4d3ed743015d0d0c34cb8bccce4e9a8237e7bcbf453c3ac88e18be4dc00f6bd4408756a8cf89ed395685f5e27a5362cb4003622b6c195c3ce1d74d051f330391cc59015d65fd4039ce354e41df6ae06b22638ed62a0160e31b86f03663eae6acf57c4797537d6aa956660fb7d02d4925212080a03218341aa39cd46496d77d9a886b735662acd2a9912f29e384ba77e7dc44589c3a0528270f13e6da94a8eff3bbd6b740a03618ae04515483eac930306c987e2ba269e4a5e952a6d382ea284928e4105803d184bb69b13e937a9c7afc8b5a6e5cda3c7a9808b8c52f18efa1686df4fab261fea76d4a2ccf34b97eebffd0b366b37b4c05ccf9848600b386674d161077b1efbbb05d1bfda53261c3bfccaf6601b720aa99c491d28bd206620c70ecca53ad92433539831aa9608afc36e263d1f47ac9083b59d7d76b2139c93bd28c8fed52a3bf56864381fe12da884d0d20f9ccf0ca09284dbff8783dafd178899e2f730e3c98f6c51e37c389edae6cbf433521f93df6622ab576a6c3aba24f98618493ba68ef63e6454b2d51496bc10c66f2c3fa979b4d149e6c5ddd196c340df3573270006d1131820fd63b702b8124d0447d5726e7558dd3ca197f03231c833aa337e0ce6ca38af7aa597eaa9915361559382aaa117a66efd7aaf6d9e5ea88123b87b5783602fae46c71db4dd824aab86f90925a73764817eaf526afa8c7ad510b5cbd5696efc6e52744d859547af221107963073dc6f4fcbfdf39905a1f84d5610ccd3fa01b9a2dec1f6b0013cddef3ff265d5007adde12fcef4e87bfc8390263ae854784d0cfd94d482539b77fb11c62c5daf96ffc3d3d3d17ceb11ad513b832b05ef30d3a64adefe6095142c6b5bafc066d1e23e746ec5fa77fd3a17039e8c3a0da781e05a29cb28963a2e70bbb03d86986e2ec573c3f303e5f6e33be8f40da7ae0f78ff0f1bc6cdb7b5cb108fc4ecda25ea035f5d7cd789e8556b968b3741a603f9986bce7cdfaf96b60e84a67e85ea5869607e35a98ae68493caa483d850cb9222f5d51f6472b8398768565ca5c6e49376cb6def7954b73f912abe3f3184eeda4ea086f533e7229427f965b7ce953efe51afd2e27c9db979b1bc94bb46f92168aad8d58d941e3377b296ee54007057cff8f19a4f0e908e74d053ac34d30989dd717de5b6ce93b6da3825e44fcf064bda1f628a08935f165421d445b28fa1ca671258badd1fe8363f7654dabc4943a5ea040ddae83c6fec7bb49390a25c7617e73ac53cb834582f3ffee2931471e7de1a6e6f7c5392e77982ab29769a2274bf3912f9ce4ddf97478dc2e8f1c692fcd383f6d42120ac6c9fe255b9692ecd40ebc457cc6c402320148ceb367a9621b30eae53b4b7b980cc87c5fea5b45d0e40078dcc39492544a2c7fc033f47c4ae21fe7e4beda88bd86a261119e0ce2f29554948328607c5821118903a69de518dad1a1099cff85d90600169f73b803bb4257cb3845fffcdac03e171c20b263103a11c4a40c5a9e71729b1ae51c7ca48860de082373e159af8fce868ca68799e9a2d411460891ef6750803e40987d97cfdab4b78e359dda0532e9d6ddd061b1d2d70a4fb75d0bb7dcd117346dc25f2999b38ea3204e5d747087d65971ca38b729e6759731c6a4a4f4ad382b5c05f7e46fe044a815f6d98447454211fe09a4627e10361dd156ba3a71630bedf6f94283981f4f4d1302a870fef86e2153d111f588765caaedcb924ca42577d1f177edef355b448efe9572294caf19fe8e6e613c1650c04e9028ffd83bbd0531ad15e16837782accbc893d27d86809a5575d4ce54178c66254ff40bf1f104f22cf6d034d701dba7f8ebb5a4e1456fd7a9998bb08597dc13d63b2790c167b33400de3e32b49cec77f8e44d14c06db50015c373321e4bb2d076c2cc9aefffee01bea8847d902ff2668b14cb4ec34f165827e6c5c2e8591857d00b3ff2dfdfe7a4f86333ff366c52db60d6b8476c557322fbb10a963cec0875e4c5d00ec57198c5bf5d2ea2a4f00b76d163b3d185d4e63c47ab9d126ada6414c152851f32021e63fc6be3f19e5c396da015e32366a63c65b627f289dfcaf6656e59280b021705cca2b242fa844e8d14b8e2460f1f235824128a92c4cecd47c1fe3c6fde81d7bc949cf2b838a0271d72b82dff772377c0c28224e4ae0ddcb4fee85ed827f87e71b85f513beb5dd787f46828911cbd72bdb0afac1313e0db9858171539900990ff242f4d50bcbff283927768c93e2a2e10c185088db296f4b4aa80a4ffa18f4e0e637623bdc6b7d40d21242d15f466ffd9ba907c3fb6a933528577319155066cecb5efe88ac7b8d7462b549e0d7f2d492982cbd910e4b7a8b18c26df6e5604310e342c06f0850131ee8774e9a40818f95948ecc0100b8dd23cac95a8cc9a5edb8e09181347ce265aadf021268f0dcc9cc5789a0ab1eac1aa38e223b8fb725098db4b832b6733878f6df5c06be46541859093e27811ccaeca392b82d8562be70a9c9a2b1a9fdf485544a020a2e2918c3ce5e1b82c3ef9580715bf9c5a6dd90181d8031018ea7e4aa8b796ea8ad1f71e91c85f8f789dbe7b41f340860ce39d65aa74b43ec958195d409513340d4e6cd730cd3d7db3ca9f5d8badb7929882efd08980116a05d629ffdd42422926e2787be51bbd09e649179d1473bc6fa335658257d0f5bf6f5c96996c41af70ea7a35e89f6b110ca071269f8ff2d2623accb34bedcf90f29b82a2df80b8c3975ea34cad02fa6ed0ae93da7fcdc2f614bcddad80940ac98a8dce5c40e43f863ad90c48383c9244c647220dd8bd52f83dc334c782565196d68cc4d636bf23db3ff5700e441a4f4407e71f815a0388cd151b41951796f75438c7f6e4eaa2d14667494dfda0fc5d751a5c029c59eb2b0e824e0135106faaf19e8d69707b6d98e4fec531084e850ae7548f2e4d2c8f1fd05d548db2608c921550537d93167d4ca91f6e0d6e89f84d23c54f5387dfead71b0789276bc51107c3b3ee4f9f00866ac11a2fa1d90a790948cd5c247f18e0290b915ee4b0a3c9be97e36c9939ff7b308080189b22bc68c5e05d98de2afa36e9df7befeeb6ce7b8df98107a1ab24dd249d510658ff50a31b874a066df75dc92d9cf8442a4c7e7237f391ab629d06a81a780c53e4f55888a3bed3ae29378f67661a3c7d5d283e050944f53b6ff75c14689aa40c5ec6ee863de1c5360c8f81ca99f185a6fa8ed377aeb67af429e4686b1fdbb412a827f220ec4af2bedfac8be4f70b812382a85eed00953a204fa96a97f316a5b08d0185d383aead9b067a710516366b6e24538eca08fac617aa1ac1ae3509ebbac86f4cd982fa3adadcd05673448c6a3a03e7228e52fb0a3cedffcb5748118317824978a7094d8fb142d26961a6e0684fe510488423f5e891d6be3e6efd81754de0656e6b72886bf7fc472387bc64e79cd9f6541f6094012db175e04b55dd55f215249e6881f5e41d775eda162cc37e2fb76d1961b0dfb79b7c3f94d1038738342d46e1c2f2fe7a45f00cdbf29078309f2699bbe9a4ca6d93dc00813791b3c2e15fd32297b918174ef312ca0efc86180208a6e095c4835040e8c62988462b92e0311d7b244f9fb4070997c8c12db5afc6a2794a543a56b90a100b0268887a0c06a913f7e0ce00e79e18829652ff7cade3aa129226ca07a4dc1045246a80c6ff3de7e80c2d00ff2bf29e7b5253137bba8bf7c960110f2ccb1e4df2dee02dc51a8d2e67743f61f6157d505093f55e516d66150580110209be3ca3625f2c82e4e716909e7993ffa85844bd86d404c888a6b76d3191409613e3a84db4a7e9d3c60feb4378e4be5a201836c3302896b44106c6b81fc7944d264bc8d42d8c8aa51b292581a2944604f74c8db86ed9ae40c88de302a9634f06dcde724aef29e8ab9685e597c1f6d8aa30cc82c488055d354bf23122c9b7cdeb27343b54d233149b868c6bf5c7c211c5ed818956a0a9cd9eced25d42a17581b3dbe2d4a3c19698695a14ef989219ee52cffc29341b4fc26ed2f4dc8b83aa019465718f2bb15d933268a5fdaad7fbbc2c5247ce6f73c569e695eb745ca8064e30dcd407b1a11c2951538bf2863ec48a4dade3c19db9ccff2d09cb599b1f923064864ed46574b002f0b056df42d17035987d6cd1fc8314a2bf05b630d82fe505399d205c5c5026980db6574895c920f6dbf1a6fcb63dcb284756d851768bf600b166d055aa54b5ce4e38ac8b374fd4458b82b6271c6c6da595640c9f3232ab127ce019d63ccf2b7e4bf8982062d707777d3aedece14527d650ad7a3b45eec94e91732c5f2e56cc25b09d5875caeed8189c4c3c552b7aae169419f2fda5ba39cdca974053317cb425097b3241e9996e361392e5220a9a17f0184a9ef4cf4de8cdb6ef1c9325b3d2a60b0875c9bbb7a2e20595af3c8b829bf792736890d9215fa5ae27085028cc260951cc43f2d1e3f766771b9c01755b57943e14fd3de05b7b1247a2ce60dac72ac243e275373e6096e2abee3d168dd871bc71aec2c40055ebc8c222651004e50130c62f8c3fcacb6b39eac4785595e894f4b58eef3479414015414abb3ae7c37fd9bbc1cd0d442b561735514959f1a308c29985da8752bf1ac49d9a33923efc94a3566293b4cad2fb28c01855f1d8a171d50803dcc51775300d0af60e2b71e3b97654d3578841b7cdf99b1866992964b2c1388173e35a27df08e733f611ef44e287155e4b4edf5e4739aceef6556767ed0ce8723695f7633bf2c5dc1a9f03c324f0ed63199897087bb038350953f4be88b1120a42bdfdd3c41a8a2b4eece5160530f3704c8bcb2c1d3d638216d51b208bcd59f24432b4fcefc981e762126f18f072cead47aec7030c20ea28ea2dfff9783227718d94968dffffdb78677008a87a56fe03e4ae6eda1decf591b7837d8804c2e8706ec130f2ef7794ad80f4979f5c35697eb97f5092e4a9da331451f6e4e82ea0171545a2cd233acf90a5a4c8e0b75de74ac88525573b16c8a5ef68252e76a84da17526cb22ca21cdf789bb3f799528effd7f3b1081b96f271d85179cd02431c846e4a3ed775f2689840d03de1522f260854ee23d2bc4063e1ad4c1b1a1e824af99f1a877fb1855f7ed625434c0e4fe6030bfc5ec9d3a95ee846492786055cb3d28fb423687cc4e82f77cd7c02bf808da0031e365161f784cbf78b49efc8a5bc97161a605c2a47828b460f8ac84d5517d0086149702b931194cab88bb44147dd8b80539a380e0563dd3c01c0c21400cdba6341edcd645620f5937b3215e5a6e53d076660290f300e33b3f187cb182eb982887551085b2494789471c5af9477f507bcffca3c8e368af22c624512491ca09164e901a640916f404beaec1c3f0bff4e85137498fa7dad567ba069af6c168bb1ad062475408c2154b7118af1cb00459b37ce50fbef1a19b07d7353dc872e8923245500e74e5cd90d8fbe50bdd9d5405ad20da74dd48ef0c3799d58cd25b0e1f9924f6a63b8ecb65795716570072397364d8270dfc32da6a5d602e48ca150b30502e7fdb25fc1ba4ffea362b526ecff2a84324322f2fff48aafe2263d6a679393905630fb9207b3200552d77793ea653b6b914736cd2ae1ee4d9f35133f43d1de15cbb83117ba5342dc05212c82687fc358c66211070f9b6b34070edd76bfe1a37990fcba3d3a6760f6fd920f93eee34fae094b62ae263b5de557e2c00b05e1a966172f6159a44a4d57fc520a9d4cd0525c75a9af7a4a24992f1323b6174276e20ef9fc377ceb8a7a42d1c3b295c52c3ae2d4ad321912985c548bd54115897398bd1c15b823439db9f30cdf188e701f7b5c6129e9e66f2e7480a1fa2493a54c67d3fc394941e3f027c63ab0fe097a6b539c80bb20cc2ac0574a1ff3cdf1f8c9636bf3b6aafdab3a6560f0468b2102494da70b43801cd66b0235a2e9df04f89060a78af8f2d79587d1338538a9eb19bd591b2ee14b0d01e058ca58c3025a5d9dac465c0b4b3256919ab00bc2613671d562738dac50e5a471e81e90c818528c82ccba38f50878ac7e36f50bcc10eede91d410bd76d05ea955a1284471c5cd149771d7a46f1029657e09c7b74f14878c4b3f30fd54141fad5395dc8e5a1f98d9212e2c1a1278d56f621fe2a9991deec9334276c5123f78ee0b46afc414d549f1c28bf9fb4e522a2f0abc7224e2e552bba8d244d478b167597031f48c8bc28357a5b1c1aa32bf2d92fcc5946e13790a5b7514d6264451cd45553a119031bfda68cbc7092a8842b9c0981a75aef9c9008f4800dccb6720d9a534bbc0137a86507ad0125bc2d523cbdfcf4638791101a8bb289cd09a9d92b0f23d1b190f87ac4a4f770835c651c8c016ce151e0ec75a0177ec974429785853f4d199a7d0745ccd8325b77d19a4021fcc4a15345bea4b6bb63cfecbc1252bbdbe12f2006f863bba0a4ffc4b422f66cbad9e2aeebe56fd35fc575a5d7c0f19d1b6bd0b6ad4b34cd5823dc4e1eeb99945aa9173a53648d35e6a2506ae0779fd6f611e6d7f377bce63ef0d6a1d4a421d63284a4c2894c34478e7b9569efde71a7d4ee856587f1f1a04cd143347ae4144dfdebd14d8938ce42a41eb91c04aa8bf0e4564abf987b0ee3dbf59f3aea9d113c36c233f22c7019a8f030224e68e1c3fe2150324019baab6c404783cdf20830b86a7d71ba51d668151ecf70f7496b0732db0cc59215d50256d39fafef8aafb1cead6ba92c724877414e577ad85473ca340faa00778eb021ba575210a4390913ed554c34f58219f9f424643eae55e03885dfd4e3730360b095ce2a4b5d859b6b30c2362ba55f3ecc2a52165db607a9ff73fe6b8164f0fff25de0168338c47c3fc44931f0d0cd92afa698c729c0dbcf815fe4d23881cce618346d81ea18b787cece46099248391b9b056a1894fd5d87daff46d74e13aa21340364c51ed1fbf9d6eee6dab4617c1f308e574b9f8182b27be443787ce59fefc3a5266b28e668fecaabc4468212d9a7b94ece8767d64f3171f20d267191ba1ae66ac436b2c60a1a0ff8e8c98d21cb54440b8b015c29c2fa4d81861edb109f8d9dc09f3f0291b47891ca6ed9c496558b246e75910ac434ce3c0557f4788e39a16a1fbc629f6beb9a24b49b36d4441d887ac3d2a86160e70b7edbec25a64b1674d6960dd0fbc5e66686c671b805b72ed8cbe4f146775417dd2445fdd819debb14efbf6e884f39b428b8bfd6545863e9613361a44dfca3729fe731fb87654eaa1335b16bd71c09e5f98e34ea0cc287c59b05be937c196310f628b22c473506020d387652259a55f405ca8642eae3a98fadbae451a7c617e3faa73ce68e8a2472beeb3b8003ed2489301a75d20f52e18e681f47fc2bd50624000fc8b45ee1f75846c01049f606c3314f259bfbe362ac8afba4e5df2d0078b01a3afe169d1df160c7b3eff3a8690cb0818e43408a1e83f5e58198ba7ba0f8bb6c207fda3c2c3309562b69870d61769971f569ece4b9409015775e431a03942fa4ac0bf43735481bd08d93857cfbbc6d4035646d3d32c5dd582c5971c71c400b7394667af4fbbfa22bbca16b794afac0a18b4e964d3b65b4b47cdb5b57a79f5909a358874801e70355562e587111e614c12f1abe80d6a938e29de016b5dfa62a7db2cb2b4485a6ac8663eac1eb54c0ee316bd481703128b366dc173b1cbf6e30344ead2af9501f43fa44b4430aed44f8cfd7d82365932e6f4c18c4806cb53acd8f79363dbf353fec046e0fa0660e556dff6590def8bf99ed03cf60784c5975e0f2ea98bebd1e5f525d1ef39d34993137090df03ab61c8100eccaa62b89d8edd5b537f49f964d6824e92818deb9df54583cce6aab8475f0dab50c3c8426f1fe5780ddeea71968415426022a5751e63954ca89251e241f262b4ee2fd38761986af0d573ebc86b0970262593d321fa668ab251a65d01d3a6fcd2b20d9b2a0c068e09fb6472168e6f765a3c533057fda5e10f24c841a0ab8fa12d86beaf0348cd72005c840eb55d7486dabfbb35682e5eb3a622c87ab7121bce95b017c430e0f4ec7355e77c2e063c8c32c8b59e9b98351841bd873b65a4ebf65e36de6add942c07ab2aecb29bc53803732138d3e235dd396246a6f5a6f214084c50a97e06a9a8c1e504927a0007168e5f2a44b2fbe63c69b440420829f475f41c9d2bfe5403b182c6bf1ce5012b86745c7e8b91b2b14b1282c638eb9c093c72c5a3379e5e294834570a7e97d6723a00fecd7e83d427e8998087ca29a2e22d675fbc8f88b3fdf987ce7deccdba6342cf8b3156a01e39a695538fbc2eb6ec1722f0ece27a186633245e301a4caebc09a4f1ca142cae6ad9825fb824a564aa68a027e324e79b262a5e2f9879f55dac78f138f389ec5e0ae6d83cac6b67f08852cbc7bca1c5b2ff00c1489fdba7e41f5388d1b73365726366cf245a23ca07a1e5f37dccedd2a92926f74081b4c4167de66e88a63b0d660ed4be44978d8214c2d3bc4f6310189ff6fe90afc6aded42be862091c92ccc6351bd2647442e28f6857695dc6fdab69cf14896f78806b1f52ddadea9247889f636c7c00698b395e2ffe2bd4c9c10e5901226a29daed1e8b28a8d740104fe6614656bd2639781a4a3349ba9596e41fb67dc574a7bbdbe56fd9e1be31208ed35f4eaf87437e210a638d071a0052d9a2089a00b72f84f1cc42f26b42f2826292a6d4638014e2659893d27292f4871646fbf60d179dfe54346563f45d1a11672e6221eb46c84c5dc3ddbcf1d1181dd65d224842d82fdf698dd90ed048478287e11ba216c257a94cd3d2fa8decdb7aad7814127de7a153c81745e216d7f895ed4146c3fec7f07283f9a408fbf3e375d927d8e19305870f6692746e413811aa209eb20079770ecfe5034f79280674e1702db555c532b99647f2b1bb9e93f4469300c5da4a4321dc1eb660e99342ee452bc2b886609ec2914a6c17f1ad50c30d031a8c293b33b480ce91e611226bba761daa17d7371fec50920b759980a52ae68bbbc698320271a6e0867a1db911ab0f56254a7fb6efbfc0846a77d8d27ec823a24e724594db77907e87f70dba27edb04ee3b46f0483fe3408533d2accf1672cff17647390c2ebb6cb8448cf4c8d7cae3f68358c2b8234b7533b71ade4f6ec3d497c15b316508ba733cdd42c91fdf8381a1c1b2a48ca369c09debed56ecbcd1e60ae57d3fd3cee5974b376dcb8b11110c7bd9b7c5027cd8f6047e38368293af2f35234218023a102747b6cb222f3726b8a5acd377524af18d969bdee21ecd98e97389162771ae24c59cf2a48432e297d8712c3034ecab67323cbcb5d1c4bd9b9deff9cc789ed687387a0a65cb8f21b409d0b640d2971a5f5d2e83bfc10cf81fdec1d1e7a4998e9399e44798fa18027a951d3e4c8b0de5ead51b4a4d0faaecac5ecd1a7f4455c6ddf42a126aea2866da93a302a3d845aa3b9c302c821ddc529016b15e1888e09e4923854795accf8d0d9a4c57379db5b1d9235357f035e3d8ebb4afa5c3acca111df4250d6f2ee4030d48efbd3f4640dd8d11cf88f753df9e3668a1cbb2ffb0d9ae14b7f12cd69a8a470ba52f2fc1b3c15696050807351f2881b6084a9cc526b9c048c47699e2ee5587a771ad60b2a2209855581e527d8a750fa94323bebac88e7731d055c167cfdee989c6664e097a8c056cd2300013a51c87cf391f3f8402ffcfe3563b7a8256ab0fb54177e35991fb2fd17100f4e86919cd4c934d7ed27f791f8200b4e195abe33bfffd493771d2bf3cd88a69d3f9fca5cbf2d01d8f6286ecbf40750b19276224882f217254adcc44fda7d6e5827d8ffe34a0deb7e17a6dba672e548b707c4676a13a6484f79225478f139cc88797fc3510f4eed9bcb05cbb157cc8f4212fa738a336dd40f388c143427866f3cb255c731b0af14c2cc47aafcfdbd6f6abc3bd7cf4832c80c988f6e23d4d274fe1a275b407ed72572a872722f3c6be289431173f68dfc4d246c3ae6c894bbf65ff3064dc416025dc3525f3637247c84a726b180a7aca5db0a99f70f8bab3b0449549e33fd23ee62060ace995e291062071221dd1b43f36f98fd4fc9f1d926ba877a0a6c038b1b38950472e352be84ab703cae862ab5b39b3863675f6d91c533b9f82cb92a9f0dc2e6fd7dda2bd5843df943455d7f5b04b0d4ea84ef0ae888f411a0540bf5c7cffab675806d0c79ba67022aeed38cf2ef26ff7885d7b0cc5e3cf2166477ad1abba5d9510ad1f5fd1338f9e5bb9703fb95ec4cabd93c976e5c491369ba904934d1e4fbd97208809ae33c2821b71e71dce2740091e822ecc6b60e0b68bb556e460a0042cf3130a71e16f946f20eca30e804fe974f00565731066fbb4af1742ddeee63d621c40e045fe9c070f0628e15349de9431a625020f23be922e909be97bc98e9c94680c6c79b9297f827dbe86a238b8b1fb5fae4894415dc18351c4091935b3b2426298cf617f71f775a85cb57d3eacf4720c378cb2c5b7d62fa0c4e2da7bee9ff38dcf8e1edd81674bdc59d8ce7b59ce2a2a73cfbb88a10c7a9b0edd86f4055a0e4f62e96f3fa0d6c98e0317c3e710d647a6be40d4fd44ffbdb77b200aff6b9f036fd9833188cb301fa4a6752186c37287b445fcfaf076c3751cca9642b3265f7ff91e26369851bcec49a71843637169f699e10bf9b3499e03e088f630db9d13a17475cda92d611a6fad19200c7cf6ce768961079b8c76b5c357403330f472965b56cd0f253f061a6bf0cc954051376fb8c7de070ad5dcf18347189658e873c17ecdfa2b2c8ca34fbb6c816b0f8f2996ff9d9c8084be38eddcc427095eb788f56780d87f65d250c7c1adcf61cfaab539a3fe0e5f8f293b06007c062265068e7e16ec341b37b31cb7a2d74e488a2d26e0f3fbf7d863ccef0d38e27790f6dc3bc8ad2c3d16f871acd1d0c9dd688bc5de02a750e1bf23d5f748f4f4b3351edfaf176fac8789e5378d4c36fda9e6b0f33ba931cf1bc5d27d5519a05a6871aa8621c16c962f9a795498f40c3c4f59ae27a2041390bc10f1fa6835b550792648da9bfdc982c200124b9d4f8cb3de6798ee9b0baee1a1daf0fa7a79bbd04b115593c293329576e8abfca1119ae3af77ba9909b67e9e11be89c86b59d146baa83a4c036afcbdbb00be8597b4872783a51afe08734501e4025ca3e53aa8f09a20a28a736b032c009c5efb8d182ec07a0c77d691036ffeccbb9ec21969f595134b1e433fd6f5f42890a5301f396f0f58392bc588340ef88816a3b9f2bd907a10aff13af32ffb89b3cafa1b8790e5f33d6e259087126d5b14ec79fef793a19f2b59957b23de2359a197eb6b7c110f60b98123a229a40db32ddfbb89f4be37e0d28c42820fcb981dd453b8b240f01d2d084d7416f07411aaf46c8722f1913203e04c3d683463a6b0567772c9d025e0ca2c6a659d060b1c586d5b89735db754553d35e4be64665d3f96c5d368be5f1366b84577515cec88213727554d546d3780284ac2143932fa9877abc212c44703d8ca61d5a5b1649b8c0dae24b94b406b29df40a00b33b21034c90de299b8ffca478768bf8b285382f50d77e300f7f84d74076411ff4557a622b075627a51ffe2d8e71bd98f37501f0ae0292f7f0978a3c6bceb2ff2272c8b863958a6ce4d6fd07c0e93af68732256e2a1f58ac64008a4d68aa4c8ec9ae4e66c53b86fdc6bcc578557897a1b603a824f4056842cefd1244883812673d394d808310e91c97a18671548f321deba4c3c951f5ecc53a34252116ed44543248e705516e9bf39ab0aae1e99d45fb51da56ce3a4097a3653fdf1d03191637939ef15e467a8d0f328a4f82d524a829a22912fa0d98b93b03691eb021d04bad5450b0248efd0fcbb023d381ec0cd747e6e517141b8e0705e3f05a55c9867bdba3957001d194aa61550ad095dafc87905d81c2644112c5862bea5c6e18908ae35b43fe404b9b51ef6664673717735921a681ad55d2c50e198dc7a28e02f6da96fb1af855a2344ed2e88be678b8a84c58d2392aaa9250a3786285d037274151fb72bc46fc7ba72e250847678e64c8763e8f65211825b3de30f198cc8dfb74a3b2850ebdd20d909788f81e066e494f9831cf616066a6be0db15dfd35b3cf3b62c530c7df02fed2381eb10b9e260e6edcd7e225ea27487de8719a23cc14bd51ede34d9f000073118dcd8fbe630ea0b4567cd758924d2a67f772b2c7b988bd4762c967a32026fa9bfa8b2111d98e09ff6ef1768b04f4a97400022af7754b36b8488c0be7d6710be9273c28b8237b536f4b1ac00e8e45cf06be52371c267a6d02e6ea6b0fa631e92aa0eb0224cdbc724d4c981cba0fd0d6971247149b01f06ef7e69a0a7ddcab43784933ab7cb4c3e9a6c4c9453189ca60931566db95ab2e0740298ca067c1d9347b37672323162362112333962d2265ec3331634928d68710540585466c31f8217e2a0591dd5c443bf555bbf03c3f91f0fb44d7455cc0510ca3a9dfb0daa9df2d43cba7d3f8974d0f28b6c583f989bfad8c7e3cec50103e4837be9189d2eec40a2d6f3df39c61fa0bed3e3d2e6b88b416fb9d8dffcc06951161227bad6477f66afb083bc551c686e7d54668f757e36b8bac763d9b73f4fa68e6b5b7bd07e2386cceca96d9f92a338b371e30bc7bd03d2eedb11fe2a1101bcca0f14fdf0102ad3ebe3907bfd64984e6660fdb6f8447ea12ba88663feae5ca7818d8b6e32d0e41cc46dd3c88bb69bb2ea7975387515e1e671c806fab7ef01668c497f2e03e9766a03570d5959f52cd79d172cc6265b221c1c55ab81050577cc1752da50e85b6edba191015a9ce6689fef229311049407006b54b0f761b94d7cc702dab9528b710691f163bff07c98ed47b0bd93385f84dd54c1853e3686d976ccdcc19ca762e5ab6e706f89d9d3b6f8be40f988cc1d33c7f52f5f594ae7ff2e5c144af2bf3bf981521954338b450155d59318abba9c9502839f2cb95eedd6fc0541da74e46ccc8daf7875fdfc7f23e62895f4a2fcc5476b9e8c844cf8cb049bfa8293bbc09526a2461c20e5a4912601e5ba0460fe119032452376652d2818e7c21718993bd2e4d43af8bb36155e8f63700d4851853245bb72835f5d2f88692c14802fb807488122d25fa76ef8bb70a1ac598e62e83ddd1ec0133be6600fc16355fc2619dd5a512c436b7816ff31adc21ea75d5405dd3f4e7385931edebcf13594c5423de73e59975aa9107c462c0ecd00f1f9862725218728ae19b9196687b1bfbba5358e9134e24e2186b5462540b0b63dc4ede19e9819aeec9f5904c31d88bdfc3283f742104ad3d5c6bfc20af26f48cf6c7a48955d1ec49c8e8a6e8d69688954e1239ab4ad9262fc4b73b74b913cf7591c4f48e7f263a83dc4c6b0be89ee7de5ffae39d5329035d276fa1b6d608188c20f869846342ab784e29087cd2f0c4f1c061382fdb83e45220ccecac031a397825fd06717da3b2b20e364b0f9fc1431a0f16f48406ad4076eef0f5046dc5027e57c1e42cf51ec93ac4eee0586ce75d905222f8fcca754c65debdfd0c9bffeb908d94d838277adcc9363f1fee3eb664f4b8cb46e39ecee5079953dc1cc6ba8b784dbb3c040224365f53459c55075291c3011f6fc315c7a97ca422f19e3137cfe1f98ebab8adca1ab04277326fbefeebeae598d75a16c04458f9ec81f72392e2cb96401effe4540f6600f56cbd430859b64f84d974b7c21f7e100f254248368174ced5f8c64dda5c968d5abbbc2f00d5c369d138364f23abdaab859d030ccb7155ca28d92d5407212a6e415aabf28f8a11834810e7ca3fb7843a73298fe9a9d34df81845ecffa21efa9c3a20ee0eed86334b0a6b9e223b6f4dcb2400d27655f9228447c9b85acfbba878c39a9d05b91aa1559da5ab7f11dfef0ead4ce26a910c07f661c073a341518f2f2d85426cb6474f9c9ba32e985bbca51cef9fdf91e16900562c92fe91965e6768186adf2f3c4e5b6bebf6edf60b1bb3b2dee4af565fd453bc4d634c3603cff9b43bc262f1d0fc64a9415956325d692fca8898dc00fa685d72549635eb1c6f5443cd0be720b38175f9f8772fb0bb2244605e5fd6d561bc49ddc374151ab3b72664b425f0e5bdc1709593ece1d06ef0781d0bbe6d12210911e24f4b527621de8f1c1a363e12858c157f29b36dc0c3a1fbfe60a40351c2b1ef04fd0531a14ef68181fe095f05b19633e648c3a05585dfde51bbbfd9d9e9b3786447d0d00afd82ce643fe9c83a77d6db3a3bb16a1f7ddb857c2d068c1dbe43210ed9e1d5406f0383a062ad3cd434151a13d2725770cc419d90efe105f6dd2fd925486841d47041ba1ac9faf6d2de30dc78fef3f2fca98f05e04dc87ea0015a63e59e69ca606cac17c566f4ca686a060a6ed5e2ec7d9321ff98f71a4c3577e6bfd887c97ad59f754ca00da0bd1ac9558c8cc834e1efa95d0e80749f424806388b39ea12c0223da69782e8820df28b7f450fbd9e30ab8c97ac2cc0898f75144e7b7ba58942bd56abc11eeb10e3a03d9d8b44a00f2cebe52c520714281b75006b7a2069b61bf742baa8fadfafd67568aef355bf93f6f8bdd0b2727baf0af2248b9550c8615bf5c738e1c7c2f6a8e8d11eecac82dad5b9985298d4e76e9e2797a1245bb70dece0dfe9aa76add81a5c7d8958f76b24c41c725d23084963c5d892f217cfd703b7d347e788c325f5d18095111877f0cf430efc06e5771b8eb92b323954bbe96e6a0da6fe3c7a502cf51130418f14a6de51bd393be200122fd50745fe32edf350c57aa8637f28aad2406534bb14dcf8b2c993e3ad6ef4aace635f553eb8ec7332773a90fe7aeafda724dbdb062d624e9c723bbae16477f7b913528668fe44971af545f1a84f43fa0e67f71d2288f23d86f6c8815551ab022ed5f0e886aafa05ee06586f0db09120ad773e1c2896c3e06c4b0765048a3ca8493dc7029a6051ca0968e4cddb3cd92e97215918110b9644f2ed8354e7869ec9a83e098330b01dd162eea173f20c8698bcde1f902c95eee89f40fa07d3977e20998940d2b08e715ee1dceab5c0083e4fc05aaf612ae8c3d474b1b5560ae67e128ddde26f9f888cc17f06d55c3bc20c31adf5a13a79cc143364bbf8f4f2e4549134e838b02f180749a26989fe2df268fd584b0a9d47bb7d02435c1da35065f41664f339930882f7a030dd1004f9caf80474a4440941d720a75eaba685124d69e9471caa445a267c8ce8b8ef81919c9b4feb62b715314f8e8cfbd5d5f64bf0cc98d1024f8b44ec0b73a22b0479e2f9fd009c938d8747c6d17f76351fb0813f7f9e8b44865d22aa06130874f577f209bf8d4a439b136ccd75a8bf32e1b6a2417378806e36ccc637f0ee69b16459582d8e08cbbf8c4d89ef6c7dca0bbe08e1be2bb4b8933b2f57e2cb1deac73c7a37999397b755f13881624c7df62fcf7496093e80d456dec18c2ed8b86ba8c39b65ab1ab5b924e772d69ee344d5149201cb6bd6223c98a4a0c41ca6943a553f1deb2a92b787fe0a814ff95f9225d6a4eb4aebf427d52774e432b877ddccfb8c4d17c20822e4fad6432054c306ae7cd969ad7507d27f918fcb6915b71447dab6ee59d77404b8d93ddcef3d75fa96dce17ea8a875c205bb7231e78629995a87766037d866db80bac075c899e836f4ff3fd9a38bf166127daf83568c132750312a62ea5f48971bb36dae018c597e236ab3360975267faeeba1957471a9095845ccaea4cc63823db97e4772babd8a79245c500734b94d833ff1c8f22e3f235341d67e6fc1354bf25fe7d7b780b21e405e8a32922aebab162e6beac0f4bcdafb473cbc04d4ded06feb75a9864bdf18513b67254c0197cd4295b1e4664165435d3caa2d7227a1adc59a8d44ed148938ffd3dd593a136a9232649b66b33821aad9eaddd2640b83c93d0b64fc365de847e58863f586db9f95821e607e03f0fc0bcfe50575ff65a7c5676463564a14bd0ea74c580083bbd9f91459fc73fcd8c7107394189c2368436e864b35fd7b26bb2255cdbb01de752d9a265e01ef404233c44e85178dae091e658f051527b9aa56c78dd170a568a54c3da363fb28b0bbf2d92c448726cf5d18af78b9b261a6755012ea4b099eba51ca03b9f9d0f4bd20df041273e59db6906e412fb54f37a3fa8a360c5003bba71c803a73f49a64ccbe05ec1fc764f6cdbfc77e51740e903d0eee9cb8aea930f6f99e8d7c9e8ae1c6136d5ce25d5c16e6533c57bec3bf7c23aa94d64e0d3eede3fbf253d2b44ce94a39bffde06fe481cd82cfb9292669469b7465b93843fe0f714a90a6994c6135e6435ac75b8be3107eae58442a4116fe3abe9d06d2f46db9a4628f0774016c91cf71a10e3d41f77cb316c04442074d7d3bf683fedca1097c03508332c3f1bf2bf1439a0fe78e37ebc7ff4d80595f1cba7f9d169667a9c0d133e73999ec7e5db813128c9a385d403b5e33cc0331d0a7b619935bb890e57e2813caee75ecabc0ec1b8b4ec31dd48f466b62950e9d60cf570ffef7907b29044e884e3d2ccf962cdc999b338334807f3c7ec57b1258748a42764b3f6314e75078bd19c26bc49928fc5f975b91678ee3a70085e3e23cca33523f565b0da69dae474eb9ba7263dde4db9421bc40714edb36967d0e354f15037036afd0bca353e7af5724b164df93cc8b3602d1f37ff8ab5fb42f04d13407cd61649287d941782c67087ad56f9dca99eb65b180181938124953017e13236057f4062d08678ebfff7f0418f125ff3d32df19e0c405845ca35791ec8ac5ea6caf248efacad7a5fdf13a303518d454695f7b49981c74d3669df8000d18c4ca1bd4ca9d76932b94301e4194aa6ad1a0a88337867836c19709c0972d4babd6f4345f6c2707c7485b4a86ba2999e8bb3baadba886ea12300ba1aeda1155b99b41926eed0df725273ef33abf0b3c3b367e16e8bcea0f4e430c2a838f5260b0e20a02d923f8f1a58c9d4f56aaf4b3b38bde943aece8fbf10ac5b0eb31d796fa50a61e72025cc180a683971ffc42e27f6d25cad741f92be0e4bdbb19fd5a3747a72bdd203f450985581b4c4df42100bf0f006719c23bc6485f261bc2d711caab2eeb7815cb0ab36873632ed4487f016a861d49576f74e76511a71f5b41173fdf9e1b3fcf96c89f85216334059146546548667b97a8fa6eadf4b879ad22412fb3c0f1f513972ff9f59a049b7c635f8cd8d0d72d2fefc91de86022a5a31e334dabfa2d4be6e5bf87cfe15735ed1abd86688cba1cfbfbcf92cc1971f31d7ac78d2634059fe1abee28e01765cebde45912f73ee5bce91b81e06e92fed24c9aaa4677cd544997d32aa40fe4d4f842a14afbb2da44706fdf6bfdd13102974a683f93eaafebedc3c8744c2a14322d39c3b56f5c4966d34e0c9d4fd6c15d33a7396a4c5dbe6c5168f3afb0e8246f11e9035a37406af28b30e04ef00ac1728f5f0c4bac83d5ea8fe1c846f83726a044aea082fa7a50c9f67ff8e0390e3d56474306a5e541cb57249e9b341fc03740382f1ac358f38d9e1709bc43d9fdf5d19ba154afd7c7d2f42d7a8fccb3d2fb35a7f2df7e0744df2e603df3ce49c82a5b7c053e9cdd481582606488e4f0d4408f8035bbf7aa0400316601cd28ecb07917523547e0dcb236a9de7733a1e4dd6e92c325140bae1eed5d1004dffccffbb8af7d30bff50aea49ebf3a0bdb113adde193bc43d5b12a703541ef9c9fa4371c4696708193877d5c505cce119cbec0a337050043afdad746c28c1cb1a347ca964d3039e7a39c8968d78aea74e35a3073b9e715cfa9f8f15accc6557a59f361760f57eef9e7c59dcdbe8efce18ffffe63c5b858f66f698e6edf8f666715e9f9cd8cc28558bfec1ce709864154a6c41429adb24b5d14a8154690ad765b001a5aee9099c164db9170a8a8cc435297eb080e1ab3e3f127d6f123e413f88e5e30b681016c8c74926c9f6b2367c3692d31c7d8031afbfa178cd01739252c7e451b2e1d42f895eecacfb83452e73bbbdeb4a91c13111f6dcfc9e865ef62a7b9ace18276c4fc1a08fcdc7ee6c13f0f1f86055646264f242e0320ec3413ec843066196105f73a5eb87897e0b94dc0545443e8b36efd69c8044c225ef9fa61b97b20f4d2e8a12391850922f382d13e7635ca8fceca38711068313d76203c1ce34cd4cd9b0cff703b31599a60a44a5b0b4b10c8f5dcfa74c349c9c1388ffde022838da5916d31dca48dd8c21779bfb14c3c4a2cb04b65ed54c139e0f9abf6864960826d54b24ac497b641a76f51b70b1b6755f060dc5e1ec67378337d33179f2c5ee02f32f58e0169997aa53380e0fad57c464e7ac32f0bd8b0d15193d0dca274dab5bb53efe051b2dfff38a62fcf18d1e1efadda516093a544634099656c1c9313871e70937d5ff500ec5b476c111b54ba38d823b79a4024f84fc8ec138700178343bd4ad7090ab7c069329235917aefe9ba43961e4f4b82d269a549d5cddc606407816822dbf117c179fe3d700eeaadb8b8c22aa00a6205f7e0eada70cc6643e8c7f9ace97a250808935bdf1b5c5c3c8d0a5fb8419b914cab9d8a5418796c33e32a6ca78e92618ad5c78a21b7ad2ca8859e4935bf5aa729249e1ca9dad80ca4d16c54d4b59490bf7f4cf1bc2cc86cd04e5de31e207744982ddbac936e7a475c2f08e835aca7b9744f4707419215942fc43448625b2057c2fd65055d06c8519597a749540e914a08ab1a4c1719f230b07618f4b6b58d6c913dc6ec1f7f52ca0f54c782b01c9a1e56aa08453f2440826e9d5c1b5495d310064c87aac9d2d5008d9973052753e13c8aa1a221489cda7d8011f58d99bedbae7e45c4fad56b1374d7db944f6f4a716f8744a4420bec81c753d035b219f8fd0058bee9882b47ac17805c6313f59d01ecd9a2200bdaeae684265a394552ad0bafa7fd1622b7a3af718cc38e3c74e824bd2702167636bd7331a48726093405e0de2c6ebafea6994eef8322b6be91fc0145a632cbc7a79610f7ee60ffcd7a4eeb7e3bb4e0479e7cf478f82f550e6460756e4b9236f40ea8e94271b224a3e7782da21c5aec2917e4c4ceaa82ed543c865a2a90ae5af0ebf1c13dda25c49160ff7fbb3544408225783e1f7dc6a9b77d774f1696286ae3a362df7bdd97c79dfaca88f05ffbe541c68ffd48ae6379f37a2128b6a55dda338e2bcca1ae535fc7e058756be3920413c08ddc58f6f49a2418698e471fef853d3c9a64d815e04dd8f65e854ae9005e634767580f212b918a05288c7819413944d68578b0e99b854e4616018df7711025edfcbeb517f9d817507fd790123d1f3e461b03ac58b1cc8835cfa1f228d276680fb9dd6231c1a5d336df3fa4e71e7a0c7b540594165fe6fab15cacd8e7954572fc355dbec9aca401af209706916e6318c55b0d21c49f8e1daf30e0ea831bb5de70b908d8f6b16f7e9bf5734f38e0b8bf99856c734718923cac1494301f9160346fffe51fc72cb8dbb3d5094180b2fdcbcce311a2308a066f0fe10729d67e6179811d5e43db1f36307abe868e15046d2e9ca96db152b8b57b1e0c9ecbc0fa20d00316bd27ec6d3991ad7fe88eab3aad1f0167ed832a2f26c7a55be18241b2f9dcfde1d58b8c51783c51afdf94fa3322edd58c904b1fbb139cca5956689d3e65d07612ed9e8755c6c01413ad2c6123c1e8e6b1c01cd11a368b4e36de14695375c83fde7b5b3c17849a0972f54c33db9977ae7fc57f25a7e76f1966b90b6be9bf56c0eda88c2feb5f76f04afbf92c0710daa9a75b8ae7c1507aa6f787701989313a12418f2f4d12d48202cf889ad3bbd1afe67215f52da8b39d16ebac46623f24afa5367b7e1df8d5a2d796b7d73345e5745f0a9e7ec47e1eb9a3b1c0f6223f74d2ff653025552a003b598c434419ab1b7c6566af20ac5d0f7b28e76cccd141027ed32e772cff09503b1fa36fa12e5e236127907388b46e900f004a34440de97d799d3502bdd067806ffc796f48ced42a8abc4d1912c1f863c43252f8c9b9b80330c41f731cbf70ccb6f658d821743e3f5e9b253f3c89e336d5f030af8e73e01140f948cfac074b5522918d67f8ab538d00858e580b4057055afea32229e36414042e0610d57dc4ba0795748aafb6a00aebb2d8c7bc94b6ed4d594b483584d95011559be2c93cfa36b199334e5e035fd49e32995ecd05a2055aebdcb811c9400f648ee4fb11867d7890b23846e816c9b508f00f3a4dbb3868f01e6edb537914aee9189e069239a3f5e86e37be36abcbc3f7c5cc06d33988361366fe0a6442225eb062de221a970cc1ce250b199dc19791d908b2939d39ea0287ec7515d032ea1761e043ab4d3d63ecea613d7e7d43fb42887302bbbee0cde54e051bcc69f8bc4a64526011792992677d566a50ddbaa6828062fbb62900dd1cada18b05f069d7f389236f828d4c8e83214638fe2a79a28fdb4dc60ed27dc1fc29eefb7303429e2b168831d209d5f74b1fa9ac385633ae36dd8501e2c56457f026561191f2ae1d8f25498000236089c33061abd3d3908a67eecc8addb71a3ed85c50c7ee39030b9fc7e9137ecb067d1feaa52fda5172668ae6396b621ed60c27fab8116df785942506f01593c3c38d25cc625972118cbc3eeca4aec342d860d3882781235be1e240d7d78c74954841e1fc9a261aeaf75f6ff460fc6690f30e05c653bd8bff14518a456bb7a435f585167ada81e3d4e5f456234029cec08dc61515a644fab5905b16157b5a0c61af241b161f3bc480dae57a7039d8f34d9307848cb2b451b066ca8b1bfc9f442bbbf0621eefcbce4c99b4f83c38b6da68c36dae9db78dbc0d4df097306ed748c625af13067fb1dd1eecbf840e8cbc9f21e317e53d76982f2fd9d67600a58a934ec0353f638af064de641d234b581fd664c110a0e3c02ae010a4011379486f2804ef67f541f4e8502fc33b998049097e989b9d765f156228b38013ed4aef79c6b3795359c3b3049129cedd573c0024d30537a2ac35d961ab329273048cd57fd1b4b4dc578b8ea48879dbc84a827dbed25d5a22f04c1d3ff29c2a19c25c2eb37219760f42ecbd45d3c0b29b1a9c2d883c3a6dadfe686c0457f110be40a430757bbe0f583dbf2557f5449fcfda92530ee1d2f3b07c0f4ed43a5ca8d352e39a480b72e823c36c06b6b8b684bd977efeaaf380dca7e0bf2096990270e93951416f3b4e2fcddbccf277e181913e73524534ae03479e755f18861c774599433ee11460f199a5c555281dfd6ceb329561c6316871e479bd57426a4462baa0fbe524d24200aafd37370ba9020f6e0d04eb34b9f2404417f72c7021d37bd12c8820494ef68ee825c819f2d491e03d7261063d94f20eab46b2e7569453350782e2b6656b019d4d11787e10619838bcfb5b781f0073e6dcd735a76511f7f92109268e312889e51c8014707621580454360203fa7623aa5b346cb26897ab4981c0182eed174151bd7977a1e6319cf174f33e879084fdf2228d9502fe03d3a6eafda00e6cec1f9ed9de52d5d067321735a540cf994c0c34f4dc1b1d46a9aea4396d0181f2faa6e1ba62a5b7863b199ab9c4bcd0b9bc7ae0729befb0c9dd08c10d1aea4ecf7cbe1f26376d96e854e5a21546ab34598f789a43bfee2343a4952d3f14d7894902f59c4ca71bf181fa9e91ac931a73f143481f183759100d7d894716f9de40faa454305d96367a1ed18a36b66d540b958633e9250a93a3f6a1a53782ec018110e4367b3f88213007fb9156f4de7639115ed390ed4ad610f82bd1ccacf308c4333d2578ab2a5e5d3241713953257d40cab446684e2e801913d1d49ca3a609f08a14ec33dcc8c7414475d5cbaa621e8e0771bba2af5fa21a2b580333f89d8d2dc366de9471ac3c5ed31748f73f8ababd6df72d0ce6cf488db3b96dba881b39c7e5ac4e87dc37d2fa3f1ff1bcded858d475cc0b42687c2bc0d8a31f0266e7c980043e3d5cea0cb0171514962ad06f40db6fa8d028a3f46cd42d5d88c6c1b8cf3498a1d4d39ccd063629d4632d76b38f24966cb16dad053daf2ca999936779cfb6fe1e34500bce70f9e216e968740b2ea88d94e14cff3d6f65f90bbbc7a5b1bbaea8e975cef66489f041690ae80a01001eafd5f1cb09543ca34b8e289bf409038078c46669345022ff94256be4aceb92bf0e45fdc3373fc42855284e7caca42d87fa81bb319687d8df9fbff0214cbfe8917a25f6645b0b3845e6d23e05236ab47224ecea100ec6fc5028be725c1035ff5723122b570a68720c3c0930b2648d0450d0bc7c595087f30a385f5e7e5011a9c15365e714371ac6bf2aaa3b443864d43c6f3f866ca86189e595b826175accf7cf6bffbe3e881546fb47167be37c91d2666a6a29c6e8a7726c648e0a9daee37503ce20e9bcf2390fab94a58d92c261b88865675f1a185b0fe65758f24f2c44c30f56a8d987487a5a3121410cd5842ca92f07f6727f32c2983c0505ce4c1027777c1b783038b3bd85d2cd2829c754ee85b813ba7436389ad7c4c5430626fdbb4db344d9f304921d0390ce5692cca105ba84e1b008fea29053ed8554931cc6cda66632462978c9944a1018d86ac2bee5f1d84d22bfb8e60f0a523bf19a0397780f432b158bd136fe754b393aa3dab63f4d3c2645d82737d2f8963410e9000537b5d55fa852340146441e370f7215e87615ead5b512a62b6e8e6849edf3c41e78ee0d34c989060aeda1da97d296f2216a065acf86e3f4227493b028ba0c7d2b695e7f2d21e0df9fd7c0716163004ac2ef6edcdf47c755a81689e352a82d69e56534b054e0fd3a304021502731075feb341e2ec61d28030d83f1bbe26825c51e4a861a36c46e67d5f5c48b58d0107e6680a8482fb641ce1bc4722c4adce17c9e268421d6443a028b512ccc0564dc319e955fe6d32ca1346ede04616132504db999da6daa0516e1b3399de43f713da97f3bdc0183e5ba9a198ffa2d49c0af802c11835f84bc2b88f6be2e8b2010f4672e5bbc6b57a3d58f97cda167609113015f4871c8cb6cba4e16d21edbf1ceea6bff07610c1228187cc6526b352eafa1b09a03ba7f69d8f91b7d568503fa34cce7da17cfa63dd29aabae0046e21f7d3731f51b96cd5e1ea9bb057572dba231526a0ef6f87032990de503831ebd39b895eb258dc9bbc81027f0e3d2700ac37a02e63752168fe6550e108a0570b1365df0734a1b0d26b60d736d46b6f42fef90ce47f6085b36ab96aefdba0b74e0f1d724207772d43cae5161c5ba7ea34d5aa813a714f9f0cf8e19377c7344d9938d2e6d352deb3331c3e34448746882ce408ec5654072cf85092ab90d98aaf34c354c516ce0571bb5244bac6debe78162102052e52bfe00f690242d20c20f5c974d14327b39ede0716ec9d00b92bb2aa8b0f1dc962dc769194c610331ad0b9f8e9e130c6038619396987617ff418fddf40879015cba98e84eceed399eb372d53bf615860885db6bc0fe05969f2ca20076cf2247000c048d0d7e79c9c47284e19eb47364934af2869982785998d574eb14a083f382df46f14c58500ade9b473c4a4e83e675533195b29865ccdd83662620c0ccbf4f0b8b5c7bccdeeb0a5e574509d4cb93227ba26449d926c98400e3289f1aa06b1d01ef382315c2b359ef24b1fc65b2339a454c1e8004447349d0fa3c100ba9c11cc8abfeb8c2975ac17f106ac57af0f642a744da795a0d1442a7d667b9a192dd0ddda1f0cdab2336a5617ca7745f5601fdf954c88fa92408293ab80d8d0ebb0178c196c9f633025c5d03aea905120f3520b026e9ffffffffffffffff5f1c68bea1b5c83e413ba5945d299c6a1bfb944899a44c29a5f47b8fdfc03d008043ddd6fa5bfb0d04d90e8d0e010f75d4cd26562e57a1504c40c2895e8eb9f5cea7650fc9260e16a35f9b23bc6cad5028148a10124de0a3cfea5b3455625d854221c9c4c2cb16733247bc1cbc8a07483071eebad27a1ba24274150a050324974035e8d20ff5dbf28b102143769058e2241be3871cfb4ef65728141f3d1e086f90160081a412c68f2a53b233ee4fad5028457ea0f1a307193b3eb0c30c1e144a19249430d96b78c8d7d4546225904ca28e4bcbb1fb24bc7f324824b118abb4934c3a7e50b742a1ac31a4081a428688608d1128904422193f395aca573de1557a7c1021403e40a17c1021409a87094820e167b28f79a4870f771f917a5950252ac347cda6c88f60217184d1b5d3c7537bd3ec57bac89ef1233883a411d7893299d1dcabd6644472dbc5522d1fed63ae502845b288c5eaf849e69afc781135d028a206194aa208b3cdefe8cba77c949708546e102ec66de94ee72042f9cd562fc8f4536b8100590a65a417248740746f6e54f19c2b63150a85c4105a79d0b992b12fda5da150821004347e548814d9c10f7e30064921126b3134a6580da5c52b3d7af8705f0aa547911f3bc40c0710e131520b1242d439e7a4b221baee4a3c201984f22deac2d8ebee8a404804816c884e6732d3d6a802a1a9ef50135a9031db76400208fb43a580c40fd6070d90f0a103247b58849899cccae64d1b3d20cb37661673f8fc3fca83a7a3e38cf0514ab5bc63e4092478d84588c6cb52064d1dbb43257418400813b1d9256374f82a144a0f1990d8e1b792d7ed4d7381a40e88922d48b1ee93e94a3af4354a5cb43a7c1e6f0e082de5c84b211f64cecae132213cbd6d5b12af89831e5469fa36f3b05b51c0030ebf9d50a2c59ce772cd37fca132dc4388ecf00781c40d66f1c3538dcca9f9b2e880a40db6a9103d5ade16b3da6c283b66973736c7cdbf246b4028958d80440d89afd898d135ed3e3d03491a6cd9faec53335d8e612790a0011372748c5bca3363f00ce7e9ecdff98216d748cc60c9202b4325838a840c66ce3a5a0cdd4e1aaf3348c68012caf44a64cb3d273198d4252ddfae49b5bbc3b09cb7ecb22cbe59d4cd0748c0a08b5184901e4e3ca9cf49b083c72244c8c81448bed0b99cd37ee68bed7c9178016d52b45684d866bb245da8b6674f6ba7ac8de1189070c1a4ad3ba6da704a3f5484640be665cfefc624d76cd3023268d08e97f7f6b33049166a69b4f0662faa7521332c282ef9c7bb2c4813fe0f922ba4d74cfbd3fa83522533239058e1705af89061e131775d4820a9829f9b5d8490c963d0952d81840a9bb8aa5f8b2784ab1705922928666bedde17d2ba94426a3bcaaada6b16931b0583cc41959516e3fa8647884002856b947b109e325e1a2779026aa3c8f969f94f3a86051227f897f9e4a78c7fc89bc0b9a84dda7254b428bf09d62061c27133b4acb37bfaa468078f21effb637c816409a97ae7cfee82b91883244a583fedc68bfb6269e9ddc163440d2449f0673eb4f9698ff09c0409cb3ad27368d0d9e553931c01df3df978d5b9c5faf0a00189117c41b77fcaf8c17deb212445d0b396e8d3c15a0c5b572814226bbc094888708dcb3106371152f3c3c843630c17c73e35bb08231dfc44cb65cdbd3818e7a0c963653fbf187a60d829ccc5fca3dd6ef48b46aeaaad5b871f61fb62392939baa4c7d1d9732f52eebe676a346cec9717a7966fce598eea5229ed02ed3899753a66fe423cc6b0a10b3c56c974c236f8d79e8be267b3cf3c4bb24d8b8b544c8b89bc4837d1de6231959af4d3cf728ead2d12fa43e7bc06d9a65c42b0011bb5b05eec51f1f3ff2e4f0be33a9eebf6cb82d4cf2c3acfe2899bb3fb68a32c2ecdf22fc9b04c77b958fca22e95bcf41bed623e60031629657de99a454ba735214182fc2b362db6d421e7f469e97785ef697ef75aeae0b29caa566c2dffc78c3ae1a5b34275316eb6ecfa2f6957614b2d79c728194f67d24c15589e503ac6e8bbdc5c552aceee1f3d3a6c16e39c0c15a66f0df95f5dbac33ac5f9ddafa64cc67c9529da4ed519c2f65298ad4ebcac194c9e1029fc9cd1a3426d5b746d368ae6846c2e53b52818b5fdd1dd7270dd7c28763176a6966aa3cb710685aab9457a4b3a28dba0fa84152a74b635bb93e59e709398f372df642df59dc85e2a0dd38d0bd32d27d6206e4ea91dd7b87813c918a5223ee5baca491328213a6c749c71599499b0adabbad4dcb6e8d3033630914bf722cca52dddec5e62abcb7cad1dc3dbe996e8fc47aae64f765f77258ee95d18bd6a9d9f8b12e7f86b57e6a2f4ef9a846d765b32aaaf79924a22b51003087571b4a9ccb95a88063622914ea374260f275347838425634e7ecb517bf48f58d0bbd331a35a079976041a546ad0dc9b51a3de08fe64741232e6959e9911e6965c12f797ffa55b16b1b6b095a2d153b5328ad073aecab2de2a994589305a8881c3cee59ba9d1829aaa10c18a9237279b54478b561d6217397f2edaa67a3b0d719cddf8b29cc50bada74264de591643e353ce7542b0d9456de9cfccd8598542e901031b83b85ff64e5dc99051474178b532a3f22ff4f4814049d3dca921645073550061aa385dea82146f8fff70a6fffb244be78a1809b1e107fd4bc80b2aec84d0b93ea03b6c9f54d5ce54994211810d3e18b3bc9805b57699f53da4f4646eb7f0cc3d69850c1b7a683db7986bcb4b7b4a79d0c33574b08d2d0825ae22d8c043a536bee9d8a53b78b51a1a4a93965ddc54cab06107f378b7701b4475402dc4c02ed967ee9c2de697518542e9c1021b743087e7341736e4898f1971828d396c42755dc329196d747258d075edfc8fa9db5d1cce29c4804164cc0fd7efb225ae502866d880c3721b4d874c2fe98aef0d4b9d65d93199e5e0622f36dc90e8111e2f7a9b4a8bb5a1b410038e4e2b8f2f68feafa642a1502857021b6c5812bdfa1e83d42896ad2171f9ad1e62476f988760430dbb2ca9daf53519174649b09186a3894c8b4d42b4348b86c459c924372757ab3e3c43bbb15394b85e8ed948b06106346630b15a19c43a53a1507a10e1918690214ea10c2992868d32a82ecae4b5c8bfe8997b1b64b8b4184dd37e4b324dcd818d319c3a6570590efa5c4cdf5760430c29b139c8f0c266db3e2b144a0f109861230c754e9da5dfa2e79eca47ff0e7c74c006189643bd1c6329d920d5f385378a564d6da667d2b5e185af3a4b6242980b2eea636e0c1e1fb0d1859396ab422651df305a2e70f15992d7f7b2cb7ab670106af368b0f4bc1f75600c36b4907df86a9211a3bfbf34d8c882a15a849b6634d96859c10616169dc96566b4b49a3f57d85cd8741f75fae6c430d8b08262626af25ea3ff9c7060a30ae8a0333667667549b378c106158ce9e4b75422e4e5fe60b031854f5b9e0859fdd0e389c186148cb183c9dedbd1f5980a8542840436a2a0f66aaa26cb51b77148196c40c1561539e141a6c808b58d271c9f6dba1f7eb3e618102142b805369cd056877ce9b4a511ea63a30969a97a88ab90166c30c16c49e95ac709d32d6b63095e657d0b5ad059f3656eb0a184cb67465c678ea790b191845f30973d664d1b48585bd0977fdab9c63f1b47581c1d5aaafe51a7fe54a150823c100aa5881020446c18c1f091a653cbb5c84c19368a60ecf5ca51f1e2697ed0b04184b62bdfc52cd22cb359358cf664cab6ff1ca3789622634418facbc6b350374fff17f9329430120c66d5dc93f2f994bf0103a13e7e8cd2b73a9da130f20b64edb61ce694cce78bf9a2cfeecc902d9e938e9230d20b5dd2ea3a2daf09918b17e89459b8d498fd39096164178c4c73ffe11d6b453a84115d5c9f33e4c663a37d2e1749dd6c9b427a4ca736b8409cb9a4fa3fc8d6ce4118b9c522c64ab898ccf12519208cd862d9b76d6e74b62054b7230543466ab10bfbd1fd5bce7bb32d6184160bd6b2a8fd1de9e147150ac5c719417eb4606416460dfa3d075d6e5af02b140a09466481b7fccf8d9646e8dc2a148a8960241657bf28cd829c2d19afc16233e9a34fa585b2f2033b3cb0a3031480c1c82b7491517410faa374daae30747251ac737cb30f7761a415dfe8cc39896dd78659616552d2da4b6bac50166164150bf2bdca5234bbe5d24811465491fa370daf2e271d643215987df00a1bcf413d8a0a6fc43ec4e5d2db629d0293a6a9a747269953ef8511532cedcb08d1ec92b06bd9c248295275dd6f773975fbc78511522c6aaba73d9df2e61e851beb73b2bf4c164644b1e6bc474f675a78513783079091502c469b8d1e75539ecc486104147aec8efdb2ea973ce808239f60c545e81caf2dbb705d61c41369f94333d90b62b2fd91298c74825fd590a673da1bd9d284114eb8596c94fc1ca369c9d3831f63c8f340c8097064134be22557d625f574611e3ca2895b34fd24df5c52edee3137c61923994888b51837c7fbcd9249a18c18610413693ca52c5e7378397d2818b9c439e77e7a9641afe754306289c3ccbd5fecee6ec7d0d990914a9c937a77cdb76dca4f8f3c6af0589e053c743042897a3567c933e62c4bca349bc4a287854ea7ba463739f2841149205e1653669b7f74508a44b939296b59cc7f17339038795fcb2ae2925af1117ca83f0f4a35c6b71c61d8d479947adef9ed8430d288decf4cf8e88810751719b22a00c20823f410a7b4a0638a75310b0c78886064116d2c8f1d8f5a523def8311453857ff23c7c59c19da652411cba2889316f2742ee522028b139935f3b1ebcf228c1c42b918699dd92f9a90971143b0236efd82101f4bbe42f0a2b2b63b83c60e0d21966cf44b31328f69b91e8c0ce2b42e8c96a56ec93e8c3c4a302208838c2ab1b6eefb3bc84820f2d0b310f9e24957ed851140a4352fc8eda66eaf3f07237f5854b7a5d254d712ca912d8cf8c11475ca644cb4c6443f18e94315ffa11ab470ea563e14d66f2f473b1dcf9e1d8cec218f7da576c5af25cf52010fece800055c30a2874f66d1b39af2d3464f0f214582908042115224c88f11248ce46169347dee98d634784c8fe04117a44b1fb5356816533918b9c3e28d2ce195f5bfbfc1c1881d0c6be22ae7bf7a4a385287b42ce665a909f131df9f11e48100d94a7b60840e66bdf09299e7cf7d9a8a0646e6907079e9f3e5e898a92a144a0746e480779d6e798cbafe9f0a85622371489f7bf86e93de393e66502841ce081c7031858ba94428ede35528940a1135802c67e40dce9cfe1e939e25752d951c710332565ec9649e6f7b20bc670839018572869013a421040514ca194280f040236d58ce49ee858f27d4279d213a20c28605cdfc49943c93978f203f7c0051030d4a99d8378de950620536cdc2ddc576416c388d922a244f6470cf61e572de50410ff6415fcecf312feba0640a670e3f4a73b8e4d29d8a9448c11f535eebd20897c71305b3d3e53c95aa510285b39cbfff739ab172f91e943cc19e0ffe495c56d856254ea85e16ce8468db91df3461e964c63f2d4a65061113ee9126c746cf7d66be0484cbb2a0562f4bd7b610a14409eee9cbeadb59e4334bc25ff51f56cf54466d2548f036d43a0b72e32ebd52283982266465ce3254f5dace030c254628f356ea5767edd5fcc8144a8a908e6fb2af21e5eb472544383fbc4bb2ecea93fa87910ca165f1dcaf1a2c230c6d93b56c1e7392f9f3c168a3858c3efdfb72ac81d198c6ec52e917e76ee7028e5f187473ceef7d99a3dbbe489c0b32b5880bcd21ed028e5e2cf3a96fd39d0759252f9c3bd9a37b5b84e5be0b840e1f36c8df507fb22e3e6957295a6cb7794d2e4eb3398d8d352e74d944bcefc813e1a2b7d0645b5cde1cbd1df3b6e0ca4bbbc46739c4aab548a7768a10399feac938e0a0853148f3b8bd4dca679f853a1e4c6daad51673d01a70c8e22c9a5dd239bbd89b2a061cb1487bd81c5c8a5d59bf61d1478fb134d49ae9cec680e31577bd6f3ad54d1fa3490d355c91a88ace343d4f371b35d4c0d18ab3bc68317bea586126118f1ffaf9432f38e05845329338d552c9977d890c3854f1aaefe6e0e3952d7965c0918a66f43cc3b32c66fa898a5e3af5de25d46841fc3be038456e23b64967b88e79c4061ca6e8aeeabbe547f785b214bd6d493b25746866511b7090c250e293e88aae2d1d33e018052abe2ee8b89f6376313ae010054ac84f2e9cdbb5f4c13ae008c57fa5e553595377570205b396ff26f2257af49f30e7942fd26b74ccdd3cd18e963c83c978e96feec451d4bfa46ffcea53ce894ae4748e9717c3f95dc1b1096367d83fd7cbd236fa81431378ce929ed9678c97094726964fbda4f2b21c020e4c785e2efb961efdedd225cee0ea923ea17bfd634bfc31bfe54b293294e88280a3120b2a64db0be2791f3c382861ec92235aa7acdb3d9330b9eee8760a93e7f11a3824b154d2b4b31c36aebe0c041c91b8ac94c877907299d338209116ff4ee7b49de44a2382e3118bd058a2533569ce6a111c8e68f3b3d3ea8b5b52e34582fc0e1a611e3d67726ab46c310e4674d2f3486d3173877f11c9facacae527ff1ca308b36941cb5f32e92c6e124722963ca89159134244de9b547412db76328de3108659b8a6dbcf499754a1507aac0087214e2dc95c2ef9c60ed316822bb5ce97b9c5969f0981ac0d6247278fb146cb2012b7937566ee51d614c4a74e4b77afd6393f27c10e8e80231086689029f3e85afdd0e300442734c3279dc48bb0ed0faf4b7fba697f63e893c7081570f8e12e353a28a55bd0ce791f7e4f2a37669b92a93a7c6837e5cabafbbe0bca3d98633a57b3705b6f3240e0d003defa2ea6311d2ed2c591074d06a5e307d5c1839ec13b6752cfb27a66c71dd2e922bf838d0cb5100e3be8b3417fdd69f9d2be0ee7a79211a183163e6370d0214f6e6ab2e5dba0dacec1723d61a61be7dd73397c2a3f4fe897e52077c7c14e1e5e38dfcf57adc3a1bdf8f3ffb737d5fc1bb091adbf254369c9eb862ee45e6d50ff0f236a039ed5d74e5a0737311b2e4d391bdafb3cb8ac21b5c993be8af33c32480dfa865bd1e349650a350d27599ec55861a6625e3430571b94f224739e0de1388319a3668fb1c48beeb5197e69de34fe67e7ea5a06a49e2a0d7f6fa9274386b76646e995935af2312c8b6897e284d87fa912c3eb79fddcdf5d740fc390966541bb78a32b365a38c0b024736631ef5ce7cbeb171293b1d5250fa5e352010ae0f0421d5ef6e431f87678d20938baf0a851224e6dfdcd4f3be0e0429e74aceee8e261c428071c5bd8c2b39cc2635e870b6b01cdb2e039ae2b3ea8cb1e7064414fa183aaf354b27ac3031138b080ba3cfeed63215eee153619b6323ce89569d00abdc60ffd8ccb360f8e2aa494d2cece2e627d5a2138a8d059b767dfcfcbb0d714fa734f173e6aa470343da2bc7256d36951584c22eef733b61b475070d4f4a66ffad37eef13ce39f3ee59f27821762768319a3bb5790eb711471336d31d21637a69d67d1c4c58162dcb39bac98dd9b4845283ad854e5a1c0b991d14ca08147028a135cd497a7d3ef3bc712481cbdcf4b2e9300dfa47427fa5b37d9c16ab7ec471043f95c67cb285b9ed7ec408388cd06c97bf24fb71fb597014e1b4defd292377379b65ec3083071b7010210d4ac81cb42c4a4c334e8220378661ffefdbe9b49b1a2e1e3cb8210cbcf25b18d923faef85c18d60f8979a734e89f8b938083780a1e8abe98a0dd7fff42f9a4d253fb77996e3a6377cd1470bdb10db8d5e205ad01de48ba35faa122f8e494b5a374407d1a71b89c28d5d98f7473c6bbe77695dd0b8a10bbf5ecce2b9eeb3e48d5c546ea13f68102b323f5cbc5174bad32dbe28371fbb718b3a4993a3456bd11afa19376cd1befcc29bf4962f6fd482ff71f78af130ca0569c168916636a7172fa6417063165eeee896728359e54b256fc8c2eed29b4328f3749d89855b3addc9ccb259e91c168ea507d18e2636ae375e518e6cccae08a5ba4e3ed61852648d2166f8e0862bcaed8ca31f7c5c96cd8d56bc23e6b44e4d5dddce8a723b0b2335c4dda7f583881015acc278c1753e4b666fc926010ad0f871c60d555c7a3b7738eba035762a14ca206ea402991eb488d9ac0f4a77676bbc097698176ea0226d91652f6edc7a48a1f4b8710a3b67f320c73ebf7f10de30059b64ccd222747f964d374ac19e509a4fc789da17448a7efc65d162927b35fd28ccc2293d2ee5bf203f14c5aff25e1ffaeb5f344381ab66a674ddbc7107859d9438951e5d64c554a150d0d98d4fd85b5baa715b3470c3130897f34be29b5c9a17d4094c6872154dcdaa38e1cb9296e518745ce42b040885d2c30c1e7a6313a76dc63e1b7797daa48993dcf49a52643df5ac50283f2a446270231369f54ba9979dc5b996be8189f25ddce4a5638c417d38b871893634feceb7b618d6ac50286b7c0e7cf84863c900411a372c910921a3c5bcc59bcc520972a312bba42fcf6bc6370b9912cb9de4567d5a0b2fd24998e474c5075d4acc28894bd32c73468ec41e63eaae4abc5a6e2061d0c2ca7ff99db4b91e818c7625f692bed9543b62cd789943456e04fa3cc8bc986e4c6c0c23aa1ff1f41dfa49445bc427538a1663d6d42fc82822b9c963a9e83771f32622bda95a3fbd05116b9ba6b8d4a45773f010f7cb1ab2b6b3eb976a88c3568b4c5e1ba27d218ed549defd5f1c194384a83737094da20e6241bbe8a36563e3e122887af7c445e4546d7b02a1b96a6e8797a5b69602c45e96771677f299cb3f94293bf4cb1532c55cfc703cd9bbd9da653355f761318b16f499c7aed21d1f7c51449b667f8fd2e11ebc916f6974e7c57c1a3da0fa6236bd59a367799407eb33bab5a0257149b77848e3d48e70595bb4d37207f7cb37e90d11cd496c87c4b608e12e57d98b771dfa1eeddaf624bf43890e9f0e8fe9a96ad47f9bc352d728194beeb624be1cfeedda4dcb50a3b5c7c1ab8e692ee6de6e150e076d97b2ebaf45cfd11bd2820a73111e37e4886e30a61b1f2d4b6b19a4507a74e1461b96ce4c3c28eb7c3143de070c6eb0c1144a93685c8be3a2b60683f8cdd794b15c45a5066b6355b674e67cb3a501599a6466ce92bc946d8542b98186b324b3b4a9e5d1bbfd9f21793a866dc6bea69868dc308351839dd2a74e575856863ecf8f0c32ea28fd20192e9db3f0d278380643a5f7ed79c7cb825c0c089d74ebf3c89918330c9d6cf6bb0b1d3ee9b2470b780829128404e70618b24d214735a8d5f760854249038d167c60071a0d031e3908f2a30c341a06144a1a68a861851b5fd0427b5c753de1f6a2150ac50bc8fcb751c6f647c9ee46173479a1f39fc7179dc70a8532c60d2e6cdd39095f3ff1597a1f49b8b105bb94ddcc9cdc95d8b5c0badf2659b52f66f12c54762f664136df4a9a2a14ca0d2c9c95d651338dd41e9d2b1cfc64286d9a1dc65a2be4620b5f6f76f23a73a30abd68b247e39450ba57854229a286101f43bec8b23e6e50e1d5a4f47bf02cbc6cd21937a6d0f95f08d31a4ecec72a144a096e48e1a4337d12225406e5e98d282c3a42ffbd2511669d0a8572030a889810f7ecc93c5f76e30998fd75bbf0f2b96c31266e384113b3fae25ee6b02e4b8542b9d10436ba782f6d3c31e18e254d66cfd2fbc6d012f690ad27741ed7af5809575e6ee6bcc9ec68efd8d1881b49d0aa4a6eb5b588ce1824e0699d339c8a7ae14442b8710473668dba58a931a9df30c239fd958b669cc73289e04611baced26cd58b9e7ac20a85e26388101f3788601ed3973cf8f76b8c15223fce201986aaf126b6358bb174148635c2cab36e859f9e4036480a7698c183470f4882b1ecf6ad7afa51346324c040b828a25f74b7ac79aa5028fe837d90fc82974b58c826f5986bf285414b8b39c86c39bab9235f20e9c5f929ed3795f87c59e3c5b1abc3e77e395c6d5ed94532965de69ccf35eaaa50283dbc078f35fa81f06a8244178728e1af295bc47a57e99186902120a050d21032c4972417b8695c898c2d8b5fa4071f8442e931440809289421428690e02217b477d27ecf1dabba6087097e88191e1883e4168f66a9cd31af45cb1a5b18e3a9bcc71a51174f1f6b0c296204925a9854b5cf7a6796fe57a1504868f1e6ab7fa936d85d6c150a050924b3b85ecb3eb5f4a2d8c724b2e0bd3d73b47fdff0b158186e166b5a34bfe051335828ba32f95ea5d67f55f50afbb4a063cb6a1a74ee0aae3a5fcc34b9b0a1a9a881462b12cab468a7fe3ac968ac4086eb0bb247e3bf7c568440b28ae53fd5a5ead59d2edf83480f968c1d3b3cc80f13ecd8b1c69b60c79057018f34968c34160d0ae50724aa584c876ca93666411b832415a832994b9ded89bc2035d240c531add8b9d6cfeee7f857886c25881a88e414c8f4d87541aee68fb2299a9b4f117e363a8a0e059252986d3545acf8896bb9041252a0d64a78966ff5353d0924a3e8b7c74b84524286dff41839028928f04a578d5dbf310b3a150a45c8730d4842d1be1c74de4d723fcb493e6c40028a6d655ed2e575c247fbc462688f9f3e5a5c8cf7813408483c7136d11ce63eb46a8d150ae5cba80005786880a4137dbc04a6e3117a8b97902e88b0b5d9119fe58e8ba23ba6aebf11eace8de8fc72c7a42646b8396a89cfd5145a7e17715abcdcbd24b64d981481169312ff9149fcff9308ecaea5f11d1dabea2162f13de6a4a54fad7dfe21b46c6d378ffb2eba980e439c5daa50ea41a8a310093353a2ff628ea5474264a774101dda61358c740c0225f2dfa1ab6de219415c9e7342544b29994c3b7aec385443123a02a17b67fa19cf498d782aa60310698d25de3dcb9b6969227fb863c7779d72cb4adb0f29530d0365e8e8c3e7513c68c6ebbf7df9a0a8918f715aced1ceb48734dbcbb9a7b76c4646871e165dca164faf9d77b63ca0230fbc494de7c2bf201a204244b083043cd2583280e8c0835ef2711acc53ea7e8733a39c676cebe0f5d06187d3e7afd02c682b29ba0e74d4a190a2a53b9636d5f1d3c10bf75a936ea65d2c12f02812448d4a194472a0630e6ecba64e86bb6c2bbd1cceee71693c6b082dfc5671307a7e55cb30974de570b0374ccde6d6af53f61bf0f0f2b796d966c7ac1b346bb1bbdb35cba2aa3e74b4c164ab73a7557d5a302b14cae760c8a2e163a4093ad880f88d1ef38fc9870874ac21976485cd6554fb0d8ea1430d5707516ee2a74563bcc690226b0c3183870674a4c1bfda0ff662e9d0361a96adddcfadf48671171d6758ce49e9dbf20c992e478719f03ed992085ff3245a7494a1dd983b1bdb21d205e920c32e6975495d7addb9fc1874ef1cfaa9d53fb62a051d62406a96acc33a640bdac6828e30f4312eb68b2630a4a153cccbc9aa2fdc262fb69eb08c33dd0bc99ca1772db2470b1b8f26e8e842ab59d2ad6d0dbe3217ac8ff139e924e6a0859c40c716ec5c5a3ed526a4054b28395a2dd8c5899d053b2e93e753e271f43ed78185fc54559a32f5b1a22b38dac23ba9cd0ae74d152fe8c8ae1ab70a76cc41ae892e95fe4285f46b84cf8a5cc7141cfbdca6c3248564fe6472cb45e6aeef021d5170b43369c9574c5f282b44768c24e880022fd2ecbb4bf404a4a8cfb866e9fbb3dac1a3053a9c90ee9bee1e93cdf24dd873a876b9f81d539a28e86042f2d39dfe2cc6c60a7509eafddcaac5a911b312baecf7bc29cd6499ce2c09479d5339a72eb59c749070988b716f5d8c2f9894063a8ee0e8fa58f66dba7a1e23e8e28e962579f210f0d05184efd7e517d5d64184ad6ab4143a439e6318791493565e2f9c0c1a612cc598271519291fb3603c1afc93eeb94b752e398081a7cb998ee642851cbfa8fce5f11c6bd53dd852c8e10be7e56a69bcc6936eb017a64eefdefaf2dd265325072fd0d7526cce889aceb2ecc26c9e6b427390390b3a5d2cc69fab3f1551f2ce452e6a0bb245e6ec713c5c14be1d17226a3b654c8e5ba493b86ee8d4eb828b2dac163d9ed0b9dc3a7db5b0de93a674f185b99416e6b96f79fef45384c66c16069155e235faf46a4c16679bbaec2dc23a6b0b901cb140a98e897cf753de162cf6f19edbeb3d21427e85bdb2befd1984fe6e73b8021d7adc63964e3f72b4c29c4e58566dc8a688a1908315c69c29c3dbad4a73b38a5644092de8daede45944c002175028403e0743860809b20cd9018f4a0e55d4bb9b7369fbbf8c752a502d26cfa432e37c6ca838ec6953f72c27db5cc120c729f25327cd74d30a85f26359cc7001094420020ac5070f729822914177480d2a428b7129b8dd4d7a936b69973a52d4c1ac4dbcb83b2e32951ca3785435b674c2e5369953a150d0103264f1e13f28941e3944b16bd21c75af0d2147289664d23be27fbd3b64d628f2a3370d1e2ac8018a73163385ee4c6722ea4fe49ba2e4c7e6b54587c708727802194ec7f4e26916637ad4600663e4e884ebe57267770ce2dc1ecbfe09800051430463e4e0846342595aec8891e5b289e46ee7ce057b2d936aa2901e069acd7fd32e8fb860b2ca08726422199363223288efce31d1821c97384ecd8912d16214db2c71defc1d7bf368ad5695685485bf24ca5b4cc6214342d0011e6ae4a044ba9312b2b55e2d7e38894de964adbee132264ac2ec577e1bcf9465b22b148a193cd0c811890531325bf369b1ed7413e480444a7790d3f3e5a2259d47382fe8ec6b41783ed17e1a3f8442c11c8e405c56d66fc84f11cad18893b4efb950f1e111f920427c50283dccd891820ce4604462f7cd53839a49ddfe906311c69a6ac9ded7bcb34b911f1ef8fe01a48c223f3c70460e45e4f94ab7a471a4a78b3e47221837657da644798787c8fe00d201212828a2061943be0809d0c88188caa5963b77a97c11a3436c1a64eafc2acbd3cb10bf68139d4dea85e8b5c517b4769637ade6063908b18a74714366730fe618c4d2c6f61c847e8aa4a1841c82e8f4934e22c3ba98758e40b0f32d6d88ebfcaf690e401416762d9918792ec8fcc19262d2c38ffccb59ca0fe96931690e6da1b6357d303db6a64d9b731835f2a11f7d5e1a5b0a0d6afd418e3d9844b908137fdafa3e7a3079d6f960a2c469c7f2d069b79c635f9664b38b87c375d6733755523f78079368590c756a5d633f3b1c22f47ac8c9f6a043150ac5478e3a2c479725b1594c7df5243afca6344f68c9734b9e1c6c911c7368ef5d52316b211b26e49043d23473df650de2459f230ec771d366b695ad978183394813e24e874dfe826fb8c54fa741630c67297e0e863ce67043755a96378509eda3ac0a8592a30da9f2785d9b62d46628071b728bbbcd697436cbe90a85e2fb951c6bd07693bedddd50e2b31c6ae863fed841bd7c6b144a1939d2f0c776d192cc7ad1b1a121a17c5f6c39e796ad4d65d907b2ec9f804251428e33ec9de7c554ac44ffdab1ec9f60081a64842187190e328b992c337f1e99ca5186b336ddc6349de3aea9b2831dfc000185c2e37390a13cb7d20ea90a21c718707937bc18ae65173f2b864b6fece54d9e592c5918ee1867324c99c7b8be42a1f858837dac01240d11e400c3f5ffb2312f7ac816fec292b0d3b95f428be91c5e48e6b02f679caefd0e12418e2e547e4a86767707fd6785071fc40a39b86075ae97e24369f1650b27a5b43c2ea6726821119131a64d6c102a21422a3e80f80f27e4c8023a440c24645d1683bad0a5b53f410e2cfcf2a796cabfbcb1ea0ace7a6731f784788bc86105334646d5943dadf15701659f54d7de9e830a9d57bcefc797b27d9c0216d21c5238dde78b51d3980bfa1e447244816b7b75df74325baa3a90030abeb70b6af12d9b2bc4870f223f28941c4f50e4f3bf18bfeb5cd052a1507238217d215bce6ca163f6a642a1f060877ce76842a6cc3ac79dedfdaf2a14cacb2007131c2d233f57ac3ab89e6309c7f839cb1dff4709d35528941e3d783c10de31e450826ec2456df7ffa42906438e242c9a28bd9e9fd4992c2b14ca117220e1a0c4bd2ce6dc3174d8731cc131ed632d89b5f479ad50283d2a398ce06a8ebdb74c3addb4150a0508398ab0389f34785ba942a1502863e4208259fdbf2a5f7218e91462a0441829974fcba3267f470b0603999a5f3379d2596b02c6924bc285f9f862de722b148a07f9327878c92f7e41abc65a73bf0efbc27aab92997d65938c25bd4066f945bdd331beea8146c3c0837c192628e1452e95fcfd79527daabda064170b1b83dabc8f28b5595da0452613a563e870319a0b4d67d9e6eea6cfade1e22cbce0f6e1d4e6e09f1e2370c18e33c10e33c103e12c94dca25c1dffd05bf25b934a6cd1a58cb5974ecf3a69492db46febf6d861d45e0cf2638738194a686108352f1556a5f7324a6691ccd8ec7e9efeac20427a50228b849810b757b2478ba39258fc33fa7b713dfaa52981c582e9a74f6ad5e55b4c85422979455a4eaafdbd7e3bbcaf50284384f8f840892beeebbd4ea3d49256b023a2f694769f4b518542e91124051fd8410408900eecd851a4073b289412569cce7eb67bab37865fb28a3b7932f753d7b142ac8a64e6ca5472a30a85d22a1041492aae1ff1a536cb331b9e12542c5a3abfb2cd37fbda2121a05076c8b7a0e41468c963a90dedb9315d649498629396a254aadde95caa502865949422299bf7d957b7776d854259410929ce9dd9cb259daa50282a2819455a501719f333a3b436468928fa17932a556b3a66391c0ab63f644da9f5f79940514911274fe954de2fe613576a85b5ee996ba59e308b3fff6945844eab75628f6677595a7acb379c48ddceff4ef733e6c681924dd4c2ea69cf77b1c50f6982fb8bcf579e25d51820fec34710210fc449102405140a911c081152b11d45011e699464a25cffd0513a33bb674a3061cee5a74ca24cd565965072892c4d379b6cef9876c7428925fe797147e6e45b7452154a2af1a967ce9f846bbcc95082ddfa9857b48ef82c9340ab28533a6b72dcaa0a85b208f15121b263648924124a5a697bbe561f2f043bcce081839248984f9d6610dea739942071da12ee19224b2faf92472c59efaa6b109e257dc3a0c41106a5eab9058f318ba96fc4bfe5a23e6e65c49b426453763de56e404a16c1aa9df674f3ad1f2b22973f8b62eaf499d0599607419624e20f6b772b669620c2dc55ef727e8ca67b39c4a1a5f6dfcde47d5f32238d124384a0a4107ae74a0871ee5cc920eece9508e2052581489487fb688ba7b1861938280184621f7ee3a1949ede39e8afd4a0e40fec7be77c69bf4dcab785123fe4a9e51472cac55c7829e9436759f3929aeceb3af9807ff6ec8c4996dcc902108cc1a3640fb5d6886c41754e7b5af4d0bb947a7243559287badd4dc6d37f359b2cc183dd753eeadd2aaeae923b986fa23b7bdea0e952620753a74ecf4128ef8d621d96edb47327752eeabe0f94d0e1cd182584164cd6db3407f745e37bd011cab22c91039e5de5fe529b49ef2c2571b0a3072966b14133642570405d34ff32791a458b63f02879c37123427e9cba4ad74bdcc06a0ed26deedfdeb221256d60de34cd3a6c304da31e94b061499a5a330deda2b99c46c91a2cad71597a8f49a3440d9ef4f498779d94d05d8d92343c2ae3a588690e427d951234a0657563a6cc8fa7391e949c61519492e12c63cb929a8994982197d3fbfcc79c725d92484919b4ce372eb869cd1d0f198ed38fa9259d319a9d7a88c00145d44043021de0818392317427dbb468e5a174ba04291143a2c3f4fa06e5e159bcc70e29d28310ecd80104c87e60070f0a65c40a256140e967cbe81fdae28a2560a894ccde69cffa3b5e85421922240d1f692c1a2028f942a697a93c9eecaa8e2b14caa7b146111f437e8d21140a074abc701855236be35f65b6544aba90bad417ab3fbfb3cf5828e182268390e974164fa1396328d942dde1f7424b0386122d245fb838f5be5aeb2f1b4ab2a06fde2eeb91f23f4a6798a1040b9e16469e1c97f342c9b8a1e40a6fbd7c320c3f10830cc8999764be932f7bae1863785b10593aa368febfc41003275f943aa16531271586e10a530c30acf3b22c95cda7a9c6545620c617ae2b93b9cf94786163150ff26329430c2f2c28f3175e9309d91feb8299e5cb0db715c2df27c285f48be567bdcc12912b626cc1dc16751dc39810b395400c2d9c1de3dbc9ac2f9e64889185f3645bb2510dc4c082d95662f4bea0e62312e30a67fbb4e7b9a7b4ef5f21220331acb05c52f3537d16e494b80a761453f1a1c2e7e52431a89067534a67efded4fe624ca1d4b2f3df36ad218614da0c32ad7aa569dbbcc70fc488429523b386307d49b61828547bfdf973d23fe7121a623ca18f9d2fe64f9ea965599cb0341f73febc3b8c56c568c21d23637db290eac25f61422765d4a38687e78697c0c7b664ed5910dffec450024abd4cc659791ef1567af4f0000f3288908042597c10f92a889184e58dba9d620ac5070f341a06df83c70818c44082ad334a06a1d263e81c318e60ce3bf91da63dde311c10c3086771a45c9faab64673046214a14fd35d1915a13e4e42c42042d53096655d8d274a534953aa9c086333a5646b8a70173b271896de0cf5a637fe831e187c6dd2f2985970f9f65fa46d74d89c624cae69be4076369d1fbb437bb87ab1c6fea69ae7b8929f178fd42cae86df8d5a6b17983e6d5aae7ac8aaa10322148a2e98cfa9bb65d5b945988bf542c80925e26229ff47f76bd4ac07dde2cc628baae7c2b67bfac4166a1ed5f5c29d6bd05c2d0c4228f5f6abfafc1c2dd6b59197d720d3a656a15072d05f69139cccc22453bca7d4551675679122bd851db91f08ef0301b2e7241659a7eccce3b2150aa5524488078884e00416d7f98567ac31df789ebc02f1318826d9c2c69ae787a8000a27aee05ad0c936ab6978d842dc8c9356289feb2f3528f5092b8cad0211a1084e5471884e52c1a992532de68f4abd5f70820a453f8716b4dae559700a65e3a557695d793a6970628aa47b0693a2ee4ec45e59221d80c14929929fe13308d9a69971428ab3946fb8586bd0563a19c592beccf1393bb8549f88c2a8a39467c1a5cc5bdf064e42f1a6672ff5f2a6321d42e3cb3801855e397b5a9a6fd7cdbe080978fcc927b4f3d98ced9c59b20504279eb03b69f5d82f697e85c88e814e3ab1bfa767509af478f079a4e08413fd08352db92659974f9bd06ec7455378925ea626eace5726f6e268b6341386868646c3a00527984856ffcd869195b3cc25aed1496595529924824e2ce1975cbb4dff159bde4925fcf7dce2e229fd2f6a4e28617a8b9aa936932c1744c1c924ce2296a1557e846ab222895d52fb1c3bc84e22a1e66c4dbe516ecb3e810442996fcea2a61e911683e68de143cb319dd638718417bb5e372736e29ce5d69ec598134630db25378e8e6be9257d70b2886364f406910d85f283134530abd6f1aa938ccf9daa1a9c2442f16c6936f6bb25f122841344d4f95a2a35a6ab8c4e0e816f7a0edaafb3868889ece0c4105e588e76e90a810791aa4137b73644ce58202278c10921b6ee50faf35975fc0753283d7a10a9b080c7901414f9e1010aa5c80f0ec2c920d24eeb9a19b36432f41341e8b9a5f6a437d7098d05c239bdceb811fa74502b2780684d7f8c79efbc5bab3f9cfd3bddcb78ec28f2133fa0e4577e5437ffc710331cc88fca077870d287aed56496cd3c3ef4d94467b5b4a8e94d7b40b46e5299ee753a772a1522fb2738d1c37a19eb49c7bf976456a150580d224e021e2f38c9831a740e31627452b3eb091e0e1d63637ee9c4ea8777b82fced44b67274be7ed604cd263eeeb0875e3d6c1d18b9764a991e1ea9fd021a5f64f8e16f5a0a19e8317d25eb69753687f8d8f2142cc3891c3a5a283cc61e394fc70650427715852dfdddd77fbe6de091c2e999a7fd931ad87e90d7679f2972fd3f2a2ae5028686c1a44c6387103a21dd74b854e1b586d415743c5796c29363827d7321a36276bc0c4cbe8f84de927ca13359832746eeac91132ed2769309a8eda25ade5cc926c068f1d9ca0e12c9a54f58e67e92d9ee16c4987c73a5997ba3d31c3e2a6a7596ff329744216224262705286c5b897479d5f276458f3c3bcbe60adbd2d2763d0934bb1ef71bbed39150a450cbb98426c0ca24fb43ffa240ce611333bd6f1693af645860849030d129c8001af1006d0c9179c31d9776d0d5af6d00b95c70e7ea525a457c98c932ef01df32d77a74567a642a158e0840b4b6a2e5b5cf513da01244eb660271d6deca4579af8275a48a60efae4c2640c1acd02723dc7173f35168c7da6e5e0513b970e9d5c415375cfa2c6dd0abcde6957f3502f9eb80adfeb8bddaa71a4ed7a42055475277d517ab69a3b99c2044ea4b098639fd0ecfc49147cfc48a3032a70c009143a8890059c3cc132f5c13eb9ac29456666c68e323328c0434f9c90f616d15996734794961b9c3481f7a8a6555458bb2c8609cba9fa936d66affef06409b647d3d64926ddffd2274a58c04912d2f9d277d0b54f909069514484165b4e49f3e408cf769a8e41e990aad58911cc2e7f4a4f2fc9e82e5fc60e327698c16304274518c009111631e392de3f557afc19439e0c0ae5cf18f263f06893619c5d2aa5bc85591875a5f9ecbaf9f5e883916b9683767f08910b9800e320eeb7d7ee3466fd542814341ec8f738c18e3178a4608b2c0858400619148a8f2168a0b183043bccd8b10b935fa04106014c7c51e489f8f89146070a60d28b0698f0e2fed19de65e5697fcad5028bb60538338d3b14cbb9bbac8e594a11fa33cf42830c90591353e070f30c1c531a9671ed3b2c74df72d7ea4d1810798d8c298d4020226b41080c92cce6254777b1d75931959fc79bec4081719b49c58c0220126afa8aa5b1a97434bb7fa714532a65a7fe9fbb4bca756f8f89146079ed7030430610556d7fb2bea6539b4ba8a0998a8824fad69343bc89869f908b2f84083c8f2c0870f21453460920a36bc37c8bd5926a878ce639d5adb8ecb58a1505860720a64628a039894c2c78f341860428a518822147b487ba92b8426a010b220c0e4130bfa5e965f633e796e7be27d119742cb2fcbfe6d2788706287c926d4a0693ce9cda2686aa289059864220226989080c92526606289a376900dd7a7949f68520947c4e764f5e37f524309223f44483bc06412441860220922438410113286014c22a18b2b4a645b347bc104031348dc9e4be4cbd26652a73479441b77721e9a3842db0eaa2ee9e7f7a0993462bb112d5af708e9993082f1a0498b741b1db1c06411b520b3ac263152ac139828229df42a6cc4f99b7689f89146075ef0001344a4636a1783980bbab9c0e4109c4bed398616f4dca83ec80f46434853286598182291418538e38c35c3022684687494acb5172f12647b5dc002934120d39c89f06c04268208049be46b12f5f3e976569e42e9f1fe630754300184e97673aff29999fcc1e0b2ac96b210133f107180491f1260c287d6e48f6b5ce506530711f2c30d267bf0a100133d04c0240f6a8712b1f127459b5cf10104c8fa48e3bd4df04000933b1c93940b4fa7c553f8765850aa1a83750c16f6e02b26751080091d163dc90bb2d74643a92b14ca1826730080891c8e31290f7ddbb51dbe1f0284d70c1e2c0b386012075cb6e5f62db11e7f56406002075b741735982e95e3592a140a1a3d3ac0838707f9223d080185c2a3df0540802c1a6550283c7860f2862a6e2d83bc4fba31f21752e44ddcc08b1b3cf7749653c23344888f0ff20348901f6db842b55f68106a21b464c286748c86d1122d65ec308347912fa34264c748266b50846b6cad12211e2f35f82526c5f77cf5b613e447084cd2e0de85bdc9662fb5a6c0040d8adac8bdfc9d93d0ca470f9333a8495d16afe3338edb26666034f8a9b4cf9521edf29e6d86965a1c71c5840cc76ddce0a65db6eefc180ed2aee45adc742f6711439d7dfcd6c6cc3d652a148a49187ad1c476292dcb1ace0643276d638e23ae65b1c42f20af6c554ec7dca03a5e5836ab0cb7b83829aa49179efb58e21ba61aaf572814132ea4b365389d84deccc8150aa547fff01f92860f0aa507274cb6604cb6f59f5a3071c2aa0829e2c387891670bf5dd51ea16cad8249160e9997634b2f29b7d39960216f69dd53dbc6a02a13e2c3471a6a50c1e40a988c375a901b639684cac40a99104daa8009d1840a7f27175f9a2b9d6416af5028144a8f35961f43de640a95104da4c05ae62043bdbc647d9944418df72fcb59d0e51f54ef4250600205b4fa565b68f163d6f8bb10143c2121db23aea1350635be8913167f3be7cf7bffb2e62b264d48ab96796f59a150881421b2407ca4216488d3c084096bb4efcdd2a976dab142a1f43841074c9670d8985e2df11ae7ce8a0f0fb23e7af4bb0005418698282195f31cff337d6d6c9521144a8f325070039324a0c3944a77b1dc638c0b0932068f762128a050da0409c60caae141cfe7cbfb8c5743070f8210981c01b961dfe77a62572d150ae5043cc83031827d7d2f6f0b52e3bc1d081992864911d07d2eca426929a2869035f604144a1a448060428405a563d262daff5c4aff3f869871021e45d420c30320f81f43cc601e66e81806efba693bd9ba6f8608594ca043187bf9a77ca86670f520357aacf126a810d93176b44147304c2f69da07b9594bb6665028ec11d0010c64163cb6b7ac6dccee2fee205b9d9e36c8d1528542f931c48c33828040872fb0393f1d642c6f4f5b21b26354886c858c1d66ec108109768cc1c3032020834261f7c183053a7aa1c5b8f02e3a7bb2d479d155658c5d97592eed8ae8d8852d6c586859e4e5918f0a80600705789441872e7c294d66dbab7df4b102c5821db5821da5821d95821d85821d45c68e3a01051e481a6a14f1918bea33bcf3c72c25b3bb687441072eee342fbb689be69fa1e316c6700bf775c1db5a1dc10e11ec08c10e10ecb8810e5b186d5bde176316e9725e0b5f2cb13b2e462b6d323a6881ce2fbafbc44597057116ba18b3b341377c5f9705a3b2419d95bee8188e05671ecd5f7c4975163558bc41f7a7472ba9a34a5bd0f18ad593ab9b2c2163fe912b7c39e9923145afa87c5ac16c4bba85bb0c2bec6ce2ce434d86c6bf0a3d88cdc20be2ef36c654a1c8a772a9dbe4bd64d2918a63ead2694ba46951721da87846e37487d34d2e763a4ea1c73c21df4969cdd228041da6b84db6477dc135853e7594828d1be6a54df310b204d1418ac4858c3fbe41150a45c728da73f142dcccbe931fd0218aa52a17847c0cfa1f438ae808c5f9b65ebe66946a9f416190bd9e5af013612dafe31398d8dc1f935f7c2751854259810e4face7c174b6ee359da61e5b6441b0238d25c3df87ff10214588c04247270c9d94c9d4a173026f91e71b537f991a6dc2381dd633bd70caf4a48963748e2e7b2c7564a217f3cb726c5ad5c995480e82a851f980101d9870839e922f4b9a5b2fe983a440c7252cfbd0efecb238a7639640b8fd4791ebe29ab62bb1b7c78a6798ebf952072596d6b3cbb69e3b993a44c724509a6c776478d1ddf41ed8d1011e417e6ce50392e0b4cb2f96d59d47bc4858aaa4858bdf1b4cab90f032de5e6a5dcfa00f908ca88412c368280e0743813018080400014eb7365311082050402495c703f2b860a1d60314000141362a604a222c2c1c1822908502a13824108503814018140a446124049124c6d3b4c907914f61cc92158f6f9254d3885cf022e64fc7b179e5fdb6785ffefdca8acf3277914a11fae578a91adbadb6602c28d97af3c06ce114da2a78b4ec743d2da920f823c90ff4fc0bd48cbf7295d7d55b48588728bdcd3143c80d523e3710404452979f2a2ceff34f0dd61091bf2114b57aea0ca1aeba1d005d06316ab3af967bc773969a9099b6f2c541596d73f9fc52aa85987fe69c75298938bc824d0581e80ae21e6339ffc11f073e4ae57ee3e19bdbdc66f891c622bb8221f65073d09a6a2df6512a1cb3e35a765b6a9123181366255be8b8889206634507f50c97b2e2217e26e02f9d6617a8de0ff01956a88a1ac3e52e108843aa401951f9f145c5b6000b080540517e0fe2c29f5735c6af8dadc6a72f43bd42465fc900455482774fdc2062420d61e5f4b951cc264342eae645b5a6e7202ea23f6cb37733e00def27acb0bf9ef618608f11e061f3eae59fe3cd4856fdfa95519252719947f57512fc93ad04b8233d8b5c8db9efe33a5ecf14e2c428ab35a48ba1846c32cd89817fbcf409741e9fb83c58ae9f6f0b5f3e809c40abb4fa6c47687a9be8a3b0b4bc2afd479a804efe9b98f0b55debb7d38a9dd6816e9c2c46c2e5e7469b984b07b5d994506ff51536841e933fe5b3a1ea9b6053a3ab35a5b374b70f0e7158bee86ff98a31e122998226ca7ba360f837fca19ec86fc42d4a254115b24245228f8abbd42e88f8bfa0306347fb2b077848e595de68980397e0d346e5b80b40c73eadc94b8e23aa5f0ac5f67fcba699e0e98573b66059042b1eae675fa4c6824cd1f648e33eb3fb2e13afd821a9eb3f27f377a9896f83a66148a340072b9bf48ceebff087df473a807dabf16477ab5fd81e4a416018bd38a787fed135272b9517d8ef1262fba5a67786937c29413f5bed3ae0b3270262c9768e181e562c531e8a507bf024b93130c02c90c3b4abf68ef873566c5545ee2aec21b7428afdce8d00e5acf6f55ebf8fa7bd5080d0c98093614c9400e383d9dd9cdfc6dae9fe6ab2b9f088d751659877e085b1e1cabe544675017e09f731e543b8ef4a60c2c88d7e081f398b8979680bb28d4deba8d7e02d5f6d0b7544b658204fab905657d2ae517f81e26524b2559f5eacde8fd920db744a92063d12e3e3d19d84cb447447c48e74b5d173ac63efaf21c46d024a9b3e9c2505dce98a34f846f65c000c0c29366005b00cc0907ec0a23e1a19f446c5ce1e51bd789f9b1f4dad06f4c9ed513c16211c66d21f90581ddcb95e837d3f973afe2756b327841d8c6a250c51dfb84338bd81d55989b6ceb0488558dbd8467e773df7eb4ff84e2d0d11f2ca8c8016916d1802e543f001392dbc79aed70b7f2fad31e397c803028f4ac43a8899499037b0df4b683d5488868bed2aa7c5a31dba38cb5146dd5f125554b816f2c92ecbdef8370ae4cf67260338035f912a2bb2bf32f0dc8d65b43d209cba369d4a3fd1c8544aa305ba237b342a307ab6f4597ab3d29dce7d88fa00f7fe0be2622b269453199f669920948d50166a089b442f40050692e1ee87c1f0464b8920c2d4997b0ac1a25aa459343fce334b037a961cf64241bda729eb314e260ae08d455bc6d07476ba421af5d6889bb5d9b3b0f53788902c2f4c0586da53df04ebba8298a49fd556462007a88e132d786af822f000a60c3c1084e6106dbfa230207c990eb6876fae7554c089e5ae3743be7ac27a831d292e7fb786967f733367e3b7c27dab5e42903fc605a804540331a528f1d7a77c4c208f67eb4c6d70908dec0babc9083063d6ff5659c26c1234511d4a59f73183ee046072a71011e02cc0bfe1495f10056eae8293e7d929818225134350a8824f95a169d201636d3a7d812d131882e31e49ded7cc83a412ae38f13809741dd53743a26e484b7e30e7a9982a7489db334df32f82ce8191e0aebd5d40499e467e1bd482c3ec0e793bacaf27fe3c3ea7300ecc6acd43f2a6b67371a5738c45a0268c7151e39b2a7583c376efb943d04a7b2f4a25ab51a78043a05b0cc1f165053cb38693c4007999fceb2a61c36cf0b4834559c9e0a2dedb205608783b0fa8948dc74cd31b1db457ae29112b56322002e3d3d36896c42b572abdee31340eb4ec8ab4b8a693a1961496699073f0187e8c093b0e6a5e744bae9419ae4955cf071ae0ae8b953e9c7dc0a5569ea221ce916e073d56ac5f821d852ed40ed54f92146bda843e4f6024884325e1f699c634d7e41f9f8d5533b73a801375ab9191f6531d142a88cdc91cb706933035c14fe0ce3be84c35f1222b4baebe67a05c9a7d80ccb50302032a2d30967dd7dfd66b038614065e44fd2635b86e14e3e091d70f65e1241acd042a52b204955caf85e32df6a65e1bd120676564ecb908bbaa8bdea60be441640ae8b8e50ac26a731f3ad1107f5eb3fc3c813e8f2845fbd4f7e096cb8711f7939510a0d74400fc9280166cc2f6b6176783f3b5af67ca7f9db85f95c222700fb1c6e42c15ac9cc1e4cd964e8d20f5475efd135fdc443204ba6679ce01f6dd2eb97b27a277f9825d31dc93ab81a041b7560828a2273a27ea63f9844027637a602304ba782e32fe757bb92f82bf786131dc08a44b99c21da14631d474291218b159290e68012bc507ca0e1b34cad74b13c2351285e8eb881951daed72127e6e5abd1cdb9b013a1c88080d2c76df3233a007db2277a06fa7b546814a981da4dcbe2a81fe6219a1bb64930bac39671992f6cbd7fca3e30df8e2c6399be6823bbc7e9d5a5c1786a80e9629bce8391e79729cd110d4c12d64832f0b6a2653012a02a4bc73fc53ea708b833d2fa94d0368143b1f9f1fca8f150561d09bdd647c7b657b8c878ba4fbbfbd00254846b7533d2e805efcb5e7785b8b4113f653440ec1f628f4f1cb81285c2a5daf1277a347935bc82b6617852ad4dc621546517c0025e74e26d670ce35a409e2bf1c3d192c836be7955ef015406b1a5c89c16ea40ce36b46b3090aa09deca9dbae8d7b0633bb1ff082be0330a7d04c2d1097c3e526e53007930c92cfcfea7d6b4b18d998858786ba2eac61812ad5bb9da21ce6e99ef19f91088efbe51ce7a17188c97e06733808a04d1913c510ca5b690735888e793ff6be4ded66eb8a5ed47f20dc8b7ec018cab3a3a5c9e7b333ca7ded9b146080879d49d8eaa9d0111cdcec4ec44efc97422a66de0343e5e3259ba78c015bf7676b02ce6d13f732331ca910e3a1cb12607ec3233a2e96b43af39374bc07be0e945bfb086d6a6b9b1d2c3f5547cdd2f10c4c05f509f6f0b24c791e515ed381ab9bb5608c57ec5bbfa3a64d1fabd6420b050b1fca688d748a53b18394494449868dd6a2ccfd35436776d4296acef5db6c8e1202095446f5ee71a73bf3014ac43817ecca04daadf671fd023160366d9033b4fcde52539bc016dd1b31fb0dc367a021db3c061b0cb2d9f1bf0b04cc18b6a1beebea7a1c00dd3e0c0b6d02789e5b06a6e49c8d8484f794282649710c699752cb14034812fcfed6612c0b01e39d1bfe31ceac89d666bcb46e32b4b88857f4ffda2f1a2303d3a0daf8c39bd1190332020fdfd74006fe2226e614357c317a9a3a69c50c270408aa3f796f78f2f144ec3ea47ad676a57dfc4ad7e7f4591604821593a46a80653ca5c58d2413805c15e07d60c2ef834d27ce044ee35284a55f95b4894ab7878a9e32c9ae572cacb0459c59fb05b9e315e4dc5ce814b897c05194668878af6780531a1776bc6017de10ccb91bf517d9fa48a0434bd3501180c34a63b02b365e720d5e094698c7ebc90599ded25d909e277264ba33889ef314b279bf238a6dbeb5426bd7325460ac48d4361a4c754b496c7d37c14a7c25b7ec5a271c61d00481a239e95af2072b821e3e95e3797c63a28801ed2bdc3b85b9da11a3d8df67590815f24431bfea047b4df0e177c5b691572da493b8ab00ab723728e29b38969ff14af369b8e44ba3bce30d806ce5e19b5eac9f24d21c69715889d8772ecb935861198a131f21096cff2505518ecfd50cc03a585cca44188dd9899f884408db910dd869ed54f57cc8b2dd1a68ed0ffbde828517dcfd349c57b3642b1fee46f2ed837ab1764afad0e5d58517d7d5aa1c19085b9b69fa52cb0cdb0a91e6302f6e16068a28712a8e72c52b10277d4bfe46fd3694e4e76230774b2e79bd4d8c7b497fd4e072b8288fcfaefe8d8576b1332c9d40ff4a45da456f6228fb39807cfa3a4833b25c06d98bd339a87d7e74600f6f66097b7d5907b6d17471f30283c21ea15d5ec4d21eb92485cc06efe1c9d26013627e0600cf17f69bedf1253ff37380d9fa1dc4a848f7c0bd0a09fc6c5ab2be157b30036bf33c06f4d715a1dd92402ca57547be5f04e32d295600317c64efaf7b4de2d90c1132944138670b143d8cc68fa80afdc03013a3f127eed83234bbcbefbbffb1c33f8356c914656da93f4f40959d228583757ea75903b230fac580213e5d7e560676dd68d1c9affd658dfcdb670e981e07259ac92915b0b0826a869194f4d415165a0d4347d04387f73ca1d7fb07f218013c43028e2f1c2a18dc7603a39bb4baf19a1adb141c6eacbd91fc61a68f4460bb97ad2e993678b2e486dcbdedbfa7c2061926c7168280aae5628845b467568f453a3456bae2151d7d82f05d3094c882be900fae124082a54ec53004ed6ccfcc204c7a5ca4f267eb17c3de46c7fd8507ce6f161b09bcb32ddc798dd9712978b62c865ca6249a18c42d9aa89758c1fb41a7081ae29c765e17320801f2ce4a118a8940f7ae0ab72dba27dbdf9d0886c95774b2a8fc40d8b36e2b3032478bff87b379971236bb042dccecae676b2510df813e49bd3bbf2ff58418d609f3ef93b583c3c38b07c1171c3f792056b56420fa021715d59714caa105c946874481b720b258592fc14cd453546c3b657086f03538267025f7dc42108dcb9c61d697b566e28a52fcbb5604bd15b6aa2bd4ae302cc3daa8e7158d673ab4bb8699d281180907afdbf2755c23f54755f77871769f1eb3e986030ba9b766bd8c11aca31ef87747bb09ab26f5c2e69bef25edbfc1de336de6c665e2e514041ef2ad3f038bd93087e6f278da90c3e79778c455b567cdbc0dfda2ce7236dd086aeb69862ff1be0eb288fcbbfb39a9308e4cca01ff3c0fd47a7dc3023285004f77cd3735c5e46dfb37981542250d5fcc1e2078cf743efe0ab9cc9b50fdd6d65ac17bea65d53dbdf88f048de4bc9d347033855a8f305bc221d354941d8863c23d94c9eea54090a81d574aa2ec3ee160affa0bcd4f1c71369b9a417c3985a88c268b7b097fbca4be1721291a683007354b0cf2a8fb33543ba02fb4b473fe2876c90a769c704c1b9136b5e182c82cf80badd28c97efa100b610c210ed322cd998facc902caded72ac8452e7a5141b4d29a63948daba29c66c19698c07d9d168529fac9d5b9014437bf2d2e142f2ea4170a7c462db56ee58a730c8d130839685223452b860cf725b5b1f96748045042d35e05fdee602207e8cec64097dbf855b8679a531b6b25e6ad4c82493231563e8d7c9ae015bcfef013f92308b8f70d2e79d2b6271fc20928accb3c279b4bbe5c9fc6c43a98b610f3c24f39376a091fbc59746f2a3a4ecb960c370b82b3935c07bc56f45b2e1d24c82e9b03be56e8cb7b776545275add941fd54b5efe6f32b5902b53c9489345be3905d14165e3e70b2f49ad4a759b022efcf12822bec721539fc701bafdf4b338187679d6722d58c5d9e27d93679b27aac335b67d27f3b884b659be053f332fbb4b42f70a6009884277de59d44baebf6000b3bdd789673c663fc976f4bf8c5e48e37186eb270a26e35f583212dfab266a479fd484b54dd85c3c9f6dacf10a490637877a760afe611ef21f770b8cad4246a08064f6bc77ecb86e15db1dc4bcb5a1c3b9c5e004f168e876d67cb9d84e015cd169e68e4f17dbfba9d7715a375a85f6a6dd402c191bf0af04daf056f37d8d7935eb6d96021682bdd165fb34729dffc7a1ef93826dd167755995ce8b2bdb517fbf15317ef4d720841dbe52cb29057c88e894e67b4af3d1582804f3142f07c8e4ce0740515cb79b90479404c3302a10e51a40f91fc716d87c062ed0c94cfe65e9ec7b3faae25dc1068ddc3d0c2fe4d8319bc15798a617a6a8579feaabe6fea5e2b8b0b50368f30170e53d330531e1ae4354edd8c4e98ed0740058aac25da09138b0f98eb4db8f826352d1627a586602551013be13872eb56a426459eb241c158ed2364f53a32bc29d179357116c931ac46de56c765b9d49ed855417ac28155b89527bd097481f4b82822cd0606e3b6ecd84fe30d5168bd328e96d8b5750257baee2337ae86b80c410d9ce3880a315c6cd469d16988f5314351a093fa82410684238c0ef3a8c4ffa7432418e460859a88619d361ced20e2f1e06403005ef10f518a8a9d1a3fdbc9ca81030c323f6f18c62df33f4489044b4263e5bcd9c0f121ee573d69f07fe097714810f93351cdde3956808977406ff37fd6e1c48a8acd354c86faa268c7e5e2dbab763035d6362bafd2626edf3302fb88998ee1ec32b77ae5985351abd12fb201cbe89afacb95274fba834af289db09ece544cb4b6e26dedb3b7e4ef31a6b26d379a3444932d824c58df90d0e1fa34ce2931f0e76d48fdf20f1976a6caa859eea54332da6a7dcb6099e90ca77e72bbf4c14d50137b19a12968723834292ce5f0eab2dc1f7dc2a14507d2bdfd898995209bf5f2619cf31c687bf093752bccfae5e8099e6e09df26764ff2e80d0d03d6e2746a1fb881edf551a2480f0433ddf68ec0be902ebb1a425c0a156b4da8772ce49c60c448b2b6404435414529fcb62731c4f7dbbb17d7d1697ab99414edccad59a8937789c977d6fa990df11b695543e8070311b3b1096a2e81b9197cd4c9559f0881a27c3583e81d0124a59f7bcd870ea98a3988b2811556e1a0266e15e525c0085d6236bc1bc13a24f436068bdd782ab7773e0ec0cfd3a87b63edcc4b465e2d1064ca9cefabf9a47310d8ca142765517f08ef3365db66255bd077720402876b7a7da307f8c30fd7875a645a19d6caf4c62868617acf0017f0c585132114d5da6dc51a68399aa2245a9e4e8fe52c083e42ba31e5fee28eaf34ab2b77f76c4727157a8f8f89b569d3c65eb8e92b852ec76e88b204ed0f966e2297078c70b0ad677f94b372174e4288f94d169a4f392dd2f6eafaeb36dc5db35d598963994cf769ab318b95bac201facdc6da4153594786c6e24743a2c532d12769843605de9017bf99fa43068fe26ceb4bf278e67cc9310638452cd17636b3d74100e3167143fc1fad3a5512b4a4671ea92f2a62d0e2e2e26ea6e306b86f6768cccac7f1d7dd0f7a35634dd6615aab895cd87d586dbd8a841ccc776fdecf414aac899687867345ca06977c3e7f90c0c5aeeec4c394a51445ae14e9cdf73dc37cb2375e7bf235cc75fa324fe4565bf98cf28013af8b72c17f8cef6ac84d1b6479333d28a99b8b830dda584aa85d850bee164c5278d2c2488e899f49d7d5a7f884e7def89ec984e17abc1c5793a9e300728a0327c8b3d92dd638c8c60fb850c583a495642f56628b4b7b75bbcc3e0af7fc23bf0e3b409c7be1882fb111a4794caee6a4d22f5c2d8321070f018d32635ef6875787c8288d9dba390fb301ee51ab9a5c7a9f26e023997d6c25a903b40b325d61c3399b77d50a1e88f9c1b5280427a14b2cf3d34a9f04e3d42b2e85dab708a5a164f76a04134f2a34eeb6df5ece060023c602c046ec66b206844cc0db3b76219f9d539f1a7bbf9a67a56d89f6b67abf1885a37106426ab228296eaacac5a79e921a7b39071f85b981d94c1421dac93681031d37892ef31a88bf65a58cf3a74c72a2466060a3a4e8741c25bf922d27a62d88602c8d379492af56cc2ed7f3ae6d1861e9f6e6c660bec7086f6ab6e1a98f1af66753a7f98e50c88ce66767dc4a009d96e63e485c6cc6682ecefd4cb52f655acbda44d163ca21276d0dceb0e873c8ed62c74498aa09c50426119b98c0f04c56f11838e52c06323669e935c33b9a498ffe95a702a25bd350bd790073e978a1ada39d1e25fc1a57caf17909ee19f6ba37d53fed8fe9bf1dbdff7597af809e40c72fcd82ba53b795b8134acc202d071fed795274ac05486f1e714bc69771652ef4e28e8181d033e0a2322fd416818b8a58d9b6b99351d999c497b8c611843993bbcb29fd491e1bd580017e5e2325f2e745f4e4f8d165c3ad010aed42ea8dd0bd0e2da95bce57c94cba3f0fc96d7bafc56bc8af2b512f876b3a2c5b1803d343cd7925d9f5f0d1c0291bd354ed66d83b24f96e836410229d2af3e7e22e82c26063a8e40cbfd0c187d0ce2f3db5357169a549a6773b01a51eb198ce13dcabd0b31b58757fbccadfbe05c8b8ae82881b7fc2078f812cbe9e0aa9ccf1af3d046a4d12b11d677046c38d0aac96c70be69f3167ed3cf9be6e54f2c4713967e38500f1143a68696006c1fbda5089fa7325a0ace58130b7ad2cea1b2d668892bdec043993f804888a2498393c0d11ecf1aeb51a255ea7d6b99487c35a3e0725ddbedc9ad0531448f34b80ef8112305b592f7e76a9dc0685c64cf01f3b860dde56ac0a4aa22f52fb2bdf37a28317c7036c68769d8610c49755f9a3b02be455b6ce50c12f7817a0e8a0ac295b0e19ae0f65983bce29ee1db4937fd9e4eeb2320ec7b714e3355da4026a181ff2cc3787a39e080f001775ce65267f1d3b1e902c3c419301fca08b5ed6e54e8659b4f841461ad45b9b1f7397cdeea509cf8cce598f7cba568732c80c267ced37eefb8d4cf7bc6c127b198b3e2a3557f8720c2491c3a88dcd86e912db53f5e44e7d08100f1628c4b215e109530173441741e233dd9b1f999228a0c2ad643ae864e31561ea73ccf27e29aff38d8bf0c0642d6c09d92457b9a059178534b826466061efce3c8d82b6e955ca965aca3625038e121ebd4633b644673bebd113092fab5c50117699a60d1a5e7690ed63468f14149ce346f18e4dae6cd93221e1ab36aa384c427fec7a3e937596d99d76295308a3deadbe925dd56e0f01083b1b29808b0693ae7d4b78bd82567ab0043ad373263dbc3313d56d1972357aa9d87b8e34fea0cb2bd8522a17ac7f8433bbd8cd1afbb6824f6afc9d5de2c7aa6dd5e9bab03e9d4aabd4a85f53dbc9851aa379d66f382a66a56d1a8a9a120bc11d0b2137c9fffee6b4bbbfda0871ef14b6bc2234c0bb0b9cbadb7e2e35e3159dd394f2736e4631a317f07207f602f84b2d50f0576b2fbe2104f3dd2a0004fdde3160d9781d5991d941b22d38ffd89272276c2de1380cd08f322d0d14948a90e39b435232cbdda9e015b4d5c0863216b2ce4063e16b2ff4327bceb01c56c6147b63cabde1acf60c2b591ba0f149f8fc87916c06b6ab329c4dab8d2f968704151ab317aa27a24ed6a8dc0cef3f4a6c52de64510868a66b94630381b52e3c0fc371c0d4ed0a3a50fde4407ed9d2a1fb0fa94f14a21421486b0d81f24f4d61dc0df9ff24635b77dd90843c06efe20949780ce8af9d9409264ab9e2ad564e3f2ce4783d9f468072206cd1d1c988aa1e5b3cb212ccb5757e64f9a912b038d1e68e7fa529f0b03703916dd2fa302fb9bf60197b8f3eda3d4a091202c31a3b26064691a939806e4994d6653a01b318612c622d7a774e71300b4b9f17294c830985c792a8e2cf0b2b9819dc711b780d4e91c69ffa4d12b2285039752bf0161666c5e12fa1f080e25df43c60ce1934c7815ea0f740b2fbfe8ac29934b42c31fee3bd259ddc8819f14ea99407bcd08bea55ba7350dea9948804b0130475fff9d0e6015abc07095d4e4a0a20f68ba4c920a5fb22983a6ebdf7a18ac9e3106db503c0207f72d3fc8324ea783a6a45e3738502fc8940ca83aa4e414f63957fdff3700ee7d50e01431f1b3ec5f4fbed9f4bf851d73bd3aa241ada0cd29a2a3e6ba6f49b305fffb532c4bfbddbf9efd42ce005ebbd258ce1f706a691c15ba2b202703b521815694c1031974f9ddf7ba0a559b84b4a40105af4988c3d8c429d3d693af3fdf45a74173b07723c4da78f5e265f0d39720fe3883c4c3db99febedd41aff6bce3cfed13caaf803980bbc700d2c4914c75d88208fe5f612ec571edfcefe5a691e46a18fba904adee6921a6cd450ad2a1792053c140ef0032bbf69fa993ef72e07e511c58755b0060120aaaece9a5844f321a9b496519de19d1852aefb032381a9897dfabc6a064afeba1a768679e36353be66a79a43998593cb95bd148e8eef613528f9e2ab77831c32d10ded2b8b6e4312e15dfc7215d1063aa3acaa0bd7ac60964937cbc4f83358c614a02af128fcb2bab69b4fcdca540ad54a421f69290b94289b8d9bb94129535775e2cc88525d1db4ddfde0c963baafa6ea15c5066826e2dfbb992ec8518f893cfaf880631aa8a67cbd5abecf5caeb28db6c32a0330f49c2011f1d8da2c50ba62f8838d0c9745b4daf0cf5f4faf5a151ddd4d0d07cedff0d3beea7c11ef9fefa7bc0a64a49c55dccd5ab82b0b232e536061468cd3a9d7b572399a5a4782fab0e167eba86cf056a552fa4883694f5960de9e1ff7678740b53f4905400ce6b544b75152ab20543dc5dd1c83579cfd943938ad6a37db0999bcd727da6b83eb7b4adc59cd6588b3c59613113a002b4e485356df6a411f639ecba36d3006b00a5c8506d7cd857020c584165facbc47c535399473c7e175ab0e796c78205e5650b02457761adf112870f651f8193951d3ab6ae6eb56b1c99b2fbbe4bc7f38e69adcbe5f605be27440e75e9482c6511eaea35d1a2b5b4f1fb8cdaaebc00418fa581cb4b5e4b2ac0c509d42aa9ba211abe3c9ae939336c921128072748c210b31712d74f481999efd70e325f1b3c1a7dc4545e9baa3484a995d4bc22cd7da7650656cea060b1985e74d32a530ab16d33d453f927aa34f9c2634262d4c741727b2eacd6a3897da3d2316e92507d0069c93be763b523652bb3e8da6749b02f2a68e5c00316230556278104afd64bdc9cf5708ac84e45d94f64f7686da2a6e68f2aff84f7f2f1090df8580dadab681c94a6ee456d418aaeea929f834a9567f1ac649e814e26d0554013518524160cba63fa11e998d30a8cede5ec7b3b16a4a498ee86b81b4380e205a7a173444f6dc230d4370814098fa422c4857ce506a7481afa038736841c095cc94f300c5419315330af6449154f3c4994ac04cecdac53a6dffd31beb13af35b81542a238d8b93c0d5745fdb28fb6e4d82aa9548d2319194fbd37b006aa1bdbd8fcd78edb06493bf36904172149a0112dab7ec815e356b2a0d8e5022e03825f8291704ff63eb74d1e0f18d315e2b4329bd15fdc5b65941750bc6162de1054a609cb0cb13025abe620b823c564de840cb3cf3064f017692a93d0e6937778b9b237927430625fb40a427ab9ad7cf7b60e8ded13e8cb34e1bf4b860a224b991af0c96f126d10f41e62065d6e8aaca3cbebc2e9396f10b5a60b4b26741f4ebefef8eb0cea99b7cd8c18abf578d50d4e9331c245f3617efa0a02540269bc81270137a90663e6993a97cbdeba39bfadd65d2306e5bf63ba293e0d0afed6a41e2e52761a00f83379a69a058e7108c81ba4fd39ac4321561df4da92cbee026d05762f5bce24e3c4527d23931fd4e987e137047098aeeb82413e01317fb04dc4e344d131fdb13146d2276a131269cce44629068b7154f5389c026cb745bd0380177279adec4639918f713457722b199583713476702b14fb4cb13a73731314d949b89d09ed8584d9cbb09d099e81824eeb662689aa8d88e044836bbf310f2f8fb1c73db248e1040845bb1d3b83fe88f41c98bcb21fb4ef542d3a958a74b9c2f499c8224f6fc576d6e7149e491ada983bf3f24f30b865dee50ff15531776e0a939947a7d821de30426be4680721278faf8f033d780624167cf014ad02f05fb24bdd92c704308a17d835b5fa91a226b22ba99f0cd3e01a8ab90253b817fd18bf9872f1b397e61975672410e91310de05f49329a2968e93e06aa9de83b78ec265c2aae5dbc6319a3b0abe191c424b83aff43c1eb5379d27fc39e5a23dbbe6ab5daa46efb810adeae2d2a34adc0cb6dced4c5f582242c4b787c2b763a9092a1d86749d63196e3e7da309072a53e3a6e02a4d13511ac1a73ef6af557b7c5ca87d0adf4c8bcdd621b930795f124ce134170ac0b070912ad424edd67ea5aec5cd3b1ac0a4e42388583e5b7ce6d0bf41a0a23170e3622352b0c6ebbd04f0aee0bd5b8626cdbec2492b89b94ec6fd35ef9f617ed0527415527691450830f4cdc0e0aac4b75460f8aa905ac340834baf2dd01405d5d1f2f30e1e17f3a03f0dfe503e55009307e4f3082daa928b1dc14229d10da6d85deed190c0503a3544c861ff5bb7fd247ce9608e505b97509597bc6b5ef49dcf92adb1916dab2816a6fc475eea402e6f2f804d5ed5760070bf6886689fd838f468db62d5425970f1b0814e6fd64e329c31e022c98cf915a14a108fd36876eeff6ec17cc8e9296bc210ef312588746086f46696111d2734a08e84c56b84804082d6437275eb28d3df07b45cf196e2246fc09b3e55711bfa11e2677d689cbf3410cd810974ac18a0cd84bf02583080d9f0092d8666b162ff057a231f1f99c8edb449964c24e00e8df1999022a0050f42c9ce2a2fa843eed6d67e6563ee63c6ad433651845921ec6aa9f3c5bc2bb571eb6ed9554a232c8fff0357c5ae840dc0edb8e015509213f08d0e23c3232a5ff1caef191eed8fef74016a1111c910c48ce5467eb0bca22e9706507488668cf7501154963987b3da1c6843fdcbcaf37f28a26ac1c4430c12f2abc2aec74f2e6471822023e3cfc680029d04e0f0cb0396705e1c62b21b3e71ddf495892710b8bc44d3645fa5901fa7f4292a6afd05ea11bf2253736b7d57c7c20e68457a07bdc9f2c31aab7e7fa1a45700013b3f364633ab523a0c43cd0852722c7b28ea6d99238e75b469c0bec42c58b7181e812b0e1cd0a9a59e7e29206e65232a7abc396171f23c61a470fb7b94d2dc6ba45628259bf534fbe05d2e6a21e3d5e3fe23082029139915094020277b158e198df99493b04f10d47b525990c0298837bf73c79e43f96e32c51cd9398cae5b6997a667951df360610e85cf34c5d525d0b0d6ee49f204c7c6487a499c20db31592a7dc5deb4901388db473995f5e795102826303b6a259f708f02f6400ee5c1098d5e312d9e637bd7e7d59fc5347b5052157c21e507d7f74ddd5cc3848c912ab0c435ff9a3a5e2425e3f30756d1c31b63212e246d778043f58a3d1cf9e5362740f6f99f8913daecf31f4ab6d8f95c2db5acf6bffe1af4bd32d31bd1450a2e199d6172ec1732909433283e0dfa1cb53ff925a110e4576dfba1d19499630d14e6215d5ab966dbe60d4645c0e24582cef8189c6c64699a9c3e1f9e008c978f2a62a639d280a7c3246e5acaf8088fc03f33af9e6f130352df6eee0cf9241941b6982841cfbc0cab751b8261158f5eb1dbfae2129eaa4451393aeb4a0c0db00af0f05367e1f5286079bb4f727078f545a580c69adcf2238f4833d17b51348a0fe6a624284d7b72d04c6189d64cc48b206cfc2e72b223c2e89948c87bc93766bfb1a0b0ec857c342b148ab67f3f8c17d9553bb3cddd31832bc780090ccc6d7aeeebf7450da0351782e8dc9ab2015951ad97429f6043a92cb721b18394aa088a8868ace569a4df5856d400694f0ffcbb2bc0f095e097015d5fcad111d39b0763d28f3da0069019fb85726b4f3f8c7c0c21ad7e7e643ee44e91945781b627c3ff75590447a9097c693ca5fa41cc99b7c29b5ef71a699f2e512871ad5bc1953c01933aa1d479b0f7360f3d57bb1c5c1314c8beabb924bf9b9651f819c1563ac542b1cb5a5efa11583fa1ced8021ebca88f23e6afba004c656747c168f4a7ab0457119332ab9916d443fae9aff03004227c7a4666d4a5b68ee7fa6986a0983cadef24f30f057274af4defaaac08c6dd353c3c7f4307451f1d9b03b234006abf03204e6243e09b5c57fa150934505dd42f85b9665cb32599c72b5d1fe8411580691bc9f447f1eb63503fbeb4970150ed6c4f2e7e71540255826f4841b0812a54238e720831dec20d208acb5e0ede1683ff46483209e26c966cc831907eae0d140323bec59e69a9f075c5c83de7d2096f030c0ac8b164cb1299b28c41ff293de6deb152d25f60e9429c44312e675ad7c9e224f3940228e3b7ad176c23f751c511960a6c974f78e44c8c6558508dacf4912e4c1a7516dbc0a0065565fc8d3767fbf17a3f8d8f2312397ea89c29d2da54ec80d7903cab31f83cc87c205cad849e894b398125bd08a7de7275534342dc99065ecaa97296da41562e3897ff4863c316bcc01d3d993d647e824b396906aa8bfa1cd527bbe22dffe1e86bb66e8199ea72ae953d9c56a9a246e11eb00274767ebac7a699b856def1828e1b1a2a43a60f27fdab85aa86a43d2b646670146df6750271227d0799324802d8c5e64f6e81573835109e69bd80aa039e1385f783d6f1c55551884a76fec1ebf24819aeff57fe49fbb77589fd8bb541eb17514a01c39149610b12a501b3402952cbab9c880ab38d86f74fafbad067acf497459cf7fe0e5a78671c2025b9779b69cf24beee816c548fce2a2d1cf478e5e98e3893b58734d5967f855260e8a75954a0674e6571f842b1c684839b6692486211c9f7860e9dae0e1ee5e3c024fe931476af4f7054e40c134fee0c54e862f77f046f32a17c8b29886471b6d5b9c4d5e1c528f3c8db4d68f480ad5636c9172ae69b7df0f4f4f02621f6a4690df330b58b8e4389cdc2255d6c231b4d2e14e9444610d70f630de28cfc8d388eaa5c5701518298033d37a0f4288e90d007c0fb3f38468eed40312dd88b723b7183100974c4960635b1840acffaebe5343e7cd1aa12cc8110558e66d4a3262f802f7de7596c39af5b1c3eaf8376c9fc1c7906f3c70fe7cf0e3f6573739b2f14318f4fc342381137a18d9e1c887046086864c59a3ef3634cb63d527bffc5f1176b99dc59f0efcd405c4e23b81e742cc5137e16d8d8f97956103165b7409820d7a756b231169cfebdde334880ef156c729ffac6b544808d00c0147a89a28fab023b78c8072015683052c2432f4d17514767ba02c208f04c1bcc001c76a40b755ab64b87845253bc90099019486eef1aa041d1bc5c3a5bda391d0468529353d2642a94f0b14af3bff03a90217a94b4b2d8b5c948447d28554d555542ca0e9dfc2f5ab82c80d29b1b48ba83ed59c6c19f412947556bbb23c749bf13923348e4dbbe9822e2dea5290ce7385aad0f2f6058d01168641803b0318770158d325350609a86860dba33d9cb2643a976d38b7505db8d2545f3eae5c9665bfc288ac86df4031ff041b215e3ec810407486c178174556d0ccaf199e32903cee43c380f294c4ce9c0a40905c0cd85a08e8669f382063bbf56863f530e4b5ae086c455b8fb0467aadbed5e16c8e32168767ba969c8b9be0ccd002b386ebee80643644df787603f89d93927b97aa3440740e32251565b81152de07b8db7075ef295171ba3c8d64e0cfe9b6453cfafdcf50892a4dbd93391a6fb3bd4cca48834a8ab2b15452e294c157270e55d37c40f1002e82e08b6d295dd88f4a1f572b044eac94f26c54e2b1fb28cbdbde34d8e9532aabafb49c3951a958276738f7b72b04f68d4c0668a3fbe6dba450696ef9f38381f3fc26608a322e0ef017b13f6fbbdaabc81e07d0e1611f7abb610d9ca62ccb80af66206428781bd4cf6c95824fa5cca34e317291f9e4a327cebce05441179c88563d4d15ce60ab27a3f642b0dc9c4048df153c1f468c84dc5c20cf84ef31d428b8726b63633978b52980e4b93b9d4494d568d57f9629edba2cde58ee36da83a1fbff311ad9822aabbfb660e7f0dd82bcf380e5d52e14585f03430446089df0da9274bb5cee0171b5617e2677646eebd579924804eb3f4ba0ce4a8229dc041a8be037471263c27a3d65fa2a56ed1900737626f4a50c3a416f0a552d45a97ae5aa40010532de1b8e3c1db71800ee22394e6cf7af3bb693ac3654994eb60e4bb1a2797f1fe9b6fc731314d6208ec51c0bd23fa67f8fc7c78585954afa1b655acdc2d3c7a187d069cf6db68a36f0522f32fef0c7c8e5805b32f464fe9273997371f677c4607f5e0b229de91cf53557026597e2daf47ad9fc2bb1a8901a1aa058a0e009f88e3b688150bfeed3ad6039505bcf4388b5496c65e33eb0bc783994e5f74ca6e30feac1a8c607ab436ac6b9e898b121f616c7595b62d02ec0b9e6029a632a6f3f4e9f9d52f6863d8df7e1ade150dd9abe00cb54503875b332a72f3880ac151476d91308adb342da58a41856c473b9628e409883297d11b9c275f5b74a627c5fcc2392a4e00ba0e9a5de0dcbbcda65f1677283bd2a13240556084f84dfb038369b9526e4ee16024859908d1a592da6864c32ec4249b5814912c67cc3e3b55f299bdd1a3045f11bbc7d49c52467f6c36c3e669b8e54e2ed0ed9bcd8facabd7fcd114b3f99f1bb963f1e21a33217c7119b1974896a80379b5d5460fcfde28c1475d17a76ff827cef2096f2189ea6f3afd6ea032db03cae96b27e9fa1e7bd3910a42bccb9296bbf2d64e7c85be4197bd2d8e1da692499d43ae7ba871249cfe60180dee298472340584d4386fbc454b8d43bfc504e69f9609a671036020e1964a7a375469cd4328951a27f7d3f3b02b8a79d752c1ccc1bd405b4dc8fe6d70a192723cb057dc8704fe1f166d77a7ab2d79b42e63a49ffe6f3da35f9fd32bc904d1b724f7ea99740da7e735efb08043f86fd11fbbdcf7e2762ab6cd466d095948b69e34acf9ef6ddd1e0a281e1058d07c5b19eaa553469883805afc7f374cd98a00affdf542de913212ffeb11795994e476ef2a95e327d4ec54562bc3109fe483ffa7edfd7560c182445e47491c7bb0a83379df600bab2d5463b50b026c301f3ffffffffffffffff63c711bc99b537335435f2654a3245b9832accd41affeb2d654a49a694f4716a7ca787510000000040f632230f62044004430405f5d100a5b9f2b6a3725dbf9119945312a5c792894dab874c2635f879ec98b1821a3d7a32d9e20b191900e3068d771c37223240759e09b1956cc1472c76d18c9a5d9d9019393e60c1c771f79c9277bccb87f1f18aef3f43c5e8a9fec73383041faec0ab6c055a9ae39ff8578b3373f1c18a935c4db5a43c936a43d08df3b10a3b98e68b9762ba985585a5ae37db612a4eb73b96f3c457e71b1ff84005a7394a673fe6998febe1e314faeffb6d7b6d269963810f53bcde1bf5d42a05f252147927455d8b10170b98c002b4f82045fe2533a7ecc728bcf439fb37c4067f4f261ff810c5e5bdc1adf46328e5864c263a5e0c2eb4d0f15e20e1231477490ba1ae2af4e5b6d062c7ef601a35b8384433eaf0010aeb43ce9be9bafb4e27132e3e3eb1aabe7e48338fb57cc8642283870e195ae4e1c313a885572c93367652133299ecd801818f4e1c5d4487ed901a54cc061f9ce8b484798e2364e71cdbc4f571b23c5547135658e7789babca1de38f4c9474d60a1b9365e870f9c04467a662f20b2ae5fcd3c725b61cdc2c5b5e7c58c2b03995e4e9121be40fd922870d0c7c54e2ae328b0f4aec514cbfe8bea449d6101a5e7c4ca2eb3453327f0cab1c53810f49d4b9f7a23de5062f33128fe7b8334a9ea6300d2470ed51f649542e5bef11fc9cb814a5843619f290c9248c9f4cb608a3021e984c72d8405f7c3882d141f5d99bb01e191b61ae53a14a5376cc0f3f18d15f30b973c2e06311678e3532a74aae9e234594b4e61269a54a04d2cd3205112ac6841c110525975214d92a99930e91984c264388ace64e19a29891ef1e3fffa25b0a71851c0f7ad6b2091d2344a952a8bd76c56852c7fbc72012428b2555cdec8ca520da5c4a7512f5bafb74200c3297e55c6b5a612d209a9311afa9c5cc4cfb87c4f9d85858d40fc79c153c59796cbc8c858f3e2cbf217488e8f980b0ffef921b3c9607ed01eb8d97b346eccfd37a5864b2ce7879d95da63c30526468e9a4767ef378f873a4eeee7aa965d3c71d501ff223dc538c51b5c3a63168ed0a0b3a89a70efadf2515c3c52d15111df0ccf4e1594e7ed6ce1c92ab172b9a3457e82439587e231f546cdccf751c8c29ade7d2ef51eb3270f08245fd5c2dda496bdec0e66c1b297ae4a49d6e48e7532a638ab11c94df0637a891d167ea4f5cd8c0bdd9ff758c2aa1d51a7411164f53473d588a1ab24da754a5af5518611aac3b0b16d52fa8fe6ed00899f12ea0b1c3c6071a0acb8a6d5d7bc162211f67e8727814d57ef942da66f0f225fd31a9d4a28417c285160dd02c78320210868f32649982ee114bc1e5e5ff2083633b9b7f37848fce8ec14bbe31c99361b92486b4e267c4b8c9a5b00943953da9f84c4bdb2a7d80214f27635edbcaf9aa4326931938fce30b263d17ff963dab7ce3c30bc720af73679aad5dae0bd65a6f569f850b88454b597a844eab978f2d5caafc6d7f53ebf2aa852e7a58129652f292a68f2cd8b5265653ace3f6393eb0600a8b5d610bcb8715cc98feb26375baafb60a689ccc59b2262ce81115eeb5ca21b38ef6f49a291cdef24f34cf49580e0d9ea5b56302eb4ea1b183925175bfc439abefb7cfedfd3f4b94c4776cfcfc58ff1f3299a4d73183870c2ec28854a2ce9923afd976bb6c8e50c28aa7a133e8adca6512d7081f33bd2653cc2749b82b622b3d6fce2ca64870c142799b2eddb039134420c17a864ab153e611a9b1d0bd95b995921806114798aaf6a6f733e5d1da8c4823becb0a7e7e524da69611489755cfe9f736cc5cc4155f3f87c6fba4fe53847669234fe5de0c4a8b2442d9ca529977e3e72d7921238208774fbeb8c854c1e45291439c35275ec7d46e38051143f029984c8d7f16e2d91d5d27de64f4424218f4e4f582c7aaab6510899239c9dbd805b1595df88bf00422d78a1be764e5f07f7f04108cab5bcc23cf45e42b83c81fb02c9a32d799eeff5009227e7835cea818d36792ab46fac0a66f775f3e53d263227ce0fa6cd4ec6d2ab2073fb6e26288b6efa0ced08123dda011d1033264fdaec946868daf51012d4610c943a1520a1bdb2d99328ae06113dd17e6b52154dcc81ddabb11d9992b4bc7b88b881d56d9d1dab7ef2c538ad4610d2da5de924a5177072142872a66e557b1e41cd6b89b7a543a15d3c22f64b8175a8c11910332e7fba443ef71783e89d19429b33a5f040ef955367d9753d47f1a79c3d57632eda5fe687b45dca065d9d0967dcb74e13674425538ef9c299c8c61c35f420715f4e77042ac6b3077e518a273ec6cbca8614b17a36ecca5ec6f4fc3d5395b8aa9793bbc194143d9be3e2ce9f3acef2267583e85271d9ab744ce30226660d4be5d4a9b7fb69e32986663f25c99ef8890c10aaa9dffd9a36352631019036e59163cea262206342fc54bd4284bba0fc37e41cc9578336da282c12f7de92dcd27b15b46bee0c9341e9bcd3758f65e483d064b6de68d4817eaa46249753439225ce064fb66d9be5b940b225b388a922fafe9792b83225a286afa50fec1f4aa3d59502da6d3a965feb52f16fa53e7ed2ea3d3fed981c815cc9dda466707f5d182112b2c261a83e6faee2721b32a9c2fda7e5b88071d836654b8633ab1c9934e69b43c8536a918f3e651bfcf272970c94eb763cc1c19fd285c2a6bec9ebb2cdd27144c0fe6732aa3872cd313ce63df4194fe4dd284c68838a1cdd0b6a7a26cf498479a80c7e7512aff52e674b120c2842ec77468ad48cb1cbc41640927cd59f3a624bc4fe52801a9f12fa8fa6c56e52249388385c5142c8a708bc220820434799645d272dcb03176fa1a59e4086f36cfb25ec1abf205821c3dfcbbd841c408777ea83c6271a408e8d0b76b51f244473f428492ccdb980cbf1a371719c2154c344b2f9c9e7e224230f4a64eab37aff6728c9eb1c5094250824810cc554680b05719f9815ea5457cb08d90b5fdb7584988233d6043f65bd63d5f35bd04223c30b7c3fae73d99f5ef1a911ddc9f39dbdcd38390554407495f8fa67e71f5d42507aae7cc326776488f1d336e4470b0a8790ed6496fda140de9227203a3ba9645082236b8535d52d1e99f711a2d446a50f22484fb77ec02f697bc65ca46b91c95fce1f0112ac5bda8a0da1c3bb4e042e20746ec5cdfdda7c6a4ec4351f4f77697dade8f0f7726a51f937e923d94e5b4f74675f852b1440f6e7ba9f1cb380f9191e4c1d9f08c0d65aa40828774b6bc7faade597b13437207362b9a7d2cd3396729b1c3b33e567372d7c159b78e65e367591d3adceba7d62f862390ccc12e197ac4c77800722091831e2b648ba7febe9d5fc70c491c3af35e91f9382d32b6430287375f9d4cb10fa6b22279037bd2b259584fa9aa1bb4a43193a6f8aa974bc864e2ce6d40943c212a796c52a2d285840de64e2b329b9a91bf460f1b220083c604269395ac610d1a4ae7d6832933757c08d2c10f8231780438581082c9e401123538b2f2ed68f617b58e240de68ae7c713fdf16e4643372add58d21f34b57a86327c338eff0975bd49ccc0a71a9d2ef48b78d8372029c3b1c12f34c89307b4e041a3460e10e8e081020919eadcf66fdf41c9df7c0ccd7b69321544625893ccf9fd663cdf52613834340918f47cbdd0e673755bf94215c4e9784258d2f7d10bcf688d49ffa90b68d15be7ae7a61bee2c2e6a24c0861f9b9440705922d14f734a3aa5feb98122da043768f8b106dfa3259a83b54b88b8fd6a72d30d804122c74a92ba69e0f428d90864c262cf81b1c905c81eb8cc973de0ed199ad8056853ba7ac245448ef091954535432853e6fb3ee575e0abae8da59ea1433eb1e854c9e5c11efa2622385c2ad3632a8ca4553ae3ee1349999c23e9ad89f244ed0bc2a9d7e97ad98a909b7e9d99425db3fc8cc8433de4468d937b53897d0f657163d5b134a5c12259c74664fd93194044bfcefc6f45176794742bae374f6752b68cb2447e0f2c8becff92aa9e718e1cea6cdf306ed752a2b42bd15b7dba2498880e6964f1fc784520b920ca1942b8ceeccfe5fba2304a46fa65231ad92205c6245b4b4893c55490910bebcd26aed9c67fe1fe8613e9b1ce11a437c3eb8848c2bcf94dc3dc87a70472b2f311645064dbf40c2033b7fb85d132f5d4186816407e9a01dbf261652fba3036c4ec6c6cc550e36999b37ee6e680b1e090ecce95e4674643dbd758392eae0b1465c890dce31e6bf94115f88a406bc968d585ea60ebe9640428363dc93fc1cf1b575496680e6517bd3294d546c2690c8e08f31fd547bda541b8dc59e2b2d9c9e9295db4760815d926a27efbb356321afa3c78e1b15984c3a1079c5a2ae92d08da25aeea481882bbe4ab92be3272d4274ad502e5d1ad9282b3025369798b8b6b4ce2af0f4b84f176b257f2d22aab0d2690c427f304fe68c15f0ebe8124985f149291ba15472f0874450c157980ffe494b6af814954ca2f516564f8a6c8ab5de4bf5072d32eba514089bef7b4bbe0e22a47043c5f4bdf788a7bc476414a867fb20a47905cbed0511516c99b55068992d5094329b457d2295675736724b458d239ee8eb3cbfebe4da732cd2895c4cdc3a25939d326d428413c8a42986e5ca25a6f14d74e1bcb2f2a279e536a28933aaabb7e8f49ae417c9c461710d28e680530eb0ab4b00031230460d1e2160d0b8e180ca62330b5300010230463b2002001e3b7a7c6000017830b8071837b8c60104b043c7a31e8e43470e0488000038e3002062401a3c7484eca83163060240c290c30602038fdff1851703870d1b6fc300205e182307b2f1360a00d205a4c1a346c80ee602d2e021060ddf02d2e0e1386cf498310301205a50a3063f751ed6cdd51073d66332b1f13a668841c367f8bb80460da6c183870e0d806401b11dcb332b650a69c1025a64ad9bd059c8af80433099ecd000c8154cd9b52c3a00628553cf44c5fc9a31a83c04a40a7e4c29a6a197dff7a2c239ec57a650865d5131af94b54529386a3525f53e470151337a538eecb44a43814b1e948efdb9ed43e875708e14803cc1f8509ab473b8d0310f994c1cc409c6768f95d2db90c9a404204d489c99380f63d722315630638b2dbec8c01732322083478f0da4ffc03b0e0e4c26ef386e08800b204cd025346a41a46aba9550e7caf63b4f52fcb424b0f1478ef5b89a9b2c44c6610f06c86800031680409090c8502664b0ee17d1500072046f34b6ee74108811cc9f969793bc93a51990229474ce9b41554e336f01214262bc476d84167549053284c3664cf9a9e1fa520844088ea5c76c2aeb86ce2d4810524b2e5b715996e2a80304087b58f99dcf740b407ec0ee5f984fff5a6ae117203ec8e594e7ac1473b5e802203dd86c574ca60f32a7f33200c2036d64fcd8a33aaa560a6407798b5269d374eb4851078f1ca147fbf71cb8af2d2fa79acc4e0807be99bcb8289a7232e606c54c0f8fde49ed5db6815b3b6b31f4840c425e83828ff20aa66fa4858d06c9b496494e33aea70b32039456caa372264da7462032288cd6923d7ab2d9c3b1c0465a105aabea54b6b02847598f8eb6f1ae62ba90bce2cad8b832a22e3c6657a4c2452ffd315b5aa6ada872654c7a129f9594ac30ad58470b21a33b79ab6077bc4d54b83379abe23c9b649221e2c36a8e2415a6e8fc5e41f7a840b7f78cf24ad36af914e5ea95941153b2262331852376cf7cbcd347cd7a21294527478a522763a47083e7e9866a478192dbcefb59734e951445d66ed24ec3ee4fc642818e46cbda9aa9e4e3a0f8dd4bc526bf259f30f33f2e79a86829ff9ec8346e989d585a27994eb0eb223f05b1f76c6f152734191795992526f36543b289826a6a7c5e0cb339570e89260ae671633f08591b4d99489ff5ce76dd09a53d98f0def4aaf69297f052c6d4222a6394aa382496584d85ccc83ca9716208482ad16b06334b4d9a2a6d169050a2eb60c96c473bbefe2193c91618904ca21c3fb95816b5ba0d874c263b222091c426f29bb694dcf7ca47a24a774a49cbf6ce1766010e0ae84812487c6ee2540a619a4e263d22913d79b2a1491ca186f14f9a94f01b1536624d31f7bcd69b3d6b8cd0bec34eb7da2799fe10c922ced9df33e78fa9744e421245207ca35f5edc2402cbaa3169954bf88911715c129bd962befe880fc1c994d3a47b8712313b2031c4699f4a64eb66e691e97830c0c051030492423432681cab507ba1cf1009214e527b430795b2622c07911eab0cd273aea0fd9608029fb37072dbcd65e43878dcf0421208f374fa3d91f76f694b00118477a823f8308ca2300a82188641108431df1cb31148305044188d464332a18cb2ab0f138080470351912c0e8e844181300863208641200482108441209c6288528629e9b5030deee9471eca9a3da736fd5fef3fa01b998e526de4a86340d63bb23b48387ea6ddc2a0a68ad48d552f6f4b27ad08fa6b0fa9b5a59f77cd03640d5f9a94dfc96d3a412ab4bc6e0a5781f73c4dc63d8f69fa0ef631715a67e7e22aa7c459f10f18274bbb20c8c7f1eb55ac46166d9451c8eb402ab5c5d839ede9ebbcaed358fb9b4137340ba28676921a62fdec0b0f445eba0354ff10f99071f12b736b3086505beaceb3c92ecee901e7cb2eb372931a753350d749e883e2c7f356141269ec08fba0a35bcc814f0690cd018f719a3a6a06dabc688d69a69db4f654dbbf988a305cba3710a176ec83810e7832fd1b02d7e09286bf10c6377e3712ce2c904c158bfedffa5fa3e7b145e79343182a65ad72ca0c69d131257534506e8663fc82f315de518e02aec8ba90338a199b09e551ade4f14802f4fe45393f91b240510e3244f4fcb04fa6b9f46e9160127bbb784f183669b0cde2588f406ca4de29eb0cb1347af2a6ad51cc862d8271714fdf725a2dda0048e99deab13028486b48a0c75f99b65fb6c9c67b5b6f4162a0af99ef002b64610eb6203885dae21b7a1c26631efa8d449b3d00f93fbab16c2bf2ebf225b3b2a02fcfe33b6bfbc06764c9da6c891865d372fea623c63a2fa46effd63a7e6939f492c6e18437834059607ca63d76ca8db1d757abf69c5438600326eae327f3cf52683274d9ff79305a10766cb9b503fd3b212332a7e59c7ae2b8f77ddd764b4992c71059cfd1b732191126723b5d33204174d45a2dde115880d0728091624ac18ef6fad56b7ab9bd664738be9fe7e45e5eed5a1b927926fd51d731d9126b3d07a252c8fac148437c6ccc9bd104aedc75284153e303bb13b66961d1d4f9a7b9a6133c039aecb90a91d0073be04232b9f95051d376cce5122b8f48dc9dd54a729d65487b29be46d40dec4938fcfa4b804e58b0f16320994931f7414753f28cae4d5137e4467d00f19c6a3a1276242e390b3bb0f928d3f1a18e8c086e558dce10d3105c3c6d418cf2c427f62354eadafb9c4692e9438b0c405fb3fa12338fbec645aee3c34ff98ac1bb815de6f3c7bae8d2516b1dcfcafe5949ad98034855a279652f78d8a56dca5ae7815623a864e60e759d2b121cff063a84a02bf419435775d043b1ccae7f869f70e84287e7e792cc70ef204c0dcbc142a479be4afd91bdd026d417abd5d1c0b49b61b62ff6a29a015e4a9b35e4d7e9ca0b8f506c940972de511d2a2e052df225bfd34c1ed26f5549a63a65d5be012105c555b40ae74398218700cbac039da4ace7312f25e56b344a470a1396420bfbe6164456712817b7246e4e3a82b14935f5a81489bf37fadac0db335c2bd8f870c6ac85c80874c99235482d0ba1b1478e60c0b373b672fad7d7c84e2f70140bf85f8b72636fd68f2b38aba3611daea372c36a5217baed64306700d953568ca6567a36b5e94510300ec194e7c7a66871c80e9ccf7804e6c49d6b78219001aad84c3eeb90e6fc0982424b26558f16858181ff4b36dfbdbb94bfbf8dc04505218976b96e51a2d1d1f2d2b0c3c5bcaacab9c5bad9fdd4daaf57ceb3f790ec80e685d11ef493a01a59be7b09e6c9d93ec3827d04db2d5a30ec54f706263b0802310876e22fa484d1a85db582ab3a6c01f88389afa8eb43e1b6222d38e938a7dd8d4a10ab1382fa09b0fe49a0cefa428062e865881d1444688d408568122fb3111a89b2071a93ed51f4f6f92c6e85af0707e3c0f8bd2b5965f29ac87549692c4285b71d55ce7125a0ce651d7506117f3fe13f3c260dfefb7167cd33d5c6ed0b1e38138fc5c9778d49298f53efd826339d26a364ffd41dbe700a7b50aa941a6fb2beb8ea7734934921c1b30e0bfd11dd0f5729918fedf5ed192abe8684e7dbd5a3972657043a4cdc679be381e9991c1e1105e145b663fd808d48dd2804dfb511d792b43537c9d6eadd3e789d29f041bdeaa7681802e7b45f37bd68679827506a65b12a4fe45be0c8ff8210955239e4b93985f0711b9eae64586eded38c9a7e6177c90f9004e8d9f918e02eef1223a614792eb5ff53798b7b629f2e74400393de7220d1ad38ed66b9c3083c1e2c6ba793b826b0ce4f00140b5d761b1fe722e3f92fe48f35f748645cceb60a19a547c6bd7db0fa2ef3aad4e30c4b4fc12be6d5ba894624816881fcb65152b692c47c89d5e6b478c35edce81631b00f1313fbc144d65c06941e004c03593a02de302f18d8b776f794afca3d7588a4f5841321e09f8a10eace27146bca0451c07477167be76409112d2260f291dbff8ce49b738221629b2fc700552e1872b7672f375420bd86e49095cb98dab303c09e168a7e8ddac4c11a5d38fc98a4a475738c933bc8655bc4e03e0023fcdfb59c689866e8a7b6e42829e111826474401eb4e89ef83e0a3b4de8d58b212dff48604b0d64a4d520bebfec618168de6c351462bdeaf943cee9172174eaaf41f0ccd30bc14f635014c4b8d2f38ff533ee6e911dbe1a2303e9903cf3f103114d6ffcb90985e9b3ac6419a8a5a1db697c38a2f92a3f23fafde513c4eb98fb9ba08b3d5ae0c70e99bbb6c3b3cb6ac82916d22a670cdfa83969a92d06ee5dfcb52d490f988b2e3dc8de703e141f820f64d2bbeded8e2cbe004c6067c41cbf38fe85e7e3719e74c24ee0dba12f602ba23fe96866afff940e426d4a0b7eb05539de16bf4c72f9581c5d596531b15663a4e3b8ff727e221f3ebf3bdf0e874b902b15e183368fb07bfc948a183df58b9a9a5339ab5cdbb97d92accbe7ae0ac10ed2bca05350935bdc379f1033f4ca7a17f6441d5059705be95cb02edd0a2010638a9537354e44ce49cd13ff5ce1e8b877ecfa6aec333369239996670a077c7d54a4a90ef69934c3ee2eca4b2a77ab03b6e86d5fad0dbc1b3e24bf683dd25638a4cd9f8165de58c93607e68d4db30eb5c31ca149690432959999830dc0fcd050d4bf31c94c912257a17152ad635390dee3258178fee8fbbdb335b3d88b4f7f982a82035704ec26db8bfe297ca8d148a8b0f52dcf1a1145b12440c7fe746f48d057e052f9602f58d56ae92b43376b411e0949d29e3894094667c283983628ceb0896209e0207ae4eb322e61875989a85701bb0049b1d0b316a5b3c58e27b8fe8d6c05503daf1e9f438e0f447d85853f4b04da28fcfab438d2f29d2ebab52d312ae467be01de2b10e4ac44be1da11cbce7f02ea6b72add66a693140dfec0b8512288da7d1ec8257d8ae39be6dcd3a3b79754e78de0038ea8467b1048b8fc2d828eec665bad799db4966d7a7436e6705b77493fb2d2db042051e63717fa350bd39a697ea48dc65761be624fc12df8c842984441744cb9be9d1a920cc40ada3bb630f5666a376cf31355f2a5f67d906a928cb8e7804f922cd777de0336db0b0beab249714cc5b7e6023a96facd3169d79ce579c2a9dd8f8c58f97b8d1f05af7714b139f8a4e01d98db44235fa82f59a79a5f9ea425984dad7d21e2f23c77730bf42577121b297c744e1f05403c74f684f64a479c3f1ac80458c2b60822fae4218f12438821d9dc124fd79057511d5943e3b4d29c10602d92a79638fa9c38261ed2f274d067ffe66211b527fb0a67078b79d60901101286a484855beb8c414466c81c62914ce5c766116a60af350f1d3c9ac260dc48bf97d1ac83b2a0aae73f84b6458c6b7840e396d40372388e017a722267ee66b5de17290f14ef4342dfee1afc68e4c96347730d1e6da9f18fcad61e854ce931b423af8773a1af598c8d6b672ddaf1f0ab354e749d7c2ef4a96e318df8bb12467008080204159fac8b3dc0bc019483968bf98da2cb7b554f574ca8fa1126333d4dc3f31d44bb30bc065b80622c76f32420ae8fd92d27220c1af653b550f76e91922febeb791904b3a2707aaa50a45762c14fb737fef838f711864e982d3621904ca778544fa75b6638d98781c02d9c5380945079bf8a8cc3588ef0223943ea68b041e551c92fc4ea76a3072f8922c39e5cbd91c4b39df1d0865aa07b78c28738bdfd45f0720092b59e469c6f1b7ee9bf6b5dc1ead44e81716e6544b4cec181cf65e3f3fa37eec5f6f2731ce375a191528108ed8a71917ffc1745a9305df838d5cc00bbed5417ee04da8a2b92d91f8c8335317a923086442f710d915af10db3cc737523076e3f7fa53e7c7c5b1a9f3398f15c0ab8aafa800fdf9e6c85a3e2821a4dde4af2fdf09dd79c7ade3f7758f5d602942a2cf7a821e831604c139a4814e1409d11ae759cb2000f2cf0e341b30aac15f649ba09d809f3acfd8411888054fb0e34723c6cbd3b4a79b57f106a533dbc06f1546c61292804f78be872e0a5c27bc8cb7f311439af2c6d16bde4ae4409fffe7b853b3f85777eecaa1529c24bca8a5aef037a13f83ab00e6ff4a0fee3b3492fad9eecaec912aca8aff98062606467a99d4c3c02fde55df896a3df1f37bbcaffa482b5115a0bdbeae1f86f01e7144fd04dfbdb177b6c7463b52d03a8e1a02a0595ada0331f88e43cc8d065f88eb53314cea708aafaf8087d905c64420f4d8c5af4c8a1f0f779312491b796fe6d657bff9d60d7aa4d2392fd367cf9f66eb3a7e73d4dd1719c132cf7d31590f87b83e9198d3be40238786078a7f01a09", "0xd5e1a2fa16732ce6906189438c0a82c64e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xc2261276cc9d1f8598ea4b6a74b15c2f4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xf9922c78cfa3c316d27a3eb48145ab1b4e7b9012096b41c4eb3aaf947f6ea429": "0x0400", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950438ac98f6d864839696d6f6e80d2f9d537ffa59919a4028afdb627c14c14c97a1547e13e8e82203d2049b15b1a": "0x02a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b16", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950bad35ce880ec90d4696d6f6e80c4a980da30939d5bb9e4a734d12bf81259ae286aa21fa4b65405347fa40eff35": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864", + "0x94eadf0156a8ad5156507773d0471e4a9ce0310edffce7a01a96c2039f92dd10": "0x01000000", + "0x26aa394eea5630e07c48ae0c9558cef74e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195009ab51029a10e53570617261800e07a51d3213842f8e9363ce8e444255990a225f87e80a3d651db7841e1a0205": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950a00d3cb0425699a66772616e804bea0b37e0cce9bddd80835fa2bfd5606f5dcfb8388bbb10b10c483f0856cf14": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0x3fba98689ebed1138735e0e7a5a790abee99a84ccbfb4b82e714617e5e06f6f7": "0xd0070000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f6584bfaf470c1b26175646980f6f8fe475130d21165446a02fb1dbce3a7bf36412e5d98f4f0473aed9252f349": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195068dec3fce5ade0966261626580da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa8349": "0x8062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47", + "0xb341e3a63e58a188839b242d17f8c9f8b5cab3380174032968897a4c3ce57c0a": "0x00000000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19500d1064d79ff558056772616e800e6d7d1afbcc6547b92995a394ba0daed07a2420be08220a5a1336c6731f0bfa": "0x62475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a", "0x1cb6f36e027abb2091cfb5110ab5087faacf00b9b41fda7a9268821c2a2b3e4c": "0x20a076ef1280d768051f21d060623da3ab5b56944d681d303ed2d4bf658c5bed35010000000000000038757d0de00a0c739e7d7984ef4bc01161bd61e198b7c01b618425c16bb5bd5f0100000000000000d2644c1ab2c63a3ad8d40ad70d4b260969e3abfe6d7e6665f50dc9f6365c9d2a0100000000000000764186bc30fd5a02477f19948dc723d6d57ab174debd4f80ed6038ec960bfe2101000000000000007c94715e5dd8ab54221b1b6b2bfa5666f593f28a92a18e28052531de1bd808130100000000000000bab3cccdcc34401e9b3971b96a662686cf755aa869a5c4b762199ce531b12c5b0100000000000000720537e2c1c554654d73b3889c3ef4c3c2f95a65dd3f7c185ebe4afebed783720100000000000000da6b2df18f0f9001a6dcf1d301b92534fe9b1f3ccfa10c49449fee93adaa83490100000000000000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950417ebe2c60c84ed5626565668403a90c2bb6d3b7000020f6152fe2e5002fa970fd1f42aafb6c8edda8dacc2ea77e": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", - "0x6ac983d82528bf1595ab26438ae5b2cf4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", - "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa195097e3e605d1b3579b6173676e804c64d3f06d28adeb36a892fdaccecace150bec891f04694448a60b74fa469c22": "0x02ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864" + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa19501b1525326b5d47776772616e80fcd5f87a6fd5707a25122a01b4dac0a8482259df7d42a9a096606df1320df08d": "0x520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a", + "0x6a0da05ca59913bc38a8630590f2627c4e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xcec5070d609dd3497f72bde07fc96ba0726380404683fc89e8233450c8aa1950f8df002813b43b80696d6f6e80560d90ca51e9c9481b8a9810060e04d0708d246714960439f804e5c6f40ca651": "0xfa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a00", + "0x3f1467a096bcd71a5b6a0c8155e208104e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xb341e3a63e58a188839b242d17f8c9f84e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0x42b50b77ef717947e7043bb52127d6654e7b9012096b41c4eb3aaf947f6ea429": "0x0000", + "0xc2261276cc9d1f8598ea4b6a74b15c2f57c875e4cff74148e4628f264b974c80": "0x0000362b4c8ee30d0000000000000000", + "0xcec5070d609dd3497f72bde07fc96ba088dcde934c658227ee1dfafcd6e16903": "0x2062475fe5406a7cb6a64c51d0af9d3ab5c2151bcae982fb812f7a76b706914d6a520b48452969f6ddf263b664de0adb0c729d0e0ad3b0e5f3cb636c541bc9022a92ef83665b39d7a565e11bf8d18d41d45a8011601c339e57a8ea88c8ff7bba6f38f3c2f38f6d47f161e98c697bbe3ca0e47c033460afda0dda314ab4222a040402a2d8cfcf75dda85fafc04ace3bcb73160034ed1964c43098fb1fe831de1b1602ea6bfa8b23b92fe4b5db1063a1f9475e3acd0ab61e6b4f454ed6ba00b5f864fa373e25a1c4fe19c7148acde13bc3db1811cf656dc086820f3dda736b9c4a008062e9c21f1d92926103119f7e8153cebdb1e5ab3e52d6f395be80bb193eab47" }, "childrenDefault": {} } From 80a0bfd66ab9e23444b4133934e2860cff961199 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 23 Sep 2021 14:29:26 -0500 Subject: [PATCH 10/52] Add a `force_unfreeze` extrinsic to the disputes module (#3906) * add a 'force_unfreeze' to the Disputes module * fmt * Benchmark Disputes `force_unfreeze` extrinsic (#3908) * Companion for Generate storage info for pallet babe #9760 (#3831) * Adding MaxSegmentLength and MaxAuthorities to pallet babe * Missed a few to_vec * Removing `MaxSegmentLength` as not needed anymore * Adding `MaxAuthorities` to couple of missing place * Adding missing definition of `MaxAuthorities` * Adding a missing to_vec * update Substrate Co-authored-by: thiolliere Co-authored-by: parity-processbot <> * Benchmark Disputes `force_unfreeze` extrinsic target pr: #3906 target branch: rh-unfreeze * Add benchmark to rococo runtime; run benchmark locally * Revert unintentionally added diff * Some spacing and comments * Bump proc-macro-crate from 1.0.0 to 1.1.0 (#3863) Bumps [proc-macro-crate](https://github.com/bkchr/proc-macro-crate) from 1.0.0 to 1.1.0. - [Release notes](https://github.com/bkchr/proc-macro-crate/releases) - [Commits](https://github.com/bkchr/proc-macro-crate/commits) --- updated-dependencies: - dependency-name: proc-macro-crate dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump parity-scale-codec from 2.2.0 to 2.3.0 (#3833) Bumps [parity-scale-codec](https://github.com/paritytech/parity-scale-codec) from 2.2.0 to 2.3.0. - [Release notes](https://github.com/paritytech/parity-scale-codec/releases) - [Changelog](https://github.com/paritytech/parity-scale-codec/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/parity-scale-codec/compare/v2.2...parity-scale-codec-v2.3.0) --- updated-dependencies: - dependency-name: parity-scale-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Use super::WeightInfo to try and get CI to compile * cargo run --quiet --release --features runtime-benchmarks -- benchmark --chain=rococo-dev --steps=50 --repeat=20 --pallet=runtime_parachains::disputes --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --output=./runtime/parachains/src/disputes/weights.rs --header=./file_header.txt * impl TestWeightInfo; remove weights from runtime_parachains dir * fmt * Update test-runtime Co-authored-by: Georges Co-authored-by: thiolliere Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Parity Bot Co-authored-by: Zeke Mostov <32168567+emostov@users.noreply.github.com> Co-authored-by: Georges Co-authored-by: thiolliere Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Parity Bot --- Cargo.lock | 2 + runtime/parachains/src/disputes.rs | 33 ++++++++++++ .../parachains/src/disputes/benchmarking.rs | 36 +++++++++++++ runtime/parachains/src/mock.rs | 1 + runtime/rococo/Cargo.toml | 6 +++ runtime/rococo/src/lib.rs | 50 ++++++++++++++++++ runtime/rococo/src/weights/mod.rs | 1 + .../weights/runtime_parachains_disputes.rs | 52 +++++++++++++++++++ runtime/test-runtime/src/lib.rs | 1 + 9 files changed, 182 insertions(+) create mode 100644 runtime/parachains/src/disputes/benchmarking.rs create mode 100644 runtime/rococo/src/weights/mod.rs create mode 100644 runtime/rococo/src/weights/runtime_parachains_disputes.rs diff --git a/Cargo.lock b/Cargo.lock index c887e6fd17d7..91213b72d4a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7811,10 +7811,12 @@ dependencies = [ "bp-runtime", "bp-wococo", "bridge-runtime-common", + "frame-benchmarking", "frame-executive", "frame-support", "frame-system", "frame-system-rpc-runtime-api", + "hex-literal", "log", "pallet-authority-discovery", "pallet-authorship", diff --git a/runtime/parachains/src/disputes.rs b/runtime/parachains/src/disputes.rs index b3bd5a3ed68d..09c2d147854d 100644 --- a/runtime/parachains/src/disputes.rs +++ b/runtime/parachains/src/disputes.rs @@ -23,6 +23,7 @@ use crate::{ }; use bitvec::{bitvec, order::Lsb0 as BitOrderLsb0}; use frame_support::{ensure, traits::Get, weights::Weight}; +use frame_system::pallet_prelude::*; use parity_scale_codec::{Decode, Encode}; use primitives::v1::{ byzantine_threshold, supermajority_threshold, ApprovalVote, CandidateHash, CompactStatement, @@ -37,6 +38,11 @@ use sp_runtime::{ }; use sp_std::{collections::btree_set::BTreeSet, prelude::*}; +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + +pub use crate::Origin as ParachainOrigin; + /// Whether the dispute is local or remote. #[derive(Encode, Decode, Clone, PartialEq, Eq, RuntimeDebug, TypeInfo)] pub enum DisputeLocation { @@ -212,6 +218,17 @@ impl DisputesHandler for pallet::Pallet { } } +pub trait WeightInfo { + fn force_unfreeze() -> Weight; +} + +pub struct TestWeightInfo; +impl WeightInfo for TestWeightInfo { + fn force_unfreeze() -> Weight { + 0 + } +} + pub use pallet::*; #[frame_support::pallet] pub mod pallet { @@ -223,6 +240,9 @@ pub mod pallet { type Event: From> + IsType<::Event>; type RewardValidators: RewardValidators; type PunishValidators: PunishValidators; + + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; } #[pallet::pallet] @@ -305,6 +325,19 @@ pub mod pallet { /// Too many spam slots used by some specific validator. PotentialSpam, } + + #[pallet::origin] + pub type Origin = ParachainOrigin; + + #[pallet::call] + impl Pallet { + #[pallet::weight(::WeightInfo::force_unfreeze())] + pub fn force_unfreeze(origin: OriginFor) -> DispatchResult { + ensure_root(origin)?; + Frozen::::set(None); + Ok(()) + } + } } bitflags::bitflags! { diff --git a/runtime/parachains/src/disputes/benchmarking.rs b/runtime/parachains/src/disputes/benchmarking.rs new file mode 100644 index 000000000000..b884d1a6e799 --- /dev/null +++ b/runtime/parachains/src/disputes/benchmarking.rs @@ -0,0 +1,36 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use super::*; + +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; +use frame_system::RawOrigin; +use sp_runtime::traits::One; + +benchmarks! { + force_unfreeze { + Frozen::::set(Some(One::one())); + }: _(RawOrigin::Root) + verify { + assert!(Frozen::::get().is_none()) + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext(Default::default()), + crate::mock::Test +); diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 387e0a7bf5e8..1ccf57ea357a 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -149,6 +149,7 @@ impl crate::disputes::Config for Test { type Event = Event; type RewardValidators = Self; type PunishValidators = Self; + type WeightInfo = crate::disputes::TestWeightInfo; } thread_local! { diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 527e66890819..15b4ed1484f6 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -78,6 +78,10 @@ pallet-bridge-dispatch = { path = "../../bridges/modules/dispatch", default-feat pallet-bridge-grandpa = { path = "../../bridges/modules/grandpa", default-features = false } pallet-bridge-messages = { path = "../../bridges/modules/messages", default-features = false } +# Benchmarking Dependencies +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } +hex-literal = { version = "0.3.3", optional = true } + [build-dependencies] substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } @@ -169,6 +173,8 @@ runtime-benchmarks = [ "pallet-timestamp/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", "xcm-builder/runtime-benchmarks", + "frame-benchmarking", + "hex-literal" ] try-runtime = [ "frame-executive/try-runtime", diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 9f03cc8253e8..5323adeefc69 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -94,6 +94,7 @@ use xcm_executor::XcmExecutor; /// Constant values used within the runtime. pub mod constants; mod validator_manager; +mod weights; // Make the WASM binary available. #[cfg(feature = "std")] @@ -369,6 +370,7 @@ impl parachains_disputes::Config for Runtime { type Event = Event; type RewardValidators = (); type PunishValidators = (); + type WeightInfo = weights::runtime_parachains_disputes::WeightInfo; } parameter_types! { @@ -1559,4 +1561,52 @@ sp_api::impl_runtime_apis! { TransactionPayment::query_fee_details(uxt, len) } } + + #[cfg(feature = "runtime-benchmarks")] + impl frame_benchmarking::Benchmark for Runtime { + fn benchmark_metadata(extra: bool) -> ( + Vec, + Vec, + ) { + use frame_benchmarking::{list_benchmark, Benchmarking, BenchmarkList}; + use frame_support::traits::StorageInfoTrait; + + let mut list = Vec::::new(); + + list_benchmark!(list, extra, runtime_parachains::disputes, ParasDisputes); + + let storage_info = AllPalletsWithSystem::storage_info(); + + return (list, storage_info) + } + + fn dispatch_benchmark( + config: frame_benchmarking::BenchmarkConfig, + ) -> Result< + Vec, + sp_runtime::RuntimeString, + > { + use frame_benchmarking::{Benchmarking, BenchmarkBatch, add_benchmark, TrackedStorageKey}; + + let mut batches = Vec::::new(); + 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 params = (&config, &whitelist); + + add_benchmark!(params, batches, runtime_parachains::disputes, ParasDisputes); + + if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } + Ok(batches) + } + } } diff --git a/runtime/rococo/src/weights/mod.rs b/runtime/rococo/src/weights/mod.rs new file mode 100644 index 000000000000..bcd0ec248a5f --- /dev/null +++ b/runtime/rococo/src/weights/mod.rs @@ -0,0 +1 @@ +pub mod runtime_parachains_disputes; diff --git a/runtime/rococo/src/weights/runtime_parachains_disputes.rs b/runtime/rococo/src/weights/runtime_parachains_disputes.rs new file mode 100644 index 000000000000..37c0d4545c67 --- /dev/null +++ b/runtime/rococo/src/weights/runtime_parachains_disputes.rs @@ -0,0 +1,52 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::disputes` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-23, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("rococo-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=rococo-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::disputes +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --output=./runtime/parachains/src/disputes/weights.rs +// --header=./file_header.txt + + +#![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 `runtime_parachains::disputes`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::disputes::WeightInfo for WeightInfo { + // Storage: ParasDisputes Frozen (r:0 w:1) + fn force_unfreeze() -> Weight { + (2_022_000 as Weight) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 722aab3e16af..09da961b2169 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -472,6 +472,7 @@ impl parachains_disputes::Config for Runtime { type Event = Event; type RewardValidators = (); type PunishValidators = (); + type WeightInfo = parachains_disputes::TestWeightInfo; } impl parachains_paras_inherent::Config for Runtime {} From ece7544b40d8b29897f5aa799f27840dcc32f24d Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Thu, 23 Sep 2021 17:17:34 -0500 Subject: [PATCH 11/52] add parachains pallets to Polkadot runtime (#3815) * add parachains pallets to Polkadot runtime * some updates * temp update deposits, fix compile * lower para byte deposit * fix genesis * fmt * fix spell * updates to consts * update benchmark list * fix merge master * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_crowdloan.rs * skip large meta * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::crowdloan --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_crowdloan.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=polkadot-dev --steps=50 --repeat=20 --pallet=runtime_common::paras_registrar --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/polkadot/src/weights/runtime_common_paras_registrar.rs * fmt * add and update proxies * add weight info * weights * lower minimum contribution to 5 DOT * only overwrite when default Co-authored-by: Shawn Tabrizi Co-authored-by: Parity Bot --- Cargo.lock | 1 + node/service/src/chain_spec.rs | 15 +- runtime/common/src/crowdloan.rs | 1 + runtime/polkadot/Cargo.toml | 1 + runtime/polkadot/src/constants.rs | 1 + runtime/polkadot/src/lib.rs | 332 ++++++++++++++++-- runtime/polkadot/src/weights/mod.rs | 6 + .../src/weights/runtime_common_auctions.rs | 65 ++++ .../src/weights/runtime_common_crowdloan.rs | 132 +++++++ .../weights/runtime_common_paras_registrar.rs | 99 ++++++ .../src/weights/runtime_common_slots.rs | 73 ++++ .../runtime_parachains_configuration.rs | 91 +++++ .../src/weights/runtime_parachains_paras.rs | 106 ++++++ 13 files changed, 885 insertions(+), 38 deletions(-) create mode 100644 runtime/polkadot/src/weights/runtime_common_auctions.rs create mode 100644 runtime/polkadot/src/weights/runtime_common_crowdloan.rs create mode 100644 runtime/polkadot/src/weights/runtime_common_paras_registrar.rs create mode 100644 runtime/polkadot/src/weights/runtime_common_slots.rs create mode 100644 runtime/polkadot/src/weights/runtime_parachains_configuration.rs create mode 100644 runtime/polkadot/src/weights/runtime_parachains_paras.rs diff --git a/Cargo.lock b/Cargo.lock index 91213b72d4a2..8f872b57f778 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6655,6 +6655,7 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "polkadot-runtime-common", + "polkadot-runtime-parachains", "rustc-hex", "scale-info", "separator", diff --git a/node/service/src/chain_spec.rs b/node/service/src/chain_spec.rs index 3d370faa6aed..2bd96390c801 100644 --- a/node/service/src/chain_spec.rs +++ b/node/service/src/chain_spec.rs @@ -157,7 +157,12 @@ pub fn wococo_config() -> Result { } /// The default parachains host configuration. -#[cfg(any(feature = "rococo-native", feature = "kusama-native", feature = "westend-native"))] +#[cfg(any( + feature = "rococo-native", + feature = "kusama-native", + feature = "westend-native", + feature = "polkadot-native" +))] fn default_parachains_host_configuration( ) -> polkadot_runtime_parachains::configuration::HostConfiguration< polkadot_primitives::v1::BlockNumber, @@ -364,6 +369,10 @@ fn polkadot_staging_testnet_config_genesis(wasm_binary: &[u8]) -> polkadot::Gene claims: polkadot::ClaimsConfig { claims: vec![], vesting: vec![] }, vesting: polkadot::VestingConfig { vesting: vec![] }, treasury: Default::default(), + configuration: polkadot::ConfigurationConfig { + config: default_parachains_host_configuration(), + }, + paras: Default::default(), } } @@ -1310,6 +1319,10 @@ pub fn polkadot_testnet_genesis( claims: polkadot::ClaimsConfig { claims: vec![], vesting: vec![] }, vesting: polkadot::VestingConfig { vesting: vec![] }, treasury: Default::default(), + configuration: polkadot::ConfigurationConfig { + config: default_parachains_host_configuration(), + }, + paras: Default::default(), } } diff --git a/runtime/common/src/crowdloan.rs b/runtime/common/src/crowdloan.rs index a97825d445c2..e6a9a2f1e4b4 100644 --- a/runtime/common/src/crowdloan.rs +++ b/runtime/common/src/crowdloan.rs @@ -1942,6 +1942,7 @@ mod benchmarking { } // Worst case: Refund removes `RemoveKeysLimit` keys, and is fully refunded. + #[skip_meta] refund { let k in 0 .. T::RemoveKeysLimit::get(); let fund_index = create_fund::(1337, 100u32.into()); diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 18121fdb415a..65a18ce5f3a5 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -77,6 +77,7 @@ pallet-session-benchmarking = { git = "https://github.com/paritytech/substrate", hex-literal = { version = "0.3.3", optional = true } runtime-common = { package = "polkadot-runtime-common", path = "../common", default-features = false } +runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } [dev-dependencies] diff --git a/runtime/polkadot/src/constants.rs b/runtime/polkadot/src/constants.rs index cd3a6927d23a..3b53a55d6990 100644 --- a/runtime/polkadot/src/constants.rs +++ b/runtime/polkadot/src/constants.rs @@ -39,6 +39,7 @@ pub mod time { pub const MINUTES: BlockNumber = 60_000 / (MILLISECS_PER_BLOCK as BlockNumber); pub const HOURS: BlockNumber = MINUTES * 60; pub const DAYS: BlockNumber = HOURS * 24; + pub const WEEKS: BlockNumber = DAYS * 7; // 1 in 4 blocks (on average, not counting collisions) will be primary babe blocks. pub const PRIMARY_PROBABILITY: (u64, u64) = (1, 4); diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 997762515478..dccd33ebb8ad 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -22,9 +22,18 @@ use pallet_transaction_payment::CurrencyAdapter; use runtime_common::{ - claims, impls::DealWithFees, AssignmentSessionKeyPlaceholder, BlockHashCount, BlockLength, - BlockWeights, CurrencyToVote, OffchainSolutionLengthLimit, OffchainSolutionWeightLimit, - ParachainSessionKeyPlaceholder, RocksDbWeight, SlowAdjustingFeeUpdate, + auctions, claims, crowdloan, impls::DealWithFees, paras_registrar, slots, BlockHashCount, + BlockLength, BlockWeights, CurrencyToVote, OffchainSolutionLengthLimit, + OffchainSolutionWeightLimit, RocksDbWeight, SlowAdjustingFeeUpdate, +}; + +use runtime_parachains::{ + configuration as parachains_configuration, dmp as parachains_dmp, hrmp as parachains_hrmp, + inclusion as parachains_inclusion, initializer as parachains_initializer, + origin as parachains_origin, paras as parachains_paras, + paras_inherent as parachains_paras_inherent, reward_points as parachains_reward_points, + runtime_api_impl::v1 as parachains_runtime_api_impl, scheduler as parachains_scheduler, + session_info as parachains_session_info, shared as parachains_shared, ump as parachains_ump, }; use authority_discovery_primitives::AuthorityId as AuthorityDiscoveryId; @@ -32,7 +41,7 @@ use beefy_primitives::crypto::AuthorityId as BeefyId; use frame_support::{ construct_runtime, parameter_types, traits::{Contains, KeyOwnerProofSystem, LockIdentifier, OnRuntimeUpgrade}, - weights::Weight, + weights::{constants::WEIGHT_PER_MILLIS, Weight}, PalletId, RuntimeDebug, }; use frame_system::{EnsureOneOf, EnsureRoot}; @@ -44,9 +53,9 @@ use pallet_transaction_payment::{FeeDetails, RuntimeDispatchInfo}; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use primitives::v1::{ AccountId, AccountIndex, Balance, BlockNumber, CandidateEvent, CommittedCandidateReceipt, - CoreState, GroupRotationInfo, Hash, Id, InboundDownwardMessage, InboundHrmpMessage, Moment, - Nonce, OccupiedCoreAssumption, PersistedValidationData, SessionInfo, Signature, ValidationCode, - ValidationCodeHash, ValidatorId, ValidatorIndex, + CoreState, GroupRotationInfo, Hash, Id as ParaId, InboundDownwardMessage, InboundHrmpMessage, + Moment, Nonce, OccupiedCoreAssumption, PersistedValidationData, SessionInfo, Signature, + ValidationCode, ValidationCodeHash, ValidatorId, ValidatorIndex, }; use sp_core::{ u32_trait::{_1, _2, _3, _4, _5}, @@ -148,7 +157,19 @@ impl Contains for BaseFilter { Call::Multisig(_) | Call::Bounties(_) | Call::Tips(_) | - Call::ElectionProviderMultiPhase(_) => true, + Call::ElectionProviderMultiPhase(_) | + Call::Configuration(_) | + Call::ParasShared(_) | + Call::ParaInclusion(_) | + Call::Paras(_) | + Call::Initializer(_) | + Call::ParaInherent(_) | + Call::Dmp(_) | + Call::Ump(_) | + Call::Hrmp(_) | + Call::Slots(_) => true, + // Disable paras registration, crowdloans, and auctions for now. + Call::Registrar(_) | Call::Auctions(_) | Call::Crowdloan(_) => false, } } } @@ -317,8 +338,8 @@ impl_opaque_keys! { pub grandpa: Grandpa, pub babe: Babe, pub im_online: ImOnline, - pub para_validator: ParachainSessionKeyPlaceholder, - pub para_assignment: AssignmentSessionKeyPlaceholder, + pub para_validator: Initializer, + pub para_assignment: ParaSessionInfo, pub authority_discovery: AuthorityDiscovery, } } @@ -944,6 +965,7 @@ pub enum ProxyType { // Skip 4 as it is now removed (was SudoBalances) IdentityJudgement = 5, CancelProxy = 6, + Auction = 7, } #[cfg(test)] @@ -1017,7 +1039,14 @@ impl InstanceFilter for ProxyType { Call::Utility(..) | Call::Identity(..) | Call::Proxy(..) | - Call::Multisig(..) + Call::Multisig(..) | + Call::Registrar(paras_registrar::Call::register {..}) | + Call::Registrar(paras_registrar::Call::deregister {..}) | + // Specifically omitting Registrar `swap` + Call::Registrar(paras_registrar::Call::reserve {..}) | + Call::Crowdloan(..) | + Call::Slots(..) | + Call::Auctions(..) // Specifically omitting the entire XCM Pallet ), ProxyType::Governance => matches!( c, @@ -1037,6 +1066,10 @@ impl InstanceFilter for ProxyType { ProxyType::CancelProxy => { matches!(c, Call::Proxy(pallet_proxy::Call::reject_announcement { .. })) }, + ProxyType::Auction => matches!( + c, + Call::Auctions(..) | Call::Crowdloan(..) | Call::Registrar(..) | Call::Slots(..) + ), } } fn is_superset(&self, o: &Self) -> bool { @@ -1065,6 +1098,135 @@ impl pallet_proxy::Config for Runtime { type AnnouncementDepositFactor = AnnouncementDepositFactor; } +impl parachains_origin::Config for Runtime {} + +impl parachains_configuration::Config for Runtime { + type WeightInfo = weights::runtime_parachains_configuration::WeightInfo; +} + +impl parachains_shared::Config for Runtime {} + +impl parachains_session_info::Config for Runtime {} + +impl parachains_inclusion::Config for Runtime { + type Event = Event; + type DisputesHandler = (); + type RewardValidators = parachains_reward_points::RewardValidatorsWithEraPoints; +} + +impl parachains_paras::Config for Runtime { + type Origin = Origin; + type Event = Event; + type WeightInfo = weights::runtime_parachains_paras::WeightInfo; +} + +parameter_types! { + pub const FirstMessageFactorPercent: u64 = 100; +} + +impl parachains_ump::Config for Runtime { + type Event = Event; + type UmpSink = (); + type FirstMessageFactorPercent = FirstMessageFactorPercent; + type ExecuteOverweightOrigin = EnsureRoot; +} + +impl parachains_dmp::Config for Runtime {} + +impl parachains_hrmp::Config for Runtime { + type Event = Event; + type Origin = Origin; + type Currency = Balances; +} + +impl parachains_paras_inherent::Config for Runtime {} + +impl parachains_scheduler::Config for Runtime {} + +impl parachains_initializer::Config for Runtime { + type Randomness = pallet_babe::RandomnessFromOneEpochAgo; + type ForceOrigin = EnsureRoot; +} + +parameter_types! { + // Mostly arbitrary deposit price, but should provide an adequate incentive not to spam reserve + // `ParaId`s. + pub const ParaDeposit: Balance = 100 * DOLLARS; + pub const ParaDataByteDeposit: Balance = deposit(0, 1); +} + +impl paras_registrar::Config for Runtime { + type Event = Event; + type Origin = Origin; + type Currency = Balances; + type OnSwap = (Crowdloan, Slots); + type ParaDeposit = ParaDeposit; + type DataDepositPerByte = ParaDataByteDeposit; + type WeightInfo = weights::runtime_common_paras_registrar::WeightInfo; +} + +parameter_types! { + // 12 weeks = 3 months per lease period -> 8 lease periods ~ 2 years + pub const LeasePeriod: BlockNumber = 12 * WEEKS; +} + +impl slots::Config for Runtime { + type Event = Event; + type Currency = Balances; + type Registrar = Registrar; + type LeasePeriod = LeasePeriod; + type WeightInfo = weights::runtime_common_slots::WeightInfo; +} + +parameter_types! { + pub const CrowdloanId: PalletId = PalletId(*b"py/cfund"); + // Accounts for 10_000 contributions, each using 48 bytes (16 bytes for balance, and 32 bytes + // for a memo). + pub const SubmissionDeposit: Balance = deposit(1, 480_000); + // The minimum crowdloan contribution. + pub const MinContribution: Balance = 5 * DOLLARS; + pub const RemoveKeysLimit: u32 = 1000; + // Allow 32 bytes for an additional memo to a crowdloan. + pub const MaxMemoLength: u8 = 32; +} + +impl crowdloan::Config for Runtime { + type Event = Event; + type PalletId = CrowdloanId; + type SubmissionDeposit = SubmissionDeposit; + type MinContribution = MinContribution; + type RemoveKeysLimit = RemoveKeysLimit; + type Registrar = Registrar; + type Auctioneer = Auctions; + type MaxMemoLength = MaxMemoLength; + type WeightInfo = weights::runtime_common_crowdloan::WeightInfo; +} + +parameter_types! { + // The average auction is 7 days long, so this will be 70% for ending period. + // 5 Days = 72000 Blocks @ 6 sec per block + pub const EndingPeriod: BlockNumber = 5 * DAYS; + // ~ 1000 samples per day -> ~ 20 blocks per sample -> 2 minute samples + pub const SampleLength: BlockNumber = 2 * MINUTES; +} + +type AuctionInitiate = EnsureOneOf< + AccountId, + EnsureRoot, + pallet_collective::EnsureProportionAtLeast<_2, _3, AccountId, CouncilCollective>, +>; + +impl auctions::Config for Runtime { + type Event = Event; + type Leaser = Slots; + type Registrar = Registrar; + type EndingPeriod = EndingPeriod; + type SampleLength = SampleLength; + type Randomness = pallet_babe::RandomnessFromOneEpochAgo; + type InitiateOrigin = AuctionInitiate; + type WeightInfo = weights::runtime_common_auctions::WeightInfo; +} + construct_runtime! { pub enum Runtime where Block = Block, @@ -1125,6 +1287,26 @@ construct_runtime! { // Election pallet. Only works with staking, but placed here to maintain indices. ElectionProviderMultiPhase: pallet_election_provider_multi_phase::{Pallet, Call, Storage, Event, ValidateUnsigned} = 36, + + // Parachains pallets. Start indices at 50 to leave room. + ParachainsOrigin: parachains_origin::{Pallet, Origin} = 50, + Configuration: parachains_configuration::{Pallet, Call, Storage, Config} = 51, + ParasShared: parachains_shared::{Pallet, Call, Storage} = 52, + ParaInclusion: parachains_inclusion::{Pallet, Call, Storage, Event} = 53, + ParaInherent: parachains_paras_inherent::{Pallet, Call, Storage, Inherent} = 54, + ParaScheduler: parachains_scheduler::{Pallet, Storage} = 55, + Paras: parachains_paras::{Pallet, Call, Storage, Event, Config} = 56, + Initializer: parachains_initializer::{Pallet, Call, Storage} = 57, + Dmp: parachains_dmp::{Pallet, Call, Storage} = 58, + Ump: parachains_ump::{Pallet, Call, Storage, Event} = 59, + Hrmp: parachains_hrmp::{Pallet, Call, Storage, Event} = 60, + ParaSessionInfo: parachains_session_info::{Pallet, Storage} = 61, + + // Parachain Onboarding Pallets. Start indices at 70 to leave room. + Registrar: paras_registrar::{Pallet, Call, Storage, Event} = 70, + Slots: slots::{Pallet, Call, Storage, Event} = 71, + Auctions: auctions::{Pallet, Call, Storage, Event} = 72, + Crowdloan: crowdloan::{Pallet, Call, Storage, Event} = 73, } } @@ -1159,6 +1341,7 @@ pub type Executive = frame_executive::Executive< Runtime, AllPallets, ( + SetInitialHostConfiguration, BountiesPrefixMigration, CouncilStoragePrefixMigration, TechnicalCommitteeStoragePrefixMigration, @@ -1230,7 +1413,7 @@ impl OnRuntimeUpgrade for CouncilStoragePrefixMigration { } const TECHNICAL_COMMITTEE_OLD_PREFIX: &str = "Instance2Collective"; -/// Migrate from 'Instance2Collective' to the new pallet prefix `TechnicalCommittee` +/// Migrate from `Instance2Collective` to the new pallet prefix `TechnicalCommittee` pub struct TechnicalCommitteeStoragePrefixMigration; impl OnRuntimeUpgrade for TechnicalCommitteeStoragePrefixMigration { @@ -1297,6 +1480,64 @@ impl OnRuntimeUpgrade for TechnicalMembershipStoragePrefixMigration { } } +/// Set the initial host configuration for Polkadot. +pub struct SetInitialHostConfiguration; +impl OnRuntimeUpgrade for SetInitialHostConfiguration { + fn on_runtime_upgrade() -> frame_support::weights::Weight { + use parachains_configuration::HostConfiguration; + + let active_config: HostConfiguration = HostConfiguration { + max_code_size: 10_485_760, + max_head_data_size: 20_480, + max_upward_queue_count: 10, + max_upward_queue_size: 51_200, + max_upward_message_size: 51_200, + max_upward_message_num_per_candidate: 10, + hrmp_max_message_num_per_candidate: 10, + validation_upgrade_frequency: 14_400, + validation_upgrade_delay: 600, + max_pov_size: 5_242_880, + max_downward_message_size: 51_200, + ump_service_total_weight: 100_000_000_000, + hrmp_max_parachain_outbound_channels: 10, + hrmp_max_parathread_outbound_channels: 0, + hrmp_sender_deposit: deposit(1004, 100 * 1024), + hrmp_recipient_deposit: deposit(1004, 100 * 1024), + hrmp_channel_max_capacity: 1_000, + hrmp_channel_max_total_size: 102_400, + hrmp_max_parachain_inbound_channels: 10, + hrmp_max_parathread_inbound_channels: 0, + hrmp_channel_max_message_size: 102_400, + code_retention_period: EPOCH_DURATION_IN_SLOTS * 6, + parathread_cores: 0, + parathread_retries: 0, + group_rotation_frequency: 10, + chain_availability_period: 10, + thread_availability_period: 10, + scheduling_lookahead: 1, + max_validators_per_core: Some(5), + max_validators: Some(200), + dispute_period: 6, + dispute_post_conclusion_acceptance_period: 600, + dispute_max_spam_slots: 2, + dispute_conclusion_by_time_out_period: 600, + no_show_slots: 2, + n_delay_tranches: 89, + zeroth_delay_tranche_width: 0, + needed_approvals: 30, + relay_vrf_modulo_samples: 40, + ump_max_individual_weight: 20 * WEIGHT_PER_MILLIS, + }; + + // Only set the config if it's needed to be set explicitly. + if Configuration::config() == Default::default() { + Configuration::force_set_active_config(active_config); + } + + RocksDbWeight::get().reads(1) + RocksDbWeight::get().writes(1) + } +} + const TIPS_OLD_PREFIX: &str = "Treasury"; /// Migrate pallet-tips from `Treasury` to the new pallet prefix `Tips` pub struct MigrateTipsPalletPrefix; @@ -1380,60 +1621,69 @@ sp_api::impl_runtime_apis! { impl primitives::v1::ParachainHost for Runtime { fn validators() -> Vec { - Vec::new() + parachains_runtime_api_impl::validators::() } fn validator_groups() -> (Vec>, GroupRotationInfo) { - (Vec::new(), GroupRotationInfo { session_start_block: 0, group_rotation_frequency: 0, now: 0 }) + parachains_runtime_api_impl::validator_groups::() } fn availability_cores() -> Vec> { - Vec::new() + parachains_runtime_api_impl::availability_cores::() } - fn persisted_validation_data(_: Id, _: OccupiedCoreAssumption) + fn persisted_validation_data(para_id: ParaId, assumption: OccupiedCoreAssumption) -> Option> { - None + parachains_runtime_api_impl::persisted_validation_data::(para_id, assumption) } - fn check_validation_outputs(_: Id, _: primitives::v1::CandidateCommitments) -> bool { - false + fn check_validation_outputs( + para_id: ParaId, + outputs: primitives::v1::CandidateCommitments, + ) -> bool { + parachains_runtime_api_impl::check_validation_outputs::(para_id, outputs) } fn session_index_for_child() -> SessionIndex { - 0 + parachains_runtime_api_impl::session_index_for_child::() } - fn session_info(_: SessionIndex) -> Option { - None + fn validation_code(para_id: ParaId, assumption: OccupiedCoreAssumption) + -> Option { + parachains_runtime_api_impl::validation_code::(para_id, assumption) } - fn validation_code(_: Id, _: OccupiedCoreAssumption) -> Option { - None + fn candidate_pending_availability(para_id: ParaId) -> Option> { + parachains_runtime_api_impl::candidate_pending_availability::(para_id) } - fn candidate_pending_availability(_: Id) -> Option> { - None + fn candidate_events() -> Vec> { + parachains_runtime_api_impl::candidate_events::(|ev| { + match ev { + Event::ParaInclusion(ev) => { + Some(ev) + } + _ => None, + } + }) } - fn candidate_events() -> Vec> { - Vec::new() + fn session_info(index: SessionIndex) -> Option { + parachains_runtime_api_impl::session_info::(index) } - fn dmq_contents( - _recipient: Id, - ) -> Vec> { - Vec::new() + fn dmq_contents(recipient: ParaId) -> Vec> { + parachains_runtime_api_impl::dmq_contents::(recipient) } fn inbound_hrmp_channels_contents( - _recipient: Id - ) -> BTreeMap>> { - BTreeMap::new() + recipient: ParaId + ) -> BTreeMap>> { + parachains_runtime_api_impl::inbound_hrmp_channels_contents::(recipient) } - fn validation_code_by_hash(_hash: ValidationCodeHash) -> Option { - None + fn validation_code_by_hash(hash: ValidationCodeHash) -> Option { + parachains_runtime_api_impl::validation_code_by_hash::(hash) } } @@ -1626,6 +1876,10 @@ sp_api::impl_runtime_apis! { // NOTE: Make sure to prefix these `runtime_common::` so that path resolves correctly // in the generated file. list_benchmark!(list, extra, runtime_common::claims, Claims); + list_benchmark!(list, extra, runtime_common::crowdloan, Crowdloan); + list_benchmark!(list, extra, runtime_common::claims, Claims); + list_benchmark!(list, extra, runtime_common::slots, Slots); + list_benchmark!(list, extra, runtime_common::paras_registrar, Registrar); // Substrate list_benchmark!(list, extra, pallet_balances, Balances); list_benchmark!(list, extra, pallet_bounties, Bounties); @@ -1694,6 +1948,10 @@ sp_api::impl_runtime_apis! { // NOTE: Make sure to prefix these `runtime_common::` so that path resolves correctly // in the generated file. add_benchmark!(params, batches, runtime_common::claims, Claims); + add_benchmark!(params, batches, runtime_common::crowdloan, Crowdloan); + add_benchmark!(params, batches, runtime_common::claims, Claims); + add_benchmark!(params, batches, runtime_common::slots, Slots); + add_benchmark!(params, batches, runtime_common::paras_registrar, Registrar); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); add_benchmark!(params, batches, pallet_bounties, Bounties); diff --git a/runtime/polkadot/src/weights/mod.rs b/runtime/polkadot/src/weights/mod.rs index 046bc9f0a4c1..3dcd0edaac38 100644 --- a/runtime/polkadot/src/weights/mod.rs +++ b/runtime/polkadot/src/weights/mod.rs @@ -37,4 +37,10 @@ pub mod pallet_tips; pub mod pallet_treasury; pub mod pallet_utility; pub mod pallet_vesting; +pub mod runtime_common_auctions; pub mod runtime_common_claims; +pub mod runtime_common_crowdloan; +pub mod runtime_common_paras_registrar; +pub mod runtime_common_slots; +pub mod runtime_parachains_configuration; +pub mod runtime_parachains_paras; diff --git a/runtime/polkadot/src/weights/runtime_common_auctions.rs b/runtime/polkadot/src/weights/runtime_common_auctions.rs new file mode 100644 index 000000000000..6e81685ad718 --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_common_auctions.rs @@ -0,0 +1,65 @@ +// Copyright 2017-2020 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 . +//! Autogenerated weights for `runtime_common::auctions` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 +//! DATE: 2021-07-01, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::auctions +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/ + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `runtime_common::auctions`. +pub struct WeightInfo(PhantomData); +impl runtime_common::auctions::WeightInfo for WeightInfo { + fn new_auction() -> Weight { + (24_436_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn bid() -> Weight { + (137_499_000 as Weight) + .saturating_add(T::DbWeight::get().reads(8 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + fn on_initialize() -> Weight { + (23_555_687_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3688 as Weight)) + .saturating_add(T::DbWeight::get().writes(3683 as Weight)) + } + fn cancel_auction() -> Weight { + (5_007_594_000 as Weight) + .saturating_add(T::DbWeight::get().reads(73 as Weight)) + .saturating_add(T::DbWeight::get().writes(3673 as Weight)) + } +} diff --git a/runtime/polkadot/src/weights/runtime_common_crowdloan.rs b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs new file mode 100644 index 000000000000..e69442c8a884 --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs @@ -0,0 +1,132 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_common::crowdloan` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-15, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=polkadot-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::crowdloan +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/polkadot/src/weights/runtime_common_crowdloan.rs + + +#![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 runtime_common::crowdloan. +pub struct WeightInfo(PhantomData); +impl runtime_common::crowdloan::WeightInfo for WeightInfo { + // Storage: Crowdloan Funds (r:1 w:1) + // Storage: Registrar Paras (r:1 w:1) + // Storage: Paras ParaLifecycles (r:1 w:0) + // Storage: Crowdloan NextTrieIndex (r:1 w:1) + fn create() -> Weight { + (78_186_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + // Storage: Crowdloan Funds (r:1 w:1) + // Storage: Slots Leases (r:1 w:0) + // Storage: Auctions AuctionInfo (r:1 w:0) + // Storage: System Account (r:1 w:1) + // Storage: Crowdloan EndingsCount (r:1 w:0) + // Storage: Crowdloan NewRaise (r:1 w:1) + // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + fn contribute() -> Weight { + (294_308_000 as Weight) + .saturating_add(T::DbWeight::get().reads(7 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Crowdloan Funds (r:1 w:1) + // Storage: System Account (r:2 w:2) + // Storage: unknown [0xc85982571aa615c788ef9b2c16f54f25773fd439e8ee1ed2aa3ae43d48e880f0] (r:1 w:1) + fn withdraw() -> Weight { + (102_518_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Skipped Metadata (r:0 w:0) + fn refund(k: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 22_000 + .saturating_add((38_550_000 as Weight).saturating_mul(k as Weight)) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().reads((2 as Weight).saturating_mul(k as Weight))) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(k as Weight))) + } + // Storage: Crowdloan Funds (r:1 w:1) + // Storage: System Account (r:1 w:1) + fn dissolve() -> Weight { + (58_176_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + // Storage: Crowdloan Funds (r:1 w:1) + fn edit() -> Weight { + (37_125_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Crowdloan Funds (r:1 w:0) + // Storage: unknown [0xd861ea1ebf4800d4b89f4ff787ad79ee96d9a708c85b57da7eb8f9ddeda61291] (r:1 w:1) + fn add_memo() -> Weight { + (55_338_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Crowdloan Funds (r:1 w:0) + // Storage: Crowdloan NewRaise (r:1 w:1) + fn poke() -> Weight { + (41_233_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Auctions AuctionInfo (r:1 w:0) + // Storage: Crowdloan EndingsCount (r:1 w:1) + // Storage: Crowdloan NewRaise (r:1 w:1) + // Storage: Crowdloan Funds (r:2 w:0) + // Storage: Auctions AuctionCounter (r:1 w:0) + // Storage: Paras ParaLifecycles (r:2 w:0) + // Storage: Slots Leases (r:2 w:0) + // Storage: Auctions Winning (r:1 w:1) + // Storage: Auctions ReservedAmounts (r:2 w:2) + // Storage: System Account (r:2 w:2) + fn on_initialize(n: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 25_000 + .saturating_add((98_572_000 as Weight).saturating_mul(n as Weight)) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().reads((5 as Weight).saturating_mul(n as Weight))) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + .saturating_add(T::DbWeight::get().writes((2 as Weight).saturating_mul(n as Weight))) + } +} diff --git a/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs new file mode 100644 index 000000000000..8dfc9409741c --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs @@ -0,0 +1,99 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_common::paras_registrar` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-16, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("polkadot-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=polkadot-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::paras_registrar +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/polkadot/src/weights/runtime_common_paras_registrar.rs + + +#![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 runtime_common::paras_registrar. +pub struct WeightInfo(PhantomData); +impl runtime_common::paras_registrar::WeightInfo for WeightInfo { + // Storage: Registrar NextFreeParaId (r:1 w:1) + // Storage: Registrar Paras (r:1 w:1) + // Storage: Paras ParaLifecycles (r:1 w:0) + fn reserve() -> Weight { + (43_636_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + // Storage: Registrar Paras (r:1 w:1) + // Storage: Paras ParaLifecycles (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + // Storage: Paras UpcomingParasGenesis (r:0 w:1) + fn register() -> Weight { + (5_587_963_000 as Weight) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Registrar Paras (r:1 w:1) + // Storage: Paras ParaLifecycles (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + // Storage: Paras UpcomingParasGenesis (r:0 w:1) + fn force_register() -> Weight { + (5_568_018_000 as Weight) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Registrar Paras (r:1 w:1) + // Storage: Paras ParaLifecycles (r:1 w:1) + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + // Storage: Registrar PendingSwap (r:0 w:1) + fn deregister() -> Weight { + (76_644_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Registrar Paras (r:1 w:0) + // Storage: Registrar PendingSwap (r:1 w:1) + // Storage: Paras ParaLifecycles (r:2 w:2) + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + // Storage: Crowdloan Funds (r:2 w:2) + // Storage: Slots Leases (r:2 w:2) + fn swap() -> Weight { + (68_141_000 as Weight) + .saturating_add(T::DbWeight::get().reads(10 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } +} diff --git a/runtime/polkadot/src/weights/runtime_common_slots.rs b/runtime/polkadot/src/weights/runtime_common_slots.rs new file mode 100644 index 000000000000..07101259d100 --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_common_slots.rs @@ -0,0 +1,73 @@ +// Copyright 2017-2020 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 . +//! Autogenerated weights for `runtime_common::slots` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 3.0.0 +//! DATE: 2021-07-01, STEPS: `[50, ]`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_common::slots +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/ + +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weight functions for `runtime_common::slots`. +pub struct WeightInfo(PhantomData); +impl runtime_common::slots::WeightInfo for WeightInfo { + fn force_lease() -> Weight { + (92_502_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + fn manage_lease_period_start(c: u32, t: u32) -> Weight { + (0 as Weight) + // Standard Error: 17_000 + .saturating_add((16_401_000 as Weight).saturating_mul(c as Weight)) + // Standard Error: 17_000 + .saturating_add((34_480_000 as Weight).saturating_mul(t as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(T::DbWeight::get().reads((3 as Weight).saturating_mul(t as Weight))) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + .saturating_add(T::DbWeight::get().writes((1 as Weight).saturating_mul(c as Weight))) + .saturating_add(T::DbWeight::get().writes((3 as Weight).saturating_mul(t as Weight))) + } + fn clear_all_leases() -> Weight { + (194_756_000 as Weight) + .saturating_add(T::DbWeight::get().reads(9 as Weight)) + .saturating_add(T::DbWeight::get().writes(9 as Weight)) + } + fn trigger_onboard() -> Weight { + (41_785_000 as Weight) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } +} diff --git a/runtime/polkadot/src/weights/runtime_parachains_configuration.rs b/runtime/polkadot/src/weights/runtime_parachains_configuration.rs new file mode 100644 index 000000000000..ae840f37752d --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_parachains_configuration.rs @@ -0,0 +1,91 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::configuration` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::configuration +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_parachains_configuration.rs + + +#![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 `runtime_parachains::configuration`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::configuration::WeightInfo for WeightInfo { + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Configuration PendingConfig (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + fn set_config_with_block_number() -> Weight { + (12_378_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Configuration PendingConfig (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + fn set_config_with_u32() -> Weight { + (12_384_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Configuration PendingConfig (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + fn set_config_with_option_u32() -> Weight { + (12_746_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Configuration PendingConfig (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + fn set_config_with_weight() -> Weight { + (12_563_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Benchmark Override (r:0 w:0) + fn set_hrmp_open_request_ttl() -> Weight { + (2_000_000_000_000 as Weight) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Configuration PendingConfig (r:1 w:1) + // Storage: Configuration ActiveConfig (r:1 w:0) + fn set_config_with_balance() -> Weight { + (12_644_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/polkadot/src/weights/runtime_parachains_paras.rs b/runtime/polkadot/src/weights/runtime_parachains_paras.rs new file mode 100644 index 000000000000..728d95561bfc --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_parachains_paras.rs @@ -0,0 +1,106 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::paras` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-21, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::paras +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_parachains_paras.rs + + +#![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 `runtime_parachains::paras`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::paras::WeightInfo for WeightInfo { + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + fn force_set_current_code(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(6 as Weight)) + } + // Storage: Paras Heads (r:0 w:1) + fn force_set_current_head(s: u32, ) -> Weight { + (16_088_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: Configuration ActiveConfig (r:1 w:0) + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras UpcomingUpgrades (r:1 w:1) + // Storage: Paras UpgradeCooldowns (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras CodeByHashRefs (r:1 w:1) + // Storage: Paras CodeByHash (r:0 w:1) + // Storage: Paras FutureCodeHash (r:0 w:1) + // Storage: Paras UpgradeRestrictionSignal (r:0 w:1) + fn force_schedule_code_upgrade(c: u32, ) -> Weight { + (0 as Weight) + // Standard Error: 0 + .saturating_add((3_000 as Weight).saturating_mul(c as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(8 as Weight)) + } + // Storage: Paras FutureCodeUpgrades (r:1 w:1) + // Storage: Paras FutureCodeHash (r:1 w:1) + // Storage: Paras CurrentCodeHash (r:1 w:1) + // Storage: System Digest (r:1 w:1) + // Storage: Paras PastCodeMeta (r:1 w:1) + // Storage: Paras PastCodePruning (r:1 w:1) + // Storage: Paras Heads (r:0 w:1) + // Storage: Paras PastCodeHash (r:0 w:1) + // Storage: Paras UpgradeGoAheadSignal (r:0 w:1) + fn force_note_new_head(s: u32, ) -> Weight { + (69_114_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(s as Weight)) + .saturating_add(T::DbWeight::get().reads(6 as Weight)) + .saturating_add(T::DbWeight::get().writes(9 as Weight)) + } + // Storage: ParasShared CurrentSessionIndex (r:1 w:0) + // Storage: Paras ActionsQueue (r:1 w:1) + fn force_queue_action() -> Weight { + (26_752_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} From 5d4cd4ccf085f19262d4ccf189bfde369e8438fa Mon Sep 17 00:00:00 2001 From: Xiliang Chen Date: Fri, 24 Sep 2021 16:11:20 +1200 Subject: [PATCH 12/52] update BaseXcmWegiht to match Kusama (#3911) --- runtime/rococo/src/lib.rs | 2 +- runtime/westend/src/lib.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 5323adeefc69..3cb61efd3c4a 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -627,7 +627,7 @@ type LocalOriginConverter = ( ); parameter_types! { - pub const BaseXcmWeight: Weight = 100_000; + pub const BaseXcmWeight: Weight = 1_000_000_000; } /// The XCM router. When we want to send an XCM message, we use this type. It amalgamates all of our diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 179088dc1a57..196a28d57819 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -952,7 +952,7 @@ type LocalOriginConverter = ( ); parameter_types! { - pub const BaseXcmWeight: Weight = 10_000_000; + pub const BaseXcmWeight: Weight = 1_000_000_000; } /// The XCM router. When we want to send an XCM message, we use this type. It amalgamates all of our From 6422e672ba5724778eb0980b498ca3f353cc5c34 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Fri, 24 Sep 2021 05:36:52 -0400 Subject: [PATCH 13/52] Fix broken links (#3919) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 034a23a59e62..5ea7ac433562 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Implementation of a node in Rust based on the Substra This repo contains runtimes for the Polkadot, Kusama, and Westend networks. The README provides information about installing the `polkadot` binary and developing on the codebase. For more specific guides, like how to be a validator, see the -[Polkadot Wiki](https://wiki.polkadot.network/docs/en/). +[Polkadot Wiki](https://wiki.polkadot.network/docs/getting-started). ## Installation @@ -170,7 +170,7 @@ If you want to do anything on Polkadot, Kusama, or Westend, then you'll need to some DOT, KSM, or WND tokens, respectively. See the [claims instructions](https://claims.polkadot.network/) for Polkadot if you have DOTs to claim. For Westend's WND tokens, see the faucet -[instructions](https://wiki.polkadot.network/docs/en/learn-DOT#getting-westies) on the Wiki. +[instructions](https://wiki.polkadot.network/docs/learn-DOT#getting-westies) on the Wiki. ## Hacking on Polkadot From 501f115ca6850639476deef8aa33181d0d7125b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Fri, 24 Sep 2021 16:46:45 +0300 Subject: [PATCH 14/52] Substrate Companion for rust 1.54 (#3807) * Substrate Companion for rust 1.54 * CI: run with a staging CI image * Revert "CI: run with a staging CI image" This reverts commit f3b51da0a4c0ffa43b576af5482a2be256948870. * CI: debug, again * compilation fixes * tabify * update Substrate * Update .gitlab-ci.yml * CI: add ubuntu-based image with npm Co-authored-by: Denis P Co-authored-by: Andronik Ordian Co-authored-by: thiolliere Co-authored-by: parity-processbot <> --- .gitlab-ci.yml | 3 +- Cargo.lock | 308 +++++++++--------- .../tests/ui/err-01-generic-used-twice.stderr | 2 +- .../tests/ui/err-01-duplicate-consumer.stderr | 4 +- .../tests/ui/err-04-missing-error.stderr | 2 +- parachain/test-parachains/halt/src/lib.rs | 8 +- 6 files changed, 163 insertions(+), 164 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aec817450708..3713d94f950b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -270,7 +270,8 @@ build-adder-collator: #### stage: build check-transaction-versions: - image: node:15 + # image must be ubuntu:20.04 based to match the linkers, this image has npm installed + image: paritytech/contracts-ci-linux:production stage: build <<: *rules-test <<: *docker-env diff --git a/Cargo.lock b/Cargo.lock index 8f872b57f778..6bf44d1971da 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1928,7 +1928,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", ] @@ -1946,7 +1946,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -1966,7 +1966,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "Inflector", "chrono", @@ -1992,7 +1992,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -2006,7 +2006,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -2034,7 +2034,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "bitflags", "frame-metadata", @@ -2061,7 +2061,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2073,7 +2073,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.0", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro2", "quote", @@ -2095,7 +2095,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2118,7 +2118,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -2129,7 +2129,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "log", @@ -2146,7 +2146,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -2161,7 +2161,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "sp-api", @@ -2170,7 +2170,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "sp-api", @@ -2383,7 +2383,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "chrono", "frame-election-provider-support", @@ -4563,7 +4563,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -4579,7 +4579,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -4594,7 +4594,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4618,7 +4618,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4638,7 +4638,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4694,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4779,7 +4779,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4796,7 +4796,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4812,7 +4812,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4836,7 +4836,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4854,7 +4854,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4869,7 +4869,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4892,7 +4892,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4908,7 +4908,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,7 +4928,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4945,7 +4945,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -4962,7 +4962,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -4980,7 +4980,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -4996,7 +4996,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5013,7 +5013,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5028,7 +5028,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5059,7 +5059,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5082,7 +5082,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5097,7 +5097,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5111,7 +5111,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5127,7 +5127,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5148,7 +5148,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5164,7 +5164,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5178,7 +5178,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5201,7 +5201,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -5212,7 +5212,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "sp-arithmetic", @@ -5221,7 +5221,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5235,7 +5235,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5272,7 +5272,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-support", "frame-system", @@ -5289,7 +5289,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5306,7 +5306,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5317,7 +5317,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5334,7 +5334,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -5350,7 +5350,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-benchmarking", "frame-support", @@ -7727,7 +7727,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -7989,7 +7989,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "sp-core", @@ -8000,7 +8000,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "derive_more", @@ -8027,7 +8027,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8050,7 +8050,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8066,7 +8066,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8082,7 +8082,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8093,7 +8093,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "chrono", "fdlimit", @@ -8131,7 +8131,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "fnv", "futures 0.3.17", @@ -8159,7 +8159,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "hash-db", "kvdb", @@ -8184,7 +8184,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "futures 0.3.17", @@ -8208,7 +8208,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "derive_more", @@ -8251,7 +8251,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "derive_more", "futures 0.3.17", @@ -8275,7 +8275,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8288,7 +8288,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "assert_matches", "async-trait", @@ -8322,7 +8322,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "futures 0.3.17", @@ -8348,7 +8348,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "sc-client-api", "sp-authorship", @@ -8359,7 +8359,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8385,7 +8385,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "derive_more", "environmental", @@ -8403,7 +8403,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "parity-scale-codec", @@ -8419,7 +8419,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8438,7 +8438,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "derive_more", @@ -8475,7 +8475,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "derive_more", "finality-grandpa", @@ -8499,7 +8499,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8516,7 +8516,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "derive_more", @@ -8531,7 +8531,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "hash-db", "parity-scale-codec", @@ -8549,7 +8549,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-std", "async-trait", @@ -8600,7 +8600,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8616,7 +8616,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "bytes 1.0.1", "fnv", @@ -8643,7 +8643,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "libp2p", @@ -8656,7 +8656,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8665,7 +8665,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "hash-db", @@ -8696,7 +8696,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8721,7 +8721,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8738,7 +8738,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "directories", @@ -8803,7 +8803,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "parity-scale-codec", @@ -8817,7 +8817,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8839,7 +8839,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "chrono", "futures 0.3.17", @@ -8857,7 +8857,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8886,7 +8886,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8897,7 +8897,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "intervalier", @@ -8924,7 +8924,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "derive_more", "futures 0.3.17", @@ -8938,7 +8938,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9370,7 +9370,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "hash-db", "log", @@ -9387,7 +9387,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "blake2-rfc", "proc-macro-crate 1.1.0", @@ -9399,7 +9399,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9412,7 +9412,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "integer-sqrt", "num-traits", @@ -9427,7 +9427,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9440,7 +9440,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "parity-scale-codec", @@ -9452,7 +9452,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "sp-api", @@ -9464,7 +9464,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "log", @@ -9482,7 +9482,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "futures 0.3.17", @@ -9501,7 +9501,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "merlin", @@ -9524,7 +9524,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9535,7 +9535,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9547,7 +9547,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "base58", "blake2-rfc", @@ -9592,7 +9592,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9601,7 +9601,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro2", "quote", @@ -9611,7 +9611,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "environmental", "parity-scale-codec", @@ -9622,7 +9622,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "finality-grandpa", "log", @@ -9640,7 +9640,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9654,7 +9654,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "hash-db", @@ -9679,7 +9679,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "lazy_static", "sp-core", @@ -9690,7 +9690,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "derive_more", @@ -9707,7 +9707,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "zstd", ] @@ -9715,7 +9715,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9730,7 +9730,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -9741,7 +9741,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "sp-api", "sp-core", @@ -9751,7 +9751,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "backtrace", ] @@ -9759,7 +9759,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "rustc-hash", "serde", @@ -9769,7 +9769,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "either", "hash256-std-hasher", @@ -9791,7 +9791,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9808,7 +9808,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "Inflector", "proc-macro-crate 1.1.0", @@ -9820,7 +9820,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "serde", "serde_json", @@ -9829,7 +9829,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9843,7 +9843,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -9854,7 +9854,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "hash-db", "log", @@ -9877,12 +9877,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9895,7 +9895,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "log", "sp-core", @@ -9908,7 +9908,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9924,7 +9924,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "erased-serde", "log", @@ -9942,7 +9942,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "sp-api", "sp-runtime", @@ -9951,7 +9951,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "log", @@ -9967,7 +9967,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "hash-db", "memory-db", @@ -9982,7 +9982,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9998,7 +9998,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10009,7 +10009,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10205,7 +10205,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "platforms", ] @@ -10213,7 +10213,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10235,7 +10235,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-std", "derive_more", @@ -10249,7 +10249,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "async-trait", "futures 0.3.17", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10286,7 +10286,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -10297,7 +10297,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10450,7 +10450,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "frame-system", "futures 0.3.17", @@ -10889,7 +10889,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#eded99055e32c1b096993b94b38d3f6e04237c18" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "jsonrpsee-ws-client", "log", diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr b/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr index b089e8efdb42..d92ef3ebcb61 100644 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr +++ b/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr @@ -4,7 +4,7 @@ error: Generic type parameters may only be used for exactly one field, but is us 6 | a: X, | ^ -error[E0599]: no method named `replace_a` found for struct `AllSubsystems` in the current scope +error[E0599]: no method named `replace_a` found for struct `AllSubsystems` in the current scope --> $DIR/err-01-generic-used-twice.rs:15:17 | 5 | struct AllSubsystems { diff --git a/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr b/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr index edb0ef436951..a66f2fa3e77b 100644 --- a/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr +++ b/node/overseer/overseer-gen/tests/ui/err-01-duplicate-consumer.stderr @@ -7,7 +7,7 @@ error[E0119]: conflicting implementations of trait `std::convert::From` for type `OverseerSubsystemSender` --> $DIR/err-01-duplicate-consumer.rs:19:1 @@ -18,4 +18,4 @@ error[E0119]: conflicting implementations of trait `polkadot_overseer_gen::Subsy | first implementation here | conflicting implementation for `OverseerSubsystemSender` | - = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info) + = note: this error originates in the attribute macro `overlord` (in Nightly builds, run with -Z macro-backtrace for more info) diff --git a/node/overseer/overseer-gen/tests/ui/err-04-missing-error.stderr b/node/overseer/overseer-gen/tests/ui/err-04-missing-error.stderr index 39e6a4a8fdc0..7fa4d832253e 100644 --- a/node/overseer/overseer-gen/tests/ui/err-04-missing-error.stderr +++ b/node/overseer/overseer-gen/tests/ui/err-04-missing-error.stderr @@ -4,7 +4,7 @@ error: Must declare the overseer error type via `error=..`. 16 | #[overlord(signal=SigSigSig, event=Event, gen=AllMessages)] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | - = note: this error originates in an attribute macro (in Nightly builds, run with -Z macro-backtrace for more info) + = note: this error originates in the attribute macro `overlord` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0433]: failed to resolve: use of undeclared type `Overseer` --> $DIR/err-04-missing-error.rs:30:10 diff --git a/parachain/test-parachains/halt/src/lib.rs b/parachain/test-parachains/halt/src/lib.rs index 0c56cfe6393e..3c1416f3c6e9 100644 --- a/parachain/test-parachains/halt/src/lib.rs +++ b/parachain/test-parachains/halt/src/lib.rs @@ -39,20 +39,18 @@ pub fn wasm_binary_unwrap() -> &'static [u8] { #[panic_handler] #[no_mangle] pub fn panic(_info: &core::panic::PanicInfo) -> ! { - unsafe { core::intrinsics::abort() } + core::intrinsics::abort() } #[cfg(not(feature = "std"))] #[alloc_error_handler] #[no_mangle] pub fn oom(_: core::alloc::Layout) -> ! { - unsafe { - core::intrinsics::abort(); - } + core::intrinsics::abort(); } #[cfg(not(feature = "std"))] #[no_mangle] -pub extern "C" fn validate_block(params: *const u8, len: usize) -> u64 { +pub extern "C" fn validate_block(_params: *const u8, _len: usize) -> u64 { loop {} } From bbedad96def7dff8929f7c0634645ab47a2fc09c Mon Sep 17 00:00:00 2001 From: Andreas Doerr Date: Fri, 24 Sep 2021 17:51:12 +0200 Subject: [PATCH 15/52] Remove BEEFY repo dependency (#3923) --- Cargo.lock | 91 ++++++++++++++++++++++++--------- node/client/Cargo.toml | 2 +- node/service/Cargo.toml | 4 +- rpc/Cargo.toml | 4 +- runtime/common/Cargo.toml | 4 +- runtime/kusama/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 6 +-- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- 10 files changed, 81 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6bf44d1971da..1ceebc13d986 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -468,13 +468,12 @@ dependencies = [ [[package]] name = "beefy-gadget" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "beefy-primitives", "fnv", "futures 0.3.17", - "hex", "log", "parity-scale-codec", "parking_lot 0.11.1", @@ -487,7 +486,6 @@ dependencies = [ "sp-application-crypto", "sp-arithmetic", "sp-blockchain", - "sp-consensus", "sp-core", "sp-keystore", "sp-runtime", @@ -498,8 +496,8 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -512,20 +510,19 @@ dependencies = [ "parity-scale-codec", "sc-rpc", "serde", - "serde_json", "sp-core", "sp-runtime", ] [[package]] name = "beefy-merkle-tree" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" [[package]] name = "beefy-primitives" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "parity-scale-codec", "scale-info", @@ -3789,9 +3786,9 @@ dependencies = [ "base64 0.12.3", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", + "libsecp256k1-core 0.2.2", + "libsecp256k1-gen-ecmult 0.2.1", + "libsecp256k1-gen-genmult 0.2.1", "rand 0.7.3", "serde", "sha2 0.9.2", @@ -3808,15 +3805,32 @@ dependencies = [ "base64 0.12.3", "digest 0.9.0", "hmac-drbg", - "libsecp256k1-core", - "libsecp256k1-gen-ecmult", - "libsecp256k1-gen-genmult", + "libsecp256k1-core 0.2.2", + "libsecp256k1-gen-ecmult 0.2.1", + "libsecp256k1-gen-genmult 0.2.1", "rand 0.7.3", "serde", "sha2 0.9.2", "typenum", ] +[[package]] +name = "libsecp256k1" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0452aac8bab02242429380e9b2f94ea20cea2b37e2c1777a1358799bbe97f37" +dependencies = [ + "arrayref", + "base64 0.13.0", + "digest 0.9.0", + "libsecp256k1-core 0.3.0", + "libsecp256k1-gen-ecmult 0.3.0", + "libsecp256k1-gen-genmult 0.3.0", + "rand 0.8.4", + "serde", + "sha2 0.9.2", +] + [[package]] name = "libsecp256k1-core" version = "0.2.2" @@ -3828,13 +3842,33 @@ dependencies = [ "subtle 2.4.1", ] +[[package]] +name = "libsecp256k1-core" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451" +dependencies = [ + "crunchy", + "digest 0.9.0", + "subtle 2.4.1", +] + [[package]] name = "libsecp256k1-gen-ecmult" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3" dependencies = [ - "libsecp256k1-core", + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-ecmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3038c808c55c87e8a172643a7d87187fc6c4174468159cb3090659d55bcb4809" +dependencies = [ + "libsecp256k1-core 0.3.0", ] [[package]] @@ -3843,7 +3877,16 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d" dependencies = [ - "libsecp256k1-core", + "libsecp256k1-core 0.2.2", +] + +[[package]] +name = "libsecp256k1-gen-genmult" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db8d6ba2cec9eacc40e6e8ccc98931840301f1006e95647ceb2dd5c3aa06f7c" +dependencies = [ + "libsecp256k1-core 0.3.0", ] [[package]] @@ -4652,8 +4695,8 @@ dependencies = [ [[package]] name = "pallet-beefy" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "beefy-primitives", "frame-support", @@ -4668,15 +4711,15 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" -version = "0.1.0" -source = "git+https://github.com/paritytech/grandpa-bridge-gadget?branch=master#71859649338cff5ebc47003cd2606307b20ec87e" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" dependencies = [ "beefy-merkle-tree", "beefy-primitives", "frame-support", "frame-system", "hex", - "libsecp256k1 0.6.0", + "libsecp256k1 0.7.0", "log", "pallet-beefy", "pallet-mmr", diff --git a/node/client/Cargo.toml b/node/client/Cargo.toml index 63dd404ffcde..e2fcecf48843 100644 --- a/node/client/Cargo.toml +++ b/node/client/Cargo.toml @@ -29,7 +29,7 @@ sc-service = { git = "https://github.com/paritytech/substrate", branch = "master pallet-mmr-primitives = { git = "https://github.com/paritytech/substrate", branch = "master" } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master" } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master" } # Polkadot Runtimes polkadot-runtime = { path = "../../runtime/polkadot", optional = true } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index affd8b25b33b..fc148f3c83f8 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -8,8 +8,8 @@ edition = "2018" # Substrate Client sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } babe = { package = "sc-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master" } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master" } -beefy-gadget = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master" } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master" } +beefy-gadget = { git = "https://github.com/paritytech/substrate", branch = "master" } grandpa = { package = "sc-finality-grandpa", git = "https://github.com/paritytech/substrate", branch = "master" } sc-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index 775afe61dfb7..bb360e80d101 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -27,5 +27,5 @@ frame-rpc-system = { package = "substrate-frame-rpc-system", git = "https://gith pallet-mmr-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-block-builder = { git = "https://github.com/paritytech/substrate", branch = "master" } -beefy-gadget = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master" } -beefy-gadget-rpc = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master" } +beefy-gadget = { git = "https://github.com/paritytech/substrate", branch = "master" } +beefy-gadget-rpc = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 5d4f30911d28..599b9a7f4106 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -15,7 +15,7 @@ serde = { version = "1.0.130", default-features = false } serde_derive = { version = "1.0.117", optional = true } static_assertions = "1.1.0" -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -37,7 +37,7 @@ pallet-vesting = { git = "https://github.com/paritytech/substrate", branch = "ma pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-election-provider-multi-phase = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-beefy-mmr = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-election-provider-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-bags-list = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 6b177e1f3c82..64a9d2b80b50 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -18,7 +18,7 @@ smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 65a18ce5f3a5..8ba99f82ac8d 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -18,7 +18,7 @@ smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } block-builder-api = { package = "sp-block-builder", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 15b4ed1484f6..240627987ffc 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -29,13 +29,13 @@ inherents = { package = "sp-inherents", git = "https://github.com/paritytech/sub offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-executive = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -pallet-beefy = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } -pallet-beefy-mmr = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +pallet-beefy = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-beefy-mmr = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-grandpa = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index e918b0e1d475..b321c80088e1 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -17,7 +17,7 @@ smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 12edec1b017c..eecc6a56c5bd 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -17,7 +17,7 @@ smallvec = "1.6.1" authority-discovery-primitives = { package = "sp-authority-discovery", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } babe-primitives = { package = "sp-consensus-babe", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } -beefy-primitives = { git = "https://github.com/paritytech/grandpa-bridge-gadget", branch = "master", default-features = false } +beefy-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } offchain-primitives = { package = "sp-offchain", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } From c0ccdb5b3982f695765dda9cfe2e68c48241d498 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:31:53 +0000 Subject: [PATCH 16/52] Bump libsecp256k1 from 0.6.0 to 0.7.0 (#3909) Bumps [libsecp256k1](https://github.com/paritytech/libsecp256k1) from 0.6.0 to 0.7.0. - [Release notes](https://github.com/paritytech/libsecp256k1/releases) - [Changelog](https://github.com/paritytech/libsecp256k1/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/libsecp256k1/commits) --- updated-dependencies: - dependency-name: libsecp256k1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 +++- runtime/common/Cargo.toml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ceebc13d986..efccb7b47436 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3823,12 +3823,14 @@ dependencies = [ "arrayref", "base64 0.13.0", "digest 0.9.0", + "hmac-drbg", "libsecp256k1-core 0.3.0", "libsecp256k1-gen-ecmult 0.3.0", "libsecp256k1-gen-genmult 0.3.0", "rand 0.8.4", "serde", "sha2 0.9.2", + "typenum", ] [[package]] @@ -6742,7 +6744,7 @@ dependencies = [ "frame-system", "hex-literal", "impl-trait-for-tuples", - "libsecp256k1 0.6.0", + "libsecp256k1 0.7.0", "log", "pallet-authorship", "pallet-babe", diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 599b9a7f4106..8aa7d4af9038 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -45,7 +45,7 @@ frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } primitives = { package = "polkadot-primitives", path = "../../primitives", default-features = false } -libsecp256k1 = { version = "0.6.0", default-features = false } +libsecp256k1 = { version = "0.7.0", default-features = false } runtime-parachains = { package = "polkadot-runtime-parachains", path = "../parachains", default-features = false } slot-range-helper = { path = "slot_range_helper", default-features = false } @@ -58,7 +58,7 @@ pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "maste pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } serde_json = "1.0.67" -libsecp256k1 = "0.6.0" +libsecp256k1 = "0.7.0" [features] default = ["std"] From 56354e527d35c312ce3b943beb255861bfbf1048 Mon Sep 17 00:00:00 2001 From: Lldenaurois Date: Fri, 24 Sep 2021 20:44:45 +0200 Subject: [PATCH 17/52] Update logging in paras_inherent (#3927) --- runtime/parachains/src/paras_inherent.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/parachains/src/paras_inherent.rs b/runtime/parachains/src/paras_inherent.rs index e2dd357658df..a972dbfaa3d8 100644 --- a/runtime/parachains/src/paras_inherent.rs +++ b/runtime/parachains/src/paras_inherent.rs @@ -123,7 +123,7 @@ pub mod pallet { target: LOG_TARGET, "dropping signed_bitfields and backed_candidates because they produced \ an invalid paras inherent: {:?}", - err, + err.error, ); ParachainsInherentData { From 59c9013bb7f4a2e73721aaadd0d2d8a0103661e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sat, 25 Sep 2021 22:16:15 +0200 Subject: [PATCH 18/52] Ignore `generate-bags` by dependabot (#3930) --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 194d8391a9c4..bb421ac6b3bf 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -15,5 +15,6 @@ updates: - dependency-name: "beefy-*" - dependency-name: "try-runtime-*" - dependency-name: "test-runner" + - dependency-name: "generate-bags" schedule: interval: "daily" From f9d3fb2dd25b20c64c3107cd9fc76461d18e2302 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Sep 2021 22:25:33 +0200 Subject: [PATCH 19/52] Bump tokio from 1.11.0 to 1.12.0 (#3910) Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.11.0 to 1.12.0. - [Release notes](https://github.com/tokio-rs/tokio/releases) - [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.11.0...tokio-1.12.0) --- updated-dependencies: - dependency-name: tokio dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/test/service/Cargo.toml | 4 ++-- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- utils/staking-miner/Cargo.toml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index efccb7b47436..7b62800353ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10689,9 +10689,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4efe6fc2395938c8155973d7be49fe8d03a843726e285e100a8a383cc0154ce" +checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" dependencies = [ "autocfg", "bytes 1.0.1", diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 56517c89a52a..06bd67d5168c 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -11,7 +11,7 @@ hex = "0.4.3" tracing = "0.1.27" rand = "0.8.3" tempfile = "3.2.0" -tokio = "1.10.0" +tokio = "1.12.0" # Polkadot dependencies polkadot-overseer = { path = "../../overseer" } @@ -60,4 +60,4 @@ substrate-test-client = { git = "https://github.com/paritytech/substrate", branc pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } serde_json = "1.0.67" substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch = "master" } -tokio = { version = "1.11", features = ["macros"] } +tokio = { version = "1.12", features = ["macros"] } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 20bc3a1c4bbb..281329528b16 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -44,4 +44,4 @@ substrate-test-utils = { git = "https://github.com/paritytech/substrate", branch sc-service = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } -tokio = { version = "1.11", features = ["macros"] } +tokio = { version = "1.12", features = ["macros"] } diff --git a/utils/staking-miner/Cargo.toml b/utils/staking-miner/Cargo.toml index c1eccc1a8093..21ab164470be 100644 --- a/utils/staking-miner/Cargo.toml +++ b/utils/staking-miner/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] codec = { package = "parity-scale-codec", version = "2.0.0" } -tokio = { version = "1.11", features = ["macros"] } +tokio = { version = "1.12", features = ["macros"] } log = "0.4.11" env_logger = "0.9.0" structopt = "0.3.23" From 8a75570df5daa07711a4aa9d6d676919ebd3a8f1 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Sat, 25 Sep 2021 22:44:39 +0200 Subject: [PATCH 20/52] Fix spelling (#3845) * Fix spelling * Add missing entry * Proper fix for KeyPair --- bridges/.config/lingua.dic | 2 ++ bridges/relays/bin-substrate/src/cli/derive_account.rs | 2 +- bridges/relays/bin-substrate/src/cli/encode_message.rs | 2 +- bridges/relays/bin-substrate/src/cli/init_bridge.rs | 2 +- bridges/relays/bin-substrate/src/cli/mod.rs | 8 ++++---- bridges/relays/bin-substrate/src/messages_lane.rs | 2 +- bridges/relays/bin-substrate/src/on_demand_headers.rs | 2 +- bridges/relays/client-substrate/src/chain.rs | 2 +- bridges/relays/client-substrate/src/client.rs | 4 ++-- scripts/gitlab/lingua.dic | 2 ++ 10 files changed, 16 insertions(+), 12 deletions(-) diff --git a/bridges/.config/lingua.dic b/bridges/.config/lingua.dic index bfdb7a08e015..ee369c0f1095 100644 --- a/bridges/.config/lingua.dic +++ b/bridges/.config/lingua.dic @@ -65,6 +65,7 @@ isn io js keccak256/M +keypair/MS KSM/S Lane1 Lane2 @@ -101,6 +102,7 @@ parablock/MS parachain/MS parameterize/D pallet_message_lane +plancks polkadot/MS pov-block/MS PoA diff --git a/bridges/relays/bin-substrate/src/cli/derive_account.rs b/bridges/relays/bin-substrate/src/cli/derive_account.rs index dff62c21f6fe..c7ac8761f133 100644 --- a/bridges/relays/bin-substrate/src/cli/derive_account.rs +++ b/bridges/relays/bin-substrate/src/cli/derive_account.rs @@ -27,7 +27,7 @@ use structopt::StructOpt; /// since messages sent over the bridge will be able to spend these. #[derive(StructOpt)] pub struct DeriveAccount { - /// A bridge instance to initalize. + /// A bridge instance to initialize. #[structopt(possible_values = &FullBridge::variants(), case_insensitive = true)] bridge: FullBridge, /// Source-chain address to derive Target-chain address from. diff --git a/bridges/relays/bin-substrate/src/cli/encode_message.rs b/bridges/relays/bin-substrate/src/cli/encode_message.rs index 213c8377678f..79b7b9a42cd3 100644 --- a/bridges/relays/bin-substrate/src/cli/encode_message.rs +++ b/bridges/relays/bin-substrate/src/cli/encode_message.rs @@ -40,7 +40,7 @@ pub enum MessagePayload { /// A `MessagePayload` to encode. #[derive(StructOpt)] pub struct EncodeMessage { - /// A bridge instance to initalize. + /// A bridge instance to initialize. #[structopt(possible_values = &FullBridge::variants(), case_insensitive = true)] bridge: FullBridge, #[structopt(flatten)] diff --git a/bridges/relays/bin-substrate/src/cli/init_bridge.rs b/bridges/relays/bin-substrate/src/cli/init_bridge.rs index 20e6daa500e5..25f220d7f6ce 100644 --- a/bridges/relays/bin-substrate/src/cli/init_bridge.rs +++ b/bridges/relays/bin-substrate/src/cli/init_bridge.rs @@ -25,7 +25,7 @@ use structopt::{clap::arg_enum, StructOpt}; /// Initialize bridge pallet. #[derive(StructOpt)] pub struct InitBridge { - /// A bridge instance to initalize. + /// A bridge instance to initialize. #[structopt(possible_values = &InitBridgeName::variants(), case_insensitive = true)] bridge: InitBridgeName, #[structopt(flatten)] diff --git a/bridges/relays/bin-substrate/src/cli/mod.rs b/bridges/relays/bin-substrate/src/cli/mod.rs index 49bc5dc8c837..042ae320d502 100644 --- a/bridges/relays/bin-substrate/src/cli/mod.rs +++ b/bridges/relays/bin-substrate/src/cli/mod.rs @@ -72,7 +72,7 @@ pub enum Command { /// The message is being sent to the source chain, delivered to the target chain and dispatched /// there. SendMessage(send_message::SendMessage), - /// Generate SCALE-encoded `Call` for choosen network. + /// Generate SCALE-encoded `Call` for the chosen network. /// /// The call can be used either as message payload or can be wrapped into a transaction /// and executed on the chain directly. @@ -235,7 +235,7 @@ pub trait CliChain: relay_substrate_client::Chain { /// Bridge Message Payload type. /// - /// TODO [#854] This should be removed in favour of target-specifc types. + /// TODO [#854] This should be removed in favor of target-specifc types. type MessagePayload; /// Numeric value of SS58 format. @@ -354,7 +354,7 @@ where } /// Create chain-specific set of configuration objects: connection parameters, -/// signing parameters and bridge initialisation parameters. +/// signing parameters and bridge initialization parameters. #[macro_export] macro_rules! declare_chain_options { ($chain:ident, $chain_prefix:ident) => { @@ -385,7 +385,7 @@ macro_rules! declare_chain_options { } impl [<$chain SigningParams>] { - /// Parse signing params into chain-specific KeyPair. + /// Parse signing params into chain-specific `KeyPair`. pub fn to_keypair(&self) -> anyhow::Result { use sp_core::crypto::Pair; diff --git a/bridges/relays/bin-substrate/src/messages_lane.rs b/bridges/relays/bin-substrate/src/messages_lane.rs index 7efea545f9a6..458b08f6014f 100644 --- a/bridges/relays/bin-substrate/src/messages_lane.rs +++ b/bridges/relays/bin-substrate/src/messages_lane.rs @@ -59,7 +59,7 @@ pub trait SubstrateMessageLane: MessageLane { const INBOUND_LANE_LATEST_RECEIVED_NONCE_METHOD: &'static str; /// Name of the runtime method that returns latest confirmed (reward-paid) nonce at the target chain. const INBOUND_LANE_LATEST_CONFIRMED_NONCE_METHOD: &'static str; - /// Numebr of the runtime method that returns state of "unrewarded relayers" set at the target chain. + /// Number of the runtime method that returns state of "unrewarded relayers" set at the target chain. const INBOUND_LANE_UNREWARDED_RELAYERS_STATE: &'static str; /// Name of the runtime method that returns id of best finalized source header at target chain. diff --git a/bridges/relays/bin-substrate/src/on_demand_headers.rs b/bridges/relays/bin-substrate/src/on_demand_headers.rs index 58ef268a29f7..4a2b04328b86 100644 --- a/bridges/relays/bin-substrate/src/on_demand_headers.rs +++ b/bridges/relays/bin-substrate/src/on_demand_headers.rs @@ -248,7 +248,7 @@ async fn background_task( } } -/// Returns `Some()` with inclusive range of headers which must be scanned for manadatory headers +/// Returns `Some()` with inclusive range of headers which must be scanned for mandatory headers /// and the first of such headers must be submitted to the target node. async fn mandatory_headers_scan_range( best_finalized_source_header_at_source: Option, diff --git a/bridges/relays/client-substrate/src/chain.rs b/bridges/relays/client-substrate/src/chain.rs index 4cc8a0394d9a..886b1bde1ce6 100644 --- a/bridges/relays/client-substrate/src/chain.rs +++ b/bridges/relays/client-substrate/src/chain.rs @@ -56,7 +56,7 @@ pub trait Chain: ChainBase + Clone { type Call: Dispatchable + Debug; /// Balance of an account in native tokens. /// - /// The chain may suport multiple tokens, but this particular type is for token that is used + /// The chain may support multiple tokens, but this particular type is for token that is used /// to pay for transaction dispatch, to reward different relayers (headers, messages), etc. type Balance: Parameter + Member + DeserializeOwned + Clone + Copy + CheckedSub + PartialOrd + SaturatingAdd + Zero; } diff --git a/bridges/relays/client-substrate/src/client.rs b/bridges/relays/client-substrate/src/client.rs index f0b7158ecbe3..e4f503b91752 100644 --- a/bridges/relays/client-substrate/src/client.rs +++ b/bridges/relays/client-substrate/src/client.rs @@ -79,7 +79,7 @@ impl std::fmt::Debug for Client { impl Client { /// Returns client that is able to call RPCs on Substrate node over websocket connection. /// - /// This function will keep connecting to given Sustrate node until connection is established + /// This function will keep connecting to given Substrate node until connection is established /// and is functional. If attempt fail, it will wait for `RECONNECT_DELAY` and retry again. pub async fn new(params: ConnectionParams) -> Self { loop { @@ -224,7 +224,7 @@ impl Client { /// Get the nonce of the given Substrate account. /// - /// Note: It's the caller's responsibility to make sure `account` is a valid ss58 address. + /// Note: It's the caller's responsibility to make sure `account` is a valid SS58 address. pub async fn next_account_index(&self, account: C::AccountId) -> Result { Ok(Substrate::::system_account_next_index(&*self.client, account).await?) } diff --git a/scripts/gitlab/lingua.dic b/scripts/gitlab/lingua.dic index 592dee567f72..9effe75e440c 100644 --- a/scripts/gitlab/lingua.dic +++ b/scripts/gitlab/lingua.dic @@ -225,6 +225,7 @@ shareable Simnet/MS spawn/SR spawner +SS58 sr25519 startup/MS stateful @@ -235,6 +236,7 @@ substream subsystem/MS subsystems' supermajority +SURI systemwide taskmanager/MS TCP From db5edf6f6b9043bc706c89849c0e3729ebcfaa9b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Sep 2021 23:47:27 +0200 Subject: [PATCH 21/52] Bump syn from 1.0.76 to 1.0.77 (#3932) Bumps [syn](https://github.com/dtolnay/syn) from 1.0.76 to 1.0.77. - [Release notes](https://github.com/dtolnay/syn/releases) - [Commits](https://github.com/dtolnay/syn/compare/1.0.76...1.0.77) --- updated-dependencies: - dependency-name: syn dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/overseer/all-subsystems-gen/Cargo.toml | 2 +- node/overseer/overseer-gen/proc-macro/Cargo.toml | 2 +- xcm/procedural/Cargo.toml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7b62800353ef..36ce01212fa5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10368,9 +10368,9 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "syn" -version = "1.0.76" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84" +checksum = "5239bc68e0fef57495900cfea4e8dc75596d9a319d7e16b1e0a440d24e6fe0a0" dependencies = [ "proc-macro2", "quote", diff --git a/node/overseer/all-subsystems-gen/Cargo.toml b/node/overseer/all-subsystems-gen/Cargo.toml index e33377db3df8..6c4e7f00eebe 100644 --- a/node/overseer/all-subsystems-gen/Cargo.toml +++ b/node/overseer/all-subsystems-gen/Cargo.toml @@ -9,7 +9,7 @@ description = "Small proc macro to create mocking level iface type helpers" proc-macro = true [dependencies] -syn = { version = "1.0.76", features = ["full", "extra-traits"] } +syn = { version = "1.0.77", features = ["full", "extra-traits"] } quote = "1.0.9" proc-macro2 = "1.0.24" diff --git a/node/overseer/overseer-gen/proc-macro/Cargo.toml b/node/overseer/overseer-gen/proc-macro/Cargo.toml index fd76912bce81..47af610cd0ca 100644 --- a/node/overseer/overseer-gen/proc-macro/Cargo.toml +++ b/node/overseer/overseer-gen/proc-macro/Cargo.toml @@ -12,7 +12,7 @@ targets = ["x86_64-unknown-linux-gnu"] proc-macro = true [dependencies] -syn = { version = "1.0.76", features = ["full", "extra-traits"] } +syn = { version = "1.0.77", features = ["full", "extra-traits"] } quote = "1.0.9" proc-macro2 = "1.0.26" proc-macro-crate = "1.1.0" diff --git a/xcm/procedural/Cargo.toml b/xcm/procedural/Cargo.toml index 0f4b929076f3..fde65dcdd51a 100644 --- a/xcm/procedural/Cargo.toml +++ b/xcm/procedural/Cargo.toml @@ -10,4 +10,4 @@ proc-macro = true [dependencies] proc-macro2 = "1.0.28" quote = "1.0.9" -syn = "1.0.76" +syn = "1.0.77" From cedd601b3e7c527b7bd6a7c3e66b69a78b45a92d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Sun, 26 Sep 2021 11:21:22 +0200 Subject: [PATCH 22/52] Do not compile `wasm_api` module when not needed. (#3934) This otherwise generates some warnings which leads to errors in CI: https://gitlab.parity.io/parity/cumulus/-/jobs/1141589 --- parachain/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/parachain/src/lib.rs b/parachain/src/lib.rs index 2cf441e88c9f..e73103d5578d 100644 --- a/parachain/src/lib.rs +++ b/parachain/src/lib.rs @@ -47,6 +47,7 @@ pub mod primitives; +#[cfg(all(not(feature = "std"), feature = "wasm-api"))] mod wasm_api; #[cfg(all(not(feature = "std"), feature = "wasm-api"))] From 57c01c32ec7ac3618c7431140282d3c6d279a12c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 26 Sep 2021 14:46:37 +0200 Subject: [PATCH 23/52] Bump libc from 0.2.101 to 0.2.102 (#3933) Bumps [libc](https://github.com/rust-lang/libc) from 0.2.101 to 0.2.102. - [Release notes](https://github.com/rust-lang/libc/releases) - [Commits](https://github.com/rust-lang/libc/compare/0.2.101...0.2.102) --- updated-dependencies: - dependency-name: libc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/core/pvf/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 36ce01212fa5..41bf2524834f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3288,9 +3288,9 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "libc" -version = "0.2.101" +version = "0.2.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21" +checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103" [[package]] name = "libgit2-sys" diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index c4289f5bbfaa..9153a65de8ef 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -15,7 +15,7 @@ async-process = "1.1.0" assert_matches = "1.4.0" futures = "0.3.17" futures-timer = "3.0.2" -libc = "0.2.101" +libc = "0.2.102" slotmap = "1.0" tracing = "0.1.27" pin-project = "1.0.8" From f0b2bf3c20a7fae381685c7f6bb3c36fbce65722 Mon Sep 17 00:00:00 2001 From: Shawn Tabrizi Date: Mon, 27 Sep 2021 00:38:46 -0400 Subject: [PATCH 24/52] XCM Benchmarks for Asset Transactor w/ Fungible Asset (#3818) * benchmarks for fungibles * add benchmark to westend * fix hex * clean up a bit * update code doc * fix warnings * cargo run --quiet --release --features runtime-benchmarks -- benchmark --chain=westend-dev --pallet=pallet_xcm_benchmarks::fungible --extrinsic=* --steps=10 --repeat=10 --template=./xcm/pallet-xcm-benchmarks/template.hbs --output=./ --execution=wasm --wasm-execution=compiled * use skip * fix spelling * Update Cargo.lock * add scale-info * Update Cargo.lock * update bench * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=pallet_xcm_benchmarks::fungible --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --template=./xcm/pallet-xcm-benchmarks/template.hbs --output=./runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs * weights compile * update westend to use weights * fmt * spelling fixes * Delete pallet_xcm_benchmarks::fungible.rs * Apply suggestions from code review Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> * fix code review * update weight * fix report_error * fix spell check Co-authored-by: Parity Bot Co-authored-by: Kian Paimani <5588131+kianenigma@users.noreply.github.com> --- Cargo.lock | 41 ++++ Cargo.toml | 1 + .../src/weights/runtime_common_crowdloan.rs | 2 +- .../weights/runtime_common_paras_registrar.rs | 2 +- runtime/westend/Cargo.toml | 4 +- runtime/westend/src/lib.rs | 68 +++++- runtime/westend/src/weights/mod.rs | 1 + runtime/westend/src/weights/xcm/mod.rs | 193 +++++++++++++++ .../xcm/pallet_xcm_benchmarks_fungible.rs | 95 ++++++++ .../xcm/pallet_xcm_benchmarks_generic.rs | 73 ++++++ xcm/Cargo.toml | 1 + xcm/pallet-xcm-benchmarks/Cargo.toml | 45 ++++ .../src/fungible/benchmarking.rs | 219 ++++++++++++++++++ .../src/fungible/mock.rs | 180 ++++++++++++++ xcm/pallet-xcm-benchmarks/src/fungible/mod.rs | 47 ++++ xcm/pallet-xcm-benchmarks/src/lib.rs | 108 +++++++++ xcm/pallet-xcm-benchmarks/src/mock.rs | 64 +++++ xcm/pallet-xcm-benchmarks/template.hbs | 66 ++++++ xcm/xcm-builder/src/lib.rs | 4 +- xcm/xcm-builder/src/weight.rs | 2 +- xcm/xcm-executor/Cargo.toml | 4 + xcm/xcm-executor/src/assets.rs | 2 +- 22 files changed, 1206 insertions(+), 16 deletions(-) create mode 100644 runtime/westend/src/weights/xcm/mod.rs create mode 100644 runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs create mode 100644 runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs create mode 100644 xcm/pallet-xcm-benchmarks/Cargo.toml create mode 100644 xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs create mode 100644 xcm/pallet-xcm-benchmarks/src/fungible/mock.rs create mode 100644 xcm/pallet-xcm-benchmarks/src/fungible/mod.rs create mode 100644 xcm/pallet-xcm-benchmarks/src/lib.rs create mode 100644 xcm/pallet-xcm-benchmarks/src/mock.rs create mode 100644 xcm/pallet-xcm-benchmarks/template.hbs diff --git a/Cargo.lock b/Cargo.lock index 41bf2524834f..4cd57cec08b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4605,6 +4605,20 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" +[[package]] +name = "pallet-assets" +version = "4.0.0-dev" +source = "git+https://github.com/paritytech/substrate?branch=master#c000780dba99a611fadbf83873073e024be1be0b" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "parity-scale-codec", + "scale-info", + "sp-runtime", + "sp-std", +] + [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" @@ -5429,6 +5443,31 @@ dependencies = [ "xcm-executor", ] +[[package]] +name = "pallet-xcm-benchmarks" +version = "0.9.8" +dependencies = [ + "frame-benchmarking", + "frame-support", + "frame-system", + "log", + "pallet-assets", + "pallet-balances", + "pallet-xcm", + "parity-scale-codec", + "polkadot-primitives", + "polkadot-runtime-common", + "scale-info", + "sp-core", + "sp-io", + "sp-runtime", + "sp-std", + "sp-tracing", + "xcm", + "xcm-builder", + "xcm-executor", +] + [[package]] name = "parity-db" version = "0.3.1" @@ -11607,6 +11646,7 @@ dependencies = [ "pallet-utility", "pallet-vesting", "pallet-xcm", + "pallet-xcm-benchmarks", "parity-scale-codec", "polkadot-parachain", "polkadot-primitives", @@ -11776,6 +11816,7 @@ dependencies = [ name = "xcm-executor" version = "0.9.9" dependencies = [ + "frame-benchmarking", "frame-support", "impl-trait-for-tuples", "log", diff --git a/Cargo.toml b/Cargo.toml index 5ea0f98eef6d..1a8407e53a91 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -43,6 +43,7 @@ members = [ "xcm/xcm-simulator", "xcm/xcm-simulator/example", "xcm/pallet-xcm", + "xcm/pallet-xcm-benchmarks", "xcm/procedural", "node/client", "node/collation-generation", diff --git a/runtime/polkadot/src/weights/runtime_common_crowdloan.rs b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs index e69442c8a884..7929c8c16754 100644 --- a/runtime/polkadot/src/weights/runtime_common_crowdloan.rs +++ b/runtime/polkadot/src/weights/runtime_common_crowdloan.rs @@ -41,7 +41,7 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -/// Weight functions for runtime_common::crowdloan. +/// Weight functions for `runtime_common::crowdloan`. pub struct WeightInfo(PhantomData); impl runtime_common::crowdloan::WeightInfo for WeightInfo { // Storage: Crowdloan Funds (r:1 w:1) diff --git a/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs index 8dfc9409741c..84d3a89e92d0 100644 --- a/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs +++ b/runtime/polkadot/src/weights/runtime_common_paras_registrar.rs @@ -41,7 +41,7 @@ use frame_support::{traits::Get, weights::Weight}; use sp_std::marker::PhantomData; -/// Weight functions for runtime_common::paras_registrar. +/// Weight functions for `runtime_common::paras_registrar`. pub struct WeightInfo(PhantomData); impl runtime_common::paras_registrar::WeightInfo for WeightInfo { // Storage: Registrar NextFreeParaId (r:1 w:1) diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index eecc6a56c5bd..3b41179ad350 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -40,6 +40,7 @@ frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/substrate" pallet-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-authorship = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-babe = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-bags-list = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-balances = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-collective = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-democracy = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -69,7 +70,7 @@ pallet-treasury = { git = "https://github.com/paritytech/substrate", branch = "m pallet-utility = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-vesting = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-xcm = { path = "../../xcm/pallet-xcm", default-features = false } -pallet-bags-list = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-xcm-benchmarks = { path = "../../xcm/pallet-xcm-benchmarks", default-features = false, optional = true } frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } frame-try-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false, optional = true } @@ -202,6 +203,7 @@ runtime-benchmarks = [ "frame-system-benchmarking", "hex-literal", "xcm-builder/runtime-benchmarks", + "pallet-xcm-benchmarks", "frame-election-provider-support/runtime-benchmarks", "pallet-bags-list/runtime-benchmarks", ] diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index 196a28d57819..e237a473c2ac 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -49,9 +49,9 @@ use xcm::latest::prelude::*; use xcm_builder::{ AccountId32Aliases, AllowTopLevelPaidExecutionFrom, AllowUnpaidExecutionFrom, ChildParachainAsNative, ChildParachainConvertsVia, ChildSystemParachainAsSuperuser, - CurrencyAdapter as XcmCurrencyAdapter, FixedWeightBounds, IsChildSystemParachain, IsConcrete, - LocationInverter, SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, - TakeWeightCredit, UsingComponents, + CurrencyAdapter as XcmCurrencyAdapter, IsChildSystemParachain, IsConcrete, LocationInverter, + SignedAccountId32AsNative, SignedToAccountId32, SovereignSignedViaLocation, TakeWeightCredit, + UsingComponents, WeightInfoBounds, }; use xcm_executor::XcmExecutor; @@ -951,10 +951,6 @@ type LocalOriginConverter = ( ChildSystemParachainAsSuperuser, ); -parameter_types! { - pub const BaseXcmWeight: Weight = 1_000_000_000; -} - /// The XCM router. When we want to send an XCM message, we use this type. It amalgamates all of our /// individual routers. pub type XcmRouter = ( @@ -963,8 +959,9 @@ pub type XcmRouter = ( ); parameter_types! { + pub const Westmint: MultiLocation = Parachain(1000).into(); pub const WestendForWestmint: (MultiAssetFilter, MultiLocation) = - (Wild(AllOf { fun: WildFungible, id: Concrete(WndLocation::get()) }), Parachain(1000).into()); + (Wild(AllOf { fun: WildFungible, id: Concrete(WndLocation::get()) }), Westmint::get()); pub const MaxInstructions: u32 = 100; } pub type TrustedTeleporters = (xcm_builder::Case,); @@ -989,7 +986,7 @@ impl xcm_executor::Config for XcmConfig { type IsTeleporter = TrustedTeleporters; type LocationInverter = LocationInverter; type Barrier = Barrier; - type Weigher = FixedWeightBounds; + type Weigher = WeightInfoBounds, Call, MaxInstructions>; type Trader = UsingComponents>; type ResponseHandler = XcmPallet; type AssetTrap = XcmPallet; @@ -1015,7 +1012,7 @@ impl pallet_xcm::Config for Runtime { type XcmExecutor = XcmExecutor; type XcmTeleportFilter = Everything; type XcmReserveTransferFilter = Everything; - type Weigher = FixedWeightBounds; + type Weigher = WeightInfoBounds, Call, MaxInstructions>; type LocationInverter = LocationInverter; type Origin = Origin; type Call = Call; @@ -1468,6 +1465,8 @@ sp_api::impl_runtime_apis! { use pallet_offences_benchmarking::Pallet as OffencesBench; use frame_system_benchmarking::Pallet as SystemBench; + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + let mut list = Vec::::new(); // Polkadot @@ -1479,6 +1478,7 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, runtime_common::slots, Slots); list_benchmark!(list, extra, runtime_parachains::configuration, Configuration); list_benchmark!(list, extra, runtime_parachains::paras, Paras); + // Substrate list_benchmark!(list, extra, pallet_bags_list, BagsList); list_benchmark!(list, extra, pallet_balances, Balances); @@ -1497,6 +1497,10 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, pallet_utility, Utility); list_benchmark!(list, extra, pallet_vesting, Vesting); + // XCM Benchmarks + // NOTE: Make sure you point to the individual modules below. + list_benchmark!(list, extra, pallet_xcm_benchmarks::fungible, XcmBalances); + let storage_info = AllPalletsWithSystem::storage_info(); return (list, storage_info) @@ -1519,6 +1523,39 @@ sp_api::impl_runtime_apis! { impl pallet_offences_benchmarking::Config for Runtime {} impl frame_system_benchmarking::Config for Runtime {} + use xcm::latest::MultiAsset; + + impl pallet_xcm_benchmarks::Config for Runtime { + type XcmConfig = XcmConfig; + type AccountIdConverter = LocationConverter; + fn valid_destination() -> Result { + Ok(Westmint::get()) + } + } + + parameter_types! { + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + Westmint::get(), + MultiAsset { fun: Fungible(1 * UNITS), id: Concrete(WndLocation::get()) }, + )); + } + + impl pallet_xcm_benchmarks::fungible::Config for Runtime { + type TransactAsset = Balances; + + type CheckedAccount = CheckAccount; + type TrustedTeleporter = TrustedTeleporter; + + fn get_multi_asset() -> MultiAsset { + MultiAsset { + id: Concrete(WndLocation::get()), + fun: Fungible(1 * UNITS), + } + } + } + + type XcmBalances = pallet_xcm_benchmarks::fungible::Pallet::; + let whitelist: Vec = vec![ // Block Number hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(), @@ -1532,6 +1569,12 @@ sp_api::impl_runtime_apis! { hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(), // Treasury Account hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000").to_vec().into(), + // Dmp DownwardMessageQueueHeads + hex_literal::hex!("63f78c98723ddc9073523ef3beefda0c4d7fefc408aac59dbfe80a72ac8e3ce5").to_vec().into(), + // Dmp DownwardMessageQueues + hex_literal::hex!("63f78c98723ddc9073523ef3beefda0ca95dac46c07a40d91506e7637ec4ba57").to_vec().into(), + // Configuration ActiveConfig + hex_literal::hex!("06de3d8a54d27e44a9d5ce189618f22db4b49d95320d9021994c850f25b8e385").to_vec().into(), ]; let mut batches = Vec::::new(); @@ -1546,6 +1589,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, runtime_common::slots, Slots); add_benchmark!(params, batches, runtime_parachains::configuration, Configuration); add_benchmark!(params, batches, runtime_parachains::paras, Paras); + // Substrate add_benchmark!(params, batches, pallet_bags_list, BagsList); add_benchmark!(params, batches, pallet_balances, Balances); @@ -1564,6 +1608,10 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, pallet_utility, Utility); add_benchmark!(params, batches, pallet_vesting, Vesting); + // XCM Benchmarks + // NOTE: Make sure you point to the individual modules below. + add_benchmark!(params, batches, pallet_xcm_benchmarks::fungible, XcmBalances); + if batches.is_empty() { return Err("Benchmark not found for this pallet.".into()) } Ok(batches) } diff --git a/runtime/westend/src/weights/mod.rs b/runtime/westend/src/weights/mod.rs index c7dba930ed49..afca6434f826 100644 --- a/runtime/westend/src/weights/mod.rs +++ b/runtime/westend/src/weights/mod.rs @@ -36,3 +36,4 @@ pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; pub mod runtime_parachains_paras; +pub mod xcm; diff --git a/runtime/westend/src/weights/xcm/mod.rs b/runtime/westend/src/weights/xcm/mod.rs new file mode 100644 index 000000000000..1b0d7c1ef485 --- /dev/null +++ b/runtime/westend/src/weights/xcm/mod.rs @@ -0,0 +1,193 @@ +mod pallet_xcm_benchmarks_fungible; +mod pallet_xcm_benchmarks_generic; + +use crate::Runtime; +use frame_support::weights::Weight; +use sp_std::prelude::*; +use xcm::{latest::prelude::*, DoubleEncoded}; + +use pallet_xcm_benchmarks_fungible::WeightInfo as XcmBalancesWeight; +use pallet_xcm_benchmarks_generic::WeightInfo as XcmGeneric; + +/// Types of asset supported by the westend runtime. +pub enum AssetTypes { + /// An asset backed by `pallet-balances`. + Balances, + /// Unknown asset. + Unknown, +} + +impl From<&MultiAsset> for AssetTypes { + fn from(asset: &MultiAsset) -> Self { + match asset { + MultiAsset { id: Concrete(MultiLocation { parents: 0, interior: Here }), .. } => + AssetTypes::Balances, + _ => AssetTypes::Unknown, + } + } +} + +trait WeighMultiAssets { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight; +} + +// TODO wild case +impl WeighMultiAssets for MultiAssetFilter { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + match self { + Self::Definite(assets) => assets + .inner() + .into_iter() + .map(From::from) + .map(|t| match t { + AssetTypes::Balances => balances_weight, + AssetTypes::Unknown => Weight::MAX, + }) + .fold(0, |acc, x| acc.saturating_add(x)), + _ => Weight::MAX, + } + } +} + +impl WeighMultiAssets for MultiAssets { + fn weigh_multi_assets(&self, balances_weight: Weight) -> Weight { + self.inner() + .into_iter() + .map(|m| >::from(m)) + .map(|t| match t { + AssetTypes::Balances => balances_weight, + AssetTypes::Unknown => Weight::MAX, + }) + .fold(0, |acc, x| acc.saturating_add(x)) + } +} + +pub struct WestendXcmWeight(core::marker::PhantomData); +impl XcmWeightInfo for WestendXcmWeight { + fn withdraw_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::withdraw_asset()) + } + fn reserve_asset_deposited(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::reserve_asset_deposited()) + } + fn receive_teleported_asset(assets: &MultiAssets) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::receive_teleported_asset()) + } + fn query_response(_query_id: &u64, _response: &Response, max_weight: &u64) -> Weight { + *max_weight + } + fn transfer_asset(assets: &MultiAssets, _dest: &MultiLocation) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::transfer_asset()) + } + fn transfer_reserve_asset( + assets: &MultiAssets, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::transfer_reserve_asset()) + } + fn transact( + _origin_type: &OriginKind, + _require_weight_at_most: &u64, + _call: &DoubleEncoded, + ) -> Weight { + XcmGeneric::::transact() + } + fn hrmp_new_channel_open_request( + _sender: &u32, + _max_message_size: &u32, + _max_capacity: &u32, + ) -> Weight { + XcmGeneric::::hrmp_new_channel_open_request() + } + fn hrmp_channel_accepted(_recipient: &u32) -> Weight { + XcmGeneric::::hrmp_channel_accepted() + } + fn hrmp_channel_closing(_initiator: &u32, _sender: &u32, _recipient: &u32) -> Weight { + XcmGeneric::::hrmp_channel_closing() + } + fn clear_origin() -> Weight { + XcmGeneric::::clear_origin() + } + fn descend_origin(who: &InteriorMultiLocation) -> Weight { + XcmGeneric::::descend_origin(who) + } + fn report_error( + _query_id: &QueryId, + _dest: &MultiLocation, + _max_response_weight: &u64, + ) -> Weight { + XcmGeneric::::report_error() + } + fn relayed_from(_who: &Junctions, _message: &Box>) -> Weight { + XcmGeneric::::relayed_from() + } + + fn deposit_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, // TODO use max assets? + _dest: &MultiLocation, + ) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::deposit_asset()) + } + fn deposit_reserve_asset( + assets: &MultiAssetFilter, + _max_assets: &u32, // TODO use max assets? + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::deposit_reserve_asset()) + } + fn exchange_asset(_give: &MultiAssetFilter, _receive: &MultiAssets) -> Weight { + Weight::MAX // todo fix + } + fn initiate_reserve_withdraw( + assets: &MultiAssetFilter, + _reserve: &MultiLocation, + _xcm: &Xcm<()>, + ) -> Weight { + assets.weigh_multi_assets(XcmGeneric::::initiate_reserve_withdraw()) + } + fn initiate_teleport( + assets: &MultiAssetFilter, + _dest: &MultiLocation, + _xcm: &Xcm<()>, + ) -> Weight { + assets.weigh_multi_assets(XcmBalancesWeight::::initiate_teleport()) + } + fn query_holding( + _query_id: &u64, + _dest: &MultiLocation, + _assets: &MultiAssetFilter, + _max_response_weight: &u64, + ) -> Weight { + XcmGeneric::::query_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(assets) + } + fn trap(code: &u64) -> Weight { + XcmGeneric::::trap(code) + } + fn subscribe_version(_query_id: &QueryId, _max_response_weight: &u64) -> Weight { + XcmGeneric::::subscribe_version() + } + fn unsubscribe_version() -> Weight { + XcmGeneric::::unsubscribe_version() + } +} diff --git a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs new file mode 100644 index 000000000000..869c1bca408f --- /dev/null +++ b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs @@ -0,0 +1,95 @@ +// Copyright 2017-2021 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 . + +//! Autogenerated weights for `pallet_xcm_benchmarks::fungible` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-17, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=westend-dev +// --steps=50 +// --repeat=20 +// --pallet=pallet_xcm_benchmarks::fungible +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --template=./xcm/pallet-xcm-benchmarks/template.hbs +// --output=./runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_fungible.rs + + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `pallet_xcm_benchmarks::fungible`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + // Storage: System Account (r:1 w:1) + pub(crate) fn withdraw_asset() -> Weight { + (39_691_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: System Account (r:2 w:2) + pub(crate) fn transfer_asset() -> Weight { + (62_616_000 as Weight) + .saturating_add(T::DbWeight::get().reads(2 as Weight)) + .saturating_add(T::DbWeight::get().writes(2 as Weight)) + } + // Storage: System Account (r:2 w:2) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn transfer_reserve_asset() -> Weight { + (86_642_000 as Weight) + .saturating_add(T::DbWeight::get().reads(4 as Weight)) + .saturating_add(T::DbWeight::get().writes(4 as Weight)) + } + // Storage: Benchmark Override (r:0 w:0) + pub(crate) fn receive_teleported_asset() -> Weight { + (2_000_000_000_000 as Weight) + } + // Storage: System Account (r:1 w:1) + pub(crate) fn deposit_asset() -> Weight { + (49_745_000 as Weight) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } + // Storage: System Account (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn deposit_reserve_asset() -> Weight { + (75_318_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } + // Storage: System Account (r:1 w:1) + // Storage: Dmp DownwardMessageQueueHeads (r:1 w:1) + // Storage: Dmp DownwardMessageQueues (r:1 w:1) + pub(crate) fn initiate_teleport() -> Weight { + (75_467_000 as Weight) + .saturating_add(T::DbWeight::get().reads(3 as Weight)) + .saturating_add(T::DbWeight::get().writes(3 as Weight)) + } +} diff --git a/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs new file mode 100644 index 000000000000..5c8626f0b22a --- /dev/null +++ b/runtime/westend/src/weights/xcm/pallet_xcm_benchmarks_generic.rs @@ -0,0 +1,73 @@ +// this whole file is temp, and will be replaced in the future TODO + +use frame_support::dispatch::Weight; + +pub struct WeightInfo(sp_std::marker::PhantomData); +impl WeightInfo { + pub fn query_holding() -> Weight { + 1_000_000_000 + } + pub fn buy_execution() -> Weight { + 1_000_000_000 + } + pub fn transact() -> Weight { + 1_000_000_000 + } + pub fn reserve_asset_deposited() -> Weight { + 1_000_000_000 + } + pub fn hrmp_new_channel_open_request() -> Weight { + 1_000_000_000 + } + pub fn hrmp_channel_accepted() -> Weight { + 1_000_000_000 + } + pub fn hrmp_channel_closing() -> Weight { + 1_000_000_000 + } + pub fn relayed_from() -> Weight { + 1_000_000_000 + } + pub fn refund_surplus() -> Weight { + 1_000_000_000 + } + pub fn set_error_handler() -> Weight { + 1_000_000_000 + } + pub fn set_appendix() -> Weight { + 1_000_000_000 + } + pub fn clear_error() -> Weight { + 1_000_000_000 + } + pub fn claim_asset(_assets: &crate::MultiAssets) -> Weight { + 1_000_000_000 + } + pub fn trap(_code: &u64) -> Weight { + 1_000_000_000 + } + + pub fn subscribe_version() -> Weight { + 1_000_000_000 + } + + pub fn unsubscribe_version() -> Weight { + 1_000_000_000 + } + + pub fn clear_origin() -> Weight { + 1_000_000_000 + } + + pub fn descend_origin(_who: &crate::InteriorMultiLocation) -> Weight { + 1_000_000_000 + } + + pub fn initiate_reserve_withdraw() -> Weight { + 1_000_000_000 + } + + pub fn report_error() -> Weight { + 1_000_000_000 + } +} diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 8d60407ea8cc..972d28bd1863 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -16,6 +16,7 @@ xcm-procedural = { path = "procedural" } [features] default = ["std"] wasm-api = [] +runtime-benchmarks = [] std = [ "parity-scale-codec/std", "scale-info/std", diff --git a/xcm/pallet-xcm-benchmarks/Cargo.toml b/xcm/pallet-xcm-benchmarks/Cargo.toml new file mode 100644 index 000000000000..f310bd0510a4 --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "pallet-xcm-benchmarks" +authors = ["Parity Technologies "] +edition = "2018" +version = "0.9.8" + +[package.metadata.docs.rs] +targets = ["x86_64-unknown-linux-gnu"] + +[dependencies] +codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false } +scale-info = { version = "1.0", default-features = false, features = ["derive"] } +frame-support = { version = "4.0.0-dev", default-features = false, branch = "master", git = "https://github.com/paritytech/substrate" } +frame-system = { version = "4.0.0-dev", default-features = false, branch = "master", git = "https://github.com/paritytech/substrate" } +sp-runtime = { version = "4.0.0-dev", default-features = false, branch = "master", git = "https://github.com/paritytech/substrate" } +sp-std = { version = "4.0.0-dev", default-features = false, branch = "master", git = "https://github.com/paritytech/substrate" } +xcm-executor = { path = "../xcm-executor", default-features = false, features = ["runtime-benchmarks"] } +frame-benchmarking = { version = "4.0.0-dev", default-features = false, branch = "master", git = "https://github.com/paritytech/substrate" } +xcm = { path = "..", default-features = false, features = ["runtime-benchmarks"] } +log = "0.4.0" + +[dev-dependencies] +pallet-balances = { version = "4.0.0-dev", branch = "master", git = "https://github.com/paritytech/substrate" } +pallet-assets = { version = "4.0.0-dev", branch = "master", git = "https://github.com/paritytech/substrate" } +sp-core = { version = "4.0.0-dev", branch = "master", git = "https://github.com/paritytech/substrate" } +sp-io = { version = "4.0.0-dev", branch = "master", git = "https://github.com/paritytech/substrate" } +sp-tracing = { version = "4.0.0-dev", branch = "master", git = "https://github.com/paritytech/substrate" } +xcm-builder = { path = "../xcm-builder" } +xcm = { path = ".." } +# temp +pallet-xcm = { path = "../pallet-xcm" } +polkadot-runtime-common = { path = "../../runtime/common" } +# westend-runtime = { path = "../../runtime/westend", features = ["runtime-benchmarks"] } +polkadot-primitives = { path = "../../primitives" } + +[features] +default = ["std"] +std = [ + "codec/std", + "frame-benchmarking/std", + "frame-support/std", + "frame-system/std", + "sp-runtime/std", + "sp-std/std" +] diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs b/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs new file mode 100644 index 000000000000..b93184e0455d --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/src/fungible/benchmarking.rs @@ -0,0 +1,219 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use super::*; +use crate::{account_and_location, new_executor, worst_case_holding, AssetTransactorOf, XcmCallOf}; +use frame_benchmarking::{ + benchmarks_instance_pallet, impl_benchmark_test_suite, BenchmarkError, BenchmarkResult, +}; +use frame_support::{pallet_prelude::Get, traits::fungible::Inspect}; +use sp_runtime::traits::Zero; +use sp_std::{convert::TryInto, prelude::*, vec}; +use xcm::latest::prelude::*; +use xcm_executor::traits::{Convert, TransactAsset}; + +benchmarks_instance_pallet! { + where_clause { where + < + < + T::TransactAsset + as + Inspect + >::Balance + as + TryInto + >::Error: sp_std::fmt::Debug, + } + + withdraw_asset { + let (sender_account, sender_location) = account_and_location::(1); + let worst_case_holding = worst_case_holding(); + let asset = T::get_multi_asset(); + + >::deposit_asset(&asset, &sender_location).unwrap(); + // check the assets of origin. + assert!(!T::TransactAsset::balance(&sender_account).is_zero()); + + let mut executor = new_executor::(sender_location); + executor.holding = worst_case_holding; + let instruction = Instruction::>::WithdrawAsset(vec![asset.clone()].into()); + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + // check one of the assets of origin. + assert!(T::TransactAsset::balance(&sender_account).is_zero()); + assert!(executor.holding.ensure_contains(&vec![asset].into()).is_ok()); + } + + transfer_asset { + let (sender_account, sender_location) = account_and_location::(1); + let asset = T::get_multi_asset(); + let assets: MultiAssets = vec![ asset.clone() ].into(); + // this xcm doesn't use holding + + let dest_location = T::valid_destination()?; + let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); + + >::deposit_asset(&asset, &sender_location).unwrap(); + assert!(T::TransactAsset::balance(&dest_account).is_zero()); + + let mut executor = new_executor::(sender_location); + let instruction = Instruction::TransferAsset { assets, beneficiary: dest_location }; + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + assert!(T::TransactAsset::balance(&sender_account).is_zero()); + assert!(!T::TransactAsset::balance(&dest_account).is_zero()); + } + + transfer_reserve_asset { + let (sender_account, sender_location) = account_and_location::(1); + let dest_location = T::valid_destination()?; + let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); + + let asset = T::get_multi_asset(); + >::deposit_asset(&asset, &sender_location).unwrap(); + let assets: MultiAssets = vec![ asset ].into(); + assert!(T::TransactAsset::balance(&dest_account).is_zero()); + + let mut executor = new_executor::(sender_location); + let instruction = Instruction::TransferReserveAsset { + assets, + dest: dest_location, + xcm: Xcm::new() + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + assert!(T::TransactAsset::balance(&sender_account).is_zero()); + assert!(!T::TransactAsset::balance(&dest_account).is_zero()); + // TODO: Check sender queue is not empty. + } + + receive_teleported_asset { + // If there is no trusted teleporter, then we skip this benchmark. + let (trusted_teleporter, teleportable_asset) = T::TrustedTeleporter::get().ok_or( + BenchmarkError::Override( + BenchmarkResult::from_weight(T::BlockWeights::get().max_block) + ) + )?; + + let assets: MultiAssets = vec![ teleportable_asset ].into(); + + let mut executor = new_executor::(trusted_teleporter); + let instruction = Instruction::ReceiveTeleportedAsset(assets.clone()); + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm).map_err(|_| { + BenchmarkError::Override( + BenchmarkResult::from_weight(T::BlockWeights::get().max_block) + ) + })?; + } verify { + assert!(executor.holding.ensure_contains(&assets).is_ok()); + } + + deposit_asset { + let asset = T::get_multi_asset(); + let mut holding = worst_case_holding(); + + // Add our asset to the holding. + holding.subsume(asset.clone()); + + // our dest must have no balance initially. + let dest_location = T::valid_destination()?; + let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); + assert!(T::TransactAsset::balance(&dest_account).is_zero()); + + let mut executor = new_executor::(Default::default()); + executor.holding = holding; + let instruction = Instruction::>::DepositAsset { + assets: asset.into(), + max_assets: 1, + beneficiary: dest_location, + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + // dest should have received some asset. + assert!(!T::TransactAsset::balance(&dest_account).is_zero()) + } + + deposit_reserve_asset { + let asset = T::get_multi_asset(); + let mut holding = worst_case_holding(); + + // Add our asset to the holding. + holding.subsume(asset.clone()); + + // our dest must have no balance initially. + let dest_location = T::valid_destination()?; + let dest_account = T::AccountIdConverter::convert(dest_location.clone()).unwrap(); + assert!(T::TransactAsset::balance(&dest_account).is_zero()); + + let mut executor = new_executor::(Default::default()); + executor.holding = holding; + let instruction = Instruction::>::DepositReserveAsset { + assets: asset.into(), + max_assets: 1, + dest: dest_location, + xcm: Xcm::new(), + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + // dest should have received some asset. + assert!(!T::TransactAsset::balance(&dest_account).is_zero()) + } + + initiate_teleport { + let asset = T::get_multi_asset(); + let mut holding = worst_case_holding(); + + // Add our asset to the holding. + holding.subsume(asset.clone()); + + // Checked account starts at zero + assert!(T::CheckedAccount::get().map_or(true, |c| T::TransactAsset::balance(&c).is_zero())); + + let mut executor = new_executor::(Default::default()); + executor.holding = holding; + let instruction = Instruction::>::InitiateTeleport { + assets: asset.into(), + dest: T::valid_destination()?, + xcm: Xcm::new(), + }; + let xcm = Xcm(vec![instruction]); + }: { + executor.execute(xcm)?; + } verify { + if let Some(checked_account) = T::CheckedAccount::get() { + // teleport checked account should have received some asset. + assert!(!T::TransactAsset::balance(&checked_account).is_zero()); + } + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::fungible::mock::new_test_ext(), + crate::fungible::mock::Test +); diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs b/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs new file mode 100644 index 000000000000..8666dc6caa4d --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/src/fungible/mock.rs @@ -0,0 +1,180 @@ +// Copyright 2021 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 mock runtime for XCM benchmarking. + +use crate::{fungible as xcm_balances_benchmark, mock::*}; +use frame_support::{parameter_types, traits::Everything}; +use sp_core::H256; +use sp_runtime::{ + testing::Header, + traits::{BlakeTwo256, IdentityLookup}, + BuildStorage, +}; +use xcm::latest::prelude::*; +use xcm_builder::AllowUnpaidExecutionFrom; + +type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic; +type Block = frame_system::mocking::MockBlock; + +// For testing the pallet, we construct a mock runtime. +frame_support::construct_runtime!( + pub enum Test where + Block = Block, + NodeBlock = Block, + UncheckedExtrinsic = UncheckedExtrinsic, + { + System: frame_system::{Pallet, Call, Config, Storage, Event}, + Balances: pallet_balances::{Pallet, Call, Storage, Config, Event}, + XcmBalancesBenchmark: xcm_balances_benchmark::{Pallet}, + } +); + +parameter_types! { + pub const BlockHashCount: u64 = 250; + pub BlockWeights: frame_system::limits::BlockWeights = + frame_system::limits::BlockWeights::simple_max(1024); +} +impl frame_system::Config for Test { + type BaseCallFilter = Everything; + type BlockWeights = (); + type BlockLength = (); + type DbWeight = (); + type Origin = Origin; + type Index = u64; + type BlockNumber = u64; + type Hash = H256; + type Call = Call; + type Hashing = BlakeTwo256; + type AccountId = u64; + type Lookup = IdentityLookup; + type Header = Header; + type Event = Event; + type BlockHashCount = BlockHashCount; + type Version = (); + type PalletInfo = PalletInfo; + type AccountData = pallet_balances::AccountData; + type OnNewAccount = (); + type OnKilledAccount = (); + type SystemWeightInfo = (); + type SS58Prefix = (); + type OnSetCode = (); +} + +parameter_types! { + pub const ExistentialDeposit: u64 = 7; +} + +impl pallet_balances::Config for Test { + type MaxLocks = (); + type MaxReserves = (); + type ReserveIdentifier = [u8; 8]; + type Balance = u64; + type DustRemoval = (); + type Event = Event; + type ExistentialDeposit = ExistentialDeposit; + type AccountStore = System; + type WeightInfo = (); +} + +parameter_types! { + pub const AssetDeposit: u64 = 100 * ExistentialDeposit::get(); + pub const ApprovalDeposit: u64 = 1 * ExistentialDeposit::get(); + pub const StringLimit: u32 = 50; + pub const MetadataDepositBase: u64 = 10 * ExistentialDeposit::get(); + pub const MetadataDepositPerByte: u64 = 1 * ExistentialDeposit::get(); +} + +pub struct MatchAnyFungible; +impl xcm_executor::traits::MatchesFungible for MatchAnyFungible { + fn matches_fungible(m: &MultiAsset) -> Option { + use sp_runtime::traits::SaturatedConversion; + match m { + MultiAsset { fun: Fungible(amount), .. } => Some((*amount).saturated_into::()), + _ => None, + } + } +} + +// Use balances as the asset transactor. +pub type AssetTransactor = xcm_builder::CurrencyAdapter< + Balances, + MatchAnyFungible, + AccountIdConverter, + u64, + CheckedAccount, +>; + +parameter_types! { + /// Maximum number of instructions in a single XCM fragment. A sanity check against weight + /// calculations getting too crazy. + pub const MaxInstructions: u32 = 100; +} + +pub struct XcmConfig; +impl xcm_executor::Config for XcmConfig { + type Call = Call; + type XcmSender = DevNull; + type AssetTransactor = AssetTransactor; + type OriginConverter = (); + type IsReserve = (); + type IsTeleporter = (); + type LocationInverter = xcm_builder::LocationInverter; + type Barrier = AllowUnpaidExecutionFrom; + type Weigher = xcm_builder::FixedWeightBounds; + type Trader = xcm_builder::FixedRateOfFungible; + type ResponseHandler = DevNull; + type AssetTrap = (); + type AssetClaims = (); + type SubscriptionService = (); +} + +impl crate::Config for Test { + type XcmConfig = XcmConfig; + type AccountIdConverter = AccountIdConverter; + fn valid_destination() -> Result { + let valid_destination: MultiLocation = + X1(AccountId32 { network: NetworkId::Any, id: [0u8; 32] }).into(); + + Ok(valid_destination) + } +} + +parameter_types! { + pub const CheckedAccount: Option = Some(100); + pub const TrustedTeleporter: Option<(MultiLocation, MultiAsset)> = Some(( + X1(OnlyChild).into(), + MultiAsset { id: Concrete(Here.into()), fun: Fungible(100) }, + )); +} + +impl xcm_balances_benchmark::Config for Test { + type TransactAsset = Balances; + type CheckedAccount = CheckedAccount; + type TrustedTeleporter = TrustedTeleporter; + + fn get_multi_asset() -> MultiAsset { + let amount = + >::minimum_balance() as u128; + MultiAsset { id: Concrete(Here.into()), fun: Fungible(amount) } + } +} + +pub fn new_test_ext() -> sp_io::TestExternalities { + let t = GenesisConfig { ..Default::default() }.build_storage().unwrap(); + sp_tracing::try_init_simple(); + t.into() +} diff --git a/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs b/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs new file mode 100644 index 000000000000..e5062c310494 --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/src/fungible/mod.rs @@ -0,0 +1,47 @@ +// Copyright 2021 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 . + +// Benchmarking for the `AssetTransactor` trait via `Fungible`. + +pub use pallet::*; + +pub mod benchmarking; +#[cfg(test)] +mod mock; + +#[frame_support::pallet] +pub mod pallet { + use frame_support::pallet_prelude::Get; + #[pallet::config] + pub trait Config: frame_system::Config + crate::Config { + /// The type of `fungible` that is being used under the hood. + /// + /// This is useful for testing and checking. + type TransactAsset: frame_support::traits::fungible::Mutate; + + /// The account used to check assets being teleported. + type CheckedAccount: Get>; + + /// A trusted location which we allow teleports from, and the asset we allow to teleport. + type TrustedTeleporter: Get>; + + /// Give me a fungible asset that your asset transactor is going to accept. + fn get_multi_asset() -> xcm::latest::MultiAsset; + } + + #[pallet::pallet] + pub struct Pallet(_); +} diff --git a/xcm/pallet-xcm-benchmarks/src/lib.rs b/xcm/pallet-xcm-benchmarks/src/lib.rs new file mode 100644 index 000000000000..cfbb3a478f67 --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/src/lib.rs @@ -0,0 +1,108 @@ +// Copyright 2021 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 . + +//! Pallet that serves no other purpose than benchmarking raw messages [`Xcm`]. + +#![cfg_attr(not(feature = "std"), no_std)] + +use codec::Encode; +use frame_benchmarking::account; +use sp_std::prelude::*; +use xcm::latest::prelude::*; +use xcm_executor::{traits::Convert, Assets}; + +pub mod fungible; + +#[cfg(test)] +mod mock; + +/// A base trait for all individual pallets +pub trait Config: frame_system::Config { + /// The XCM configurations. + /// + /// These might affect the execution of XCM messages, such as defining how the + /// `TransactAsset` is implemented. + type XcmConfig: xcm_executor::Config; + + /// A converter between a multi-location to a sovereign account. + type AccountIdConverter: Convert; + + /// Does any necessary setup to create a valid destination for XCM messages. + /// Returns that destination's multi-location to be used in benchmarks. + fn valid_destination() -> Result; +} + +const SEED: u32 = 0; + +/// The XCM executor to use for doing stuff. +pub type ExecutorOf = xcm_executor::XcmExecutor<::XcmConfig>; +/// The overarching call type. +pub type OverArchingCallOf = ::Call; +/// The asset transactor of our executor +pub type AssetTransactorOf = <::XcmConfig as xcm_executor::Config>::AssetTransactor; +/// The call type of executor's config. Should eventually resolve to the same overarching call type. +pub type XcmCallOf = <::XcmConfig as xcm_executor::Config>::Call; + +/// The worst case number of assets in the holding. +const HOLDING_FUNGIBLES: u32 = 99; +const HOLDING_NON_FUNGIBLES: u32 = 99; + +pub fn worst_case_holding() -> Assets { + let fungibles_amount: u128 = 100; // TODO probably update + (0..HOLDING_FUNGIBLES) + .map(|i| { + MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: Fungible(fungibles_amount * i as u128), + } + .into() + }) + .chain(core::iter::once(MultiAsset { id: Concrete(Here.into()), fun: Fungible(u128::MAX) })) + .chain((0..HOLDING_NON_FUNGIBLES).map(|i| MultiAsset { + id: Concrete(GeneralIndex(i as u128).into()), + fun: NonFungible(asset_instance_from(i)), + })) + .collect::>() + .into() +} + +pub fn asset_instance_from(x: u32) -> AssetInstance { + let bytes = x.encode(); + let mut instance = [0u8; 4]; + instance.copy_from_slice(&bytes); + AssetInstance::Array4(instance) +} + +pub fn new_executor(origin: MultiLocation) -> ExecutorOf { + ExecutorOf::::new(origin) +} + +/// Build a multi-location from an account id. +fn account_id_junction(index: u32) -> Junction { + let account: T::AccountId = account("account", index, SEED); + let mut encoded = account.encode(); + encoded.resize(32, 0u8); + let mut id = [0u8; 32]; + id.copy_from_slice(&encoded); + Junction::AccountId32 { network: NetworkId::Any, id } +} + +pub fn account_and_location(index: u32) -> (T::AccountId, MultiLocation) { + let location: MultiLocation = account_id_junction::(index).into(); + let account = T::AccountIdConverter::convert(location.clone()).unwrap(); + + (account, location) +} diff --git a/xcm/pallet-xcm-benchmarks/src/mock.rs b/xcm/pallet-xcm-benchmarks/src/mock.rs new file mode 100644 index 000000000000..2b1cb31f1580 --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/src/mock.rs @@ -0,0 +1,64 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use crate::*; +use frame_support::{parameter_types, weights::Weight}; +use xcm_executor::traits::FilterAssetLocation; + +// An xcm sender/receiver akin to > /dev/null +pub struct DevNull; +impl xcm::opaque::latest::SendXcm for DevNull { + fn send_xcm(_: MultiLocation, _: Xcm<()>) -> SendResult { + Ok(()) + } +} + +impl xcm_executor::traits::OnResponse for DevNull { + fn expecting_response(_: &MultiLocation, _: u64) -> bool { + false + } + fn on_response(_: &MultiLocation, _: u64, _: Response, _: Weight) -> Weight { + 0 + } +} + +pub struct AccountIdConverter; +impl xcm_executor::traits::Convert for AccountIdConverter { + fn convert(ml: MultiLocation) -> Result { + match ml { + MultiLocation { parents: 0, interior: X1(Junction::AccountId32 { id, .. }) } => + Ok(::decode(&mut &*id.to_vec()).unwrap()), + _ => Err(ml), + } + } + + fn reverse(acc: u64) -> Result { + Err(acc) + } +} + +parameter_types! { + pub Ancestry: MultiLocation = Junction::Parachain(101).into(); + pub UnitWeightCost: Weight = 10; + pub WeightPrice: (AssetId, u128) = (Concrete(Here.into()), 1_000_000); +} + +pub struct AllAssetLocationsPass; +impl FilterAssetLocation for AllAssetLocationsPass { + fn filter_asset_location(_: &MultiAsset, _: &MultiLocation) -> bool { + true + } +} diff --git a/xcm/pallet-xcm-benchmarks/template.hbs b/xcm/pallet-xcm-benchmarks/template.hbs new file mode 100644 index 000000000000..357fa7456aa0 --- /dev/null +++ b/xcm/pallet-xcm-benchmarks/template.hbs @@ -0,0 +1,66 @@ +// Copyright 2017-2021 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 . + +//! Autogenerated weights for `{{pallet}}` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION {{version}} +//! DATE: {{date}}, STEPS: `{{cmd.steps}}`, REPEAT: {{cmd.repeat}}, LOW RANGE: `{{cmd.lowest_range_values}}`, HIGH RANGE: `{{cmd.highest_range_values}}` +//! EXECUTION: {{cmd.execution}}, WASM-EXECUTION: {{cmd.wasm_execution}}, CHAIN: {{cmd.chain}}, DB CACHE: {{cmd.db_cache}} + +// Executed Command: +{{#each args as |arg|~}} +// {{arg}} +{{/each}} + +#![cfg_attr(rustfmt, rustfmt_skip)] +#![allow(unused_parens)] +#![allow(unused_imports)] + +use frame_support::{traits::Get, weights::Weight}; +use sp_std::marker::PhantomData; + +/// Weights for `{{pallet}}`. +pub struct WeightInfo(PhantomData); +impl WeightInfo { + {{~#each benchmarks as |benchmark|}} + {{~#each benchmark.comments as |comment|}} + // {{comment}} + {{~/each}} + pub(crate) fn {{benchmark.name~}} + ( + {{~#each benchmark.components as |c| ~}} + {{~#if (not c.is_used)}}_{{/if}}{{c.name}}: u32, {{/each~}} + ) -> Weight { + ({{underscore benchmark.base_weight}} as Weight) + {{~#each benchmark.component_weight as |cw|}} + // Standard Error: {{underscore cw.error}} + .saturating_add(({{underscore cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight)) + {{~/each}} + {{~#if (ne benchmark.base_reads "0")}} + .saturating_add(T::DbWeight::get().reads({{benchmark.base_reads}} as Weight)) + {{~/if}} + {{~#each benchmark.component_reads as |cr|}} + .saturating_add(T::DbWeight::get().reads(({{cr.slope}} as Weight).saturating_mul({{cr.name}} as Weight))) + {{~/each}} + {{~#if (ne benchmark.base_writes "0")}} + .saturating_add(T::DbWeight::get().writes({{benchmark.base_writes}} as Weight)) + {{~/if}} + {{~#each benchmark.component_writes as |cw|}} + .saturating_add(T::DbWeight::get().writes(({{cw.slope}} as Weight).saturating_mul({{cw.name}} as Weight))) + {{~/each}} + } + {{~/each}} +} diff --git a/xcm/xcm-builder/src/lib.rs b/xcm/xcm-builder/src/lib.rs index e2caff56bf36..72bb8b61c0ff 100644 --- a/xcm/xcm-builder/src/lib.rs +++ b/xcm/xcm-builder/src/lib.rs @@ -57,7 +57,9 @@ pub use fungibles_adapter::{ mod weight; #[allow(deprecated)] pub use weight::FixedRateOfConcreteFungible; -pub use weight::{FixedRateOfFungible, FixedWeightBounds, TakeRevenue, UsingComponents}; +pub use weight::{ + FixedRateOfFungible, FixedWeightBounds, TakeRevenue, UsingComponents, WeightInfoBounds, +}; mod matches_fungible; pub use matches_fungible::{IsAbstract, IsConcrete}; diff --git a/xcm/xcm-builder/src/weight.rs b/xcm/xcm-builder/src/weight.rs index 3ec684f85852..1e84a42e2ada 100644 --- a/xcm/xcm-builder/src/weight.rs +++ b/xcm/xcm-builder/src/weight.rs @@ -64,7 +64,7 @@ impl, C: Decode + GetDispatchInfo, M> FixedWeightBounds } } -struct WeightInfoBounds(PhantomData<(W, C, M)>); +pub struct WeightInfoBounds(PhantomData<(W, C, M)>); impl WeightBounds for WeightInfoBounds where W: XcmWeightInfo, diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index b3e6b6eb9045..d4668d0165d6 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -16,9 +16,13 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } log = { version = "0.4.14", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/substrate", branch = "master" , default-features = false, optional = true } [features] default = ["std"] +runtime-benchmarks = [ + "frame-benchmarking", +] std = [ "parity-scale-codec/std", "xcm/std", diff --git a/xcm/xcm-executor/src/assets.rs b/xcm/xcm-executor/src/assets.rs index c7049a3a6412..93a29d7af880 100644 --- a/xcm/xcm-executor/src/assets.rs +++ b/xcm/xcm-executor/src/assets.rs @@ -211,7 +211,7 @@ impl Assets { /// Returns an error unless all `assets` are contained in `self`. In the case of an error, the first asset in /// `assets` which is not wholly in `self` is returned. - fn ensure_contains(&self, assets: &MultiAssets) -> Result<(), TakeError> { + pub fn ensure_contains(&self, assets: &MultiAssets) -> Result<(), TakeError> { for asset in assets.inner().iter() { match asset { MultiAsset { fun: Fungible(ref amount), ref id } => { From c379bacaee44f78547fc2ea3a38d8ded2afb63e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Sep 2021 07:57:14 +0200 Subject: [PATCH 25/52] Bump tracing from 0.1.27 to 0.1.28 (#3937) Bumps [tracing](https://github.com/tokio-rs/tracing) from 0.1.27 to 0.1.28. - [Release notes](https://github.com/tokio-rs/tracing/releases) - [Commits](https://github.com/tokio-rs/tracing/compare/tracing-0.1.27...tracing-0.1.28) --- updated-dependencies: - dependency-name: tracing dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/collation-generation/Cargo.toml | 2 +- node/core/approval-voting/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/backing/Cargo.toml | 2 +- node/core/bitfield-signing/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/core/chain-api/Cargo.toml | 2 +- node/core/chain-selection/Cargo.toml | 2 +- node/core/dispute-coordinator/Cargo.toml | 2 +- node/core/dispute-participation/Cargo.toml | 2 +- node/core/parachains-inherent/Cargo.toml | 2 +- node/core/provisioner/Cargo.toml | 2 +- node/core/pvf/Cargo.toml | 2 +- node/core/runtime-api/Cargo.toml | 2 +- node/network/approval-distribution/Cargo.toml | 2 +- node/network/availability-distribution/Cargo.toml | 2 +- node/network/availability-recovery/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/dispute-distribution/Cargo.toml | 2 +- node/network/gossip-support/Cargo.toml | 2 +- node/network/statement-distribution/Cargo.toml | 2 +- node/overseer/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/test/service/Cargo.toml | 2 +- 28 files changed, 29 insertions(+), 29 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4cd57cec08b8..51842a24c2f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10810,9 +10810,9 @@ checksum = "e987b6bf443f4b5b3b6f38704195592cca41c5bb7aedd3c3693c7081f8289860" [[package]] name = "tracing" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ba9ab62b7d6497a8638dfda5e5c4fb3b2d5a7fca4118f2b96151c8ef1a437e" +checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8" dependencies = [ "cfg-if 1.0.0", "pin-project-lite 0.2.4", diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 510f6222bf6f..49e732a0251a 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-erasure-coding = { path = "../../erasure-coding" } polkadot-node-primitives = { path = "../primitives" } polkadot-node-subsystem = { path = "../subsystem" } diff --git a/node/core/approval-voting/Cargo.toml b/node/core/approval-voting/Cargo.toml index c071e583cf41..822d1c3998bd 100644 --- a/node/core/approval-voting/Cargo.toml +++ b/node/core/approval-voting/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.17" futures-timer = "3.0.2" parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } -tracing = "0.1.27" +tracing = "0.1.28" bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } lru = "0.6" merlin = "2.0" diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 69c37ad3b46f..55028f59a1bf 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -9,7 +9,7 @@ futures = "0.3.17" futures-timer = "3.0.2" kvdb = "0.10.0" thiserror = "1.0.26" -tracing = "0.1.27" +tracing = "0.1.28" bitvec = "0.20.1" parity-scale-codec = { version = "2.3.0", features = ["derive"] } diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index c8e90d3eedf9..72b88b2ae4fd 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -14,7 +14,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } erasure-coding = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } statement-table = { package = "polkadot-statement-table", path = "../../../statement-table" } bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -tracing = "0.1.27" +tracing = "0.1.28" thiserror = "1.0.26" [dev-dependencies] diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 316ae45e9b70..01b37b827f1b 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 0c818fc62f51..24ae96b3ee4d 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] async-trait = "0.1.51" futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" sp-maybe-compressed-blob = { package = "sp-maybe-compressed-blob", git = "https://github.com/paritytech/substrate", branch = "master" } parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index a0e4100d3454..2580d780f329 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/core/chain-selection/Cargo.toml b/node/core/chain-selection/Cargo.toml index 68d421153f49..798b4cb372c6 100644 --- a/node/core/chain-selection/Cargo.toml +++ b/node/core/chain-selection/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" [dependencies] futures = "0.3.17" futures-timer = "3" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/dispute-coordinator/Cargo.toml b/node/core/dispute-coordinator/Cargo.toml index 367cf9824447..45c12ff2ad76 100644 --- a/node/core/dispute-coordinator/Cargo.toml +++ b/node/core/dispute-coordinator/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" parity-scale-codec = "2" kvdb = "0.10.0" derive_more = "0.99.14" diff --git a/node/core/dispute-participation/Cargo.toml b/node/core/dispute-participation/Cargo.toml index dff65a8fc260..eddd78e1789b 100644 --- a/node/core/dispute-participation/Cargo.toml +++ b/node/core/dispute-participation/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" thiserror = "1.0.26" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/parachains-inherent/Cargo.toml b/node/core/parachains-inherent/Cargo.toml index 9322c203067e..487fbd6d2547 100644 --- a/node/core/parachains-inherent/Cargo.toml +++ b/node/core/parachains-inherent/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" futures-timer = "3.0.2" -tracing = "0.1.27" +tracing = "0.1.28" thiserror = "1.0.26" async-trait = "0.1.51" polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index 8be473ee9e71..ae0f9ea99904 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" thiserror = "1.0.26" polkadot-primitives = { path = "../../../primitives" } polkadot-node-subsystem = { path = "../../subsystem" } diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 9153a65de8ef..26c2881dffd2 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -17,7 +17,7 @@ futures = "0.3.17" futures-timer = "3.0.2" libc = "0.2.102" slotmap = "1.0" -tracing = "0.1.27" +tracing = "0.1.28" pin-project = "1.0.8" rand = "0.8.3" parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index 77290fddfc76..fa7c8d47cb1b 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" memory-lru = "0.1.0" parity-util-mem = { version = "0.10.0", default-features = false } diff --git a/node/network/approval-distribution/Cargo.toml b/node/network/approval-distribution/Cargo.toml index c4d620e48b24..e47b5d460396 100644 --- a/node/network/approval-distribution/Cargo.toml +++ b/node/network/approval-distribution/Cargo.toml @@ -12,7 +12,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-primitives = { path = "../../../primitives" } futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" [dev-dependencies] sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 79cc95a418fe..bdcc1e3832ce 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" parity-scale-codec = { version = "2.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } diff --git a/node/network/availability-recovery/Cargo.toml b/node/network/availability-recovery/Cargo.toml index e4d56f4c6841..90c67b21013d 100644 --- a/node/network/availability-recovery/Cargo.toml +++ b/node/network/availability-recovery/Cargo.toml @@ -9,7 +9,7 @@ futures = "0.3.17" lru = "0.6.6" rand = "0.8.3" thiserror = "1.0.26" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index e531e1c9962f..5b35c7534c29 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 983f03457c8b..5e8c5539385a 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] async-trait = "0.1.51" futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 8c8bd3cb63bd..561daefb3d1a 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -10,7 +10,7 @@ derive_more = "0.99.14" futures = "0.3.17" futures-timer = "3" thiserror = "1.0.26" -tracing = "0.1.27" +tracing = "0.1.28" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/dispute-distribution/Cargo.toml b/node/network/dispute-distribution/Cargo.toml index accc229e86c3..7c00302b0bb3 100644 --- a/node/network/dispute-distribution/Cargo.toml +++ b/node/network/dispute-distribution/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" derive_more = "0.99.14" parity-scale-codec = { version = "2.3.0", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } diff --git a/node/network/gossip-support/Cargo.toml b/node/network/gossip-support/Cargo.toml index 0087a7d6b089..cd31b66cc16f 100644 --- a/node/network/gossip-support/Cargo.toml +++ b/node/network/gossip-support/Cargo.toml @@ -17,7 +17,7 @@ polkadot-primitives = { path = "../../../primitives" } futures = "0.3.17" rand = { version = "0.8.3", default-features = false } rand_chacha = { version = "0.3.1", default-features = false } -tracing = "0.1.27" +tracing = "0.1.28" [dev-dependencies] sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index b0e935c2cb8b..19018dc94b3e 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" -tracing = "0.1.27" +tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } sp-staking = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index bef2d141415e..cb80ed35d0d0 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-metrics = { path = "../metrics" } polkadot-primitives = { path = "../../primitives" } polkadot-overseer-gen = { path = "./overseer-gen" } polkadot-overseer-all-subsystems-gen = { path = "./all-subsystems-gen" } -tracing = "0.1.27" +tracing = "0.1.28" lru = "0.6" parity-util-mem = { version = ">= 0.10.1", default-features = false } diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index fc148f3c83f8..52cafc9b171a 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -62,7 +62,7 @@ prometheus-endpoint = { package = "substrate-prometheus-endpoint", git = "https: # External Crates futures = "0.3.17" hex-literal = "0.3.3" -tracing = "0.1.27" +tracing = "0.1.28" serde = { version = "1.0.130", features = ["derive"] } thiserror = "1.0.26" kvdb = "0.10.0" diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index fb844d3ce8a7..cc9be5083f11 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -13,7 +13,7 @@ parity-scale-codec = { version = "2.3.0", default-features = false, features = [ pin-project = "1.0.8" rand = "0.8.3" thiserror = "1.0.26" -tracing = "0.1.27" +tracing = "0.1.28" derive_more = "0.99.11" lru = "0.6.6" diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 06bd67d5168c..972d5a5b0ca3 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.17" futures01 = { package = "futures", version = "0.1.29" } hex = "0.4.3" -tracing = "0.1.27" +tracing = "0.1.28" rand = "0.8.3" tempfile = "3.2.0" tokio = "1.12.0" From f5b1a454ae805f2570f6867e3add5986da138992 Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Mon, 27 Sep 2021 14:05:06 +0800 Subject: [PATCH 26/52] Fix bin-substrate toml (#3939) --- bridges/relays/bin-substrate/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bridges/relays/bin-substrate/Cargo.toml b/bridges/relays/bin-substrate/Cargo.toml index 830f592ec4e1..99f56cc3be48 100644 --- a/bridges/relays/bin-substrate/Cargo.toml +++ b/bridges/relays/bin-substrate/Cargo.toml @@ -32,7 +32,7 @@ bp-wococo = { path = "../../primitives/chain-wococo" } bp-runtime = { path = "../../primitives/runtime" } bp-westend = { path = "../../primitives/chain-westend" } bridge-runtime-common = { path = "../../bin/runtime-common" } -finality-grandpa = { version = "0.14.1", } +finality-grandpa = "0.14.1" finality-relay = { path = "../finality" } headers-relay = { path = "../headers" } messages-relay = { path = "../messages" } From 0d7ebdd135d14bbf2b69b426d799c2739ccafb47 Mon Sep 17 00:00:00 2001 From: Ayush Mishra Date: Mon, 27 Sep 2021 18:05:50 +0530 Subject: [PATCH 27/52] Added multisig in Rococo (#3873) * Added multisig in Rococo * removed formatting error Co-authored-by: Ayush <> --- Cargo.lock | 1 + runtime/rococo/Cargo.toml | 4 ++++ runtime/rococo/src/lib.rs | 22 +++++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 51842a24c2f9..995711fabae8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7919,6 +7919,7 @@ dependencies = [ "pallet-membership", "pallet-mmr", "pallet-mmr-primitives", + "pallet-multisig", "pallet-offences", "pallet-proxy", "pallet-session", diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 240627987ffc..6ad3d89a6db0 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -44,6 +44,7 @@ pallet-indices = { git = "https://github.com/paritytech/substrate", branch = "ma pallet-membership = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-mmr = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-mmr-primitives = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } +pallet-multisig = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } pallet-session = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } @@ -150,6 +151,7 @@ std = [ "xcm-builder/std", "pallet-xcm/std", "log/std", + "pallet-multisig/std", ] # When enabled, the runtime API will not be build. # @@ -173,6 +175,7 @@ runtime-benchmarks = [ "pallet-timestamp/runtime-benchmarks", "pallet-xcm/runtime-benchmarks", "xcm-builder/runtime-benchmarks", + "pallet-multisig/runtime-benchmarks", "frame-benchmarking", "hex-literal" ] @@ -197,4 +200,5 @@ try-runtime = [ "pallet-timestamp/try-runtime", "pallet-transaction-payment/try-runtime", "runtime-common/try-runtime", + "pallet-multisig/try-runtime", ] diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 3cb61efd3c4a..99a8b33a7b51 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -251,9 +251,11 @@ construct_runtime! { Utility: pallet_utility::{Pallet, Call, Event} = 90, Proxy: pallet_proxy::{Pallet, Call, Storage, Event} = 91, + Multisig: pallet_multisig::{Pallet, Call, Storage, Event}, // Pallet for sending XCM. XcmPallet: pallet_xcm::{Pallet, Call, Storage, Event, Origin} = 99, + } } @@ -1082,7 +1084,7 @@ impl InstanceFilter for ProxyType { Call::Auctions { .. } | Call::Crowdloan { .. } | Call::Registrar { .. } | - Call::Slots { .. } + Call::Multisig(..) | Call::Slots { .. } ), } } @@ -1139,6 +1141,24 @@ impl pallet_membership::Config for Runtime { type 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); + pub const MaxSignatories: u16 = 100; +} + +impl pallet_multisig::Config for Runtime { + type Event = Event; + type Call = Call; + type Currency = Balances; + type DepositBase = DepositBase; + type DepositFactor = DepositFactor; + type MaxSignatories = MaxSignatories; + type WeightInfo = (); +} + #[cfg(not(feature = "disable-runtime-api"))] sp_api::impl_runtime_apis! { impl sp_api::Core for Runtime { From 0c2a0fd9e75530356656ab8027b4d7f665cc48fc Mon Sep 17 00:00:00 2001 From: Robert Klotzner Date: Mon, 27 Sep 2021 16:30:02 +0200 Subject: [PATCH 28/52] Log info about low connectivity and unreachable validators (#3916) * Attempt to add log stats to gossip-support. * WIP: Keep track of connected validators. * Clarify metric. * WIP: Make gossip support report connectivity. * WIP: Fixing tests. * Fix network bridge + integrate in overseer. * Consistent naming. * Fix logic error * cargo fmt * Pretty logs. * cargo fmt * Use `Delay` to trigger periodic checks. * fmt * Fix warning for authority set size of 1. * More correct ratio report if there are no resolved validators. * Prettier rendering of empty set. * Fix typo. * Another typo. * Don't check on every leaf update. * Make compatible with older rustc. * Fix tests. * Demote warning. --- Cargo.lock | 5 + node/network/bridge/src/lib.rs | 23 +- node/network/bridge/src/tests.rs | 16 +- .../network/bridge/src/validator_discovery.rs | 66 ++- node/network/gossip-support/Cargo.toml | 5 + node/network/gossip-support/src/lib.rs | 454 +++++++++++------- node/network/gossip-support/src/tests.rs | 342 ++++++++----- node/network/protocol/src/lib.rs | 20 + node/overseer/src/lib.rs | 2 +- node/service/src/overseer.rs | 7 +- node/subsystem-types/src/messages.rs | 18 +- 11 files changed, 639 insertions(+), 319 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 995711fabae8..6d3227cc50f4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6063,7 +6063,10 @@ name = "polkadot-gossip-support" version = "0.9.9" dependencies = [ "assert_matches", + "async-trait", "futures 0.3.17", + "futures-timer 3.0.2", + "lazy_static", "polkadot-node-network-protocol", "polkadot-node-subsystem", "polkadot-node-subsystem-test-helpers", @@ -6071,11 +6074,13 @@ dependencies = [ "polkadot-primitives", "rand 0.8.4", "rand_chacha 0.3.1", + "sc-network", "sp-application-crypto", "sp-consensus-babe", "sp-core", "sp-keyring", "sp-keystore", + "sp-tracing", "tracing", ] diff --git a/node/network/bridge/src/lib.rs b/node/network/bridge/src/lib.rs index 608a790d2931..0ca63f027fa2 100644 --- a/node/network/bridge/src/lib.rs +++ b/node/network/bridge/src/lib.rs @@ -198,7 +198,7 @@ impl metrics::Metrics for Metrics { prometheus::GaugeVec::new( prometheus::Opts::new( "parachain_desired_peer_count", - "The number of peers that the local node is expected to connect to on a parachain-related peer-set", + "The number of peers that the local node is expected to connect to on a parachain-related peer-set (either including or not including unresolvable authorities, depending on whether `ConnectToValidators` or `ConnectToValidatorsResolved` was used.)", ), &["protocol"] )?, @@ -552,6 +552,27 @@ where network_service = ns; authority_discovery_service = ads; } + NetworkBridgeMessage::ConnectToResolvedValidators { + validator_addrs, + peer_set, + } => { + tracing::trace!( + target: LOG_TARGET, + action = "ConnectToPeers", + peer_set = ?peer_set, + ?validator_addrs, + "Received a resolved validator connection request", + ); + + metrics.note_desired_peer_count(peer_set, validator_addrs.len()); + + let all_addrs = validator_addrs.into_iter().flatten().collect(); + network_service = validator_discovery.on_resolved_request( + all_addrs, + peer_set, + network_service, + ).await; + } NetworkBridgeMessage::NewGossipTopology { our_neighbors, } => { diff --git a/node/network/bridge/src/tests.rs b/node/network/bridge/src/tests.rs index 89551de89c25..40ade08df2b0 100644 --- a/node/network/bridge/src/tests.rs +++ b/node/network/bridge/src/tests.rs @@ -37,7 +37,8 @@ use polkadot_primitives::v1::AuthorityDiscoveryId; use polkadot_subsystem::{ jaeger, messages::{ - ApprovalDistributionMessage, BitfieldDistributionMessage, StatementDistributionMessage, + ApprovalDistributionMessage, BitfieldDistributionMessage, GossipSupportMessage, + StatementDistributionMessage, }, ActiveLeavesUpdate, FromOverseer, LeafStatus, OverseerSignal, }; @@ -337,6 +338,13 @@ async fn assert_sends_validation_event_to_all( ApprovalDistributionMessage::NetworkBridgeUpdateV1(e) ) if e == event.focus().expect("could not focus message") ); + + assert_matches!( + virtual_overseer.recv().await, + AllMessages::GossipSupport( + GossipSupportMessage::NetworkBridgeUpdateV1(e) + ) if e == event.focus().expect("could not focus message") + ); } async fn assert_sends_collation_event_to_all( @@ -1189,7 +1197,7 @@ fn send_messages_to_peers() { fn spread_event_to_subsystems_is_up_to_date() { // Number of subsystems expected to be interested in a network event, // and hence the network event broadcasted to. - const EXPECTED_COUNT: usize = 3; + const EXPECTED_COUNT: usize = 4; let mut cnt = 0_usize; for msg in AllMessages::dispatch_iter(NetworkBridgeEvent::PeerDisconnected(PeerId::random())) { @@ -1219,7 +1227,9 @@ fn spread_event_to_subsystems_is_up_to_date() { AllMessages::ApprovalDistribution(_) => { cnt += 1; }, - AllMessages::GossipSupport(_) => unreachable!("Not interested in network events"), + AllMessages::GossipSupport(_) => { + cnt += 1; + }, AllMessages::DisputeCoordinator(_) => unreachable!("Not interested in network events"), AllMessages::DisputeParticipation(_) => unreachable!("Not interested in network events"), diff --git a/node/network/bridge/src/validator_discovery.rs b/node/network/bridge/src/validator_discovery.rs index 2d6d21668983..7f768044ad50 100644 --- a/node/network/bridge/src/validator_discovery.rs +++ b/node/network/bridge/src/validator_discovery.rs @@ -47,6 +47,44 @@ impl Service { Self { state: Default::default(), _phantom: PhantomData } } + /// Connect to already resolved addresses: + pub async fn on_resolved_request( + &mut self, + newly_requested: HashSet, + peer_set: PeerSet, + mut network_service: N, + ) -> N { + let state = &mut self.state[peer_set]; + // clean up revoked requests + let multiaddr_to_remove: HashSet<_> = + state.previously_requested.difference(&newly_requested).cloned().collect(); + let multiaddr_to_add: HashSet<_> = + newly_requested.difference(&state.previously_requested).cloned().collect(); + state.previously_requested = newly_requested; + + tracing::debug!( + target: LOG_TARGET, + ?peer_set, + added = multiaddr_to_add.len(), + removed = multiaddr_to_remove.len(), + "New ConnectToValidators resolved request", + ); + // ask the network to connect to these nodes and not disconnect + // from them until removed from the set + if let Err(e) = network_service + .add_to_peers_set(peer_set.into_protocol_name(), multiaddr_to_add) + .await + { + tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); + } + // the addresses are known to be valid + let _ = network_service + .remove_from_peers_set(peer_set.into_protocol_name(), multiaddr_to_remove) + .await; + + network_service + } + /// On a new connection request, a peer set update will be issued. /// It will ask the network to connect to the validators and not disconnect /// from them at least until the next request is issued for the same peer set. @@ -59,7 +97,7 @@ impl Service { validator_ids: Vec, peer_set: PeerSet, failed: oneshot::Sender, - mut network_service: N, + network_service: N, mut authority_discovery_service: AD, ) -> (N, AD) { // collect multiaddress of validators @@ -82,39 +120,19 @@ impl Service { } } - let state = &mut self.state[peer_set]; - // clean up revoked requests - let multiaddr_to_remove: HashSet<_> = - state.previously_requested.difference(&newly_requested).cloned().collect(); - let multiaddr_to_add: HashSet<_> = - newly_requested.difference(&state.previously_requested).cloned().collect(); - state.previously_requested = newly_requested; - tracing::debug!( target: LOG_TARGET, ?peer_set, ?requested, - added = multiaddr_to_add.len(), - removed = multiaddr_to_remove.len(), ?failed_to_resolve, "New ConnectToValidators request", ); - // ask the network to connect to these nodes and not disconnect - // from them until removed from the set - if let Err(e) = network_service - .add_to_peers_set(peer_set.into_protocol_name(), multiaddr_to_add) - .await - { - tracing::warn!(target: LOG_TARGET, err = ?e, "AuthorityDiscoveryService returned an invalid multiaddress"); - } - // the addresses are known to be valid - let _ = network_service - .remove_from_peers_set(peer_set.into_protocol_name(), multiaddr_to_remove) - .await; + + let r = self.on_resolved_request(newly_requested, peer_set, network_service).await; let _ = failed.send(failed_to_resolve); - (network_service, authority_discovery_service) + (r, authority_discovery_service) } } diff --git a/node/network/gossip-support/Cargo.toml b/node/network/gossip-support/Cargo.toml index cd31b66cc16f..398f5532125d 100644 --- a/node/network/gossip-support/Cargo.toml +++ b/node/network/gossip-support/Cargo.toml @@ -8,6 +8,7 @@ edition = "2018" sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-network-protocol = { path = "../protocol" } polkadot-node-subsystem = { path = "../../subsystem" } @@ -15,6 +16,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-primitives = { path = "../../../primitives" } futures = "0.3.17" +futures-timer = "3.0.2" rand = { version = "0.8.3", default-features = false } rand_chacha = { version = "0.3.1", default-features = false } tracing = "0.1.28" @@ -22,7 +24,10 @@ tracing = "0.1.28" [dev-dependencies] sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = "master" } +sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } assert_matches = "1.4.0" +async-trait = "0.1.51" +lazy_static = "1.4.0" diff --git a/node/network/gossip-support/src/lib.rs b/node/network/gossip-support/src/lib.rs index 52c6ffc165be..65af6cb12756 100644 --- a/node/network/gossip-support/src/lib.rs +++ b/node/network/gossip-support/src/lib.rs @@ -24,20 +24,35 @@ //! in this graph will be forwarded to the network bridge with //! the `NetworkBridgeMessage::NewGossipTopology` message. -use futures::{channel::oneshot, FutureExt as _}; -use polkadot_node_network_protocol::peer_set::PeerSet; +use std::{ + collections::HashMap, + fmt, + time::{Duration, Instant}, +}; + +use futures::{channel::oneshot, select, FutureExt as _}; +use futures_timer::Delay; +use rand::{seq::SliceRandom as _, SeedableRng}; +use rand_chacha::ChaCha20Rng; + +use sc_network::Multiaddr; +use sp_application_crypto::{AppKey, Public}; +use sp_keystore::{CryptoStore, SyncCryptoStorePtr}; + +use polkadot_node_network_protocol::{ + authority_discovery::AuthorityDiscovery, peer_set::PeerSet, v1::GossipSuppportNetworkMessage, + PeerId, +}; use polkadot_node_subsystem::{ - messages::{GossipSupportMessage, NetworkBridgeMessage, RuntimeApiMessage, RuntimeApiRequest}, + messages::{ + GossipSupportMessage, NetworkBridgeEvent, NetworkBridgeMessage, RuntimeApiMessage, + RuntimeApiRequest, + }, overseer, ActiveLeavesUpdate, FromOverseer, OverseerSignal, SpawnedSubsystem, SubsystemContext, SubsystemError, }; use polkadot_node_subsystem_util as util; use polkadot_primitives::v1::{AuthorityDiscoveryId, Hash, SessionIndex}; -use rand::{seq::SliceRandom as _, SeedableRng}; -use rand_chacha::ChaCha20Rng; -use sp_application_crypto::{AppKey, Public}; -use sp_keystore::{CryptoStore, SyncCryptoStorePtr}; -use std::time::{Duration, Instant}; #[cfg(test)] mod tests; @@ -56,13 +71,13 @@ const BACKOFF_DURATION: Duration = Duration::from_secs(5); /// https://github.com/paritytech/substrate/blob/fc49802f263529160635471c8a17888846035f5d/client/authority-discovery/src/lib.rs#L88 const LOW_CONNECTIVITY_WARN_DELAY: Duration = Duration::from_secs(600); +/// If connectivity is lower than this in percent, issue warning in logs. +const LOW_CONNECTIVITY_WARN_THRESHOLD: usize = 90; + /// The Gossip Support subsystem. -pub struct GossipSupport { +pub struct GossipSupport { keystore: SyncCryptoStorePtr, -} -#[derive(Default)] -struct State { last_session_index: Option, // Some(timestamp) if we failed to resolve // at least a third of authorities the last time. @@ -75,43 +90,73 @@ struct State { /// potential sequence of failed attempts. It will be cleared once we reached >2/3 /// connectivity. failure_start: Option, + + /// Successfully resolved connections + /// + /// waiting for actual connection. + resolved_authorities: HashMap>, + + /// Actually connected authorities. + connected_authorities: HashMap, + /// By `PeerId`. + /// + /// Needed for efficient handling of disconnect events. + connected_authorities_by_peer_id: HashMap, + /// Authority discovery service. + authority_discovery: AD, } -impl GossipSupport { +impl GossipSupport +where + AD: AuthorityDiscovery, +{ /// Create a new instance of the [`GossipSupport`] subsystem. - pub fn new(keystore: SyncCryptoStorePtr) -> Self { - Self { keystore } - } - - async fn run(self, ctx: Context) - where - Context: SubsystemContext, - Context: overseer::SubsystemContext, - { - let mut state = State::default(); - self.run_inner(ctx, &mut state).await; + pub fn new(keystore: SyncCryptoStorePtr, authority_discovery: AD) -> Self { + Self { + keystore, + last_session_index: None, + last_failure: None, + failure_start: None, + resolved_authorities: HashMap::new(), + connected_authorities: HashMap::new(), + connected_authorities_by_peer_id: HashMap::new(), + authority_discovery, + } } - async fn run_inner(self, mut ctx: Context, state: &mut State) + async fn run(mut self, mut ctx: Context) -> Self where Context: SubsystemContext, Context: overseer::SubsystemContext, { - let Self { keystore } = self; + fn get_connectivity_check_delay() -> Delay { + Delay::new(LOW_CONNECTIVITY_WARN_DELAY) + } + let mut next_connectivity_check = get_connectivity_check_delay().fuse(); loop { - let message = match ctx.recv().await { - Ok(message) => message, - Err(e) => { - tracing::debug!( - target: LOG_TARGET, - err = ?e, - "Failed to receive a message from Overseer, exiting", - ); - return - }, - }; + let message = select!( + _ = next_connectivity_check => { + self.check_connectivity(); + next_connectivity_check = get_connectivity_check_delay().fuse(); + continue + } + result = ctx.recv().fuse() => + match result { + Ok(message) => message, + Err(e) => { + tracing::debug!( + target: LOG_TARGET, + err = ?e, + "Failed to receive a message from Overseer, exiting", + ); + return self + }, + } + ); match message { - FromOverseer::Communication { .. } => {}, + FromOverseer::Communication { + msg: GossipSupportMessage::NetworkBridgeUpdateV1(ev), + } => self.handle_connect_disconnect(ev), FromOverseer::Signal(OverseerSignal::ActiveLeaves(ActiveLeavesUpdate { activated, .. @@ -119,14 +164,190 @@ impl GossipSupport { tracing::trace!(target: LOG_TARGET, "active leaves signal"); let leaves = activated.into_iter().map(|a| a.hash); - if let Err(e) = state.handle_active_leaves(&mut ctx, &keystore, leaves).await { + if let Err(e) = self.handle_active_leaves(&mut ctx, leaves).await { tracing::debug!(target: LOG_TARGET, error = ?e); } }, FromOverseer::Signal(OverseerSignal::BlockFinalized(_hash, _number)) => {}, - FromOverseer::Signal(OverseerSignal::Conclude) => return, + FromOverseer::Signal(OverseerSignal::Conclude) => return self, + } + } + } + + /// 1. Determine if the current session index has changed. + /// 2. If it has, determine relevant validators + /// and issue a connection request. + async fn handle_active_leaves( + &mut self, + ctx: &mut Context, + leaves: impl Iterator, + ) -> Result<(), util::Error> + where + Context: SubsystemContext, + Context: overseer::SubsystemContext, + { + for leaf in leaves { + let current_index = + util::request_session_index_for_child(leaf, ctx.sender()).await.await??; + let since_failure = self.last_failure.map(|i| i.elapsed()).unwrap_or_default(); + let force_request = since_failure >= BACKOFF_DURATION; + let leaf_session = Some((current_index, leaf)); + let maybe_new_session = match self.last_session_index { + Some(i) if current_index <= i => None, + _ => leaf_session, + }; + + let maybe_issue_connection = + if force_request { leaf_session } else { maybe_new_session }; + + if let Some((session_index, relay_parent)) = maybe_issue_connection { + let is_new_session = maybe_new_session.is_some(); + if is_new_session { + tracing::debug!( + target: LOG_TARGET, + %session_index, + "New session detected", + ); + } + + let all_authorities = determine_relevant_authorities(ctx, relay_parent).await?; + let our_index = ensure_i_am_an_authority(&self.keystore, &all_authorities).await?; + let other_authorities = { + let mut authorities = all_authorities.clone(); + authorities.swap_remove(our_index); + authorities + }; + + self.issue_connection_request(ctx, other_authorities).await?; + + if is_new_session { + self.last_session_index = Some(session_index); + update_gossip_topology(ctx, our_index, all_authorities, relay_parent).await?; + } + } + } + + Ok(()) + } + + async fn issue_connection_request( + &mut self, + ctx: &mut Context, + authorities: Vec, + ) -> Result<(), util::Error> + where + Context: SubsystemContext, + Context: overseer::SubsystemContext, + { + let num = authorities.len(); + let mut validator_addrs = Vec::with_capacity(authorities.len()); + let mut failures = 0; + let mut resolved = HashMap::with_capacity(authorities.len()); + for authority in authorities { + if let Some(addrs) = + self.authority_discovery.get_addresses_by_authority_id(authority.clone()).await + { + validator_addrs.push(addrs.clone()); + resolved.insert(authority, addrs); + } else { + failures += 1; + tracing::debug!( + target: LOG_TARGET, + "Couldn't resolve addresses of authority: {:?}", + authority + ); } } + self.resolved_authorities = resolved; + tracing::debug!(target: LOG_TARGET, %num, "Issuing a connection request"); + + ctx.send_message(NetworkBridgeMessage::ConnectToResolvedValidators { + validator_addrs, + peer_set: PeerSet::Validation, + }) + .await; + + // issue another request for the same session + // if at least a third of the authorities were not resolved. + if 3 * failures >= num { + let timestamp = Instant::now(); + match self.failure_start { + None => self.failure_start = Some(timestamp), + Some(first) if first.elapsed() >= LOW_CONNECTIVITY_WARN_DELAY => { + tracing::warn!( + target: LOG_TARGET, + connected = ?(num - failures), + target = ?num, + "Low connectivity - authority lookup failed for too many validators." + ); + }, + Some(_) => { + tracing::debug!( + target: LOG_TARGET, + connected = ?(num - failures), + target = ?num, + "Low connectivity (due to authority lookup failures) - expected on startup." + ); + }, + } + self.last_failure = Some(timestamp); + } else { + self.last_failure = None; + self.failure_start = None; + }; + + Ok(()) + } + + fn handle_connect_disconnect(&mut self, ev: NetworkBridgeEvent) { + match ev { + NetworkBridgeEvent::PeerConnected(peer_id, _, o_authority) => { + if let Some(authority) = o_authority { + self.connected_authorities.insert(authority.clone(), peer_id); + self.connected_authorities_by_peer_id.insert(peer_id, authority); + } + }, + NetworkBridgeEvent::PeerDisconnected(peer_id) => { + if let Some(authority) = self.connected_authorities_by_peer_id.remove(&peer_id) { + self.connected_authorities.remove(&authority); + } + }, + NetworkBridgeEvent::OurViewChange(_) => {}, + NetworkBridgeEvent::PeerViewChange(_, _) => {}, + NetworkBridgeEvent::NewGossipTopology(_) => {}, + NetworkBridgeEvent::PeerMessage(_, v) => { + match v {}; + }, + } + } + + /// Check connectivity and report on it in logs. + fn check_connectivity(&mut self) { + let absolute_connected = self.connected_authorities.len(); + let absolute_resolved = self.resolved_authorities.len(); + let connected_ratio = + (100 * absolute_connected).checked_div(absolute_resolved).unwrap_or(100); + let unconnected_authorities = self + .resolved_authorities + .iter() + .filter(|(a, _)| !self.connected_authorities.contains_key(a)); + // TODO: Make that warning once connectivity issues are fixed (no point in warning, if + // we already know it is broken. + // https://github.com/paritytech/polkadot/issues/3921 + if connected_ratio <= LOW_CONNECTIVITY_WARN_THRESHOLD { + tracing::debug!( + target: LOG_TARGET, + "Connectivity seems low, we are only connected to {}% of available validators (see debug logs for details)", connected_ratio + ); + } + tracing::debug!( + target: LOG_TARGET, + ?connected_ratio, + ?absolute_connected, + ?absolute_resolved, + unconnected_authorities = %PrettyAuthorities(unconnected_authorities), + "Connectivity Report" + ); } } @@ -161,22 +382,6 @@ async fn ensure_i_am_an_authority( Err(util::Error::NotAValidator) } -/// A helper function for making a `ConnectToValidators` request. -async fn connect_to_authorities( - ctx: &mut Context, - validator_ids: Vec, - peer_set: PeerSet, -) -> oneshot::Receiver -where - Context: SubsystemContext, - Context: overseer::SubsystemContext, -{ - let (failed, failed_rx) = oneshot::channel(); - ctx.send_message(NetworkBridgeMessage::ConnectToValidators { validator_ids, peer_set, failed }) - .await; - failed_rx -} - /// We partition the list of all sorted `authorities` into `sqrt(len)` groups of `sqrt(len)` size /// and form a matrix where each validator is connected to all validators in its row and column. /// This is similar to `[web3]` research proposed topology, except for the groups are not parachain @@ -253,119 +458,11 @@ fn matrix_neighbors(our_index: usize, len: usize) -> impl Iterator row_neighbors.chain(column_neighbors).filter(move |i| *i != our_index) } -impl State { - /// 1. Determine if the current session index has changed. - /// 2. If it has, determine relevant validators - /// and issue a connection request. - async fn handle_active_leaves( - &mut self, - ctx: &mut Context, - keystore: &SyncCryptoStorePtr, - leaves: impl Iterator, - ) -> Result<(), util::Error> - where - Context: SubsystemContext, - Context: overseer::SubsystemContext, - { - for leaf in leaves { - let current_index = - util::request_session_index_for_child(leaf, ctx.sender()).await.await??; - let since_failure = self.last_failure.map(|i| i.elapsed()).unwrap_or_default(); - let force_request = since_failure >= BACKOFF_DURATION; - let leaf_session = Some((current_index, leaf)); - let maybe_new_session = match self.last_session_index { - Some(i) if current_index <= i => None, - _ => leaf_session, - }; - - let maybe_issue_connection = - if force_request { leaf_session } else { maybe_new_session }; - - if let Some((session_index, relay_parent)) = maybe_issue_connection { - let is_new_session = maybe_new_session.is_some(); - if is_new_session { - tracing::debug!( - target: LOG_TARGET, - %session_index, - "New session detected", - ); - } - - let all_authorities = determine_relevant_authorities(ctx, relay_parent).await?; - let our_index = ensure_i_am_an_authority(keystore, &all_authorities).await?; - let other_authorities = { - let mut authorities = all_authorities.clone(); - authorities.swap_remove(our_index); - authorities - }; - - self.issue_connection_request(ctx, other_authorities).await?; - - if is_new_session { - self.last_session_index = Some(session_index); - update_gossip_topology(ctx, our_index, all_authorities, relay_parent).await?; - } - } - } - - Ok(()) - } - - async fn issue_connection_request( - &mut self, - ctx: &mut Context, - authorities: Vec, - ) -> Result<(), util::Error> - where - Context: SubsystemContext, - Context: overseer::SubsystemContext, - { - let num = authorities.len(); - tracing::debug!(target: LOG_TARGET, %num, "Issuing a connection request"); - - let failures = connect_to_authorities(ctx, authorities, PeerSet::Validation).await; - - // we await for the request to be processed - // this is fine, it should take much less time than one session - let failures = failures.await.unwrap_or(num); - - // issue another request for the same session - // if at least a third of the authorities were not resolved - if failures >= num / 3 { - let timestamp = Instant::now(); - match self.failure_start { - None => self.failure_start = Some(timestamp), - Some(first) if first.elapsed() >= LOW_CONNECTIVITY_WARN_DELAY => { - tracing::warn!( - target: LOG_TARGET, - connected = ?(num - failures), - target = ?num, - "Low connectivity - authority lookup failed for too many validators." - ); - }, - Some(_) => { - tracing::debug!( - target: LOG_TARGET, - connected = ?(num - failures), - target = ?num, - "Low connectivity (due to authority lookup failures) - expected on startup." - ); - }, - } - self.last_failure = Some(timestamp); - } else { - self.last_failure = None; - self.failure_start = None; - }; - - Ok(()) - } -} - -impl overseer::Subsystem for GossipSupport +impl overseer::Subsystem for GossipSupport where Context: SubsystemContext, Context: overseer::SubsystemContext, + AD: AuthorityDiscovery + Clone, { fn start(self, ctx: Context) -> SpawnedSubsystem { let future = self.run(ctx).map(|_| Ok(())).boxed(); @@ -373,3 +470,28 @@ where SpawnedSubsystem { name: "gossip-support-subsystem", future } } } + +/// Helper struct to get a nice rendering of unreachable authorities. +struct PrettyAuthorities(I); + +impl<'a, I> fmt::Display for PrettyAuthorities +where + I: Iterator)> + Clone, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let mut authorities = self.0.clone().peekable(); + if authorities.peek().is_none() { + write!(f, "None")?; + } else { + write!(f, "\n")?; + } + for (authority, addrs) in authorities { + write!(f, "{}:\n", authority)?; + for addr in addrs { + write!(f, " {}\n", addr)?; + } + write!(f, "\n")?; + } + Ok(()) + } +} diff --git a/node/network/gossip-support/src/tests.rs b/node/network/gossip-support/src/tests.rs index 1ca76728adb9..fc25b137d3c7 100644 --- a/node/network/gossip-support/src/tests.rs +++ b/node/network/gossip-support/src/tests.rs @@ -16,7 +16,17 @@ //! Unit tests for Gossip Support Subsystem. -use super::*; +use std::{sync::Arc, time::Duration}; + +use assert_matches::assert_matches; +use async_trait::async_trait; +use futures::{executor, future, Future}; +use lazy_static::lazy_static; + +use sc_network::multiaddr::Protocol; +use sp_consensus_babe::{AllowedSlots, BabeEpochConfiguration, Epoch as BabeEpoch}; +use sp_keyring::Sr25519Keyring; + use polkadot_node_subsystem::{ jaeger, messages::{AllMessages, RuntimeApiMessage, RuntimeApiRequest}, @@ -24,47 +34,124 @@ use polkadot_node_subsystem::{ }; use polkadot_node_subsystem_test_helpers as test_helpers; use polkadot_node_subsystem_util::TimeoutExt as _; -use sp_consensus_babe::{AllowedSlots, BabeEpochConfiguration, Epoch as BabeEpoch}; -use sp_keyring::Sr25519Keyring; use test_helpers::mock::make_ferdie_keystore; -use assert_matches::assert_matches; -use futures::{executor, future, Future}; -use std::{sync::Arc, time::Duration}; +use super::*; + +lazy_static! { + static ref MOCK_AUTHORITY_DISCOVERY: MockAuthorityDiscovery = MockAuthorityDiscovery::new(); + static ref AUTHORITIES: Vec = { + let mut authorities = OTHER_AUTHORITIES.clone(); + authorities.push(Sr25519Keyring::Ferdie.public().into()); + authorities + }; + static ref OTHER_AUTHORITIES: Vec = vec![ + Sr25519Keyring::Alice.public().into(), + Sr25519Keyring::Bob.public().into(), + Sr25519Keyring::Charlie.public().into(), + Sr25519Keyring::Eve.public().into(), + Sr25519Keyring::One.public().into(), + Sr25519Keyring::Two.public().into(), + ]; + static ref NEIGHBORS: Vec = vec![ + Sr25519Keyring::Two.public().into(), + Sr25519Keyring::Charlie.public().into(), + Sr25519Keyring::Eve.public().into(), + ]; +} type VirtualOverseer = test_helpers::TestSubsystemContextHandle; -fn test_harness>( - mut state: State, +#[derive(Debug, Clone)] +struct MockAuthorityDiscovery { + addrs: HashMap>, + authorities: HashMap, +} + +impl MockAuthorityDiscovery { + fn new() -> Self { + let authorities: HashMap<_, _> = + AUTHORITIES.clone().into_iter().map(|a| (PeerId::random(), a)).collect(); + let addrs = authorities + .clone() + .into_iter() + .map(|(p, a)| { + let multiaddr = Multiaddr::empty().with(Protocol::P2p(p.into())); + (a, vec![multiaddr]) + }) + .collect(); + Self { addrs, authorities } + } +} + +#[async_trait] +impl AuthorityDiscovery for MockAuthorityDiscovery { + async fn get_addresses_by_authority_id( + &mut self, + authority: polkadot_primitives::v1::AuthorityDiscoveryId, + ) -> Option> { + self.addrs.get(&authority).cloned() + } + async fn get_authority_id_by_peer_id( + &mut self, + peer_id: polkadot_node_network_protocol::PeerId, + ) -> Option { + self.authorities.get(&peer_id).cloned() + } +} + +async fn get_other_authorities_addrs() -> Vec> { + let mut addrs = Vec::with_capacity(OTHER_AUTHORITIES.len()); + let mut discovery = MOCK_AUTHORITY_DISCOVERY.clone(); + for authority in OTHER_AUTHORITIES.iter().cloned() { + if let Some(addr) = discovery.get_addresses_by_authority_id(authority).await { + addrs.push(addr); + } + } + addrs +} + +async fn get_other_authorities_addrs_map() -> HashMap> { + let mut addrs = HashMap::with_capacity(OTHER_AUTHORITIES.len()); + let mut discovery = MOCK_AUTHORITY_DISCOVERY.clone(); + for authority in OTHER_AUTHORITIES.iter().cloned() { + if let Some(addr) = discovery.get_addresses_by_authority_id(authority.clone()).await { + addrs.insert(authority, addr); + } + } + addrs +} + +fn make_subsystem() -> GossipSupport { + GossipSupport::new(make_ferdie_keystore(), MOCK_AUTHORITY_DISCOVERY.clone()) +} + +fn test_harness, AD: AuthorityDiscovery>( + subsystem: GossipSupport, test_fn: impl FnOnce(VirtualOverseer) -> T, -) -> State { +) -> GossipSupport { let pool = sp_core::testing::TaskExecutor::new(); let (context, virtual_overseer) = test_helpers::make_subsystem_context(pool.clone()); - let keystore = make_ferdie_keystore(); - let subsystem = GossipSupport::new(keystore); - { - let subsystem = subsystem.run_inner(context, &mut state); - - let test_fut = test_fn(virtual_overseer); - - futures::pin_mut!(test_fut); - futures::pin_mut!(subsystem); - - executor::block_on(future::join( - async move { - let mut overseer = test_fut.await; - overseer - .send(FromOverseer::Signal(OverseerSignal::Conclude)) - .timeout(TIMEOUT) - .await - .expect("Conclude send timeout"); - }, - subsystem, - )); - } - - state + let subsystem = subsystem.run(context); + + let test_fut = test_fn(virtual_overseer); + + futures::pin_mut!(test_fut); + futures::pin_mut!(subsystem); + + let (_, subsystem) = executor::block_on(future::join( + async move { + let mut overseer = test_fut.await; + overseer + .send(FromOverseer::Signal(OverseerSignal::Conclude)) + .timeout(TIMEOUT) + .await + .expect("Conclude send timeout"); + }, + subsystem, + )); + subsystem } const TIMEOUT: Duration = Duration::from_millis(100); @@ -91,32 +178,6 @@ async fn overseer_recv(overseer: &mut VirtualOverseer) -> AllMessages { msg } -fn authorities() -> Vec { - let mut authorities = other_authorities(); - authorities.push(Sr25519Keyring::Ferdie.public().into()); - authorities -} - -// Authorities other than ourselves: -fn other_authorities() -> Vec { - vec![ - Sr25519Keyring::Alice.public().into(), - Sr25519Keyring::Bob.public().into(), - Sr25519Keyring::Charlie.public().into(), - Sr25519Keyring::Eve.public().into(), - Sr25519Keyring::One.public().into(), - Sr25519Keyring::Two.public().into(), - ] -} - -fn neighbors() -> Vec { - vec![ - Sr25519Keyring::Two.public().into(), - Sr25519Keyring::Charlie.public().into(), - Sr25519Keyring::Eve.public().into(), - ] -} - async fn test_neighbors(overseer: &mut VirtualOverseer) { assert_matches!( overseer_recv(overseer).await, @@ -145,7 +206,7 @@ async fn test_neighbors(overseer: &mut VirtualOverseer) { }) => { let mut got: Vec<_> = our_neighbors.into_iter().collect(); got.sort(); - assert_eq!(got, neighbors()); + assert_eq!(got, NEIGHBORS.clone()); } ); } @@ -153,7 +214,7 @@ async fn test_neighbors(overseer: &mut VirtualOverseer) { #[test] fn issues_a_connection_request_on_new_session() { let hash = Hash::repeat_byte(0xAA); - let state = test_harness(State::default(), |mut virtual_overseer| async move { + let state = test_harness(make_subsystem(), |mut virtual_overseer| async move { let overseer = &mut virtual_overseer; overseer_signal_active_leaves(overseer, hash).await; assert_matches!( @@ -173,20 +234,18 @@ fn issues_a_connection_request_on_new_session() { RuntimeApiRequest::Authorities(tx), )) => { assert_eq!(relay_parent, hash); - tx.send(Ok(authorities())).unwrap(); + tx.send(Ok(AUTHORITIES.clone())).unwrap(); } ); assert_matches!( overseer_recv(overseer).await, - AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToValidators { - validator_ids, + AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToResolvedValidators { + validator_addrs, peer_set, - failed, }) => { - assert_eq!(validator_ids, other_authorities()); + assert_eq!(validator_addrs, get_other_authorities_addrs().await); assert_eq!(peer_set, PeerSet::Validation); - failed.send(0).unwrap(); } ); @@ -241,20 +300,18 @@ fn issues_a_connection_request_on_new_session() { RuntimeApiRequest::Authorities(tx), )) => { assert_eq!(relay_parent, hash); - tx.send(Ok(authorities())).unwrap(); + tx.send(Ok(AUTHORITIES.clone())).unwrap(); } ); assert_matches!( overseer_recv(overseer).await, - AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToValidators { - validator_ids, + AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToResolvedValidators { + validator_addrs, peer_set, - failed, }) => { - assert_eq!(validator_ids, other_authorities()); + assert_eq!(validator_addrs, get_other_authorities_addrs().await); assert_eq!(peer_set, PeerSet::Validation); - failed.send(0).unwrap(); } ); @@ -266,54 +323,96 @@ fn issues_a_connection_request_on_new_session() { assert!(state.last_failure.is_none()); } +#[test] +fn test_log_output() { + sp_tracing::try_init_simple(); + let alice: AuthorityDiscoveryId = Sr25519Keyring::Alice.public().into(); + let bob = Sr25519Keyring::Bob.public().into(); + let unconnected_authorities = { + let mut m = HashMap::new(); + let peer_id = PeerId::random(); + let addr = Multiaddr::empty().with(Protocol::P2p(peer_id.into())); + let addrs = vec![addr.clone(), addr]; + m.insert(alice, addrs); + let peer_id = PeerId::random(); + let addr = Multiaddr::empty().with(Protocol::P2p(peer_id.into())); + let addrs = vec![addr.clone(), addr]; + m.insert(bob, addrs); + m + }; + tracing::debug!( + target: LOG_TARGET, + unconnected_authorities = %PrettyAuthorities(unconnected_authorities.iter()), + "Connectivity Report" + ); +} + #[test] fn issues_a_connection_request_when_last_request_was_mostly_unresolved() { let hash = Hash::repeat_byte(0xAA); - let mut state = test_harness(State::default(), |mut virtual_overseer| async move { - let overseer = &mut virtual_overseer; - overseer_signal_active_leaves(overseer, hash).await; - assert_matches!( - overseer_recv(overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::SessionIndexForChild(tx), - )) => { - assert_eq!(relay_parent, hash); - tx.send(Ok(1)).unwrap(); - } - ); - assert_matches!( - overseer_recv(overseer).await, - AllMessages::RuntimeApi(RuntimeApiMessage::Request( - relay_parent, - RuntimeApiRequest::Authorities(tx), - )) => { - assert_eq!(relay_parent, hash); - tx.send(Ok(authorities())).unwrap(); - } - ); - - assert_matches!( - overseer_recv(overseer).await, - AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToValidators { - validator_ids, - peer_set, - failed, - }) => { - assert_eq!(validator_ids, other_authorities()); - assert_eq!(peer_set, PeerSet::Validation); - failed.send(2).unwrap(); - } - ); - - test_neighbors(overseer).await; - - virtual_overseer - }); + let mut state = make_subsystem(); + // There will be two lookup failures: + let alice = Sr25519Keyring::Alice.public().into(); + let bob = Sr25519Keyring::Bob.public().into(); + let alice_addr = state.authority_discovery.addrs.remove(&alice); + state.authority_discovery.addrs.remove(&bob); + + let mut state = { + let alice = alice.clone(); + let bob = bob.clone(); + + test_harness(state, |mut virtual_overseer| async move { + let overseer = &mut virtual_overseer; + overseer_signal_active_leaves(overseer, hash).await; + assert_matches!( + overseer_recv(overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::SessionIndexForChild(tx), + )) => { + assert_eq!(relay_parent, hash); + tx.send(Ok(1)).unwrap(); + } + ); + assert_matches!( + overseer_recv(overseer).await, + AllMessages::RuntimeApi(RuntimeApiMessage::Request( + relay_parent, + RuntimeApiRequest::Authorities(tx), + )) => { + assert_eq!(relay_parent, hash); + tx.send(Ok(AUTHORITIES.clone())).unwrap(); + } + ); + + assert_matches!( + overseer_recv(overseer).await, + AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToResolvedValidators { + mut validator_addrs, + peer_set, + }) => { + let mut expected = get_other_authorities_addrs_map().await; + expected.remove(&alice); + expected.remove(&bob); + let mut expected: Vec> = expected.into_iter().map(|(_,v)| v).collect(); + validator_addrs.sort(); + expected.sort(); + assert_eq!(validator_addrs, expected); + assert_eq!(peer_set, PeerSet::Validation); + } + ); + + test_neighbors(overseer).await; + + virtual_overseer + }) + }; assert_eq!(state.last_session_index, Some(1)); assert!(state.last_failure.is_some()); state.last_failure = state.last_failure.and_then(|i| i.checked_sub(BACKOFF_DURATION)); + // One error less: + state.authority_discovery.addrs.insert(alice, alice_addr.unwrap()); let hash = Hash::repeat_byte(0xBB); let state = test_harness(state, |mut virtual_overseer| async move { @@ -336,20 +435,23 @@ fn issues_a_connection_request_when_last_request_was_mostly_unresolved() { RuntimeApiRequest::Authorities(tx), )) => { assert_eq!(relay_parent, hash); - tx.send(Ok(authorities())).unwrap(); + tx.send(Ok(AUTHORITIES.clone())).unwrap(); } ); assert_matches!( overseer_recv(overseer).await, - AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToValidators { - validator_ids, + AllMessages::NetworkBridge(NetworkBridgeMessage::ConnectToResolvedValidators { + mut validator_addrs, peer_set, - failed, }) => { - assert_eq!(validator_ids, other_authorities()); + let mut expected = get_other_authorities_addrs_map().await; + expected.remove(&bob); + let mut expected: Vec> = expected.into_iter().map(|(_,v)| v).collect(); + expected.sort(); + validator_addrs.sort(); + assert_eq!(validator_addrs, expected); assert_eq!(peer_set, PeerSet::Validation); - failed.send(1).unwrap(); } ); diff --git a/node/network/protocol/src/lib.rs b/node/network/protocol/src/lib.rs index 1ed915f1879d..e0fb2d2849d1 100644 --- a/node/network/protocol/src/lib.rs +++ b/node/network/protocol/src/lib.rs @@ -294,6 +294,8 @@ pub mod v1 { UncheckedSignedFullStatement, }; + use crate::WrongVariant; + /// Network messages used by the bitfield distribution subsystem. #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub enum BitfieldDistributionMessage { @@ -386,6 +388,10 @@ pub mod v1 { Approvals(Vec), } + /// Dummy network message type, so we will receive connect/disconnect events. + #[derive(Debug, Clone, PartialEq, Eq)] + pub enum GossipSuppportNetworkMessage {} + /// Network messages used by the collator protocol subsystem #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub enum CollatorProtocolMessage { @@ -420,6 +426,20 @@ pub mod v1 { impl_try_from!(ValidationProtocol, StatementDistribution, StatementDistributionMessage); impl_try_from!(ValidationProtocol, ApprovalDistribution, ApprovalDistributionMessage); + impl TryFrom for GossipSuppportNetworkMessage { + type Error = WrongVariant; + fn try_from(_: ValidationProtocol) -> Result { + Err(WrongVariant) + } + } + + impl<'a> TryFrom<&'a ValidationProtocol> for &'a GossipSuppportNetworkMessage { + type Error = WrongVariant; + fn try_from(_: &'a ValidationProtocol) -> Result { + Err(WrongVariant) + } + } + /// All network messages on the collation peer-set. #[derive(Debug, Clone, Encode, Decode, PartialEq, Eq)] pub enum CollationProtocol { diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 2fb9ffd359b2..f8e935a7eda8 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -403,7 +403,7 @@ pub struct Overseer { #[subsystem(no_dispatch, ApprovalVotingMessage)] approval_voting: ApprovalVoting, - #[subsystem(no_dispatch, GossipSupportMessage)] + #[subsystem(GossipSupportMessage)] gossip_support: GossipSupport, #[subsystem(no_dispatch, DisputeCoordinatorMessage)] diff --git a/node/service/src/overseer.rs b/node/service/src/overseer.rs index 66156fd18298..1751812babdc 100644 --- a/node/service/src/overseer.rs +++ b/node/service/src/overseer.rs @@ -147,7 +147,7 @@ pub fn create_default_subsystems<'a, Spawner, RuntimeClient>( CollatorProtocolSubsystem, ApprovalDistributionSubsystem, ApprovalVotingSubsystem, - GossipSupportSubsystem, + GossipSupportSubsystem, DisputeCoordinatorSubsystem, DisputeParticipationSubsystem, DisputeDistributionSubsystem, @@ -236,7 +236,10 @@ where Box::new(network_service.clone()), Metrics::register(registry)?, ), - gossip_support: GossipSupportSubsystem::new(keystore.clone()), + gossip_support: GossipSupportSubsystem::new( + keystore.clone(), + authority_discovery_service.clone(), + ), dispute_coordinator: DisputeCoordinatorSubsystem::new( parachains_db.clone(), dispute_coordinator_config, diff --git a/node/subsystem-types/src/messages.rs b/node/subsystem-types/src/messages.rs index 691289614d14..3822591c0fa9 100644 --- a/node/subsystem-types/src/messages.rs +++ b/node/subsystem-types/src/messages.rs @@ -23,6 +23,7 @@ //! Subsystems' APIs are defined separately from their implementation, leading to easier mocking. use futures::channel::oneshot; +use sc_network::Multiaddr; use thiserror::Error; pub use sc_network::IfDisconnected; @@ -345,6 +346,14 @@ pub enum NetworkBridgeMessage { /// authority discovery has failed to resolve. failed: oneshot::Sender, }, + /// Alternative to `ConnectToValidators` in case you already know the `Multiaddrs` you want to be + /// connected to. + ConnectToResolvedValidators { + /// Each entry corresponds to the addresses of an already resolved validator. + validator_addrs: Vec>, + /// The peer set we want the connection on. + peer_set: PeerSet, + }, /// Inform the distribution subsystems about the new /// gossip network topology formed. NewGossipTopology { @@ -365,6 +374,7 @@ impl NetworkBridgeMessage { Self::SendValidationMessages(_) => None, Self::SendCollationMessages(_) => None, Self::ConnectToValidators { .. } => None, + Self::ConnectToResolvedValidators { .. } => None, Self::SendRequests { .. } => None, Self::NewGossipTopology { .. } => None, } @@ -850,5 +860,9 @@ pub enum ApprovalDistributionMessage { } /// Message to the Gossip Support subsystem. -#[derive(Debug)] -pub enum GossipSupportMessage {} +#[derive(Debug, derive_more::From)] +pub enum GossipSupportMessage { + /// Dummy constructor, so we can receive networking events. + #[from] + NetworkBridgeUpdateV1(NetworkBridgeEvent), +} From 2257112c9696a3913345116fe30ab69136fd6d3a Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Mon, 27 Sep 2021 12:16:34 -0500 Subject: [PATCH 29/52] disputes: reject single-sided disputes (#3903) * disputes: reject single-sided disputes * fmt --- runtime/parachains/src/disputes.rs | 942 +++++++++++++++++++++-------- 1 file changed, 703 insertions(+), 239 deletions(-) diff --git a/runtime/parachains/src/disputes.rs b/runtime/parachains/src/disputes.rs index 09c2d147854d..aa7acee6d27d 100644 --- a/runtime/parachains/src/disputes.rs +++ b/runtime/parachains/src/disputes.rs @@ -324,6 +324,8 @@ pub mod pallet { DuplicateStatement, /// Too many spam slots used by some specific validator. PotentialSpam, + /// A dispute where there are only votes on one side. + SingleSidedDispute, } #[pallet::origin] @@ -414,6 +416,13 @@ impl From for Error { } } +#[derive(RuntimeDebug, PartialEq, Eq)] +struct ImportUndo { + validator_index: ValidatorIndex, + valid: bool, + new_participant: bool, +} + struct DisputeStateImporter { state: DisputeState, now: BlockNumber, @@ -429,7 +438,11 @@ impl DisputeStateImporter { DisputeStateImporter { state, now, new_participants, pre_flags } } - fn import(&mut self, validator: ValidatorIndex, valid: bool) -> Result<(), VoteImportError> { + fn import( + &mut self, + validator: ValidatorIndex, + valid: bool, + ) -> Result { let (bits, other_bits) = if valid { (&mut self.state.validators_for, &mut self.state.validators_against) } else { @@ -448,16 +461,31 @@ impl DisputeStateImporter { return Err(VoteImportError::ValidatorIndexOutOfBounds) } + let mut undo = ImportUndo { validator_index: validator, valid, new_participant: false }; + bits.set(validator.0 as usize, true); // New participants tracks those which didn't appear on either // side of the dispute until now. So we check the other side // and checked the first side before. if other_bits.get(validator.0 as usize).map_or(false, |b| !*b) { + undo.new_participant = true; self.new_participants.set(validator.0 as usize, true); } - Ok(()) + Ok(undo) + } + + fn undo(&mut self, undo: ImportUndo) { + if undo.valid { + self.state.validators_for.set(undo.validator_index.0 as usize, false); + } else { + self.state.validators_against.set(undo.validator_index.0 as usize, false); + } + + if undo.new_participant { + self.new_participants.set(undo.validator_index.0 as usize, false); + } } fn finish(mut self) -> ImportSummary { @@ -791,10 +819,13 @@ impl Pallet { let valid = statement.indicates_validity(); - if let Err(_) = importer.import(*validator_index, valid) { - filter.remove_index(i); - continue - } + let undo = match importer.import(*validator_index, valid) { + Ok(u) => u, + Err(_) => { + filter.remove_index(i); + continue + }, + }; // Check signature after attempting import. // @@ -812,6 +843,7 @@ impl Pallet { statement, signature, ) { + importer.undo(undo); filter.remove_index(i); continue } @@ -820,6 +852,13 @@ impl Pallet { importer.finish() }; + // Reject disputes which don't have at least one vote on each side. + if summary.state.validators_for.count_ones() == 0 || + summary.state.validators_against.count_ones() == 0 + { + return StatementSetFilter::RemoveAll + } + // Apply spam slot changes. Bail early if too many occupied. let is_local = >::contains_key(&set.session, &set.candidate_hash); if !is_local { @@ -952,6 +991,13 @@ impl Pallet { importer.finish() }; + // Reject disputes which don't have at least one vote on each side. + ensure!( + summary.state.validators_for.count_ones() > 0 && + summary.state.validators_against.count_ones() > 0, + Error::::SingleSidedDispute, + ); + // Apply spam slot changes. Bail early if too many occupied. let is_local = >::contains_key(&set.session, &set.candidate_hash); if !is_local { @@ -1416,15 +1462,14 @@ mod tests { }; new_test_ext(mock_genesis_config).execute_with(|| { + // We need 6 validators for the byzantine threshold to be 2 let v0 = ::Pair::generate().0; let v1 = ::Pair::generate().0; let v2 = ::Pair::generate().0; let v3 = ::Pair::generate().0; - - // NOTE: v0 index will be 0 - // NOTE: v1 index will be 3 - // NOTE: v2 index will be 2 - // NOTE: v3 index will be 1 + let v4 = ::Pair::generate().0; + let v5 = ::Pair::generate().0; + let v6 = ::Pair::generate().0; run_to_block(start, |b| { // a new session at each block @@ -1436,52 +1481,72 @@ mod tests { (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ], Some(vec![ (&0, v0.public()), (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ]), )) }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); - // v0 votes for 3 + // v0 votes for 3, v6 against. let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: start - 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: start - 1, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: start - 1, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + v2.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: start - 1, + } + .signing_payload(), + ), + ), + ], }]; assert_ok!( Pallet::::provide_multi_dispute_data(stmts), vec![(9, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0])); + assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0, 0, 0, 1])); // Run to timeout period run_to_block(start + dispute_conclusion_by_time_out_period, |_| None); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0])); + assert_eq!(SpamSlots::::get(start - 1), Some(vec![1, 0, 0, 0, 0, 0, 1])); // Run to timeout + 1 in order to executive on_finalize(timeout) run_to_block(start + dispute_conclusion_by_time_out_period + 1, |_| None); - assert_eq!(SpamSlots::::get(start - 1), Some(vec![0, 0, 0, 0])); + assert_eq!(SpamSlots::::get(start - 1), Some(vec![0, 0, 0, 0, 0, 0, 0])); assert_eq!( PUNISH_VALIDATORS_INCONCLUSIVE.with(|r| r.borrow()[0].clone()), - (9, vec![ValidatorIndex(0)]), + (9, vec![ValidatorIndex(0), ValidatorIndex(6)]), ); }); } @@ -1572,7 +1637,12 @@ mod tests { run_to_block(3, |b| { // a new session at each block if b == 1 { - Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) } else { Some((true, b, vec![(&1, v1.public())], Some(vec![(&1, v1.public())]))) } @@ -1582,18 +1652,32 @@ mod tests { let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 1, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 1, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 1, + } + .signing_payload(), + ), + ), + ], }]; assert_ok!( @@ -1630,10 +1714,16 @@ mod tests { fn test_freeze_on_note_included() { new_test_ext(Default::default()).execute_with(|| { let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; run_to_block(6, |b| { // a new session at each block - Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); @@ -1642,18 +1732,44 @@ mod tests { let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 3, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ], }]; assert!(Pallet::::provide_multi_dispute_data(stmts).is_ok()); @@ -1666,35 +1782,66 @@ mod tests { fn test_freeze_provided_against_supermajority_for_included() { new_test_ext(Default::default()).execute_with(|| { let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; run_to_block(6, |b| { // a new session at each block - Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); - Pallet::::note_included(3, candidate_hash.clone(), 3); - // v0 votes for 3 let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 3, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v1.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ], }]; - assert!(Pallet::::provide_multi_dispute_data(stmts).is_ok()); + Pallet::::note_included(3, candidate_hash.clone(), 3); + assert!(Pallet::::provide_multi_dispute_data(stmts).is_ok()); assert_eq!(Frozen::::get(), Some(2)); }); } @@ -1709,15 +1856,22 @@ mod tests { #[test] fn test_provide_multi_dispute_success_and_other() { new_test_ext(Default::default()).execute_with(|| { + // 7 validators needed for byzantine threshold of 2. let v0 = ::Pair::generate().0; let v1 = ::Pair::generate().0; let v2 = ::Pair::generate().0; let v3 = ::Pair::generate().0; - - // NOTE: v0 index will be 0 - // NOTE: v1 index will be 3 - // NOTE: v2 index will be 2 - // NOTE: v3 index will be 1 + let v4 = ::Pair::generate().0; + let v5 = ::Pair::generate().0; + let v6 = ::Pair::generate().0; + + // v0 -> 0 + // v1 -> 3 + // v2 -> 6 + // v3 -> 5 + // v4 -> 1 + // v5 -> 4 + // v6 -> 2 run_to_block(6, |b| { // a new session at each block @@ -1729,59 +1883,93 @@ mod tests { (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ], Some(vec![ (&0, v0.public()), (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ]), )) }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); - // v0 votes for 3 + // v0 votes for 3, v6 votes against let stmts = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 3, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 3, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + v6.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ], }]; assert_ok!( Pallet::::provide_multi_dispute_data(stmts), vec![(3, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(3), Some(vec![1, 0, 0, 0])); + assert_eq!(SpamSlots::::get(3), Some(vec![1, 0, 1, 0, 0, 0, 0])); - // v1 votes for 4 and for 3 + // v1 votes for 4 and for 3, v6 votes against 4. let stmts = vec![ DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 4, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(3), - v1.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 4, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(3), + v1.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 4, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + v6.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 4, + } + .signing_payload(), + ), + ), + ], }, DisputeStatementSet { candidate_hash: candidate_hash.clone(), @@ -1805,17 +1993,17 @@ mod tests { Pallet::::provide_multi_dispute_data(stmts), vec![(4, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0])); // Confirmed as no longer spam - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); + assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); // Confirmed as no longer spam + assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); - // v3 votes against 3 and for 5 + // v3 votes against 3 and for 5, v6 votes against 5. let stmts = vec![ DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 3, statements: vec![( DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(1), + ValidatorIndex(5), v3.sign( &ExplicitDisputeStatement { valid: false, @@ -1829,36 +2017,50 @@ mod tests { DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 5, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(1), - v3.sign( - &ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash.clone(), - session: 5, - } - .signing_payload(), + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(5), + v3.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 5, + } + .signing_payload(), + ), ), - )], + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + v6.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 5, + } + .signing_payload(), + ), + ), + ], }, ]; assert_ok!( Pallet::::provide_multi_dispute_data(stmts), vec![(5, candidate_hash.clone())], ); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 1, 0, 0])); + assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); + assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); + assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 1, 0, 0, 1, 0])); - // v2 votes for 3 and againt 5 + // v2 votes for 3 and against 5 let stmts = vec![ DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 3, statements: vec![( DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(2), + ValidatorIndex(6), v2.sign( &ExplicitDisputeStatement { valid: true, @@ -1874,7 +2076,7 @@ mod tests { session: 5, statements: vec![( DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(2), + ValidatorIndex(6), v2.sign( &ExplicitDisputeStatement { valid: false, @@ -1887,55 +2089,87 @@ mod tests { }, ]; assert_ok!(Pallet::::provide_multi_dispute_data(stmts), vec![]); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 0, 0])); - - // v0 votes for 5 - let stmts = vec![DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 5, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(0), - v0.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 5, - } - .signing_payload(), - ), - )], - }]; - - assert_ok!(Pallet::::provide_multi_dispute_data(stmts), vec![]); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 0, 0])); - - // v1 votes for 5 - let stmts = vec![DisputeStatementSet { - candidate_hash: candidate_hash.clone(), - session: 5, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(3), - v1.sign( - &ExplicitDisputeStatement { - valid: false, - candidate_hash: candidate_hash.clone(), - session: 5, - } - .signing_payload(), - ), - )], - }]; + assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0, 0, 0, 0])); + assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); + assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 0, 0, 0, 0, 0])); + let stmts = vec![ + // 0, 4, and 5 vote against 5 + DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session: 5, + statements: vec![ + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(0), + v0.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 5, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v4.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 5, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(4), + v5.sign( + &ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 5, + } + .signing_payload(), + ), + ), + ], + }, + // 4 and 5 vote for 3 + DisputeStatementSet { + candidate_hash: candidate_hash.clone(), + session: 3, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(1), + v4.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(4), + v5.sign( + &ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash.clone(), + session: 3, + } + .signing_payload(), + ), + ), + ], + }, + ]; assert_ok!(Pallet::::provide_multi_dispute_data(stmts), vec![]); - assert_eq!(SpamSlots::::get(3), Some(vec![0, 0, 0, 0])); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); - assert_eq!(SpamSlots::::get(5), Some(vec![0, 0, 0, 0])); assert_eq!( Pallet::::disputes(), @@ -1944,28 +2178,28 @@ mod tests { 5, candidate_hash.clone(), DisputeState { - validators_for: bitvec![BitOrderLsb0, u8; 0, 1, 0, 0], - validators_against: bitvec![BitOrderLsb0, u8; 1, 0, 1, 1], + validators_for: bitvec![BitOrderLsb0, u8; 0, 0, 0, 0, 0, 1, 0], + validators_against: bitvec![BitOrderLsb0, u8; 1, 1, 1, 0, 1, 0, 1], start: 6, - concluded_at: Some(6), // 3 vote against + concluded_at: Some(6), // 5 vote against } ), ( 3, candidate_hash.clone(), DisputeState { - validators_for: bitvec![BitOrderLsb0, u8; 1, 0, 1, 1], - validators_against: bitvec![BitOrderLsb0, u8; 0, 1, 0, 0], + validators_for: bitvec![BitOrderLsb0, u8; 1, 1, 0, 1, 1, 0, 1], + validators_against: bitvec![BitOrderLsb0, u8; 0, 0, 1, 0, 0, 1, 0], start: 6, - concluded_at: Some(6), // 3 vote for + concluded_at: Some(6), // 5 vote for } ), ( 4, candidate_hash.clone(), DisputeState { - validators_for: bitvec![BitOrderLsb0, u8; 0, 0, 0, 1], - validators_against: bitvec![BitOrderLsb0, u8; 0, 0, 0, 0], + validators_for: bitvec![BitOrderLsb0, u8; 0, 0, 0, 1, 0, 0, 0], + validators_against: bitvec![BitOrderLsb0, u8; 0, 0, 1, 0, 0, 0, 0], start: 6, concluded_at: None, } @@ -1973,28 +2207,28 @@ mod tests { ] ); - assert_eq!(Pallet::::could_be_invalid(3, candidate_hash.clone()), false); // It has 3 votes for + assert_eq!(Pallet::::could_be_invalid(3, candidate_hash.clone()), false); // It has 5 votes for assert_eq!(Pallet::::could_be_invalid(4, candidate_hash.clone()), true); assert_eq!(Pallet::::could_be_invalid(5, candidate_hash.clone()), true); // Ensure inclusion removes spam slots - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 1])); + assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); Pallet::::note_included(4, candidate_hash.clone(), 4); - assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 0])); + assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 0, 0, 0, 0, 0])); // Ensure the reward_validator function was correctly called assert_eq!( REWARD_VALIDATORS.with(|r| r.borrow().clone()), vec![ - (3, vec![ValidatorIndex(0)]), - (4, vec![ValidatorIndex(3)]), + (3, vec![ValidatorIndex(0), ValidatorIndex(2)]), + (4, vec![ValidatorIndex(2), ValidatorIndex(3)]), (3, vec![ValidatorIndex(3)]), - (3, vec![ValidatorIndex(1)]), - (5, vec![ValidatorIndex(1)]), - (3, vec![ValidatorIndex(2)]), - (5, vec![ValidatorIndex(2)]), - (5, vec![ValidatorIndex(0)]), - (5, vec![ValidatorIndex(3)]), + (3, vec![ValidatorIndex(5)]), + (5, vec![ValidatorIndex(2), ValidatorIndex(5)]), + (3, vec![ValidatorIndex(6)]), + (5, vec![ValidatorIndex(6)]), + (5, vec![ValidatorIndex(0), ValidatorIndex(1), ValidatorIndex(4)]), + (3, vec![ValidatorIndex(1), ValidatorIndex(4)]), ], ); @@ -2007,10 +2241,10 @@ mod tests { (3, vec![]), (3, vec![]), (5, vec![]), - (3, vec![ValidatorIndex(1)]), - (5, vec![]), + (3, vec![]), (5, vec![]), (5, vec![]), + (3, vec![ValidatorIndex(2), ValidatorIndex(5)]), ], ); @@ -2025,8 +2259,8 @@ mod tests { (5, vec![]), (3, vec![]), (5, vec![]), - (5, vec![]), - (5, vec![ValidatorIndex(1)]), + (5, vec![ValidatorIndex(5)]), + (3, vec![]), ], ); }) @@ -2538,10 +2772,16 @@ mod tests { fn filter_removes_duplicates_within_set() { new_test_ext(Default::default()).execute_with(|| { let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; run_to_block(3, |b| { // a new session at each block - Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) }); let candidate_hash = CandidateHash(sp_core::H256::repeat_byte(1)); @@ -2553,9 +2793,17 @@ mod tests { } .signing_payload(); + let payload_against = ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash.clone(), + session: 1, + } + .signing_payload(); + let sig_a = v0.sign(&payload); let sig_b = v0.sign(&payload); let sig_c = v0.sign(&payload); + let sig_d = v1.sign(&payload_against); let mut statements = vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), @@ -2576,6 +2824,11 @@ mod tests { ValidatorIndex(0), sig_c, ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + sig_d.clone(), + ), ], }]; @@ -2586,16 +2839,87 @@ mod tests { vec![DisputeStatementSet { candidate_hash: candidate_hash.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_a, - ),] + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_a, + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + sig_d, + ), + ] }] ) }) } + #[test] + fn filter_bad_signatures_correctly_detects_single_sided() { + new_test_ext(Default::default()).execute_with(|| { + let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; + let v2 = ::Pair::generate().0; + let v3 = ::Pair::generate().0; + + run_to_block(3, |b| { + // a new session at each block + Some(( + true, + b, + vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + ], + Some(vec![ + (&0, v0.public()), + (&1, v1.public()), + (&2, v2.public()), + (&3, v3.public()), + ]), + )) + }); + + let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(1)); + + let payload = |c_hash: &CandidateHash, valid| { + ExplicitDisputeStatement { valid, candidate_hash: c_hash.clone(), session: 1 } + .signing_payload() + }; + + let payload_a = payload(&candidate_hash_a, true); + let payload_a_bad = payload(&candidate_hash_a, false); + + let sig_0 = v0.sign(&payload_a); + let sig_1 = v1.sign(&payload_a_bad); + + let mut statements = vec![DisputeStatementSet { + candidate_hash: candidate_hash_a.clone(), + session: 1, + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_0.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(2), + sig_1.clone(), + ), + ], + }]; + + Pallet::::filter_multi_dispute_data(&mut statements); + + assert!(statements.is_empty()); + }) + } + #[test] fn filter_correctly_accounts_spam_slots() { let dispute_max_spam_slots = 2; @@ -2609,10 +2933,14 @@ mod tests { }; new_test_ext(mock_genesis_config).execute_with(|| { + // We need 7 validators for the byzantine threshold to be 2 let v0 = ::Pair::generate().0; let v1 = ::Pair::generate().0; let v2 = ::Pair::generate().0; let v3 = ::Pair::generate().0; + let v4 = ::Pair::generate().0; + let v5 = ::Pair::generate().0; + let v6 = ::Pair::generate().0; run_to_block(3, |b| { // a new session at each block @@ -2624,12 +2952,18 @@ mod tests { (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ], Some(vec![ (&0, v0.public()), (&1, v1.public()), (&2, v2.public()), (&3, v3.public()), + (&4, v4.public()), + (&5, v5.public()), + (&6, v6.public()), ]), )) }); @@ -2638,26 +2972,18 @@ mod tests { let candidate_hash_b = CandidateHash(sp_core::H256::repeat_byte(2)); let candidate_hash_c = CandidateHash(sp_core::H256::repeat_byte(3)); - let payload_a = ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash_a.clone(), - session: 1, - } - .signing_payload(); + let payload = |c_hash: &CandidateHash, valid| { + ExplicitDisputeStatement { valid, candidate_hash: c_hash.clone(), session: 1 } + .signing_payload() + }; - let payload_b = ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash_b.clone(), - session: 1, - } - .signing_payload(); + let payload_a = payload(&candidate_hash_a, true); + let payload_b = payload(&candidate_hash_b, true); + let payload_c = payload(&candidate_hash_c, true); - let payload_c = ExplicitDisputeStatement { - valid: true, - candidate_hash: candidate_hash_c.clone(), - session: 1, - } - .signing_payload(); + let payload_a_bad = payload(&candidate_hash_a, false); + let payload_b_bad = payload(&candidate_hash_b, false); + let payload_c_bad = payload(&candidate_hash_c, false); let sig_0a = v0.sign(&payload_a); let sig_0b = v0.sign(&payload_b); @@ -2665,16 +2991,29 @@ mod tests { let sig_1b = v1.sign(&payload_b); + let sig_2a = v2.sign(&payload_a_bad); + let sig_2b = v2.sign(&payload_b_bad); + let sig_2c = v2.sign(&payload_c_bad); + let mut statements = vec![ + // validators 0 and 2 get 1 spam slot from this. DisputeStatementSet { candidate_hash: candidate_hash_a.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_0a.clone(), - )], + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_0a.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + sig_2a.clone(), + ), + ], }, + // Validators 0, 2, and 3 get no spam slots for this DisputeStatementSet { candidate_hash: candidate_hash_b.clone(), session: 1, @@ -2689,16 +3028,29 @@ mod tests { ValidatorIndex(3), sig_1b.clone(), ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + sig_2b.clone(), + ), ], }, + // Validators 0 and 2 get an extra spam slot for this. DisputeStatementSet { candidate_hash: candidate_hash_c.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_0c.clone(), - )], + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_0c.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(6), + sig_2c.clone(), + ), + ], }, ]; @@ -2777,7 +3129,7 @@ mod tests { &candidate_hash_a, DisputeState { validators_for: bitvec![BitOrderLsb0, u8; 0; 4], - validators_against: bitvec![BitOrderLsb0, u8; 0; 4], + validators_against: bitvec![BitOrderLsb0, u8; 1; 4], start: 0, concluded_at: Some(0), }, @@ -2788,7 +3140,7 @@ mod tests { &candidate_hash_b, DisputeState { validators_for: bitvec![BitOrderLsb0, u8; 0; 4], - validators_against: bitvec![BitOrderLsb0, u8; 0; 4], + validators_against: bitvec![BitOrderLsb0, u8; 1; 4], start: 0, concluded_at: Some(1), }, @@ -2853,10 +3205,16 @@ mod tests { fn filter_removes_duplicate_statements_sets() { new_test_ext(Default::default()).execute_with(|| { let v0 = ::Pair::generate().0; + let v1 = ::Pair::generate().0; run_to_block(3, |b| { // a new session at each block - Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + Some(( + true, + b, + vec![(&0, v0.public()), (&1, v1.public())], + Some(vec![(&0, v0.public()), (&1, v1.public())]), + )) }); let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(1)); @@ -2868,27 +3226,51 @@ mod tests { } .signing_payload(); + let payload_against = ExplicitDisputeStatement { + valid: false, + candidate_hash: candidate_hash_a.clone(), + session: 1, + } + .signing_payload(); + let sig_a = v0.sign(&payload); + let sig_a_against = v1.sign(&payload_against); + let sig_b = v0.sign(&payload); + let sig_b_against = v1.sign(&payload_against); let mut statements = vec![ DisputeStatementSet { candidate_hash: candidate_hash_a.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_a.clone(), - )], + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_a.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + sig_a_against.clone(), + ), + ], }, DisputeStatementSet { candidate_hash: candidate_hash_a.clone(), session: 1, - statements: vec![( - DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_b.clone(), - )], + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_b.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + sig_b_against.clone(), + ), + ], }, ]; @@ -2899,13 +3281,95 @@ mod tests { vec![DisputeStatementSet { candidate_hash: candidate_hash_a.clone(), session: 1, - statements: vec![( - DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), - ValidatorIndex(0), - sig_a, - ),] + statements: vec![ + ( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_a.clone(), + ), + ( + DisputeStatement::Invalid(InvalidDisputeStatementKind::Explicit), + ValidatorIndex(1), + sig_a_against.clone(), + ), + ], }] ); }) } + + #[test] + fn filter_ignores_single_sided() { + new_test_ext(Default::default()).execute_with(|| { + let v0 = ::Pair::generate().0; + + run_to_block(3, |b| { + // a new session at each block + Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + }); + + let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(1)); + + let payload = ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash_a.clone(), + session: 1, + } + .signing_payload(); + + let sig_a = v0.sign(&payload); + + let mut statements = vec![DisputeStatementSet { + candidate_hash: candidate_hash_a.clone(), + session: 1, + statements: vec![( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_a.clone(), + )], + }]; + + Pallet::::filter_multi_dispute_data(&mut statements); + + assert!(statements.is_empty()); + }) + } + + #[test] + fn import_ignores_single_sided() { + new_test_ext(Default::default()).execute_with(|| { + let v0 = ::Pair::generate().0; + + run_to_block(3, |b| { + // a new session at each block + Some((true, b, vec![(&0, v0.public())], Some(vec![(&0, v0.public())]))) + }); + + let candidate_hash_a = CandidateHash(sp_core::H256::repeat_byte(1)); + + let payload = ExplicitDisputeStatement { + valid: true, + candidate_hash: candidate_hash_a.clone(), + session: 1, + } + .signing_payload(); + + let sig_a = v0.sign(&payload); + + let statements = vec![DisputeStatementSet { + candidate_hash: candidate_hash_a.clone(), + session: 1, + statements: vec![( + DisputeStatement::Valid(ValidDisputeStatementKind::Explicit), + ValidatorIndex(0), + sig_a.clone(), + )], + }]; + + assert_err!( + Pallet::::provide_multi_dispute_data(statements), + DispatchError::from(Error::::SingleSidedDispute), + ); + }) + } } From 1d05f779b25e01a1d54dbf98a82662d12a8320f9 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Mon, 27 Sep 2021 20:18:59 +0200 Subject: [PATCH 30/52] minor chore changes (#3944) * chore: mild refactor, avoid the channel in handle_import_statements * chore/md: lint --- node/core/dispute-coordinator/src/real/mod.rs | 37 +++++-------------- .../test-parachains/adder/collator/README.md | 2 + 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/node/core/dispute-coordinator/src/real/mod.rs b/node/core/dispute-coordinator/src/real/mod.rs index b321d67022ff..7dd072017920 100644 --- a/node/core/dispute-coordinator/src/real/mod.rs +++ b/node/core/dispute-coordinator/src/real/mod.rs @@ -537,7 +537,7 @@ async fn handle_incoming( statements, pending_confirmation, } => { - handle_import_statements( + let outcome = handle_import_statements( ctx, overlay_db, state, @@ -546,10 +546,10 @@ async fn handle_incoming( session, statements, now, - pending_confirmation, metrics, ) .await?; + pending_confirmation.send(outcome).map_err(|_| Error::OneshotSend)?; }, DisputeCoordinatorMessage::RecentDisputes(rx) => { let recent_disputes = overlay_db.load_recent_disputes()?.unwrap_or_default(); @@ -648,14 +648,10 @@ async fn handle_import_statements( now: Timestamp, pending_confirmation: oneshot::Sender, metrics: &Metrics, -) -> Result<(), Error> { +) -> Result { if state.highest_session.map_or(true, |h| session + DISPUTE_WINDOW < h) { // It is not valid to participate in an ancient dispute (spam?). - pending_confirmation - .send(ImportStatementsResult::InvalidImport) - .map_err(|_| Error::OneshotSend)?; - - return Ok(()) + return Ok(ImportStatementsResult::InvalidImport) } let validators = match state.rolling_session_window.session_info(session) { @@ -666,11 +662,7 @@ async fn handle_import_statements( "Missing info for session which has an active dispute", ); - pending_confirmation - .send(ImportStatementsResult::InvalidImport) - .map_err(|_| Error::OneshotSend)?; - - return Ok(()) + return Ok(ImportStatementsResult::InvalidImport) }, Some(info) => info.validators.clone(), }; @@ -795,15 +787,12 @@ async fn handle_import_statements( // // We expect that if the candidate is truly disputed that the higher-level network // code will retry. - pending_confirmation - .send(ImportStatementsResult::InvalidImport) - .map_err(|_| Error::OneshotSend)?; tracing::debug!( target: LOG_TARGET, "Recovering availability failed - invalid import." ); - return Ok(()) + return Ok(ImportStatementsResult::InvalidImport) } metrics.on_open(); @@ -821,11 +810,7 @@ async fn handle_import_statements( overlay_db.write_candidate_votes(session, candidate_hash, votes.into()); - pending_confirmation - .send(ImportStatementsResult::ValidImport) - .map_err(|_| Error::OneshotSend)?; - - Ok(()) + Ok(ImportStatementsResult::ValidImport) } fn find_controlled_validator_indices( @@ -932,8 +917,7 @@ async fn issue_local_statement( // Do import if !statements.is_empty() { - let (pending_confirmation, rx) = oneshot::channel(); - handle_import_statements( + match handle_import_statements( ctx, overlay_db, state, @@ -942,11 +926,10 @@ async fn issue_local_statement( session, statements, now, - pending_confirmation, metrics, ) - .await?; - match rx.await { + .await? + { Err(_) => { tracing::error!( target: LOG_TARGET, diff --git a/parachain/test-parachains/adder/collator/README.md b/parachain/test-parachains/adder/collator/README.md index be5922b9f95a..4347a9a8ced7 100644 --- a/parachain/test-parachains/adder/collator/README.md +++ b/parachain/test-parachains/adder/collator/README.md @@ -1,12 +1,14 @@ # How to run this collator First start two validators that will run for the relay chain: + ```sh cargo run --release -- -d alice --chain rococo-local --validator --alice --port 50551 cargo run --release -- -d bob --chain rococo-local --validator --bob --port 50552 ``` Next start the collator that will collate for the adder parachain: + ```sh cargo run --release -p test-parachain-adder-collator -- --tmp --chain rococo-local --port 50553 ``` From 211a4fca39bf65636c69f31efe58d0226434284d Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Mon, 27 Sep 2021 21:55:19 -0700 Subject: [PATCH 31/52] Add benchmarking for parachain runtime initializer pallet (#3913) * Add benchmarking for parachain runtime initializer pallet * Fix default impl for initializer pallet WeightInfo * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::initializer --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_initializer.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::initializer --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_initializer.rs * Use real weights and use max_block as default weight * Add variable for digest vec length for initializer benchmark * Fix compilation errors * Add WeightInfo to parachains_initializer config in polkadot runtime * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=westend-dev --steps=50 --repeat=20 --pallet=runtime_parachains::initializer --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/westend/src/weights/runtime_parachains_initializer.rs * cargo run --quiet --release --features=runtime-benchmarks -- benchmark --chain=kusama-dev --steps=50 --repeat=20 --pallet=runtime_parachains::initializer --extrinsic=* --execution=wasm --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/kusama/src/weights/runtime_parachains_initializer.rs * Appease spellchecker * Use kusama weights in polkadot runtime for parachain initializer pallet Co-authored-by: Parity Bot --- runtime/kusama/src/lib.rs | 3 + runtime/kusama/src/weights/mod.rs | 1 + .../weights/runtime_parachains_initializer.rs | 55 +++++++++++++++++++ runtime/parachains/src/initializer.rs | 28 +++++++++- .../src/initializer/benchmarking.rs | 44 +++++++++++++++ runtime/parachains/src/mock.rs | 1 + runtime/polkadot/src/lib.rs | 1 + runtime/polkadot/src/weights/mod.rs | 1 + .../weights/runtime_parachains_initializer.rs | 55 +++++++++++++++++++ runtime/rococo/src/lib.rs | 1 + runtime/test-runtime/src/lib.rs | 1 + runtime/westend/src/lib.rs | 5 +- runtime/westend/src/weights/mod.rs | 1 + .../weights/runtime_parachains_initializer.rs | 55 +++++++++++++++++++ 14 files changed, 249 insertions(+), 3 deletions(-) create mode 100644 runtime/kusama/src/weights/runtime_parachains_initializer.rs create mode 100644 runtime/parachains/src/initializer/benchmarking.rs create mode 100644 runtime/polkadot/src/weights/runtime_parachains_initializer.rs create mode 100644 runtime/westend/src/weights/runtime_parachains_initializer.rs diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index c2fa01f66f36..fbe3d45f93f5 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -1181,6 +1181,7 @@ impl parachains_scheduler::Config for Runtime {} impl parachains_initializer::Config for Runtime { type Randomness = pallet_babe::RandomnessFromOneEpochAgo; type ForceOrigin = EnsureRoot; + type WeightInfo = weights::runtime_parachains_initializer::WeightInfo; } parameter_types! { @@ -2054,6 +2055,7 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, runtime_common::slots, Slots); list_benchmark!(list, extra, runtime_common::paras_registrar, Registrar); list_benchmark!(list, extra, runtime_parachains::configuration, Configuration); + list_benchmark!(list, extra, runtime_parachains::initializer, Initializer); list_benchmark!(list, extra, runtime_parachains::paras, Paras); // Substrate list_benchmark!(list, extra, pallet_bags_list, BagsList); @@ -2130,6 +2132,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, runtime_common::slots, Slots); add_benchmark!(params, batches, runtime_common::paras_registrar, Registrar); add_benchmark!(params, batches, runtime_parachains::configuration, Configuration); + add_benchmark!(params, batches, runtime_parachains::initializer, Initializer); add_benchmark!(params, batches, runtime_parachains::paras, Paras); // Substrate add_benchmark!(params, batches, pallet_balances, Balances); diff --git a/runtime/kusama/src/weights/mod.rs b/runtime/kusama/src/weights/mod.rs index 0b944e458a90..ea8c2fc7f58d 100644 --- a/runtime/kusama/src/weights/mod.rs +++ b/runtime/kusama/src/weights/mod.rs @@ -45,4 +45,5 @@ pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; +pub mod runtime_parachains_initializer; pub mod runtime_parachains_paras; diff --git a/runtime/kusama/src/weights/runtime_parachains_initializer.rs b/runtime/kusama/src/weights/runtime_parachains_initializer.rs new file mode 100644 index 000000000000..6b41892d3e45 --- /dev/null +++ b/runtime/kusama/src/weights/runtime_parachains_initializer.rs @@ -0,0 +1,55 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::initializer` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::initializer +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_parachains_initializer.rs + + +#![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 `runtime_parachains::initializer`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::initializer::WeightInfo for WeightInfo { + // Storage: System Digest (r:1 w:1) + fn force_approve(d: u32, ) -> Weight { + (5_156_000 as Weight) + // Standard Error: 0 + .saturating_add((2_000 as Weight).saturating_mul(d as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/parachains/src/initializer.rs b/runtime/parachains/src/initializer.rs index 6958d754c462..ebaa68b46ba5 100644 --- a/runtime/parachains/src/initializer.rs +++ b/runtime/parachains/src/initializer.rs @@ -24,12 +24,19 @@ use crate::{ disputes::DisputesHandler, dmp, hrmp, inclusion, paras, scheduler, session_info, shared, ump, }; -use frame_support::traits::{OneSessionHandler, Randomness}; +use frame_support::{ + traits::{OneSessionHandler, Randomness}, + weights::Weight, +}; +use frame_system::limits::BlockWeights; use parity_scale_codec::{Decode, Encode}; use primitives::v1::{BlockNumber, ConsensusLog, SessionIndex, ValidatorId}; use scale_info::TypeInfo; use sp_std::prelude::*; +#[cfg(feature = "runtime-benchmarks")] +mod benchmarking; + pub use pallet::*; /// Information about a session change that has just occurred. @@ -69,6 +76,16 @@ struct BufferedSessionChange { session_index: SessionIndex, } +pub trait WeightInfo { + fn force_approve(d: u32) -> Weight; +} + +impl WeightInfo for () { + fn force_approve(_: u32) -> Weight { + BlockWeights::default().max_block + } +} + #[frame_support::pallet] pub mod pallet { use super::*; @@ -96,6 +113,8 @@ pub mod pallet { type Randomness: Randomness; /// An origin which is allowed to force updates to parachains. type ForceOrigin: EnsureOrigin<::Origin>; + /// Weight information for extrinsics in this pallet. + type WeightInfo: WeightInfo; } /// Whether the parachains modules have been initialized within this block. @@ -181,7 +200,12 @@ pub mod pallet { /// Issue a signal to the consensus engine to forcibly act as though all parachain /// blocks in all relay chain blocks up to and including the given number in the current /// chain are valid and should be finalized. - #[pallet::weight((0, DispatchClass::Operational))] + #[pallet::weight(( + ::WeightInfo::force_approve( + frame_system::Pallet::::digest().logs.len() as u32, + ), + DispatchClass::Operational, + ))] pub fn force_approve(origin: OriginFor, up_to: BlockNumber) -> DispatchResult { T::ForceOrigin::ensure_origin(origin)?; diff --git a/runtime/parachains/src/initializer/benchmarking.rs b/runtime/parachains/src/initializer/benchmarking.rs new file mode 100644 index 000000000000..d73c427f133d --- /dev/null +++ b/runtime/parachains/src/initializer/benchmarking.rs @@ -0,0 +1,44 @@ +// Copyright 2021 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use super::*; +use frame_benchmarking::{benchmarks, impl_benchmark_test_suite}; +use frame_system::{DigestItemOf, RawOrigin}; +use primitives::v1::ConsensusLog; + +// Random large number for the digest +const DIGEST_MAX_LEN: u32 = 65536; + +benchmarks! { + force_approve { + let d in 0 .. DIGEST_MAX_LEN; + for _ in 0 .. d { + >::deposit_log(ConsensusLog::ForceApprove(d).into()); + } + }: _(RawOrigin::Root, d + 1) + verify { + assert_eq!( + >::digest().logs.last().unwrap(), + &>::from(ConsensusLog::ForceApprove(d + 1)), + ); + } +} + +impl_benchmark_test_suite!( + Pallet, + crate::mock::new_test_ext(Default::default()), + crate::mock::Test +); diff --git a/runtime/parachains/src/mock.rs b/runtime/parachains/src/mock.rs index 1ccf57ea357a..9e646dbbc1ca 100644 --- a/runtime/parachains/src/mock.rs +++ b/runtime/parachains/src/mock.rs @@ -112,6 +112,7 @@ impl pallet_balances::Config for Test { impl crate::initializer::Config for Test { type Randomness = TestRandomness; type ForceOrigin = frame_system::EnsureRoot; + type WeightInfo = (); } impl crate::configuration::Config for Test { diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index dccd33ebb8ad..62f0a8287b2a 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -1146,6 +1146,7 @@ impl parachains_scheduler::Config for Runtime {} impl parachains_initializer::Config for Runtime { type Randomness = pallet_babe::RandomnessFromOneEpochAgo; type ForceOrigin = EnsureRoot; + type WeightInfo = weights::runtime_parachains_initializer::WeightInfo; } parameter_types! { diff --git a/runtime/polkadot/src/weights/mod.rs b/runtime/polkadot/src/weights/mod.rs index 3dcd0edaac38..19842799a533 100644 --- a/runtime/polkadot/src/weights/mod.rs +++ b/runtime/polkadot/src/weights/mod.rs @@ -43,4 +43,5 @@ pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; +pub mod runtime_parachains_initializer; pub mod runtime_parachains_paras; diff --git a/runtime/polkadot/src/weights/runtime_parachains_initializer.rs b/runtime/polkadot/src/weights/runtime_parachains_initializer.rs new file mode 100644 index 000000000000..6b41892d3e45 --- /dev/null +++ b/runtime/polkadot/src/weights/runtime_parachains_initializer.rs @@ -0,0 +1,55 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::initializer` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("kusama-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=kusama-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::initializer +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/kusama/src/weights/runtime_parachains_initializer.rs + + +#![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 `runtime_parachains::initializer`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::initializer::WeightInfo for WeightInfo { + // Storage: System Digest (r:1 w:1) + fn force_approve(d: u32, ) -> Weight { + (5_156_000 as Weight) + // Standard Error: 0 + .saturating_add((2_000 as Weight).saturating_mul(d as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} diff --git a/runtime/rococo/src/lib.rs b/runtime/rococo/src/lib.rs index 99a8b33a7b51..8033a2d580d2 100644 --- a/runtime/rococo/src/lib.rs +++ b/runtime/rococo/src/lib.rs @@ -753,6 +753,7 @@ impl parachains_scheduler::Config for Runtime {} impl parachains_initializer::Config for Runtime { type Randomness = pallet_babe::RandomnessFromOneEpochAgo; type ForceOrigin = EnsureRoot; + type WeightInfo = (); } impl paras_sudo_wrapper::Config for Runtime {} diff --git a/runtime/test-runtime/src/lib.rs b/runtime/test-runtime/src/lib.rs index 09da961b2169..842f451c40ed 100644 --- a/runtime/test-runtime/src/lib.rs +++ b/runtime/test-runtime/src/lib.rs @@ -480,6 +480,7 @@ impl parachains_paras_inherent::Config for Runtime {} impl parachains_initializer::Config for Runtime { type Randomness = pallet_babe::RandomnessFromOneEpochAgo; type ForceOrigin = frame_system::EnsureRoot; + type WeightInfo = (); } impl parachains_session_info::Config for Runtime {} diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index e237a473c2ac..fb72eb5f5693 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -805,7 +805,7 @@ impl pallet_proxy::Config for Runtime { impl parachains_origin::Config for Runtime {} impl parachains_configuration::Config for Runtime { - type WeightInfo = parachains_configuration::weights::WeightInfo; + type WeightInfo = weights::runtime_parachains_configuration::WeightInfo; } impl parachains_shared::Config for Runtime {} @@ -850,6 +850,7 @@ impl parachains_scheduler::Config for Runtime {} impl parachains_initializer::Config for Runtime { type Randomness = pallet_babe::RandomnessFromOneEpochAgo; type ForceOrigin = EnsureRoot; + type WeightInfo = weights::runtime_parachains_initializer::WeightInfo; } impl paras_sudo_wrapper::Config for Runtime {} @@ -1477,6 +1478,7 @@ sp_api::impl_runtime_apis! { list_benchmark!(list, extra, runtime_common::paras_registrar, Registrar); list_benchmark!(list, extra, runtime_common::slots, Slots); list_benchmark!(list, extra, runtime_parachains::configuration, Configuration); + list_benchmark!(list, extra, runtime_parachains::initializer, Initializer); list_benchmark!(list, extra, runtime_parachains::paras, Paras); // Substrate @@ -1588,6 +1590,7 @@ sp_api::impl_runtime_apis! { add_benchmark!(params, batches, runtime_common::paras_registrar, Registrar); add_benchmark!(params, batches, runtime_common::slots, Slots); add_benchmark!(params, batches, runtime_parachains::configuration, Configuration); + add_benchmark!(params, batches, runtime_parachains::initializer, Initializer); add_benchmark!(params, batches, runtime_parachains::paras, Paras); // Substrate diff --git a/runtime/westend/src/weights/mod.rs b/runtime/westend/src/weights/mod.rs index afca6434f826..923245b2fc35 100644 --- a/runtime/westend/src/weights/mod.rs +++ b/runtime/westend/src/weights/mod.rs @@ -35,5 +35,6 @@ pub mod runtime_common_crowdloan; pub mod runtime_common_paras_registrar; pub mod runtime_common_slots; pub mod runtime_parachains_configuration; +pub mod runtime_parachains_initializer; pub mod runtime_parachains_paras; pub mod xcm; diff --git a/runtime/westend/src/weights/runtime_parachains_initializer.rs b/runtime/westend/src/weights/runtime_parachains_initializer.rs new file mode 100644 index 000000000000..9877d23b93fa --- /dev/null +++ b/runtime/westend/src/weights/runtime_parachains_initializer.rs @@ -0,0 +1,55 @@ +// Copyright 2017-2021 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 . +//! Autogenerated weights for `runtime_parachains::initializer` +//! +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev +//! DATE: 2021-09-25, STEPS: `50`, REPEAT: 20, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("westend-dev"), DB CACHE: 128 + +// Executed Command: +// target/release/polkadot +// benchmark +// --chain=westend-dev +// --steps=50 +// --repeat=20 +// --pallet=runtime_parachains::initializer +// --extrinsic=* +// --execution=wasm +// --wasm-execution=compiled +// --heap-pages=4096 +// --header=./file_header.txt +// --output=./runtime/westend/src/weights/runtime_parachains_initializer.rs + + +#![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 `runtime_parachains::initializer`. +pub struct WeightInfo(PhantomData); +impl runtime_parachains::initializer::WeightInfo for WeightInfo { + // Storage: System Digest (r:1 w:1) + fn force_approve(d: u32, ) -> Weight { + (6_607_000 as Weight) + // Standard Error: 0 + .saturating_add((1_000 as Weight).saturating_mul(d as Weight)) + .saturating_add(T::DbWeight::get().reads(1 as Weight)) + .saturating_add(T::DbWeight::get().writes(1 as Weight)) + } +} From fdf3dfde1d5f092dc79c50d5615b3cf72a5ecb3a Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Tue, 28 Sep 2021 03:43:55 -0500 Subject: [PATCH 32/52] fix flaky chain-selection tests (#3948) --- node/core/chain-selection/src/tests.rs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/node/core/chain-selection/src/tests.rs b/node/core/chain-selection/src/tests.rs index c7d204df83b4..396e11520733 100644 --- a/node/core/chain-selection/src/tests.rs +++ b/node/core/chain-selection/src/tests.rs @@ -164,6 +164,13 @@ impl Backend for TestBackend { where I: IntoIterator, { + let ops: Vec<_> = ops.into_iter().collect(); + + // Early return if empty because empty writes shouldn't + // trigger wakeups (they happen on an interval) + if ops.is_empty() { + return Ok(()) + } let mut inner = self.inner.lock(); for op in ops { @@ -521,13 +528,13 @@ async fn finalize_block( block_number: BlockNumber, block_hash: Hash, ) { - let (_, write_tx) = backend.await_next_write(); + let (_, write_rx) = backend.await_next_write(); virtual_overseer .send(OverseerSignal::BlockFinalized(block_hash, block_number).into()) .await; - write_tx.await.unwrap(); + write_rx.await.unwrap(); } fn extract_info_from_chain( @@ -1701,9 +1708,11 @@ fn approve_nonexistent_has_no_effect() { .await; let nonexistent = Hash::repeat_byte(1); - approve_block(&mut virtual_overseer, &backend, nonexistent).await; + virtual_overseer + .send(FromOverseer::Communication { msg: ChainSelectionMessage::Approved(nonexistent) }) + .await; - // a3 is approved, but not a1 or a2. + // None are approved. assert_matches!( backend.load_block_entry(&a3_hash).unwrap().unwrap().viability.approval, Approval::Unapproved From e80340c0cd70fa023718b49b97ae3f353af9d350 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Tue, 28 Sep 2021 15:01:04 +0200 Subject: [PATCH 33/52] remove connected disconnected state, 3rd attempt (#3898) * overseer: remove mut in connector * rename SelectRelayChainWFallback -> SelectRelayChain * split Basics * introduce the OverseerConnector, use it * introduce is_relay_chain to RelayChainSelection * chore: rename var * avoid dummy import in subsystem * actually remove Disconnecte/Connected enum * extract DummySubsystem into mod dummy. * Handle::Connected -> Handle::new * chore: fmt * fix test * select relay chain takes no arg, simplification * fmt * Update node/service/src/lib.rs Co-authored-by: Andronik Ordian * chore: improve malus tests * avoid the deferred setting of `is_relay_chain` in `RelayChainSelection` * positive assertion is not mandated, only the negative one, to avoid a stall * chore: fmt * assure the `RelayChainSelection` is not used before the overseer is up and running Co-authored-by: Andronik Ordian --- Cargo.lock | 1 + doc/testing.md | 3 +- node/malus/src/tests.rs | 94 ++++-- node/malus/src/variant-a.rs | 5 +- node/overseer/examples/minimal-example.rs | 14 +- .../proc-macro/src/impl_builder.rs | 6 +- node/overseer/src/dummy.rs | 54 ++++ node/overseer/src/lib.rs | 93 ++---- node/overseer/src/metrics.rs | 4 +- node/overseer/src/subsystems.rs | 42 +-- node/overseer/src/tests.rs | 74 +++-- node/service/Cargo.toml | 1 + node/service/src/lib.rs | 293 +++++++++++------- node/service/src/overseer.rs | 195 +++++++++++- node/service/src/relay_chain_selection.rs | 80 +++-- node/service/src/tests.rs | 2 +- node/subsystem-test-helpers/src/lib.rs | 7 +- node/subsystem/src/lib.rs | 4 +- 18 files changed, 641 insertions(+), 331 deletions(-) create mode 100644 node/overseer/src/dummy.rs diff --git a/Cargo.lock b/Cargo.lock index 6d3227cc50f4..02c0804b7741 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6884,6 +6884,7 @@ dependencies = [ "kvdb", "kvdb-rocksdb", "log", + "lru", "pallet-babe", "pallet-im-online", "pallet-mmr-primitives", diff --git a/doc/testing.md b/doc/testing.md index 8230ea352c0f..6709d1b9bdeb 100644 --- a/doc/testing.md +++ b/doc/testing.md @@ -185,6 +185,7 @@ struct BehaveMaleficient; impl OverseerGen for BehaveMaleficient { fn generate<'a, Spawner, RuntimeClient>( &self, + connector: OverseerConnector, args: OverseerGenArgs<'a, Spawner, RuntimeClient>, ) -> Result<(Overseer>, OverseerHandler), Error> where @@ -213,7 +214,7 @@ impl OverseerGen for BehaveMaleficient { ), ); - Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner) + Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner, connector) .map_err(|e| e.into()) // A builder pattern will simplify this further diff --git a/node/malus/src/tests.rs b/node/malus/src/tests.rs index 00c39dd7b2b5..57072336852b 100644 --- a/node/malus/src/tests.rs +++ b/node/malus/src/tests.rs @@ -20,8 +20,8 @@ use polkadot_node_subsystem_test_helpers::*; use polkadot_node_subsystem::{ messages::{AllMessages, AvailabilityStoreMessage}, - overseer::{gen::TimeoutExt, Subsystem}, - DummySubsystem, + overseer::{dummy::DummySubsystem, gen::TimeoutExt, Subsystem}, + SubsystemError, }; #[derive(Clone, Debug)] @@ -48,34 +48,38 @@ where } } +#[derive(Clone, Debug)] +struct PassInterceptor; + +impl MessageInterceptor for PassInterceptor +where + Sender: overseer::SubsystemSender + + overseer::SubsystemSender + + Clone + + 'static, +{ + type Message = AvailabilityStoreMessage; +} + async fn overseer_send>(overseer: &mut TestSubsystemContextHandle, msg: T) { overseer.send(FromOverseer::Communication { msg }).await; } -#[test] -fn integrity_test() { +fn launch_harness(test_gen: G) +where + F: Future> + Send, + M: Into + std::fmt::Debug + Send + 'static, + AllMessages: From, + Sub: Subsystem, SubsystemError>, + G: Fn(TestSubsystemContextHandle) -> (F, Sub), +{ let pool = sp_core::testing::TaskExecutor::new(); - let (context, mut overseer) = make_subsystem_context(pool); - - let sub = DummySubsystem; - - let sub_intercepted = InterceptedSubsystem::new(sub, BlackHoleInterceptor); + let (context, overseer) = make_subsystem_context(pool); - // Try to send a message we know is going to be filtered. - let test_fut = async move { - let (tx, rx) = futures::channel::oneshot::channel(); - overseer_send( - &mut overseer, - AvailabilityStoreMessage::QueryChunk(Default::default(), 0.into(), tx), - ) - .await; - let _ = rx.timeout(std::time::Duration::from_millis(100)).await.unwrap(); - overseer - }; + let (test_fut, subsystem) = test_gen(overseer); let subsystem = async move { - sub_intercepted.start(context).future.await.unwrap(); + subsystem.start(context).future.await.unwrap(); }; - futures::pin_mut!(test_fut); futures::pin_mut!(subsystem); @@ -88,3 +92,49 @@ fn integrity_test() { )) .1; } + +#[test] +fn integrity_test_intercept() { + launch_harness(|mut overseer| { + let sub = DummySubsystem; + + let sub_intercepted = InterceptedSubsystem::new(sub, BlackHoleInterceptor); + + ( + async move { + let (tx, rx) = futures::channel::oneshot::channel(); + overseer_send( + &mut overseer, + AvailabilityStoreMessage::QueryChunk(Default::default(), 0.into(), tx), + ) + .await; + let _ = rx.timeout(std::time::Duration::from_millis(100)).await.unwrap(); + overseer + }, + sub_intercepted, + ) + }) +} + +#[test] +fn integrity_test_pass() { + launch_harness(|mut overseer| { + let sub = DummySubsystem; + + let sub_intercepted = InterceptedSubsystem::new(sub, PassInterceptor); + + ( + async move { + let (tx, rx) = futures::channel::oneshot::channel(); + overseer_send( + &mut overseer, + AvailabilityStoreMessage::QueryChunk(Default::default(), 0.into(), tx), + ) + .await; + let _ = rx.timeout(std::time::Duration::from_millis(100)).await.unwrap(); + overseer + }, + sub_intercepted, + ) + }) +} diff --git a/node/malus/src/variant-a.rs b/node/malus/src/variant-a.rs index a545bd360faf..8abdf75198b3 100644 --- a/node/malus/src/variant-a.rs +++ b/node/malus/src/variant-a.rs @@ -37,7 +37,7 @@ use polkadot_cli::{ use polkadot_node_core_candidate_validation::CandidateValidationSubsystem; use polkadot_node_subsystem::{ messages::{AllMessages, CandidateValidationMessage}, - overseer::{self, OverseerHandle}, + overseer::{self, OverseerConnector, OverseerHandle}, FromOverseer, }; @@ -86,6 +86,7 @@ struct BehaveMaleficient; impl OverseerGen for BehaveMaleficient { fn generate<'a, Spawner, RuntimeClient>( &self, + connector: OverseerConnector, args: OverseerGenArgs<'a, Spawner, RuntimeClient>, ) -> Result<(Overseer>, OverseerHandle), Error> where @@ -113,7 +114,7 @@ impl OverseerGen for BehaveMaleficient { }, ); - Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner) + Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner, connector) .map_err(|e| e.into()) } } diff --git a/node/overseer/examples/minimal-example.rs b/node/overseer/examples/minimal-example.rs index 6970054a3013..0c4a3bdc6ae6 100644 --- a/node/overseer/examples/minimal-example.rs +++ b/node/overseer/examples/minimal-example.rs @@ -29,7 +29,8 @@ use polkadot_node_subsystem_types::messages::{ use polkadot_overseer::{ self as overseer, gen::{FromOverseer, SpawnedSubsystem}, - AllMessages, AllSubsystems, HeadSupportsParachains, Overseer, OverseerSignal, SubsystemError, + AllMessages, AllSubsystems, HeadSupportsParachains, Overseer, OverseerConnector, + OverseerSignal, SubsystemError, }; use polkadot_primitives::v1::Hash; @@ -173,8 +174,15 @@ fn main() { .replace_candidate_validation(|_| Subsystem2) .replace_candidate_backing(|orig| orig); - let (overseer, _handle) = - Overseer::new(vec![], all_subsystems, None, AlwaysSupportsParachains, spawner).unwrap(); + let (overseer, _handle) = Overseer::new( + vec![], + all_subsystems, + None, + AlwaysSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); let overseer_fut = overseer.run().fuse(); let timer_stream = timer_stream; diff --git a/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs b/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs index 832e193fd4d1..4714a1f3d495 100644 --- a/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs +++ b/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs @@ -130,9 +130,13 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { &mut self.handle } /// Obtain access to the overseer handle. - pub fn as_handle(&mut self) -> &#handle { + pub fn as_handle(&self) -> &#handle { &self.handle } + /// Obtain a clone of the handle. + pub fn handle(&self) -> #handle { + self.handle.clone() + } } impl ::std::default::Default for #connector { diff --git a/node/overseer/src/dummy.rs b/node/overseer/src/dummy.rs new file mode 100644 index 000000000000..c3d3d4fcf3c8 --- /dev/null +++ b/node/overseer/src/dummy.rs @@ -0,0 +1,54 @@ +// Copyright 2020 Parity Technologies (UK) Ltd. +// This file is part of Polkadot. + +// Polkadot is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// Polkadot is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with Polkadot. If not, see . + +use crate::{AllMessages, OverseerSignal}; +use polkadot_node_subsystem_types::errors::SubsystemError; +use polkadot_overseer_gen::{FromOverseer, SpawnedSubsystem, Subsystem, SubsystemContext}; + +/// A dummy subsystem that implements [`Subsystem`] for all +/// types of messages. Used for tests or as a placeholder. +#[derive(Clone, Copy, Debug)] +pub struct DummySubsystem; + +impl Subsystem for DummySubsystem +where + Context: SubsystemContext< + Signal = OverseerSignal, + Error = SubsystemError, + AllMessages = AllMessages, + >, +{ + fn start(self, mut ctx: Context) -> SpawnedSubsystem { + let future = Box::pin(async move { + loop { + match ctx.recv().await { + Err(_) => return Ok(()), + Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => return Ok(()), + Ok(overseer_msg) => { + tracing::debug!( + target: "dummy-subsystem", + "Discarding a message sent from overseer {:?}", + overseer_msg + ); + continue + }, + } + } + }); + + SpawnedSubsystem { name: "dummy-subsystem", future } + } +} diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index f8e935a7eda8..90c958c7a5e0 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -70,7 +70,6 @@ use std::{ use futures::{channel::oneshot, future::BoxFuture, select, Future, FutureExt, StreamExt}; use lru::LruCache; -use parking_lot::RwLock; use client::{BlockImportNotification, BlockchainEvents, FinalityNotification}; use polkadot_primitives::v1::{Block, BlockId, BlockNumber, Hash, ParachainHost}; @@ -91,15 +90,18 @@ pub use polkadot_node_subsystem_types::{ jaeger, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, OverseerSignal, }; +/// Test helper supplements. +pub mod dummy; +pub use self::dummy::DummySubsystem; + // TODO legacy, to be deleted, left for easier integration // TODO https://github.com/paritytech/polkadot/issues/3427 mod subsystems; -pub use self::subsystems::{AllSubsystems, DummySubsystem}; +pub use self::subsystems::AllSubsystems; -mod metrics; -use self::metrics::Metrics; +pub mod metrics; -use polkadot_node_metrics::{ +pub use polkadot_node_metrics::{ metrics::{prometheus, Metrics as MetricsTrait}, Metronome, }; @@ -115,7 +117,7 @@ pub use polkadot_overseer_gen::{ /// Store 2 days worth of blocks, not accounting for forks, /// in the LRU cache. Assumes a 6-second block time. -const KNOWN_LEAVES_CACHE_SIZE: usize = 2 * 24 * 3600 / 6; +pub const KNOWN_LEAVES_CACHE_SIZE: usize = 2 * 24 * 3600 / 6; #[cfg(test)] mod tests; @@ -141,18 +143,12 @@ where /// /// [`Overseer`]: struct.Overseer.html #[derive(Clone)] -pub enum Handle { - /// Used only at initialization to break the cyclic dependency. - // TODO: refactor in https://github.com/paritytech/polkadot/issues/3427 - Disconnected(Arc>>), - /// A handle to the overseer. - Connected(OverseerHandle), -} +pub struct Handle(OverseerHandle); impl Handle { - /// Create a new disconnected [`Handle`]. - pub fn new_disconnected() -> Self { - Self::Disconnected(Arc::new(RwLock::new(None))) + /// Create a new [`Handle`]. + pub fn new(raw: OverseerHandle) -> Self { + Self(raw) } /// Inform the `Overseer` that that some block was imported. @@ -201,58 +197,8 @@ impl Handle { /// Most basic operation, to stop a server. async fn send_and_log_error(&mut self, event: Event) { - self.try_connect(); - if let Self::Connected(ref mut handle) = self { - if handle.send(event).await.is_err() { - tracing::info!(target: LOG_TARGET, "Failed to send an event to Overseer"); - } - } else { - tracing::warn!(target: LOG_TARGET, "Using a disconnected Handle to send to Overseer"); - } - } - - /// Whether the handle is disconnected. - pub fn is_disconnected(&self) -> bool { - match self { - Self::Disconnected(ref x) => x.read().is_none(), - _ => false, - } - } - - /// Connect this handle and all disconnected clones of it to the overseer. - pub fn connect_to_overseer(&mut self, handle: OverseerHandle) { - match self { - Self::Disconnected(ref mut x) => { - let mut maybe_handle = x.write(); - if maybe_handle.is_none() { - tracing::info!(target: LOG_TARGET, "🖇️ Connecting all Handles to Overseer"); - *maybe_handle = Some(handle); - } else { - tracing::warn!( - target: LOG_TARGET, - "Attempting to connect a clone of a connected Handle", - ); - } - }, - _ => { - tracing::warn!( - target: LOG_TARGET, - "Attempting to connect an already connected Handle", - ); - }, - } - } - - /// Try upgrading from `Self::Disconnected` to `Self::Connected` state - /// after calling `connect_to_overseer` on `self` or a clone of `self`. - fn try_connect(&mut self) { - if let Self::Disconnected(ref mut x) = self { - let guard = x.write(); - if let Some(ref h) = *guard { - let handle = h.clone(); - drop(guard); - *self = Self::Connected(handle); - } + if self.0.send(event).await.is_err() { + tracing::info!(target: LOG_TARGET, "Failed to send an event to Overseer"); } } } @@ -439,7 +385,7 @@ pub struct Overseer { pub known_leaves: LruCache, /// Various Prometheus metrics. - pub metrics: Metrics, + pub metrics: crate::metrics::Metrics, } impl Overseer @@ -490,12 +436,13 @@ where /// # use polkadot_primitives::v1::Hash; /// # use polkadot_overseer::{ /// # self as overseer, + /// # Overseer, /// # OverseerSignal, + /// # OverseerConnector, /// # SubsystemSender as _, /// # AllMessages, /// # AllSubsystems, /// # HeadSupportsParachains, - /// # Overseer, /// # SubsystemError, /// # gen::{ /// # SubsystemContext, @@ -549,6 +496,7 @@ where /// None, /// AlwaysSupportsParachains, /// spawner, + /// OverseerConnector::default(), /// ).unwrap(); /// /// let timer = Delay::new(Duration::from_millis(50)).fuse(); @@ -615,6 +563,7 @@ where prometheus_registry: Option<&prometheus::Registry>, supports_parachains: SupportsParachains, s: S, + connector: OverseerConnector, ) -> SubsystemResult<(Self, OverseerHandle)> where CV: Subsystem, SubsystemError> + Send, @@ -643,7 +592,7 @@ where CS: Subsystem, SubsystemError> + Send, S: SpawnNamed, { - let metrics: Metrics = ::register(prometheus_registry)?; + let metrics = ::register(prometheus_registry)?; let (mut overseer, handle) = Self::builder() .candidate_validation(all_subsystems.candidate_validation) @@ -679,7 +628,7 @@ where .supports_parachains(supports_parachains) .metrics(metrics.clone()) .spawner(s) - .build()?; + .build_with_connector(connector)?; // spawn the metrics metronome task { diff --git a/node/overseer/src/metrics.rs b/node/overseer/src/metrics.rs index ab3b2a3bc14b..fa883857e9be 100644 --- a/node/overseer/src/metrics.rs +++ b/node/overseer/src/metrics.rs @@ -17,7 +17,7 @@ //! Prometheus metrics related to the overseer and its channels. use super::*; -use polkadot_node_metrics::metrics::{self, prometheus}; +pub use polkadot_node_metrics::metrics::{self, prometheus, Metrics as MetricsTrait}; use parity_util_mem::MemoryAllocationSnapshot; @@ -110,7 +110,7 @@ impl Metrics { } } -impl metrics::Metrics for Metrics { +impl MetricsTrait for Metrics { fn try_register(registry: &prometheus::Registry) -> Result { let metrics = MetricsInner { activated_heads_total: prometheus::register( diff --git a/node/overseer/src/subsystems.rs b/node/overseer/src/subsystems.rs index 648528730d67..695d368dc16c 100644 --- a/node/overseer/src/subsystems.rs +++ b/node/overseer/src/subsystems.rs @@ -19,47 +19,9 @@ //! In the future, everything should be set up using the generated //! overseer builder pattern instead. -use crate::{AllMessages, OverseerSignal}; -use polkadot_node_subsystem_types::errors::SubsystemError; +use crate::dummy::DummySubsystem; use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; -use polkadot_overseer_gen::{ - FromOverseer, MapSubsystem, SpawnedSubsystem, Subsystem, SubsystemContext, -}; - -/// A dummy subsystem that implements [`Subsystem`] for all -/// types of messages. Used for tests or as a placeholder. -#[derive(Clone, Copy, Debug)] -pub struct DummySubsystem; - -impl Subsystem for DummySubsystem -where - Context: SubsystemContext< - Signal = OverseerSignal, - Error = SubsystemError, - AllMessages = AllMessages, - >, -{ - fn start(self, mut ctx: Context) -> SpawnedSubsystem { - let future = Box::pin(async move { - loop { - match ctx.recv().await { - Err(_) => return Ok(()), - Ok(FromOverseer::Signal(OverseerSignal::Conclude)) => return Ok(()), - Ok(overseer_msg) => { - tracing::debug!( - target: "dummy-subsystem", - "Discarding a message sent from overseer {:?}", - overseer_msg - ); - continue - }, - } - } - }); - - SpawnedSubsystem { name: "dummy-subsystem", future } - } -} +use polkadot_overseer_gen::MapSubsystem; /// This struct is passed as an argument to create a new instance of an [`Overseer`]. /// diff --git a/node/overseer/src/tests.rs b/node/overseer/src/tests.rs index 7564116e7141..e8edab17679e 100644 --- a/node/overseer/src/tests.rs +++ b/node/overseer/src/tests.rs @@ -32,7 +32,7 @@ use polkadot_primitives::v1::{ ValidatorIndex, }; -use crate::{self as overseer, gen::Delay, HeadSupportsParachains, Overseer}; +use crate::{self as overseer, gen::Delay, HeadSupportsParachains, Overseer, OverseerConnector}; use metered_channel as metered; use assert_matches::assert_matches; @@ -164,9 +164,16 @@ fn overseer_works() { .replace_candidate_validation(move |_| TestSubsystem1(s1_tx)) .replace_candidate_backing(move |_| TestSubsystem2(s2_tx)); - let (overseer, handle) = - Overseer::new(vec![], all_subsystems, None, MockSupportsParachains, spawner).unwrap(); - let mut handle = Handle::Connected(handle); + let (overseer, handle) = Overseer::new( + vec![], + all_subsystems, + None, + MockSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); @@ -227,9 +234,10 @@ fn overseer_metrics_work() { Some(®istry), MockSupportsParachains, spawner, + OverseerConnector::default(), ) .unwrap(); - let mut handle = Handle::Connected(handle); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); @@ -280,8 +288,15 @@ fn overseer_ends_on_subsystem_exit() { executor::block_on(async move { let all_subsystems = AllSubsystems::<()>::dummy().replace_candidate_backing(|_| ReturnOnStart); - let (overseer, _handle) = - Overseer::new(vec![], all_subsystems, None, MockSupportsParachains, spawner).unwrap(); + let (overseer, _handle) = Overseer::new( + vec![], + all_subsystems, + None, + MockSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); overseer.run().await.unwrap(); }) @@ -382,10 +397,16 @@ fn overseer_start_stop_works() { let all_subsystems = AllSubsystems::<()>::dummy() .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) .replace_candidate_backing(move |_| TestSubsystem6(tx_6)); - let (overseer, handle) = - Overseer::new(vec![first_block], all_subsystems, None, MockSupportsParachains, spawner) - .unwrap(); - let mut handle = Handle::Connected(handle); + let (overseer, handle) = Overseer::new( + vec![first_block], + all_subsystems, + None, + MockSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); @@ -486,9 +507,10 @@ fn overseer_finalize_works() { None, MockSupportsParachains, spawner, + OverseerConnector::default(), ) .unwrap(); - let mut handle = Handle::Connected(handle); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); @@ -573,10 +595,16 @@ fn do_not_send_empty_leaves_update_on_block_finalization() { let all_subsystems = AllSubsystems::<()>::dummy().replace_candidate_backing(move |_| TestSubsystem6(tx_5)); - let (overseer, handle) = - Overseer::new(Vec::new(), all_subsystems, None, MockSupportsParachains, spawner) - .unwrap(); - let mut handle = Handle::Connected(handle); + let (overseer, handle) = Overseer::new( + Vec::new(), + all_subsystems, + None, + MockSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); @@ -849,9 +877,17 @@ fn overseer_all_subsystems_receive_signals_and_messages() { dispute_distribution: subsystem.clone(), chain_selection: subsystem.clone(), }; - let (overseer, handle) = - Overseer::new(vec![], all_subsystems, None, MockSupportsParachains, spawner).unwrap(); - let mut handle = Handle::Connected(handle); + + let (overseer, handle) = Overseer::new( + vec![], + all_subsystems, + None, + MockSupportsParachains, + spawner, + OverseerConnector::default(), + ) + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); pin_mut!(overseer_fut); diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 52cafc9b171a..2dd75f42614e 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -68,6 +68,7 @@ thiserror = "1.0.26" kvdb = "0.10.0" kvdb-rocksdb = { version = "0.14.0", optional = true } async-trait = "0.1.51" +lru = "0.6" # Polkadot polkadot-node-core-parachains-inherent = { path = "../core/parachains-inherent" } diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index bcb181fa04b8..d4c8cdc16a7c 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -54,7 +54,7 @@ use { pub use sp_core::traits::SpawnNamed; #[cfg(feature = "full-node")] pub use { - polkadot_overseer::{Handle, Overseer, OverseerHandle}, + polkadot_overseer::{Handle, Overseer, OverseerConnector, OverseerHandle}, polkadot_primitives::v1::ParachainHost, sc_client_api::AuxStore, sp_authority_discovery::AuthorityDiscoveryApi, @@ -68,6 +68,8 @@ use polkadot_subsystem::jaeger; use std::{sync::Arc, time::Duration}; use prometheus_endpoint::Registry; +#[cfg(feature = "full-node")] +use service::KeystoreContainer; use service::RpcHandlers; use telemetry::TelemetryWorker; #[cfg(feature = "full-node")] @@ -302,14 +304,15 @@ fn jaeger_launch_collector_with_agent( } #[cfg(feature = "full-node")] -type FullSelectChain = relay_chain_selection::SelectRelayChainWithFallback; +type FullSelectChain = relay_chain_selection::SelectRelayChain; #[cfg(feature = "full-node")] -type FullGrandpaBlockImport = grandpa::GrandpaBlockImport< - FullBackend, - Block, - FullClient, - FullSelectChain, ->; +type FullGrandpaBlockImport = + grandpa::GrandpaBlockImport< + FullBackend, + Block, + FullClient, + ChainSelection, + >; #[cfg(feature = "light-node")] type LightBackend = service::TLightBackendWithHash; @@ -319,36 +322,29 @@ type LightClient = service::TLightClientWithBackend; #[cfg(feature = "full-node")] -fn new_partial( +struct Basics +where + RuntimeApi: ConstructRuntimeApi> + + Send + + Sync + + 'static, + RuntimeApi::RuntimeApi: + RuntimeApiCollection>, + ExecutorDispatch: NativeExecutionDispatch + 'static, +{ + task_manager: TaskManager, + client: Arc>, + backend: Arc, + keystore_container: KeystoreContainer, + telemetry: Option, +} + +#[cfg(feature = "full-node")] +fn new_partial_basics( config: &mut Configuration, jaeger_agent: Option, telemetry_worker_handle: Option, -) -> Result< - service::PartialComponents< - FullClient, - FullBackend, - FullSelectChain, - sc_consensus::DefaultImportQueue>, - sc_transaction_pool::FullPool>, - ( - impl service::RpcExtensionBuilder, - ( - babe::BabeBlockImport< - Block, - FullClient, - FullGrandpaBlockImport, - >, - grandpa::LinkHalf, FullSelectChain>, - babe::BabeLink, - beefy_gadget::notification::BeefySignedCommitmentSender, - ), - grandpa::SharedVoterState, - std::time::Duration, // slot-duration - Option, - ), - >, - Error, -> +) -> Result, Error> where RuntimeApi: ConstructRuntimeApi> + Send @@ -400,12 +396,53 @@ where jaeger_launch_collector_with_agent(task_manager.spawn_handle(), &*config, jaeger_agent)?; - let select_chain = relay_chain_selection::SelectRelayChainWithFallback::new( - backend.clone(), - Handle::new_disconnected(), - polkadot_node_subsystem_util::metrics::Metrics::register(config.prometheus_registry())?, - ); + Ok(Basics { task_manager, client, backend, keystore_container, telemetry }) +} +#[cfg(feature = "full-node")] +fn new_partial( + config: &mut Configuration, + Basics { task_manager, backend, client, keystore_container, telemetry }: Basics< + RuntimeApi, + ExecutorDispatch, + >, + select_chain: ChainSelection, +) -> Result< + service::PartialComponents< + FullClient, + FullBackend, + ChainSelection, + sc_consensus::DefaultImportQueue>, + sc_transaction_pool::FullPool>, + ( + impl service::RpcExtensionBuilder, + ( + babe::BabeBlockImport< + Block, + FullClient, + FullGrandpaBlockImport, + >, + grandpa::LinkHalf, ChainSelection>, + babe::BabeLink, + beefy_gadget::notification::BeefySignedCommitmentSender, + ), + grandpa::SharedVoterState, + std::time::Duration, // slot-duration + Option, + ), + >, + Error, +> +where + RuntimeApi: ConstructRuntimeApi> + + Send + + Sync + + 'static, + RuntimeApi::RuntimeApi: + RuntimeApiCollection>, + ExecutorDispatch: NativeExecutionDispatch + 'static, + ChainSelection: 'static + SelectChain, +{ let transaction_pool = sc_transaction_pool::BasicPool::new_full( config.transaction_pool.clone(), config.role.is_authority().into(), @@ -674,23 +711,54 @@ where let disable_grandpa = config.disable_grandpa; let name = config.network.node_name.clone(); - let service::PartialComponents { + let basics = new_partial_basics::( + &mut config, + jaeger_agent, + telemetry_worker_handle, + )?; + + let prometheus_registry = config.prometheus_registry().cloned(); + + let overseer_connector = OverseerConnector::default(); + let overseer_handle = Handle::new(overseer_connector.handle()); + + let chain_spec = config.chain_spec.cloned_box(); + + // we should remove this check before we deploy parachains on polkadot + // TODO: https://github.com/paritytech/polkadot/issues/3326 + let is_relay_chain = chain_spec.is_kusama() || + chain_spec.is_westend() || + chain_spec.is_rococo() || + chain_spec.is_wococo(); + + let local_keystore = basics.keystore_container.local_keystore(); + let requires_overseer_for_chain_sel = local_keystore.is_some() && + is_relay_chain && + (role.is_authority() || is_collator.is_collator()); + + use relay_chain_selection::SelectRelayChain; + + let select_chain = SelectRelayChain::new( + basics.backend.clone(), + overseer_handle.clone(), + requires_overseer_for_chain_sel, + polkadot_node_subsystem_util::metrics::Metrics::register(prometheus_registry.as_ref())?, + ); + let service::PartialComponents::<_, _, SelectRelayChain<_>, _, _, _> { client, backend, mut task_manager, keystore_container, - mut select_chain, + select_chain, import_queue, transaction_pool, other: (rpc_extensions_builder, import_setup, rpc_setup, slot_duration, mut telemetry), - } = new_partial::( + } = new_partial::>( &mut config, - jaeger_agent, - telemetry_worker_handle, + basics, + select_chain, )?; - let prometheus_registry = config.prometheus_registry().cloned(); - let shared_voter_state = rpc_setup; let auth_disc_publish_non_global_ips = config.network.allow_non_globals_in_dht; @@ -699,7 +767,7 @@ where // Substrate nodes. config.network.extra_sets.push(grandpa::grandpa_peers_set_config()); - if config.chain_spec.is_rococo() || config.chain_spec.is_wococo() { + if chain_spec.is_rococo() || chain_spec.is_wococo() { config.network.extra_sets.push(beefy_gadget::beefy_peers_set_config()); } @@ -784,7 +852,6 @@ where col_data: crate::parachains_db::REAL_COLUMNS.col_dispute_coordinator_data, }; - let chain_spec = config.chain_spec.cloned_box(); let rpc_handlers = service::spawn_tasks(service::SpawnTasksParams { config, backend: backend.clone(), @@ -804,7 +871,10 @@ where let overseer_client = client.clone(); let spawner = task_manager.spawn_handle(); - let active_leaves = futures::executor::block_on(active_leaves(&select_chain, &*client))?; + // Cannot use the `RelayChainSelection`, since that'd require a setup _and running_ overseer + // which we are about to setup. + let active_leaves = + futures::executor::block_on(active_leaves(select_chain.as_longest_chain(), &*client))?; let authority_discovery_service = if role.is_authority() || is_collator.is_collator() { use futures::StreamExt; @@ -841,7 +911,6 @@ where None }; - let local_keystore = keystore_container.local_keystore(); if local_keystore.is_none() { tracing::info!("Cannot run as validator without local keystore."); } @@ -852,6 +921,7 @@ where let overseer_handle = if let Some((authority_discovery_service, keystore)) = maybe_params { let (overseer, overseer_handle) = overseer_gen .generate::>( + overseer_connector, OverseerGenArgs { leaves: active_leaves, keystore, @@ -875,43 +945,37 @@ where dispute_coordinator_config, }, )?; - let handle = Handle::Connected(overseer_handle.clone()); - let handle_clone = handle.clone(); - - task_manager.spawn_essential_handle().spawn_blocking( - "overseer", - Box::pin(async move { - use futures::{pin_mut, select, FutureExt}; - - let forward = polkadot_overseer::forward_events(overseer_client, handle_clone); - - let forward = forward.fuse(); - let overseer_fut = overseer.run().fuse(); - - pin_mut!(overseer_fut); - pin_mut!(forward); - - select! { - _ = forward => (), - _ = overseer_fut => (), - complete => (), - } - }), - ); - // we should remove this check before we deploy parachains on polkadot - // TODO: https://github.com/paritytech/polkadot/issues/3326 - let should_connect_overseer = chain_spec.is_kusama() || - chain_spec.is_westend() || - chain_spec.is_rococo() || - chain_spec.is_wococo(); - - if should_connect_overseer { - select_chain.connect_to_overseer(overseer_handle.clone()); - } else { - tracing::info!("Overseer is running in the disconnected state"); + let handle = Handle::new(overseer_handle.clone()); + + { + let handle = handle.clone(); + task_manager.spawn_essential_handle().spawn_blocking( + "overseer", + Box::pin(async move { + use futures::{pin_mut, select, FutureExt}; + + let forward = polkadot_overseer::forward_events(overseer_client, handle); + + let forward = forward.fuse(); + let overseer_fut = overseer.run().fuse(); + + pin_mut!(overseer_fut); + pin_mut!(forward); + + select! { + _ = forward => (), + _ = overseer_fut => (), + complete => (), + } + }), + ); } Some(handle) } else { + assert!( + !requires_overseer_for_chain_sel, + "Precondition congruence (false) is guaranteed by manual checking. qed" + ); None }; @@ -1228,6 +1292,31 @@ where Ok((task_manager, rpc_handlers)) } +macro_rules! chain_ops { + ($config:expr, $jaeger_agent:expr, $telemetry_worker_handle:expr; $scope:ident, $executor:ident, $variant:ident) => {{ + let telemetry_worker_handle = $telemetry_worker_handle; + let jaeger_agent = $jaeger_agent; + let mut config = $config; + let basics = new_partial_basics::<$scope::RuntimeApi, $executor>( + config, + jaeger_agent, + telemetry_worker_handle, + )?; + + use ::sc_consensus::LongestChain; + // use the longest chain selection, since there is no overseer available + let chain_selection = LongestChain::new(basics.backend.clone()); + + let service::PartialComponents { client, backend, import_queue, task_manager, .. } = + new_partial::<$scope::RuntimeApi, $executor, LongestChain<_, Block>>( + &mut config, + basics, + chain_selection, + )?; + Ok((Arc::new(Client::$variant(client)), backend, import_queue, task_manager)) + }}; +} + /// Builds a new object suitable for chain operations. #[cfg(feature = "full-node")] pub fn new_chain_ops( @@ -1244,48 +1333,26 @@ pub fn new_chain_ops( > { config.keystore = service::config::KeystoreConfig::InMemory; + let telemetry_worker_handle = None; + #[cfg(feature = "rococo-native")] if config.chain_spec.is_rococo() || config.chain_spec.is_wococo() { - let service::PartialComponents { client, backend, import_queue, task_manager, .. } = - new_partial::( - config, - jaeger_agent, - None, - )?; - return Ok((Arc::new(Client::Rococo(client)), backend, import_queue, task_manager)) + return chain_ops!(config, jaeger_agent, telemetry_worker_handle; rococo_runtime, RococoExecutorDispatch, Rococo) } #[cfg(feature = "kusama-native")] if config.chain_spec.is_kusama() { - let service::PartialComponents { client, backend, import_queue, task_manager, .. } = - new_partial::( - config, - jaeger_agent, - None, - )?; - return Ok((Arc::new(Client::Kusama(client)), backend, import_queue, task_manager)) + return chain_ops!(config, jaeger_agent, telemetry_worker_handle; kusama_runtime, KusamaExecutorDispatch, Kusama) } #[cfg(feature = "westend-native")] if config.chain_spec.is_westend() { - let service::PartialComponents { client, backend, import_queue, task_manager, .. } = - new_partial::( - config, - jaeger_agent, - None, - )?; - return Ok((Arc::new(Client::Westend(client)), backend, import_queue, task_manager)) + return chain_ops!(config, jaeger_agent, telemetry_worker_handle; westend_runtime, WestendExecutorDispatch, Westend) } #[cfg(feature = "polkadot-native")] { - let service::PartialComponents { client, backend, import_queue, task_manager, .. } = - new_partial::( - config, - jaeger_agent, - None, - )?; - return Ok((Arc::new(Client::Polkadot(client)), backend, import_queue, task_manager)) + return chain_ops!(config, jaeger_agent, telemetry_worker_handle; polkadot_runtime, PolkadotExecutorDispatch, Polkadot) } #[cfg(not(feature = "polkadot-native"))] diff --git a/node/service/src/overseer.rs b/node/service/src/overseer.rs index 1751812babdc..c00b888e217f 100644 --- a/node/service/src/overseer.rs +++ b/node/service/src/overseer.rs @@ -15,6 +15,7 @@ // along with Polkadot. If not, see . use super::{AuthorityDiscoveryApi, Block, Error, Hash, IsCollator, Registry, SpawnNamed}; +use lru::LruCache; use polkadot_availability_distribution::IncomingRequestReceivers; use polkadot_node_core_approval_voting::Config as ApprovalVotingConfig; use polkadot_node_core_av_store::Config as AvailabilityConfig; @@ -22,7 +23,13 @@ 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::request_response::{v1 as request_v1, IncomingRequestReceiver}; -use polkadot_overseer::{AllSubsystems, BlockInfo, Overseer, OverseerHandle}; +#[cfg(any(feature = "malus", test))] +pub use polkadot_overseer::dummy::DummySubsystem; +pub use polkadot_overseer::{ + metrics::Metrics, AllSubsystems, BlockInfo, HeadSupportsParachains, MetricsTrait, Overseer, + OverseerBuilder, OverseerConnector, OverseerHandle, +}; + use polkadot_primitives::v1::ParachainHost; use sc_authority_discovery::Service as AuthorityDiscoveryService; use sc_client_api::AuxStore; @@ -258,6 +265,176 @@ where Ok(all_subsystems) } +/// Obtain a prepared `OverseerBuilder`, that is initialized +/// with all default values. +pub fn prepared_overseer_builder<'a, Spawner, RuntimeClient>( + OverseerGenArgs { + leaves, + keystore, + runtime_client, + parachains_db, + network_service, + authority_discovery_service, + pov_req_receiver, + chunk_req_receiver, + collation_req_receiver, + available_data_req_receiver, + statement_req_receiver, + dispute_req_receiver, + registry, + spawner, + is_collator, + approval_voting_config, + availability_config, + candidate_validation_config, + chain_selection_config, + dispute_coordinator_config, + }: OverseerGenArgs<'a, Spawner, RuntimeClient>, +) -> Result< + OverseerBuilder< + Spawner, + Arc, + CandidateValidationSubsystem, + CandidateBackingSubsystem, + StatementDistributionSubsystem, + AvailabilityDistributionSubsystem, + AvailabilityRecoverySubsystem, + BitfieldSigningSubsystem, + BitfieldDistributionSubsystem, + ProvisionerSubsystem, + RuntimeApiSubsystem, + AvailabilityStoreSubsystem, + NetworkBridgeSubsystem< + Arc>, + AuthorityDiscoveryService, + >, + ChainApiSubsystem, + CollationGenerationSubsystem, + CollatorProtocolSubsystem, + ApprovalDistributionSubsystem, + ApprovalVotingSubsystem, + GossipSupportSubsystem, + DisputeCoordinatorSubsystem, + DisputeParticipationSubsystem, + DisputeDistributionSubsystem, + ChainSelectionSubsystem, + >, + Error, +> +where + RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend + AuxStore, + RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, + Spawner: 'static + SpawnNamed + Clone + Unpin, +{ + use polkadot_node_subsystem_util::metrics::Metrics; + use std::iter::FromIterator; + + let metrics = ::register(registry)?; + + let builder = Overseer::builder() + .availability_distribution(AvailabilityDistributionSubsystem::new( + keystore.clone(), + IncomingRequestReceivers { pov_req_receiver, chunk_req_receiver }, + Metrics::register(registry)?, + )) + .availability_recovery(AvailabilityRecoverySubsystem::with_chunks_only( + available_data_req_receiver, + Metrics::register(registry)?, + )) + .availability_store(AvailabilityStoreSubsystem::new( + parachains_db.clone(), + availability_config, + Metrics::register(registry)?, + )) + .bitfield_distribution(BitfieldDistributionSubsystem::new(Metrics::register(registry)?)) + .bitfield_signing(BitfieldSigningSubsystem::new( + spawner.clone(), + keystore.clone(), + Metrics::register(registry)?, + )) + .candidate_backing(CandidateBackingSubsystem::new( + spawner.clone(), + keystore.clone(), + Metrics::register(registry)?, + )) + .candidate_validation(CandidateValidationSubsystem::with_config( + candidate_validation_config, + Metrics::register(registry)?, // candidate-validation metrics + Metrics::register(registry)?, // validation host metrics + )) + .chain_api(ChainApiSubsystem::new(runtime_client.clone(), Metrics::register(registry)?)) + .collation_generation(CollationGenerationSubsystem::new(Metrics::register(registry)?)) + .collator_protocol({ + let side = match is_collator { + IsCollator::Yes(collator_pair) => ProtocolSide::Collator( + network_service.local_peer_id().clone(), + collator_pair, + collation_req_receiver, + Metrics::register(registry)?, + ), + IsCollator::No => ProtocolSide::Validator { + keystore: keystore.clone(), + eviction_policy: Default::default(), + metrics: Metrics::register(registry)?, + }, + }; + CollatorProtocolSubsystem::new(side) + }) + .network_bridge(NetworkBridgeSubsystem::new( + network_service.clone(), + authority_discovery_service.clone(), + Box::new(network_service.clone()), + Metrics::register(registry)?, + )) + .provisioner(ProvisionerSubsystem::new(spawner.clone(), (), Metrics::register(registry)?)) + .runtime_api(RuntimeApiSubsystem::new( + runtime_client.clone(), + Metrics::register(registry)?, + spawner.clone(), + )) + .statement_distribution(StatementDistributionSubsystem::new( + keystore.clone(), + statement_req_receiver, + Metrics::register(registry)?, + )) + .approval_distribution(ApprovalDistributionSubsystem::new(Metrics::register(registry)?)) + .approval_voting(ApprovalVotingSubsystem::with_config( + approval_voting_config, + parachains_db.clone(), + keystore.clone(), + Box::new(network_service.clone()), + Metrics::register(registry)?, + )) + .gossip_support(GossipSupportSubsystem::new(keystore.clone())) + .dispute_coordinator(DisputeCoordinatorSubsystem::new( + parachains_db.clone(), + dispute_coordinator_config, + keystore.clone(), + Metrics::register(registry)?, + )) + .dispute_participation(DisputeParticipationSubsystem::new()) + .dispute_distribution(DisputeDistributionSubsystem::new( + keystore.clone(), + dispute_req_receiver, + authority_discovery_service.clone(), + Metrics::register(registry)?, + )) + .chain_selection(ChainSelectionSubsystem::new(chain_selection_config, parachains_db)) + .leaves(Vec::from_iter( + leaves + .into_iter() + .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), + )) + .activation_external_listeners(Default::default()) + .span_per_active_leaf(Default::default()) + .active_leaves(Default::default()) + .supports_parachains(runtime_client) + .known_leaves(LruCache::new(KNOWN_LEAVES_CACHE_SIZE)) + .metrics(metrics) + .spawner(spawner); + Ok(builder) +} + /// Trait for the `fn` generating the overseer. /// /// Default behavior is to create an unmodified overseer, as `RealOverseerGen` @@ -266,6 +443,7 @@ pub trait OverseerGen { /// Overwrite the full generation of the overseer, including the subsystems. fn generate<'a, Spawner, RuntimeClient>( &self, + connector: OverseerConnector, args: OverseerGenArgs<'a, Spawner, RuntimeClient>, ) -> Result<(Overseer>, OverseerHandle), Error> where @@ -274,19 +452,22 @@ pub trait OverseerGen { Spawner: 'static + SpawnNamed + Clone + Unpin, { let gen = RealOverseerGen; - RealOverseerGen::generate::(&gen, args) + RealOverseerGen::generate::(&gen, connector, args) } // It would be nice to make `create_subsystems` part of this trait, // but the amount of generic arguments that would be required as // as consequence make this rather annoying to implement and use. } +use polkadot_overseer::KNOWN_LEAVES_CACHE_SIZE; + /// The regular set of subsystems. pub struct RealOverseerGen; impl OverseerGen for RealOverseerGen { fn generate<'a, Spawner, RuntimeClient>( &self, + connector: OverseerConnector, args: OverseerGenArgs<'a, Spawner, RuntimeClient>, ) -> Result<(Overseer>, OverseerHandle), Error> where @@ -294,14 +475,8 @@ impl OverseerGen for RealOverseerGen { RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, Spawner: 'static + SpawnNamed + Clone + Unpin, { - let spawner = args.spawner.clone(); - let leaves = args.leaves.clone(); - let runtime_client = args.runtime_client.clone(); - let registry = args.registry.clone(); - - let all_subsystems = create_default_subsystems::(args)?; - - Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner) + prepared_overseer_builder(args)? + .build_with_connector(connector) .map_err(|e| e.into()) } } diff --git a/node/service/src/relay_chain_selection.rs b/node/service/src/relay_chain_selection.rs index 184d526eac47..2033a06a5f22 100644 --- a/node/service/src/relay_chain_selection.rs +++ b/node/service/src/relay_chain_selection.rs @@ -39,7 +39,7 @@ use super::{HeaderProvider, HeaderProviderProvider}; use consensus_common::{Error as ConsensusError, SelectChain}; use futures::channel::oneshot; use polkadot_node_subsystem_util::metrics::{self, prometheus}; -use polkadot_overseer::{AllMessages, Handle, OverseerHandle}; +use polkadot_overseer::{AllMessages, Handle}; use polkadot_primitives::v1::{ Block as PolkadotBlock, BlockNumber, Hash, Header as PolkadotHeader, }; @@ -109,66 +109,62 @@ impl Metrics { } /// A chain-selection implementation which provides safety for relay chains. -pub struct SelectRelayChainWithFallback> { - // A fallback to use in case the overseer is disconnected. - // - // This is used on relay chains which have not yet enabled - // parachains as well as situations where the node is offline. - fallback: sc_consensus::LongestChain, - selection: SelectRelayChain, +pub struct SelectRelayChain> { + is_relay_chain: bool, + longest_chain: sc_consensus::LongestChain, + selection: SelectRelayChainInner, } -impl Clone for SelectRelayChainWithFallback +impl Clone for SelectRelayChain where B: sc_client_api::Backend, - SelectRelayChain: Clone, + SelectRelayChainInner: Clone, { fn clone(&self) -> Self { - Self { fallback: self.fallback.clone(), selection: self.selection.clone() } + Self { + longest_chain: self.longest_chain.clone(), + is_relay_chain: self.is_relay_chain, + selection: self.selection.clone(), + } } } -impl SelectRelayChainWithFallback +impl SelectRelayChain where B: sc_client_api::Backend + 'static, { - /// Create a new [`SelectRelayChainWithFallback`] wrapping the given chain backend + /// Create a new [`SelectRelayChain`] wrapping the given chain backend /// and a handle to the overseer. - pub fn new(backend: Arc, overseer: Handle, metrics: Metrics) -> Self { - SelectRelayChainWithFallback { - fallback: sc_consensus::LongestChain::new(backend.clone()), - selection: SelectRelayChain::new(backend, overseer, metrics), + pub fn new(backend: Arc, overseer: Handle, is_relay_chain: bool, metrics: Metrics) -> Self { + SelectRelayChain { + longest_chain: sc_consensus::LongestChain::new(backend.clone()), + selection: SelectRelayChainInner::new(backend, overseer, metrics), + is_relay_chain, } } -} -impl SelectRelayChainWithFallback -where - B: sc_client_api::Backend + 'static, -{ - /// Given an overseer handle, this connects the [`SelectRelayChainWithFallback`]'s - /// internal handle and its clones to the same overseer. - pub fn connect_to_overseer(&mut self, handle: OverseerHandle) { - self.selection.overseer.connect_to_overseer(handle); + /// Allow access to the inner chain, for usage during the node setup. + pub fn as_longest_chain(&self) -> &sc_consensus::LongestChain { + &self.longest_chain } } #[async_trait::async_trait] -impl SelectChain for SelectRelayChainWithFallback +impl SelectChain for SelectRelayChain where B: sc_client_api::Backend + 'static, { async fn leaves(&self) -> Result, ConsensusError> { - if self.selection.overseer.is_disconnected() { - return self.fallback.leaves().await + if !self.is_relay_chain { + return self.longest_chain.leaves().await } self.selection.leaves().await } async fn best_chain(&self) -> Result { - if self.selection.overseer.is_disconnected() { - return self.fallback.best_chain().await + if !self.is_relay_chain { + return self.longest_chain.best_chain().await } self.selection.best_chain().await } @@ -179,34 +175,34 @@ where maybe_max_number: Option, ) -> Result, ConsensusError> { let longest_chain_best = - self.fallback.finality_target(target_hash, maybe_max_number).await?; + self.longest_chain.finality_target(target_hash, maybe_max_number).await?; - if self.selection.overseer.is_disconnected() { + if !self.is_relay_chain { return Ok(longest_chain_best) } self.selection - .finality_target_with_fallback(target_hash, longest_chain_best, maybe_max_number) + .finality_target_with_longest_chain(target_hash, longest_chain_best, maybe_max_number) .await } } /// A chain-selection implementation which provides safety for relay chains /// but does not handle situations where the overseer is not yet connected. -pub struct SelectRelayChain { +pub struct SelectRelayChainInner { backend: Arc, overseer: OH, metrics: Metrics, } -impl SelectRelayChain +impl SelectRelayChainInner where B: HeaderProviderProvider, OH: OverseerHandleT, { - /// Create a new [`SelectRelayChain`] wrapping the given chain backend + /// Create a new [`SelectRelayChainInner`] wrapping the given chain backend /// and a handle to the overseer. pub fn new(backend: Arc, overseer: OH, metrics: Metrics) -> Self { - SelectRelayChain { backend, overseer, metrics } + SelectRelayChainInner { backend, overseer, metrics } } fn block_header(&self, hash: Hash) -> Result { @@ -234,13 +230,13 @@ where } } -impl Clone for SelectRelayChain +impl Clone for SelectRelayChainInner where B: HeaderProviderProvider + Send + Sync, OH: OverseerHandleT, { fn clone(&self) -> Self { - SelectRelayChain { + SelectRelayChainInner { backend: self.backend.clone(), overseer: self.overseer.clone(), metrics: self.metrics.clone(), @@ -273,7 +269,7 @@ impl OverseerHandleT for Handle { } } -impl SelectRelayChain +impl SelectRelayChainInner where B: HeaderProviderProvider, OH: OverseerHandleT, @@ -317,7 +313,7 @@ where /// /// It will also constrain the chain to only chains which are fully /// approved, and chains which contain no disputes. - pub(crate) async fn finality_target_with_fallback( + pub(crate) async fn finality_target_with_longest_chain( &self, target_hash: Hash, best_leaf: Option, diff --git a/node/service/src/tests.rs b/node/service/src/tests.rs index 34ac69d78cc7..7dc5fe19ecbd 100644 --- a/node/service/src/tests.rs +++ b/node/service/src/tests.rs @@ -79,7 +79,7 @@ fn test_harness>( let (finality_target_tx, finality_target_rx) = oneshot::channel::>(); - let select_relay_chain = SelectRelayChain::::new( + let select_relay_chain = SelectRelayChainInner::::new( Arc::new(case_vars.chain.clone()), context.sender().clone(), Default::default(), diff --git a/node/subsystem-test-helpers/src/lib.rs b/node/subsystem-test-helpers/src/lib.rs index 80dae08825b0..0ac52ee82346 100644 --- a/node/subsystem-test-helpers/src/lib.rs +++ b/node/subsystem-test-helpers/src/lib.rs @@ -372,7 +372,9 @@ mod tests { use super::*; use futures::executor::block_on; use polkadot_node_subsystem::messages::CollatorProtocolMessage; - use polkadot_overseer::{AllSubsystems, Handle, HeadSupportsParachains, Overseer}; + use polkadot_overseer::{ + AllSubsystems, Handle, HeadSupportsParachains, Overseer, OverseerConnector, + }; use polkadot_primitives::v1::Hash; struct AlwaysSupportsParachains; @@ -394,9 +396,10 @@ mod tests { None, AlwaysSupportsParachains, spawner.clone(), + OverseerConnector::default(), ) .unwrap(); - let mut handle = Handle::Connected(handle); + let mut handle = Handle::new(handle); spawner.spawn("overseer", overseer.run().then(|_| async { () }).boxed()); diff --git a/node/subsystem/src/lib.rs b/node/subsystem/src/lib.rs index f0918ab1dc02..054f0d5997bb 100644 --- a/node/subsystem/src/lib.rs +++ b/node/subsystem/src/lib.rs @@ -24,7 +24,9 @@ pub use jaeger::*; pub use polkadot_node_jaeger as jaeger; -pub use polkadot_overseer::{self as overseer, ActiveLeavesUpdate, DummySubsystem, OverseerSignal}; +pub use polkadot_overseer::{ + self as overseer, ActiveLeavesUpdate, OverseerConnector, OverseerSignal, +}; pub use polkadot_node_subsystem_types::{ errors::{self, *}, From 277bb89f3ee655a8f39e3b6d88b4620ed3e18e0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Sep 2021 15:47:10 +0200 Subject: [PATCH 34/52] Bump nix from 0.19.1 to 0.20.0 (#3587) Bumps [nix](https://github.com/nix-rust/nix) from 0.19.1 to 0.20.0. - [Release notes](https://github.com/nix-rust/nix/releases) - [Changelog](https://github.com/nix-rust/nix/blob/master/CHANGELOG.md) - [Commits](https://github.com/nix-rust/nix/compare/v0.19.1...v0.20.0) --- updated-dependencies: - dependency-name: nix dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02c0804b7741..829c81dc64f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4403,9 +4403,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.19.1" +version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ccba0cfe4fdf15982d1674c69b1fd80bad427d293849982668dfe454bd61f2" +checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a" dependencies = [ "bitflags", "cc", diff --git a/Cargo.toml b/Cargo.toml index 1a8407e53a91..df4c213640a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,7 +18,7 @@ parity-util-mem = { version = "*", default-features = false, features = ["jemall [dev-dependencies] assert_cmd = "1.0.2" -nix = "0.19.1" +nix = "0.20.0" tempfile = "3.2.0" [workspace] From f6826bdceabcdf2af2a2ce6367b053759f77fa3f Mon Sep 17 00:00:00 2001 From: Alexander Samusev <41779041+alvicsam@users.noreply.github.com> Date: Tue, 28 Sep 2021 17:47:52 +0200 Subject: [PATCH 35/52] Docker files chore (#3880) * Renamed staking-miner Dockerfiles * change readme stacking-miner * mv docker/ to scripts/docker/polkadot * renamed dockerfiles in scripts/docker * renamed Dockerfiles * Update scripts/docker/staking-miner/staking_miner_injected.Dockerfile Co-authored-by: Chevdor * renamed release.Dockerfile * renamed staking-miner dockerfiles * add label polkadot_builder.Dockerfile * Update scripts/docker/polkadot/polkadot_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/polkadot/polkadot_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/polkadot/polkadot_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/polkadot/polkadot_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/polkadot_injected_release.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/collator_injected.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/staking-miner/staking-miner_injected.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/staking-miner/staking-miner_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/staking-miner/staking-miner_builder.Dockerfile Co-authored-by: Chevdor * Update scripts/docker/staking-miner/staking-miner_injected.Dockerfile Co-authored-by: Chevdor * move gpg server as variable to GHA config * simplified polkadot_builder.Dockerfile * gitlab-ci modify cp command in test-build-linux-stable * fix tests * renamed scripts/docker to scripts/dockerfiles * fix spellcheck * fix spellcheck Co-authored-by: Chevdor --- .github/workflows/publish-docker-release.yml | 3 ++- .gitlab-ci.yml | 12 ++++++------ doc/docker.md | 8 ++++---- .../collator_injected.Dockerfile} | 7 +++---- .../dockerfiles/polkadot}/README.md | 0 {docker => scripts/dockerfiles/polkadot}/build.sh | 2 +- .../polkadot}/docker-compose-local.yml | 2 ++ .../dockerfiles/polkadot}/docker-compose.yml | 1 + .../polkadot/polkadot_builder.Dockerfile | 15 +++++++-------- .../polkadot_injected_debug.Dockerfile} | 5 ++--- .../polkadot_injected_release.Dockerfile} | 11 ++++++----- .../staking-miner_builder.Dockerfile} | 4 ++-- .../staking-miner_injected.Dockerfile} | 4 ++-- scripts/gitlab/lingua.dic | 5 +++++ utils/staking-miner/README.md | 4 ++-- 15 files changed, 45 insertions(+), 38 deletions(-) rename scripts/{docker/collator.Dockerfile => dockerfiles/collator_injected.Dockerfile} (89%) rename {docker => scripts/dockerfiles/polkadot}/README.md (100%) rename {docker => scripts/dockerfiles/polkadot}/build.sh (80%) rename {docker => scripts/dockerfiles/polkadot}/docker-compose-local.yml (92%) rename {docker => scripts/dockerfiles/polkadot}/docker-compose.yml (85%) rename docker/Dockerfile => scripts/dockerfiles/polkadot/polkadot_builder.Dockerfile (53%) rename scripts/{docker/Dockerfile => dockerfiles/polkadot_injected_debug.Dockerfile} (93%) rename scripts/{docker/release.Dockerfile => dockerfiles/polkadot_injected_release.Dockerfile} (76%) rename scripts/{docker/staking-miner/staking_miner-builder.Dockerfile => dockerfiles/staking-miner/staking-miner_builder.Dockerfile} (90%) rename scripts/{docker/staking-miner/staking_miner-injected.Dockerfile => dockerfiles/staking-miner/staking-miner_injected.Dockerfile} (89%) diff --git a/.github/workflows/publish-docker-release.yml b/.github/workflows/publish-docker-release.yml index 811849c561a5..1c5ae13caaa3 100644 --- a/.github/workflows/publish-docker-release.yml +++ b/.github/workflows/publish-docker-release.yml @@ -29,7 +29,7 @@ jobs: uses: docker/build-push-action@v2 with: push: true - file: scripts/docker/release.Dockerfile + file: scripts/docker/polkadot_injected_release.Dockerfile tags: | parity/polkadot:latest parity/polkadot:${{ github.event.release.tag_name }} @@ -37,6 +37,7 @@ jobs: POLKADOT_VERSION=${{ github.event.release.tag_name }} VCS_REF=${{ github.ref }} BUILD_DATE=${{ github.event.release.published_at }} + GPG_KEYSERVER="hkps://keys.mailvelope.com" cache-from: type=local,src=/tmp/.buildx-cache cache-to: type=local,dest=/tmp/.buildx-cache - name: Image digest diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3713d94f950b..15e69605cd8c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -210,7 +210,7 @@ test-build-linux-stable: - echo "Polkadot version = ${VERSION} (EXTRATAG = ${EXTRATAG})" - echo -n ${VERSION} > ./artifacts/VERSION - echo -n ${EXTRATAG} > ./artifacts/EXTRATAG - - cp -r scripts/docker/* ./artifacts + - cp -r scripts/* ./artifacts check-runtime-benchmarks: stage: test @@ -265,7 +265,7 @@ build-adder-collator: - echo -n "${CI_COMMIT_REF_NAME}" > ./artifacts/VERSION - echo -n "${CI_COMMIT_REF_NAME}-${CI_COMMIT_SHORT_SHA}" > ./artifacts/EXTRATAG - echo "adder-collator version = $(cat ./artifacts/VERSION) (EXTRATAG = $(cat ./artifacts/EXTRATAG))" - - cp -r scripts/docker/* ./artifacts + - cp -r scripts/* ./artifacts #### stage: build @@ -358,8 +358,8 @@ publish-polkadot-image: <<: *build-push-image variables: <<: *image-variables - # scripts/docker/Dockerfile - DOCKERFILE: Dockerfile + # scripts/dockerfiles/polkadot_injected_debug.Dockerfile + DOCKERFILE: dockerfiles/polkadot_injected_debug.Dockerfile IMAGE_NAME: docker.io/paritypr/synth-wave rules: # Don't run on releases - this is handled by the Github Action here: @@ -394,8 +394,8 @@ publish-adder-collator-image: <<: *build-push-image variables: <<: *image-variables - # scripts/docker/collator.Dockerfile - DOCKERFILE: collator.Dockerfile + # scripts/dockerfiles/collator_injected.Dockerfile + DOCKERFILE: dockerfiles/collator_injected.Dockerfile IMAGE_NAME: docker.io/paritypr/colander rules: - if: $CI_PIPELINE_SOURCE == "schedule" diff --git a/doc/docker.md b/doc/docker.md index b5cafd7ef420..0ffe6ef09aea 100644 --- a/doc/docker.md +++ b/doc/docker.md @@ -4,9 +4,9 @@ The easiest/faster option to run Polkadot in Docker is to use the latest release images. These are small images that use the latest official release of the Polkadot binary, pulled from our package repository. -**_Following examples are running on westend chain and without SSL. They can be used to quick start and learn how Polkadot needs to be configured. Please find out how to secure your node, if you want to operate it on the internet. Do not expose rpc and ws ports, if they are not correctly configured._** +**_Following examples are running on westend chain and without SSL. They can be used to quick start and learn how Polkadot needs to be configured. Please find out how to secure your node, if you want to operate it on the internet. Do not expose RPC and WS ports, if they are not correctly configured._** -Let´s first check the version we have. The first time you run this command, the Polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient: +Let's first check the version we have. The first time you run this command, the Polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient: ```bash docker run --rm -it parity/polkadot:latest --version @@ -65,7 +65,7 @@ services: ] ``` -With following docker-compose.yml you can set up a node and use polkadot-js-apps as the front end on port 80. After starting the node use a browser and enter your Docker host ip in the url field: __ +With following docker-compose.yml you can set up a node and use polkadot-js-apps as the front end on port 80. After starting the node use a browser and enter your Docker host IP in the URL field: __ ```bash version: '2' @@ -118,7 +118,7 @@ To get up and running with the smallest footprint on your system, you may use th You can build it yourself (it takes a while...) in the shell session of the daemon: ```bash -cd docker +cd scripts/docker/polkadot ./build.sh ``` diff --git a/scripts/docker/collator.Dockerfile b/scripts/dockerfiles/collator_injected.Dockerfile similarity index 89% rename from scripts/docker/collator.Dockerfile rename to scripts/dockerfiles/collator_injected.Dockerfile index 7053459d1a18..12cc32220049 100644 --- a/scripts/docker/collator.Dockerfile +++ b/scripts/dockerfiles/collator_injected.Dockerfile @@ -9,8 +9,8 @@ ARG IMAGE_NAME LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ io.parity.image.title="${IMAGE_NAME}" \ - io.parity.image.description="adder-collator image" \ - io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/collator.Dockerfile" \ + io.parity.image.description="Injected adder-collator Docker image" \ + io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/collator_injected.Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" @@ -22,8 +22,7 @@ ENV RUST_BACKTRACE 1 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ libssl1.1 \ - ca-certificates \ - curl && \ + ca-certificates && \ # apt cleanup apt-get autoremove -y && \ apt-get clean && \ diff --git a/docker/README.md b/scripts/dockerfiles/polkadot/README.md similarity index 100% rename from docker/README.md rename to scripts/dockerfiles/polkadot/README.md diff --git a/docker/build.sh b/scripts/dockerfiles/polkadot/build.sh similarity index 80% rename from docker/build.sh rename to scripts/dockerfiles/polkadot/build.sh index 6456383fcdea..ee4d29991a86 100755 --- a/docker/build.sh +++ b/scripts/dockerfiles/polkadot/build.sh @@ -14,7 +14,7 @@ GITREPO=polkadot # Build the image echo "Building ${GITUSER}/${GITREPO}:latest docker image, hang on!" -time docker build -f ./docker/Dockerfile --build-arg RUSTC_WRAPPER= --build-arg PROFILE=release -t ${GITUSER}/${GITREPO}:latest . +time docker build -f ./scripts/docker/polkadot/polkadot_builder.Dockerfile --build-arg RUSTC_WRAPPER= --build-arg PROFILE=release -t ${GITUSER}/${GITREPO}:latest . # Show the list of available images for this repo echo "Image is ready" diff --git a/docker/docker-compose-local.yml b/scripts/dockerfiles/polkadot/docker-compose-local.yml similarity index 92% rename from docker/docker-compose-local.yml rename to scripts/dockerfiles/polkadot/docker-compose-local.yml index 079d73825227..2c93799259ef 100644 --- a/docker/docker-compose-local.yml +++ b/scripts/dockerfiles/polkadot/docker-compose-local.yml @@ -3,6 +3,7 @@ services: node_alice: build: context: . + dockerfile: polkadot_builder.Dockerfile ports: - "30333:30333" - "9933:9933" @@ -18,6 +19,7 @@ services: node_bob: build: context: . + dockerfile: polkadot_builder.Dockerfile ports: - "30344:30344" - "9935:9935" diff --git a/docker/docker-compose.yml b/scripts/dockerfiles/polkadot/docker-compose.yml similarity index 85% rename from docker/docker-compose.yml rename to scripts/dockerfiles/polkadot/docker-compose.yml index b76d41da1d03..54fe158735d8 100644 --- a/docker/docker-compose.yml +++ b/scripts/dockerfiles/polkadot/docker-compose.yml @@ -3,6 +3,7 @@ services: polkadot: build: context: . + dockerfile: polkadot_builder.Dockerfile ports: - "127.0.0.1:30333:30333/tcp" - "127.0.0.1:9933:9933/tcp" diff --git a/docker/Dockerfile b/scripts/dockerfiles/polkadot/polkadot_builder.Dockerfile similarity index 53% rename from docker/Dockerfile rename to scripts/dockerfiles/polkadot/polkadot_builder.Dockerfile index e068ec086f2f..2fc5787e6cb0 100644 --- a/docker/Dockerfile +++ b/scripts/dockerfiles/polkadot/polkadot_builder.Dockerfile @@ -1,19 +1,18 @@ FROM docker.io/paritytech/ci-linux:production as builder -LABEL description="This is the build stage for Polkadot. Here we create the binary." +LABEL io.parity.image.description="This is the build stage for Polkadot. Here we create the binary." -ARG PROFILE=release WORKDIR /polkadot COPY . /polkadot -RUN cargo build --$PROFILE +RUN cargo build --release --locked # ===== SECOND STAGE ====== FROM docker.io/library/ubuntu:20.04 -LABEL description="This is the 2nd stage: a very small image where we copy the Polkadot binary." -ARG PROFILE=release -COPY --from=builder /polkadot/target/$PROFILE/polkadot /usr/local/bin +LABEL io.parity.image.description="Polkadot: a platform for web3. This is a self-buit multistage image." + +COPY --from=builder /polkadot/target/release/polkadot /usr/local/bin RUN useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ mkdir -p /polkadot/.local/share && \ @@ -23,7 +22,7 @@ RUN useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ rm -rf /usr/bin /usr/sbin USER polkadot -EXPOSE 30333 9933 9944 +EXPOSE 30333 9933 9944 9615 VOLUME ["/data"] -CMD ["/usr/local/bin/polkadot"] +ENTRYPOINT ["/usr/local/bin/polkadot"] diff --git a/scripts/docker/Dockerfile b/scripts/dockerfiles/polkadot_injected_debug.Dockerfile similarity index 93% rename from scripts/docker/Dockerfile rename to scripts/dockerfiles/polkadot_injected_debug.Dockerfile index 51f2b21b5fef..7ba312bf8b8f 100644 --- a/scripts/docker/Dockerfile +++ b/scripts/dockerfiles/polkadot_injected_debug.Dockerfile @@ -9,7 +9,7 @@ LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ io.parity.image.title="${IMAGE_NAME}" \ io.parity.image.description="Polkadot: a platform for web3" \ - io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/Dockerfile" \ + io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/polkadot_injected_debug.Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" @@ -21,8 +21,7 @@ ENV RUST_BACKTRACE 1 RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ libssl1.1 \ - ca-certificates \ - curl && \ + ca-certificates && \ # apt cleanup apt-get autoremove -y && \ apt-get clean && \ diff --git a/scripts/docker/release.Dockerfile b/scripts/dockerfiles/polkadot_injected_release.Dockerfile similarity index 76% rename from scripts/docker/release.Dockerfile rename to scripts/dockerfiles/polkadot_injected_release.Dockerfile index 9188d6b260c4..c4c8aea182ed 100644 --- a/scripts/docker/release.Dockerfile +++ b/scripts/dockerfiles/polkadot_injected_release.Dockerfile @@ -4,12 +4,14 @@ FROM docker.io/library/ubuntu:20.04 ARG VCS_REF ARG BUILD_DATE ARG POLKADOT_VERSION +ARG POLKADOT_GPGKEY=9D4B2B6EB8F97156D19669A9FF0812D491B96798 +ARG GPG_KEYSERVER="hkps://keys.mailvelope.com" LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ io.parity.image.title="parity/polkadot" \ - io.parity.image.description="Polkadot: a platform for web3" \ - io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/Dockerfile" \ + io.parity.image.description="Polkadot: a platform for web3. This is the official Parity image with an injected binary." \ + io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/polkadot_injected_release.Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" @@ -22,12 +24,11 @@ RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ libssl1.1 \ ca-certificates \ - curl \ gnupg && \ useradd -m -u 1000 -U -s /bin/sh -d /polkadot polkadot && \ # add repo's gpg keys and install the published polkadot binary - gpg --recv-keys --keyserver hkps://keys.mailvelope.com 9D4B2B6EB8F97156D19669A9FF0812D491B96798 && \ - gpg --export 9D4B2B6EB8F97156D19669A9FF0812D491B96798 > /usr/share/keyrings/parity.gpg && \ + gpg --recv-keys --keyserver ${GPG_KEYSERVER} ${POLKADOT_GPGKEY} && \ + gpg --export ${POLKADOT_GPGKEY} > /usr/share/keyrings/parity.gpg && \ echo 'deb [signed-by=/usr/share/keyrings/parity.gpg] https://releases.parity.io/deb release main' > /etc/apt/sources.list.d/parity.list && \ apt-get update && \ apt-get install -y --no-install-recommends polkadot=${POLKADOT_VERSION#?} && \ diff --git a/scripts/docker/staking-miner/staking_miner-builder.Dockerfile b/scripts/dockerfiles/staking-miner/staking-miner_builder.Dockerfile similarity index 90% rename from scripts/docker/staking-miner/staking_miner-builder.Dockerfile rename to scripts/dockerfiles/staking-miner/staking-miner_builder.Dockerfile index 4903fccee561..5208dfb65f27 100644 --- a/scripts/docker/staking-miner/staking_miner-builder.Dockerfile +++ b/scripts/dockerfiles/staking-miner/staking-miner_builder.Dockerfile @@ -19,8 +19,8 @@ LABEL description="This is the 2nd stage: a very small image where we copy the b LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ io.parity.image.title="${IMAGE_NAME}" \ - io.parity.image.description="staking-miner for substrate based chains" \ - io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/staking-miner/staking_miner-builder.Dockerfile" \ + io.parity.image.description="${IMAGE_NAME} for substrate based chains" \ + io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/${IMAGE_NAME}/${IMAGE_NAME}_builder.Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" diff --git a/scripts/docker/staking-miner/staking_miner-injected.Dockerfile b/scripts/dockerfiles/staking-miner/staking-miner_injected.Dockerfile similarity index 89% rename from scripts/docker/staking-miner/staking_miner-injected.Dockerfile rename to scripts/dockerfiles/staking-miner/staking-miner_injected.Dockerfile index 547fea747bfd..2d98504b2c40 100644 --- a/scripts/docker/staking-miner/staking_miner-injected.Dockerfile +++ b/scripts/dockerfiles/staking-miner/staking-miner_injected.Dockerfile @@ -8,8 +8,8 @@ ARG IMAGE_NAME="staking-miner" LABEL io.parity.image.authors="devops-team@parity.io" \ io.parity.image.vendor="Parity Technologies" \ io.parity.image.title="${IMAGE_NAME}" \ - io.parity.image.description="staking-miner for substrate based chains" \ - io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/staking-miner/staking_miner-injected.Dockerfile" \ + io.parity.image.description="${IMAGE_NAME} for substrate based chains" \ + io.parity.image.source="https://github.com/paritytech/polkadot/blob/${VCS_REF}/scripts/docker/${IMAGE_NAME}/${IMAGE_NAME}_injected.Dockerfile" \ io.parity.image.revision="${VCS_REF}" \ io.parity.image.created="${BUILD_DATE}" \ io.parity.image.documentation="https://github.com/paritytech/polkadot/" diff --git a/scripts/gitlab/lingua.dic b/scripts/gitlab/lingua.dic index 9effe75e440c..68001b64a4e2 100644 --- a/scripts/gitlab/lingua.dic +++ b/scripts/gitlab/lingua.dic @@ -198,6 +198,7 @@ proxy/G proxying PRs PVF/S +p2p README/MS redhat/M register/CD @@ -227,6 +228,7 @@ spawn/SR spawner SS58 sr25519 +SSL startup/MS stateful str @@ -283,6 +285,7 @@ versa version/DMSG versioned VMP/SM +VPS VRF/SM w3f/MS wakeups @@ -293,9 +296,11 @@ Westend/M wildcard/MS WND/S Wococo +WS XCM/S XCMP/M yeet +yml decrement DM ParaId diff --git a/utils/staking-miner/README.md b/utils/staking-miner/README.md index f5c68a648c45..944f870d6dfc 100644 --- a/utils/staking-miner/README.md +++ b/utils/staking-miner/README.md @@ -30,7 +30,7 @@ There are 2 options to build a staking-miner Docker image: First build the binary as documented [above](#building). You may then inject the binary into a Docker base image usingfrom the root of the Polkadot repository: ``` -docker build -t staking-miner -f scripts/docker/staking-miner/staking_miner-injected.Dockerfile target/release +docker build -t staking-miner -f scripts/docker/staking-miner/staking-miner_injected.Dockerfile target/release ``` ### Building the multi-stage image @@ -39,7 +39,7 @@ Unlike the injected image that requires a Linux pre-built binary, this option do The trade-off however is that it takes a little longer to build and this option is less ideal for CI tasks. You may build the multi-stage image the root of the Polkadot repository with: ``` -docker build -t staking-miner -f scripts/docker/staking-miner/staking_miner-builder.Dockerfile . +docker build -t staking-miner -f scripts/docker/staking-miner/staking-miner_builder.Dockerfile . ``` ### Running From dc52d224217955fe80894489107484351eb040d6 Mon Sep 17 00:00:00 2001 From: Guillaume Thiolliere Date: Tue, 28 Sep 2021 19:38:00 +0200 Subject: [PATCH 36/52] fix master (#3955) --- node/service/src/overseer.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/node/service/src/overseer.rs b/node/service/src/overseer.rs index c00b888e217f..6cdc8eaf242e 100644 --- a/node/service/src/overseer.rs +++ b/node/service/src/overseer.rs @@ -313,7 +313,7 @@ pub fn prepared_overseer_builder<'a, Spawner, RuntimeClient>( CollatorProtocolSubsystem, ApprovalDistributionSubsystem, ApprovalVotingSubsystem, - GossipSupportSubsystem, + GossipSupportSubsystem, DisputeCoordinatorSubsystem, DisputeParticipationSubsystem, DisputeDistributionSubsystem, @@ -405,7 +405,10 @@ where Box::new(network_service.clone()), Metrics::register(registry)?, )) - .gossip_support(GossipSupportSubsystem::new(keystore.clone())) + .gossip_support(GossipSupportSubsystem::new( + keystore.clone(), + authority_discovery_service.clone(), + )) .dispute_coordinator(DisputeCoordinatorSubsystem::new( parachains_db.clone(), dispute_coordinator_config, From 5415e26d129ab7af3efb154a4a70b04e8041602a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Sep 2021 23:18:51 +0200 Subject: [PATCH 37/52] Bump libc from 0.2.102 to 0.2.103 (#3950) Bumps [libc](https://github.com/rust-lang/libc) from 0.2.102 to 0.2.103. - [Release notes](https://github.com/rust-lang/libc/releases) - [Commits](https://github.com/rust-lang/libc/compare/0.2.102...0.2.103) --- updated-dependencies: - dependency-name: libc dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 4 ++-- node/core/pvf/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 829c81dc64f8..8de1d385bf28 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3288,9 +3288,9 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f" [[package]] name = "libc" -version = "0.2.102" +version = "0.2.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2a5ac8f984bfcf3a823267e5fde638acc3325f6496633a5da6bb6eb2171e103" +checksum = "dd8f7255a17a627354f321ef0055d63b898c6fb27eff628af4d1b66b7331edf6" [[package]] name = "libgit2-sys" diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 26c2881dffd2..054d937f55d5 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -15,7 +15,7 @@ async-process = "1.1.0" assert_matches = "1.4.0" futures = "0.3.17" futures-timer = "3.0.2" -libc = "0.2.102" +libc = "0.2.103" slotmap = "1.0" tracing = "0.1.28" pin-project = "1.0.8" From ad40ebbea48227e989c0b3c5242562846aa4b7cd Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 29 Sep 2021 11:53:44 +0200 Subject: [PATCH 38/52] approval-voting: populate session cache in advance (#3954) * try populating session cache in advance * remove unused arg * fmt * fix compilation * fix tests * Revert "fix tests" This reverts commit e8222b1108e09a39727a38e3b4e4c3061642a213. * fix tests * bump dispute window const by 1 * fix tests --- node/core/approval-voting/src/import.rs | 4 +-- node/core/approval-voting/src/tests.rs | 4 +-- node/core/dispute-coordinator/src/real/mod.rs | 17 +----------- node/primitives/src/lib.rs | 3 ++- .../src/rolling_session_window.rs | 27 ++++++++----------- 5 files changed, 18 insertions(+), 37 deletions(-) diff --git a/node/core/approval-voting/src/import.rs b/node/core/approval-voting/src/import.rs index 52b0211a86ac..710c1ab55cfd 100644 --- a/node/core/approval-voting/src/import.rs +++ b/node/core/approval-voting/src/import.rs @@ -324,7 +324,7 @@ pub(crate) async fn handle_new_head( } }; - match state.session_window.cache_session_info_for_head(ctx, head, &header).await { + match state.session_window.cache_session_info_for_head(ctx, head).await { Err(e) => { tracing::debug!( target: LOG_TARGET, @@ -1236,7 +1236,7 @@ pub(crate) mod tests { h, RuntimeApiRequest::SessionIndexForChild(c_tx), )) => { - assert_eq!(h, parent_hash.clone()); + assert_eq!(h, hash); let _ = c_tx.send(Ok(session)); } ); diff --git a/node/core/approval-voting/src/tests.rs b/node/core/approval-voting/src/tests.rs index c40d62ecedf1..fe0725384ba7 100644 --- a/node/core/approval-voting/src/tests.rs +++ b/node/core/approval-voting/src/tests.rs @@ -786,8 +786,8 @@ async fn import_block( RuntimeApiRequest::SessionIndexForChild(s_tx) ) ) => { - let hash = &hashes[number.saturating_sub(1) as usize]; - assert_eq!(req_block_hash, hash.0.clone()); + let hash = &hashes[number as usize]; + assert_eq!(req_block_hash, hash.0); s_tx.send(Ok(number.into())).unwrap(); } ); diff --git a/node/core/dispute-coordinator/src/real/mod.rs b/node/core/dispute-coordinator/src/real/mod.rs index 7dd072017920..f0d0f5b8597a 100644 --- a/node/core/dispute-coordinator/src/real/mod.rs +++ b/node/core/dispute-coordinator/src/real/mod.rs @@ -478,22 +478,7 @@ async fn handle_new_activations( new_activations: impl IntoIterator, ) -> Result<(), Error> { for new_leaf in new_activations { - let block_header = { - let (tx, rx) = oneshot::channel(); - - ctx.send_message(ChainApiMessage::BlockHeader(new_leaf, tx)).await; - - match rx.await?? { - None => continue, - Some(header) => header, - } - }; - - match state - .rolling_session_window - .cache_session_info_for_head(ctx, new_leaf, &block_header) - .await - { + match state.rolling_session_window.cache_session_info_for_head(ctx, new_leaf).await { Err(e) => { tracing::warn!( target: LOG_TARGET, diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index c2c300fca74b..8d00e8b0cb39 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -69,7 +69,8 @@ pub const POV_BOMB_LIMIT: usize = (MAX_POV_SIZE * 4u32) as usize; /// On Polkadot this is 1 day, and on Kusama it's 6 hours. /// /// Number of sessions we want to consider in disputes. -pub const DISPUTE_WINDOW: SessionIndex = 6; +/// + 1 for the child's session. +pub const DISPUTE_WINDOW: SessionIndex = 6 + 1; /// The cumulative weight of a block in a fork-choice rule. pub type BlockWeight = u32; diff --git a/node/subsystem-util/src/rolling_session_window.rs b/node/subsystem-util/src/rolling_session_window.rs index a7afc4f8c949..1c73ff58c718 100644 --- a/node/subsystem-util/src/rolling_session_window.rs +++ b/node/subsystem-util/src/rolling_session_window.rs @@ -19,7 +19,7 @@ //! This is useful for consensus components which need to stay up-to-date about recent sessions but don't //! care about the state of particular blocks. -use polkadot_primitives::v1::{Hash, Header, SessionIndex, SessionInfo}; +use polkadot_primitives::v1::{Hash, SessionIndex, SessionInfo}; use futures::channel::oneshot; use polkadot_node_subsystem::{ @@ -131,7 +131,7 @@ impl RollingSessionWindow { } /// When inspecting a new import notification, updates the session info cache to match - /// the session of the imported block. + /// the session of the imported block's child. /// /// this only needs to be called on heads where we are directly notified about import, as sessions do /// not change often and import notifications are expected to be typically increasing in session number. @@ -141,7 +141,6 @@ impl RollingSessionWindow { &mut self, ctx: &mut (impl SubsystemContext + overseer::SubsystemContext), block_hash: Hash, - block_header: &Header, ) -> Result { if self.window_size == 0 { return Ok(SessionWindowUpdate::Unchanged) @@ -150,11 +149,9 @@ impl RollingSessionWindow { let session_index = { let (s_tx, s_rx) = oneshot::channel(); - // The genesis is guaranteed to be at the beginning of the session and its parent state - // is non-existent. Therefore if we're at the genesis, we request using its state and - // not the parent. + // We're requesting session index of a child to populate the cache in advance. ctx.send_message(RuntimeApiMessage::Request( - if block_header.number == 0 { block_hash } else { block_header.parent_hash }, + block_hash, RuntimeApiRequest::SessionIndexForChild(s_tx), )) .await; @@ -289,9 +286,10 @@ mod tests { use assert_matches::assert_matches; use polkadot_node_subsystem::messages::{AllMessages, AvailabilityRecoveryMessage}; use polkadot_node_subsystem_test_helpers::make_subsystem_context; + use polkadot_primitives::v1::Header; use sp_core::testing::TaskExecutor; - const TEST_WINDOW_SIZE: SessionIndex = 6; + const TEST_WINDOW_SIZE: SessionIndex = 6 + 1; fn dummy_session_info(index: SessionIndex) -> SessionInfo { SessionInfo { @@ -329,9 +327,8 @@ mod tests { let hash = header.hash(); let test_fut = { - let header = header.clone(); Box::pin(async move { - window.cache_session_info_for_head(&mut ctx, hash, &header).await.unwrap(); + window.cache_session_info_for_head(&mut ctx, hash).await.unwrap(); assert_eq!(window.earliest_session, Some(expected_start_session)); assert_eq!( @@ -348,7 +345,7 @@ mod tests { h, RuntimeApiRequest::SessionIndexForChild(s_tx), )) => { - assert_eq!(h, header.parent_hash); + assert_eq!(h, hash); let _ = s_tx.send(Ok(session)); } ); @@ -497,9 +494,8 @@ mod tests { let hash = header.hash(); let test_fut = { - let header = header.clone(); Box::pin(async move { - let res = window.cache_session_info_for_head(&mut ctx, hash, &header).await; + let res = window.cache_session_info_for_head(&mut ctx, hash).await; assert!(res.is_err()); }) @@ -512,7 +508,7 @@ mod tests { h, RuntimeApiRequest::SessionIndexForChild(s_tx), )) => { - assert_eq!(h, header.parent_hash); + assert_eq!(h, hash); let _ = s_tx.send(Ok(session)); } ); @@ -559,9 +555,8 @@ mod tests { let hash = header.hash(); let test_fut = { - let header = header.clone(); Box::pin(async move { - window.cache_session_info_for_head(&mut ctx, hash, &header).await.unwrap(); + window.cache_session_info_for_head(&mut ctx, hash).await.unwrap(); assert_eq!(window.earliest_session, Some(session)); assert_eq!(window.session_info, vec![dummy_session_info(session)]); From a2869fa902959d5f064d0399e8abc29cb7e94447 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Sep 2021 11:57:24 +0200 Subject: [PATCH 39/52] Bump parity-scale-codec from 2.3.0 to 2.3.1 (#3959) Bumps [parity-scale-codec](https://github.com/paritytech/parity-scale-codec) from 2.3.0 to 2.3.1. - [Release notes](https://github.com/paritytech/parity-scale-codec/releases) - [Changelog](https://github.com/paritytech/parity-scale-codec/blob/master/CHANGELOG.md) - [Commits](https://github.com/paritytech/parity-scale-codec/compare/parity-scale-codec-v2.3.0...parity-scale-codec-v2.3.1) --- updated-dependencies: - dependency-name: parity-scale-codec dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Cargo.lock | 8 ++++---- core-primitives/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- node/collation-generation/Cargo.toml | 2 +- node/core/approval-voting/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/core/chain-api/Cargo.toml | 2 +- node/core/dispute-participation/Cargo.toml | 2 +- node/core/pvf/Cargo.toml | 2 +- node/jaeger/Cargo.toml | 2 +- node/network/availability-distribution/Cargo.toml | 2 +- node/network/availability-recovery/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/dispute-distribution/Cargo.toml | 2 +- node/network/protocol/Cargo.toml | 2 +- node/network/statement-distribution/Cargo.toml | 2 +- node/primitives/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/test/client/Cargo.toml | 2 +- parachain/test-parachains/Cargo.toml | 2 +- parachain/test-parachains/adder/Cargo.toml | 2 +- parachain/test-parachains/adder/collator/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/common/slot_range_helper/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- statement-table/Cargo.toml | 2 +- xcm/Cargo.toml | 2 +- xcm/xcm-builder/Cargo.toml | 2 +- xcm/xcm-executor/Cargo.toml | 2 +- 37 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8de1d385bf28..84c09a1068f1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5489,9 +5489,9 @@ dependencies = [ [[package]] name = "parity-scale-codec" -version = "2.3.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e11263a97373b43da4b426edbb52ef99a7b51e2d9752ef56a7f8b356f48495a5" +checksum = "373b1a4c1338d9cd3d1fa53b3a11bdab5ab6bd80a20f7f7becd76953ae2be909" dependencies = [ "arrayvec 0.7.0", "bitvec 0.20.1", @@ -5503,9 +5503,9 @@ dependencies = [ [[package]] name = "parity-scale-codec-derive" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dbbfef7f0a1143c5b06e0d76a6278e25dac0bc1af4be51a0fbb73f07e7ad09" +checksum = "1557010476e0595c9b568d16dcfb81b93cdeb157612726f5170d31aa707bed27" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index 0e0322d2dd22..a0a43e440252 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -9,7 +9,7 @@ sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = [ "derive" ] } parity-util-mem = { version = "0.10.0", default-features = false, optional = true } [features] diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index b0db6c75f4d1..6bf1e6acb03e 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" polkadot-primitives = { path = "../primitives" } polkadot-node-primitives = { package = "polkadot-node-primitives", path = "../node/primitives" } novelpoly = { package = "reed-solomon-novelpoly", version = "1.0.0" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["std", "derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["std", "derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } trie = { package = "sp-trie", git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 49e732a0251a..41da8df3691a 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -15,7 +15,7 @@ polkadot-primitives = { path = "../../primitives" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-maybe-compressed-blob = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["bit-vec", "derive"] } [dev-dependencies] polkadot-node-subsystem-test-helpers = { path = "../subsystem-test-helpers" } diff --git a/node/core/approval-voting/Cargo.toml b/node/core/approval-voting/Cargo.toml index 822d1c3998bd..374e37c05a27 100644 --- a/node/core/approval-voting/Cargo.toml +++ b/node/core/approval-voting/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" futures-timer = "3.0.2" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["bit-vec", "derive"] } tracing = "0.1.28" bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } lru = "0.6" diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 55028f59a1bf..20df7ace4271 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -12,7 +12,7 @@ thiserror = "1.0.26" tracing = "0.1.28" bitvec = "0.20.1" -parity-scale-codec = { version = "2.3.0", features = ["derive"] } +parity-scale-codec = { version = "2.3.1", features = ["derive"] } erasure = { package = "polkadot-erasure-coding", path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 24ae96b3ee4d..50fae0d22b88 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -10,7 +10,7 @@ futures = "0.3.17" tracing = "0.1.28" sp-maybe-compressed-blob = { package = "sp-maybe-compressed-blob", git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["bit-vec", "derive"] } polkadot-primitives = { path = "../../../primitives" } polkadot-parachain = { path = "../../../parachain" } diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index 2580d780f329..a72612f1bd17 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -17,7 +17,7 @@ sc-consensus-babe = { git = "https://github.com/paritytech/substrate", branch = [dev-dependencies] futures = { version = "0.3.17", features = ["thread-pool"] } maplit = "1.0.2" -parity-scale-codec = "2.3.0" +parity-scale-codec = "2.3.1" polkadot-node-primitives = { path = "../../primitives" } polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers" } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/dispute-participation/Cargo.toml b/node/core/dispute-participation/Cargo.toml index eddd78e1789b..34617ade2350 100644 --- a/node/core/dispute-participation/Cargo.toml +++ b/node/core/dispute-participation/Cargo.toml @@ -15,6 +15,6 @@ polkadot-primitives = { path = "../../../primitives" } [dev-dependencies] assert_matches = "1.5.0" -parity-scale-codec = "2.3.0" +parity-scale-codec = "2.3.1" polkadot-node-subsystem-test-helpers = { path = "../../subsystem-test-helpers"} sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 054d937f55d5..6710924bb114 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -20,7 +20,7 @@ slotmap = "1.0" tracing = "0.1.28" pin-project = "1.0.8" rand = "0.8.3" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } polkadot-parachain = { path = "../../../parachain" } polkadot-core-primitives = { path = "../../../core-primitives" } polkadot-node-subsystem-util = { path = "../../subsystem-util"} diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index 51858a654100..736b3c3e5237 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -16,4 +16,4 @@ sc-network = { git = "https://github.com/paritytech/substrate", branch = "master sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } thiserror = "1.0.26" log = "0.4.13" -parity-scale-codec = { version = "2.3.0", default-features = false } +parity-scale-codec = { version = "2.3.1", default-features = false } diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index bdcc1e3832ce..4dd6d7ad6568 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] futures = "0.3.17" tracing = "0.1.28" -parity-scale-codec = { version = "2.3.0", features = ["std"] } +parity-scale-codec = { version = "2.3.1", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/availability-recovery/Cargo.toml b/node/network/availability-recovery/Cargo.toml index 90c67b21013d..435670eb4765 100644 --- a/node/network/availability-recovery/Cargo.toml +++ b/node/network/availability-recovery/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-primitives = { path = "../../primitives" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } [dev-dependencies] diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 5e8c5539385a..3f4a01e9b236 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -9,7 +9,7 @@ async-trait = "0.1.51" futures = "0.3.17" tracing = "0.1.28" polkadot-primitives = { path = "../../../primitives" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus = { git = "https://github.com/paritytech/substrate", branch = "master" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 561daefb3d1a..799231b0b427 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -30,6 +30,6 @@ assert_matches = "1.4.0" sp-core = { git = "https://github.com/paritytech/substrate", branch = "master", features = ["std"] } sp-keyring = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } -parity-scale-codec = { version = "2.3.0", features = ["std"] } +parity-scale-codec = { version = "2.3.1", features = ["std"] } polkadot-subsystem-testhelpers = { package = "polkadot-node-subsystem-test-helpers", path = "../../subsystem-test-helpers" } diff --git a/node/network/dispute-distribution/Cargo.toml b/node/network/dispute-distribution/Cargo.toml index 7c00302b0bb3..eff85629f422 100644 --- a/node/network/dispute-distribution/Cargo.toml +++ b/node/network/dispute-distribution/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" futures = "0.3.17" tracing = "0.1.28" derive_more = "0.99.14" -parity-scale-codec = { version = "2.3.0", features = ["std"] } +parity-scale-codec = { version = "2.3.1", features = ["std"] } polkadot-primitives = { path = "../../../primitives" } polkadot-erasure-coding = { path = "../../../erasure-coding" } polkadot-subsystem = { package = "polkadot-node-subsystem", path = "../../subsystem" } diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 4b94db56e7c4..78d5cbca6353 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -10,7 +10,7 @@ async-trait = "0.1.51" polkadot-primitives = { path = "../../../primitives" } polkadot-node-primitives = { path = "../../primitives" } polkadot-node-jaeger = { path = "../../jaeger" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sc-network = { git = "https://github.com/paritytech/substrate", branch = "master" } sc-authority-discovery = { git = "https://github.com/paritytech/substrate", branch = "master" } strum = { version = "0.21", features = ["derive"] } diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 19018dc94b3e..8e6893805c07 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -17,7 +17,7 @@ polkadot-node-subsystem-util = { path = "../../subsystem-util" } polkadot-node-network-protocol = { path = "../../network/protocol" } arrayvec = "0.5.2" indexmap = "1.7.0" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } derive_more = "0.99.11" thiserror = "1.0.26" diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index c425c97613ad..8ae025ccaccd 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -9,7 +9,7 @@ description = "Primitives types for the Node-side" bounded-vec = "0.4" futures = "0.3.17" polkadot-primitives = { path = "../../primitives" } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-application-crypto = { git = "https://github.com/paritytech/substrate", branch = "master" } sp-consensus-vrf = { git = "https://github.com/paritytech/substrate", branch = "master" } diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index cc9be5083f11..3b8db4170c9b 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -9,7 +9,7 @@ description = "Subsystem traits and message definitions" async-trait = "0.1.51" futures = "0.3.17" itertools = "0.10" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } pin-project = "1.0.8" rand = "0.8.3" thiserror = "1.0.26" diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 8e0599e88a4d..1ab03b74192c 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } # Polkadot dependencies polkadot-test-runtime = { path = "../../../runtime/test-runtime" } diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index 27f11923cd98..4290e5b1d460 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] tiny-keccak = "2.0.2" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } adder = { package = "test-parachain-adder", path = "adder" } halt = { package = "test-parachain-halt", path = "halt" } diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 49c35c5cc85f..2ed5fd3f9d9c 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -8,7 +8,7 @@ build = "build.rs" [dependencies] parachain = { package = "polkadot-parachain", path = "../../", default-features = false, features = [ "wasm-api" ] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } tiny-keccak = { version = "2.0.2", features = ["keccak"] } dlmalloc = { version = "0.2.1", features = [ "global" ] } diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 281329528b16..52a59506b529 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -14,7 +14,7 @@ name = "adder_collator_puppet_worker" path = "bin/puppet_worker.rs" [dependencies] -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } futures = "0.3.17" futures-timer = "3.0.2" log = "0.4.13" diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index 1c36fd0a807d..eee6f8431de2 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] serde = { version = "1.0.130", optional = true, features = ["derive"] } scale-info = { version = "1.0", default-features = false, features = ["bit-vec", "derive"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["bit-vec", "derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["bit-vec", "derive"] } primitives = { package = "sp-core", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } inherents = { package = "sp-inherents", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } application-crypto = { package = "sp-application-crypto", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 8aa7d4af9038..46f91f5b80c0 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] impl-trait-for-tuples = "0.2.0" bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } log = { version = "0.4.13", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/common/slot_range_helper/Cargo.toml b/runtime/common/slot_range_helper/Cargo.toml index 7e3ec8a8b48e..ec9158f75f9c 100644 --- a/runtime/common/slot_range_helper/Cargo.toml +++ b/runtime/common/slot_range_helper/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] paste = "1.0" enumn = "0.1.3" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sp-std = { package = "sp-std", git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-runtime = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 64a9d2b80b50..75f84c25bd18 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 359ad454dd48..3fcf3d59513d 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 8ba99f82ac8d..728bbdf9b4b8 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 6ad3d89a6db0..1d347e2035c3 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" build = "build.rs" [dependencies] -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } serde = { version = "1.0.130", default-features = false } serde_derive = { version = "1.0.117", optional = true } diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index b321c80088e1..497bc6a6b1d5 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } scale-info = { version = "1.0", default-features = false, features = ["derive"] } diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index 3b41179ad350..a968f281101c 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -7,7 +7,7 @@ build = "build.rs" [dependencies] bitvec = { version = "0.20.1", default-features = false, features = ["alloc"] } -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive", "max-encoded-len"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive", "max-encoded-len"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } log = { version = "0.4.14", default-features = false } rustc-hex = { version = "2.1.0", default-features = false } diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index a31f84efac8d..58c8a261489b 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -5,6 +5,6 @@ authors = ["Parity Technologies "] edition = "2018" [dependencies] -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } sp-core = { git = "https://github.com/paritytech/substrate", branch = "master" } primitives = { package = "polkadot-primitives", path = "../primitives" } diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index 972d28bd1863..e70607f4dc49 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -7,7 +7,7 @@ edition = "2018" [dependencies] impl-trait-for-tuples = "0.2.0" -parity-scale-codec = { version = "2.3.0", default-features = false, features = [ "derive" ] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = [ "derive" ] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } derivative = {version = "2.2.0", default-features = false, features = [ "use_core" ] } log = { version = "0.4.14", default-features = false } diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index fea1c7cbf71e..8e3d713f4386 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -6,7 +6,7 @@ description = "Tools & types for building with XCM and its executor." version = "0.9.9" [dependencies] -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } scale-info = { version = "1.0", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } xcm-executor = { path = "../xcm-executor", default-features = false } diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index d4668d0165d6..08aaddbeaab3 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -7,7 +7,7 @@ version = "0.9.9" [dependencies] impl-trait-for-tuples = "0.2.0" -parity-scale-codec = { version = "2.3.0", default-features = false, features = ["derive"] } +parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } xcm = { path = "..", default-features = false } sp-std = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } sp-io = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } From dcaa880cd0bbe50c2c2d58c6fc363db0a19acbb9 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 29 Sep 2021 13:19:00 +0200 Subject: [PATCH 40/52] CI: run disputes tests (#3962) * CI: run disputes tests * Revert "minor chore changes (#3944)" This reverts commit 1d05f779b25e01a1d54dbf98a82662d12a8320f9. * fix em * Revert "Revert "minor chore changes (#3944)"" This reverts commit 02a1ecf3cacb52d6dd467e8f226a69bae651d319. * Update handle_import_statement function * fmt Co-authored-by: Lldenaurois --- node/core/dispute-coordinator/src/real/mod.rs | 5 ++--- .../dispute-coordinator/src/real/tests.rs | 22 ++++--------------- scripts/gitlab/test_linux_stable.sh | 1 + 3 files changed, 7 insertions(+), 21 deletions(-) diff --git a/node/core/dispute-coordinator/src/real/mod.rs b/node/core/dispute-coordinator/src/real/mod.rs index f0d0f5b8597a..b4a1437d7d55 100644 --- a/node/core/dispute-coordinator/src/real/mod.rs +++ b/node/core/dispute-coordinator/src/real/mod.rs @@ -38,7 +38,7 @@ use polkadot_node_primitives::{ use polkadot_node_subsystem::{ errors::{ChainApiError, RuntimeApiError}, messages::{ - BlockDescription, ChainApiMessage, DisputeCoordinatorMessage, DisputeDistributionMessage, + BlockDescription, DisputeCoordinatorMessage, DisputeDistributionMessage, DisputeParticipationMessage, ImportStatementsResult, }, overseer, FromOverseer, OverseerSignal, SpawnedSubsystem, SubsystemContext, SubsystemError, @@ -631,7 +631,6 @@ async fn handle_import_statements( session: SessionIndex, statements: Vec<(SignedDisputeStatement, ValidatorIndex)>, now: Timestamp, - pending_confirmation: oneshot::Sender, metrics: &Metrics, ) -> Result { if state.highest_session.map_or(true, |h| session + DISPUTE_WINDOW < h) { @@ -913,7 +912,7 @@ async fn issue_local_statement( now, metrics, ) - .await? + .await { Err(_) => { tracing::error!( diff --git a/node/core/dispute-coordinator/src/real/tests.rs b/node/core/dispute-coordinator/src/real/tests.rs index 2f78a5c48707..c8709da92916 100644 --- a/node/core/dispute-coordinator/src/real/tests.rs +++ b/node/core/dispute-coordinator/src/real/tests.rs @@ -26,9 +26,7 @@ use overseer::TimeoutExt; use parity_scale_codec::Encode; use polkadot_node_subsystem::{ jaeger, - messages::{ - AllMessages, BlockDescription, ChainApiMessage, RuntimeApiMessage, RuntimeApiRequest, - }, + messages::{AllMessages, BlockDescription, RuntimeApiMessage, RuntimeApiRequest}, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, }; use polkadot_node_subsystem_test_helpers::{make_subsystem_context, TestSubsystemContextHandle}; @@ -170,33 +168,22 @@ impl TestState { ))) .await; - self.handle_sync_queries(virtual_overseer, block_hash, block_header, session) - .await; + self.handle_sync_queries(virtual_overseer, block_hash, session).await; } async fn handle_sync_queries( &self, virtual_overseer: &mut VirtualOverseer, block_hash: Hash, - block_header: Header, session: SessionIndex, ) { - assert_matches!( - virtual_overseer.recv().await, - AllMessages::ChainApi(ChainApiMessage::BlockHeader(h, tx)) => { - assert_eq!(h, block_hash); - let _ = tx.send(Ok(Some(block_header))); - } - ); - assert_matches!( virtual_overseer.recv().await, AllMessages::RuntimeApi(RuntimeApiMessage::Request( h, RuntimeApiRequest::SessionIndexForChild(tx), )) => { - let parent_hash = session_to_hash(session, b"parent"); - assert_eq!(h, parent_hash); + assert_eq!(h, block_hash); let _ = tx.send(Ok(session)); } ); @@ -236,8 +223,7 @@ impl TestState { ))) .await; - let header = self.headers.get(leaf).unwrap().clone(); - self.handle_sync_queries(virtual_overseer, *leaf, header, session).await; + self.handle_sync_queries(virtual_overseer, *leaf, session).await; } } diff --git a/scripts/gitlab/test_linux_stable.sh b/scripts/gitlab/test_linux_stable.sh index 8ba62ecbbb80..f7b36141af3a 100755 --- a/scripts/gitlab/test_linux_stable.sh +++ b/scripts/gitlab/test_linux_stable.sh @@ -4,4 +4,5 @@ set -e #shellcheck source=../common/lib.sh source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )/../common/lib.sh" +time cargo test --release --locked -p polkadot-node-core-dispute-coordinator --features disputes time cargo test --workspace --release --verbose --locked --features=runtime-benchmarks From a7e4e7adc51833f5e5acbe3f7ef5fdb75613fe21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Wed, 29 Sep 2021 15:29:33 +0200 Subject: [PATCH 41/52] Substrate Companion for #9552 (#3834) * Prepare for wasmtime 0.29 * update Substrate * Use Pallet Co-authored-by: parity-processbot <> --- Cargo.lock | 486 ++++++++++++------------ node/primitives/Cargo.toml | 2 +- runtime/rococo/src/validator_manager.rs | 2 +- 3 files changed, 235 insertions(+), 255 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 84c09a1068f1..d27ae76b6abb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,20 +14,11 @@ dependencies = [ [[package]] name = "addr2line" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a55f82cfe485775d02112886f4169bde0c5894d75e79ead7eafe7e40a25e45f7" -dependencies = [ - "gimli 0.23.0", -] - -[[package]] -name = "addr2line" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03345e98af8f3d786b6d9f656ccfa6ac316d954e92bc4841f0bba20789d5fb5a" +checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd" dependencies = [ - "gimli 0.24.0", + "gimli", ] [[package]] @@ -290,9 +281,9 @@ dependencies = [ [[package]] name = "async-std" -version = "1.9.0" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f06685bad74e0570f5213741bea82158279a4103d988e57bfada11ad230341" +checksum = "f8056f1455169ab86dd47b47391e4ab0cbd25410a70e9fe675544f49bafaf952" dependencies = [ "async-attributes", "async-channel", @@ -408,15 +399,16 @@ checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d" [[package]] name = "backtrace" -version = "0.3.56" +version = "0.3.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d117600f438b1707d4e4ae15d3595657288f8235a0eb593e80ecc98ab34e1bc" +checksum = "e7a905d892734eea339e896738c14b9afce22b5318f64b951e70bf3844419b01" dependencies = [ - "addr2line 0.14.1", + "addr2line", + "cc", "cfg-if 1.0.0", "libc", "miniz_oxide", - "object 0.23.0", + "object", "rustc-demangle", ] @@ -469,7 +461,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "beefy-primitives", "fnv", @@ -497,7 +489,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -517,12 +509,12 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -1203,24 +1195,24 @@ checksum = "6d375c433320f6c5057ae04a04376eef4d04ce2801448cf8863a78da99107be4" [[package]] name = "cranelift-bforest" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8ca3560686e7c9c7ed7e0fe77469f2410ba5d7781b1acaa9adc8d8deea28e3e" +checksum = "7e6bea67967505247f54fa2c85cf4f6e0e31c4e5692c9b70e4ae58e339067333" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf9bf1ffffb6ce3d2e5ebc83549bd2436426c99b31cc550d521364cbe35d276" +checksum = "48194035d2752bdd5bdae429e3ab88676e95f52a2b1355a5d4e809f9e39b1d74" dependencies = [ "cranelift-bforest", "cranelift-codegen-meta", "cranelift-codegen-shared", "cranelift-entity", - "gimli 0.24.0", + "gimli", "log", "regalloc", "serde", @@ -1230,9 +1222,9 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cc21936a5a6d07e23849ffe83e5c1f6f50305c074f4b2970ca50c13bf55b821" +checksum = "976efb22fcab4f2cd6bd4e9913764616a54d895c1a23530128d04e03633c555f" dependencies = [ "cranelift-codegen-shared", "cranelift-entity", @@ -1240,27 +1232,27 @@ dependencies = [ [[package]] name = "cranelift-codegen-shared" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca5b6ffaa87560bebe69a5446449da18090b126037920b0c1c6d5945f72faf6b" +checksum = "9dabb5fe66e04d4652e434195b45ae65b5c8172d520247b8f66d8df42b2b45dc" dependencies = [ "serde", ] [[package]] name = "cranelift-entity" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6b4a8bef04f82e4296782646f733c641d09497df2fabf791323fefaa44c64c" +checksum = "3329733e4d4b8e91c809efcaa4faee80bf66f20164e3dd16d707346bd3494799" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c31b783b351f966fce33e3c03498cb116d16d97a8f9978164a60920bd0d3a99c" +checksum = "279afcc0d3e651b773f94837c3d581177b348c8d69e928104b2e9fccb226f921" dependencies = [ "cranelift-codegen", "log", @@ -1270,19 +1262,20 @@ dependencies = [ [[package]] name = "cranelift-native" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c88d3dd48021ff1e37e978a00098524abd3513444ae252c08d37b310b3d2a" +checksum = "4c04d1fe6a5abb5bb0edc78baa8ef238370fb8e389cc88b6d153f7c3e9680425" dependencies = [ "cranelift-codegen", + "libc", "target-lexicon", ] [[package]] name = "cranelift-wasm" -version = "0.74.0" +version = "0.76.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb6d408e2da77cdbbd65466298d44c86ae71c1785d2ab0d8657753cdb4d9d89" +checksum = "e0d260ad44f6fd2c91f7f5097191a2a9e3edcbb36df1fb787b600dad5ea148ec" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1925,7 +1918,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", ] @@ -1943,7 +1936,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -1963,7 +1956,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "Inflector", "chrono", @@ -1989,7 +1982,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -2003,7 +1996,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -2031,7 +2024,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "bitflags", "frame-metadata", @@ -2058,7 +2051,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2070,7 +2063,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.0", @@ -2082,7 +2075,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro2", "quote", @@ -2092,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2115,7 +2108,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -2126,7 +2119,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "log", @@ -2143,7 +2136,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -2158,7 +2151,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "sp-api", @@ -2167,7 +2160,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "sp-api", @@ -2380,7 +2373,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "chrono", "frame-election-provider-support", @@ -2459,15 +2452,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.23.0" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6503fe142514ca4799d4c26297c4248239fe8838d827db6bd6065c6ed29a6ce" - -[[package]] -name = "gimli" -version = "0.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4075386626662786ddb0ec9081e7c7eeb1ba31951f447ca780ef9f5d568189" +checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7" dependencies = [ "fallible-iterator", "indexmap", @@ -4060,9 +4047,9 @@ checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" [[package]] name = "memchr" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400" +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "memmap2" @@ -4427,9 +4414,9 @@ checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" [[package]] name = "nom" -version = "6.2.1" +version = "6.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5c51b9083a3c620fa67a2a635d1ce7d95b897e957d6b28ff9a5da960a103a6" +checksum = "e7413f999671bd4745a7b624bd370a569fb6bc574b23c83a3c5ed2e453f3d5e2" dependencies = [ "bitvec 0.19.5", "funty", @@ -4531,18 +4518,13 @@ dependencies = [ [[package]] name = "object" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a7ab5d64814df0fe4a4b5ead45ed6c5f181ee3ff04ba344313a6c80446c5d4" - -[[package]] -name = "object" -version = "0.24.0" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a5b3dd1c072ee7963717671d1ca129f1048fda25edea6b752bfc71ac8854170" +checksum = "39f37e50073ccad23b6d09bcb5b263f4e76d3bb6038e4a3c08e52162ffa8abc2" dependencies = [ "crc32fast", "indexmap", + "memchr", ] [[package]] @@ -4608,7 +4590,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#c000780dba99a611fadbf83873073e024be1be0b" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4622,7 +4604,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -4638,7 +4620,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -4653,7 +4635,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4677,7 +4659,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4697,7 +4679,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4712,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "beefy-primitives", "frame-support", @@ -4728,7 +4710,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -4753,7 +4735,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4838,7 +4820,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4855,7 +4837,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4871,7 +4853,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4895,7 +4877,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4913,7 +4895,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4928,7 +4910,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4951,7 +4933,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4967,7 +4949,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -4987,7 +4969,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5004,7 +4986,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5021,7 +5003,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5039,7 +5021,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5055,7 +5037,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5072,7 +5054,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5087,7 +5069,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5101,7 +5083,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5118,7 +5100,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5141,7 +5123,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5156,7 +5138,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5170,7 +5152,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5186,7 +5168,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5207,7 +5189,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5223,7 +5205,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5237,7 +5219,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5260,7 +5242,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -5271,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "sp-arithmetic", @@ -5280,7 +5262,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5294,7 +5276,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5312,7 +5294,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5331,7 +5313,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-support", "frame-system", @@ -5348,7 +5330,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5365,7 +5347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5376,7 +5358,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5393,7 +5375,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -5409,7 +5391,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-benchmarking", "frame-support", @@ -7817,7 +7799,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -8080,7 +8062,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "sp-core", @@ -8091,7 +8073,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "derive_more", @@ -8118,7 +8100,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8141,7 +8123,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8157,7 +8139,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8173,7 +8155,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8184,7 +8166,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "chrono", "fdlimit", @@ -8222,7 +8204,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "fnv", "futures 0.3.17", @@ -8250,7 +8232,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "hash-db", "kvdb", @@ -8275,7 +8257,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "futures 0.3.17", @@ -8299,7 +8281,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "derive_more", @@ -8342,7 +8324,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "derive_more", "futures 0.3.17", @@ -8366,7 +8348,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8379,7 +8361,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "assert_matches", "async-trait", @@ -8413,7 +8395,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "futures 0.3.17", @@ -8439,7 +8421,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "sc-client-api", "sp-authorship", @@ -8450,7 +8432,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8476,7 +8458,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "derive_more", "environmental", @@ -8494,7 +8476,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "parity-scale-codec", @@ -8510,7 +8492,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8519,7 +8501,6 @@ dependencies = [ "parity-wasm 0.42.2", "sc-allocator", "sc-executor-common", - "scoped-tls", "sp-core", "sp-runtime-interface", "sp-wasm-interface", @@ -8529,7 +8510,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "derive_more", @@ -8566,7 +8547,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "derive_more", "finality-grandpa", @@ -8590,7 +8571,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8607,7 +8588,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "derive_more", @@ -8622,7 +8603,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "hash-db", "parity-scale-codec", @@ -8640,7 +8621,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-std", "async-trait", @@ -8691,7 +8672,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8707,7 +8688,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "bytes 1.0.1", "fnv", @@ -8734,7 +8715,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "libp2p", @@ -8747,7 +8728,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8756,7 +8737,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "hash-db", @@ -8787,7 +8768,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8812,7 +8793,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8829,7 +8810,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "directories", @@ -8894,7 +8875,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "parity-scale-codec", @@ -8908,7 +8889,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8930,7 +8911,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "chrono", "futures 0.3.17", @@ -8948,7 +8929,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8977,7 +8958,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8988,7 +8969,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "intervalier", @@ -9015,7 +8996,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "derive_more", "futures 0.3.17", @@ -9029,7 +9010,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9377,9 +9358,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" [[package]] name = "snap" @@ -9461,7 +9442,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "hash-db", "log", @@ -9478,7 +9459,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "blake2-rfc", "proc-macro-crate 1.1.0", @@ -9490,7 +9471,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9503,7 +9484,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "integer-sqrt", "num-traits", @@ -9518,7 +9499,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9531,7 +9512,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "parity-scale-codec", @@ -9543,7 +9524,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "sp-api", @@ -9555,7 +9536,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "log", @@ -9573,7 +9554,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "futures 0.3.17", @@ -9592,7 +9573,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "merlin", @@ -9615,7 +9596,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9626,7 +9607,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9638,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "base58", "blake2-rfc", @@ -9683,7 +9664,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9692,7 +9673,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro2", "quote", @@ -9702,7 +9683,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "environmental", "parity-scale-codec", @@ -9713,7 +9694,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "finality-grandpa", "log", @@ -9731,7 +9712,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9745,7 +9726,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "hash-db", @@ -9756,7 +9737,6 @@ dependencies = [ "sp-core", "sp-externalities", "sp-keystore", - "sp-maybe-compressed-blob", "sp-runtime-interface", "sp-state-machine", "sp-std", @@ -9770,7 +9750,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "lazy_static", "sp-core", @@ -9781,7 +9761,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "derive_more", @@ -9798,7 +9778,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "zstd", ] @@ -9806,7 +9786,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9821,7 +9801,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -9832,7 +9812,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "sp-api", "sp-core", @@ -9842,7 +9822,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "backtrace", ] @@ -9850,7 +9830,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "rustc-hash", "serde", @@ -9860,7 +9840,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "either", "hash256-std-hasher", @@ -9882,7 +9862,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9899,7 +9879,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "Inflector", "proc-macro-crate 1.1.0", @@ -9911,7 +9891,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "serde", "serde_json", @@ -9920,7 +9900,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9934,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "scale-info", @@ -9945,7 +9925,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "hash-db", "log", @@ -9968,12 +9948,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9986,7 +9966,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "log", "sp-core", @@ -9999,7 +9979,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -10015,7 +9995,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "erased-serde", "log", @@ -10033,7 +10013,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "sp-api", "sp-runtime", @@ -10042,7 +10022,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "log", @@ -10058,7 +10038,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "hash-db", "memory-db", @@ -10073,7 +10053,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10089,7 +10069,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10100,7 +10080,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10296,7 +10276,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "platforms", ] @@ -10304,7 +10284,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10326,7 +10306,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-std", "derive_more", @@ -10340,7 +10320,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "async-trait", "futures 0.3.17", @@ -10367,7 +10347,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10377,7 +10357,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -10388,7 +10368,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10541,7 +10521,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "frame-system", "futures 0.3.17", @@ -10980,7 +10960,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#2ab5cd2880b1ec798a7c2a72c29f995f54b45f13" +source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" dependencies = [ "jsonrpsee-ws-client", "log", @@ -11371,15 +11351,15 @@ dependencies = [ [[package]] name = "wasmparser" -version = "0.78.2" +version = "0.79.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52144d4c78e5cf8b055ceab8e5fa22814ce4315d6002ad32cfd914f37c12fd65" +checksum = "5b5894be15a559c85779254700e1d35f02f843b5a69152e5c82c626d9fd66c0e" [[package]] name = "wasmtime" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b310b9d20fcf59385761d1ade7a3ef06aecc380e3d3172035b919eaf7465d9f7" +checksum = "8bbb8a082a8ef50f7eeb8b82dda9709ef1e68963ea3c94e45581644dd4041835" dependencies = [ "anyhow", "backtrace", @@ -11408,9 +11388,9 @@ dependencies = [ [[package]] name = "wasmtime-cache" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d14d500d5c3dc5f5c097158feee123d64b3097f0d836a2a27dff9c761c73c843" +checksum = "d73391579ca7f24573138ef768b73b2aed5f9d542385c64979b65d60d0912399" dependencies = [ "anyhow", "base64 0.13.0", @@ -11429,9 +11409,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c525b39f062eada7db3c1298287b96dcb6e472b9f6b22501300b28d9fa7582f6" +checksum = "81c6f5ae9205382345c7cd7454932a906186836999a2161c385e38a15f52e1fe" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -11444,14 +11424,14 @@ dependencies = [ [[package]] name = "wasmtime-debug" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5d2a763e7a6fc734218e0e463196762a4f409c483063d81e0e85f96343b2e0a" +checksum = "c69e08f55e12f15f50b1b533bc3626723e7224254a065de6576934c86258c9e8" dependencies = [ "anyhow", - "gimli 0.24.0", + "gimli", "more-asserts", - "object 0.24.0", + "object", "target-lexicon", "thiserror", "wasmparser", @@ -11460,15 +11440,15 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f64d0c2d881c31b0d65c1f2695e022d71eb60b9fbdd336aacca28208b58eac90" +checksum = "005d93174040af37fb8625f891cd9827afdad314261f7ec4ee61ec497d6e9d3c" dependencies = [ "cfg-if 1.0.0", "cranelift-codegen", "cranelift-entity", "cranelift-wasm", - "gimli 0.24.0", + "gimli", "indexmap", "log", "more-asserts", @@ -11479,11 +11459,11 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4539ea734422b7c868107e2187d7746d8affbcaa71916d72639f53757ad707" +checksum = "d0bf1dfb213a35d8f21aefae40e597fe72778a907011ffdff7affb029a02af9a" dependencies = [ - "addr2line 0.15.1", + "addr2line", "anyhow", "cfg-if 1.0.0", "cranelift-codegen", @@ -11491,10 +11471,10 @@ dependencies = [ "cranelift-frontend", "cranelift-native", "cranelift-wasm", - "gimli 0.24.0", + "gimli", "log", "more-asserts", - "object 0.24.0", + "object", "rayon", "region", "serde", @@ -11512,13 +11492,13 @@ dependencies = [ [[package]] name = "wasmtime-obj" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e1a8ff85246d091828e2225af521a6208ed28c997bb5c39eb697366dc2e2f2b" +checksum = "d231491878e710c68015228c9f9fc5955fe5c96dbf1485c15f7bed55b622c83c" dependencies = [ "anyhow", "more-asserts", - "object 0.24.0", + "object", "target-lexicon", "wasmtime-debug", "wasmtime-environ", @@ -11526,9 +11506,9 @@ dependencies = [ [[package]] name = "wasmtime-profiling" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24364d522dcd67c897c8fffc42e5bdfc57207bbb6d7eeade0da9d4a7d70105b" +checksum = "21486cfb5255c2069666c1f116f9e949d4e35c9a494f11112fa407879e42198d" dependencies = [ "anyhow", "cfg-if 1.0.0", @@ -11542,9 +11522,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "0.27.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c51e57976e8a19a18a18e002c6eb12e5769554204238e47ff155fda1809ef0f7" +checksum = "d7ddfdf32e0a20d81f48be9dacd31612bc61de5a174d1356fef806d300f507de" dependencies = [ "anyhow", "backtrace", @@ -11941,18 +11921,18 @@ dependencies = [ [[package]] name = "zstd" -version = "0.6.1+zstd.1.4.9" +version = "0.9.0+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5de55e77f798f205d8561b8fe2ef57abfb6e0ff2abe7fd3c089e119cdb5631a3" +checksum = "07749a5dc2cb6b36661290245e350f15ec3bbb304e493db54a1d354480522ccd" dependencies = [ "zstd-safe", ] [[package]] name = "zstd-safe" -version = "3.0.1+zstd.1.4.9" +version = "4.1.1+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1387cabcd938127b30ce78c4bf00b30387dddf704e3f0881dbc4ff62b5566f8c" +checksum = "c91c90f2c593b003603e5e0493c837088df4469da25aafff8bce42ba48caf079" dependencies = [ "libc", "zstd-sys", @@ -11960,9 +11940,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "1.4.20+zstd.1.4.9" +version = "1.6.1+zstd.1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd5b733d7cf2d9447e2c3e76a5589b4f5e5ae065c22a2bc0b023cbc331b6c8e" +checksum = "615120c7a2431d16cf1cf979e7fc31ba7a5b5e5707b29c8a99e5dbf8a8392a33" dependencies = [ "cc", "libc", diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index 8ae025ccaccd..3dc1b13da68f 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -22,7 +22,7 @@ thiserror = "1.0.26" serde = { version = "1.0.130", features = ["derive"] } [target.'cfg(not(target_os = "unknown"))'.dependencies] -zstd = "0.6.0" +zstd = "0.9.0" [dev-dependencies] polkadot-erasure-coding = { path = "../../erasure-coding" } diff --git a/runtime/rococo/src/validator_manager.rs b/runtime/rococo/src/validator_manager.rs index a5fd2bb0a92b..763d12c73f5c 100644 --- a/runtime/rococo/src/validator_manager.rs +++ b/runtime/rococo/src/validator_manager.rs @@ -20,7 +20,7 @@ use frame_support::{decl_error, decl_event, decl_module, decl_storage, traits::E use sp_staking::SessionIndex; use sp_std::vec::Vec; -type Session = pallet_session::Module; +type Session = pallet_session::Pallet; /// Configuration for the parachain proposer. pub trait Config: pallet_session::Config { From 3338f9c7212ad872db0f0179070f1313c0de3f3a Mon Sep 17 00:00:00 2001 From: Liu-Cheng Xu Date: Wed, 29 Sep 2021 22:16:50 +0800 Subject: [PATCH 42/52] Companion for Substrate#9867 (#3938) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Companion for Substrate#9867 * Fix finality_target_with_fallback() * update substrate Co-authored-by: André Silva --- Cargo.lock | 322 +++++++++++----------- node/service/src/relay_chain_selection.rs | 25 +- 2 files changed, 174 insertions(+), 173 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d27ae76b6abb..604d32212558 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -461,7 +461,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "beefy-primitives", "fnv", @@ -489,7 +489,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -509,12 +509,12 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -1918,7 +1918,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", ] @@ -1936,7 +1936,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -1956,7 +1956,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "Inflector", "chrono", @@ -1982,7 +1982,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -1996,7 +1996,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -2024,7 +2024,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "bitflags", "frame-metadata", @@ -2051,7 +2051,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2063,7 +2063,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.0", @@ -2075,7 +2075,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro2", "quote", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2108,7 +2108,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -2119,7 +2119,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "log", @@ -2136,7 +2136,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -2151,7 +2151,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "sp-api", @@ -2160,7 +2160,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "sp-api", @@ -2373,7 +2373,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "chrono", "frame-election-provider-support", @@ -4590,7 +4590,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4604,7 +4604,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -4620,7 +4620,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -4635,7 +4635,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4659,7 +4659,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4679,7 +4679,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4694,7 +4694,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "beefy-primitives", "frame-support", @@ -4710,7 +4710,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -4735,7 +4735,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4820,7 +4820,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4837,7 +4837,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4853,7 +4853,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4877,7 +4877,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4895,7 +4895,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4910,7 +4910,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4933,7 +4933,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4949,7 +4949,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4969,7 +4969,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -4986,7 +4986,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5003,7 +5003,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5021,7 +5021,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5037,7 +5037,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5054,7 +5054,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5069,7 +5069,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5083,7 +5083,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5100,7 +5100,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5123,7 +5123,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5138,7 +5138,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5152,7 +5152,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5168,7 +5168,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5189,7 +5189,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5205,7 +5205,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5219,7 +5219,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5242,7 +5242,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -5253,7 +5253,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "sp-arithmetic", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5276,7 +5276,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5294,7 +5294,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5313,7 +5313,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-support", "frame-system", @@ -5330,7 +5330,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5347,7 +5347,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5358,7 +5358,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5375,7 +5375,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -5391,7 +5391,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-benchmarking", "frame-support", @@ -7799,7 +7799,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -8062,7 +8062,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "sp-core", @@ -8073,7 +8073,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "derive_more", @@ -8100,7 +8100,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8123,7 +8123,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8139,7 +8139,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8155,7 +8155,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8166,7 +8166,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "chrono", "fdlimit", @@ -8204,7 +8204,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "fnv", "futures 0.3.17", @@ -8232,7 +8232,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "hash-db", "kvdb", @@ -8257,7 +8257,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "futures 0.3.17", @@ -8281,7 +8281,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "derive_more", @@ -8324,7 +8324,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "derive_more", "futures 0.3.17", @@ -8348,7 +8348,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8361,7 +8361,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "assert_matches", "async-trait", @@ -8395,7 +8395,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "futures 0.3.17", @@ -8421,7 +8421,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "sc-client-api", "sp-authorship", @@ -8432,7 +8432,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8458,7 +8458,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "derive_more", "environmental", @@ -8476,7 +8476,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "parity-scale-codec", @@ -8492,7 +8492,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8510,7 +8510,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "derive_more", @@ -8547,7 +8547,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "derive_more", "finality-grandpa", @@ -8571,7 +8571,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8588,7 +8588,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "derive_more", @@ -8603,7 +8603,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "hash-db", "parity-scale-codec", @@ -8621,7 +8621,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-std", "async-trait", @@ -8672,7 +8672,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8688,7 +8688,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "bytes 1.0.1", "fnv", @@ -8715,7 +8715,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "libp2p", @@ -8728,7 +8728,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8737,7 +8737,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "hash-db", @@ -8768,7 +8768,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8793,7 +8793,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8810,7 +8810,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "directories", @@ -8875,7 +8875,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "parity-scale-codec", @@ -8889,7 +8889,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8911,7 +8911,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "chrono", "futures 0.3.17", @@ -8929,7 +8929,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8958,7 +8958,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8969,7 +8969,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "intervalier", @@ -8996,7 +8996,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "derive_more", "futures 0.3.17", @@ -9010,7 +9010,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9442,7 +9442,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "hash-db", "log", @@ -9459,7 +9459,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "blake2-rfc", "proc-macro-crate 1.1.0", @@ -9471,7 +9471,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9484,7 +9484,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "integer-sqrt", "num-traits", @@ -9499,7 +9499,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9512,7 +9512,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "parity-scale-codec", @@ -9524,7 +9524,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "sp-api", @@ -9536,7 +9536,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "log", @@ -9554,7 +9554,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "futures 0.3.17", @@ -9573,7 +9573,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "merlin", @@ -9596,7 +9596,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9607,7 +9607,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9619,7 +9619,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "base58", "blake2-rfc", @@ -9664,7 +9664,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9673,7 +9673,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro2", "quote", @@ -9683,7 +9683,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "environmental", "parity-scale-codec", @@ -9694,7 +9694,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "finality-grandpa", "log", @@ -9712,7 +9712,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9726,7 +9726,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "hash-db", @@ -9750,7 +9750,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "lazy_static", "sp-core", @@ -9761,7 +9761,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "derive_more", @@ -9778,7 +9778,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "zstd", ] @@ -9786,7 +9786,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9801,7 +9801,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -9812,7 +9812,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "sp-api", "sp-core", @@ -9822,7 +9822,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "backtrace", ] @@ -9830,7 +9830,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "rustc-hash", "serde", @@ -9840,7 +9840,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "either", "hash256-std-hasher", @@ -9862,7 +9862,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9879,7 +9879,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "Inflector", "proc-macro-crate 1.1.0", @@ -9891,7 +9891,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "serde", "serde_json", @@ -9900,7 +9900,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9914,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "scale-info", @@ -9925,7 +9925,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "hash-db", "log", @@ -9948,12 +9948,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9966,7 +9966,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "log", "sp-core", @@ -9979,7 +9979,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9995,7 +9995,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "erased-serde", "log", @@ -10013,7 +10013,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "sp-api", "sp-runtime", @@ -10022,7 +10022,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "log", @@ -10038,7 +10038,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "hash-db", "memory-db", @@ -10053,7 +10053,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10069,7 +10069,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10080,7 +10080,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10276,7 +10276,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "platforms", ] @@ -10284,7 +10284,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10306,7 +10306,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-std", "derive_more", @@ -10320,7 +10320,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "async-trait", "futures 0.3.17", @@ -10347,7 +10347,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10357,7 +10357,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -10368,7 +10368,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10521,7 +10521,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "frame-system", "futures 0.3.17", @@ -10960,7 +10960,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#83ced6b2acb82cddf8ae7cef5bad90482712651f" +source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" dependencies = [ "jsonrpsee-ws-client", "log", diff --git a/node/service/src/relay_chain_selection.rs b/node/service/src/relay_chain_selection.rs index 2033a06a5f22..9635878182fd 100644 --- a/node/service/src/relay_chain_selection.rs +++ b/node/service/src/relay_chain_selection.rs @@ -173,7 +173,7 @@ where &self, target_hash: Hash, maybe_max_number: Option, - ) -> Result, ConsensusError> { + ) -> Result { let longest_chain_best = self.longest_chain.finality_target(target_hash, maybe_max_number).await?; @@ -316,9 +316,9 @@ where pub(crate) async fn finality_target_with_longest_chain( &self, target_hash: Hash, - best_leaf: Option, + best_leaf: Hash, maybe_max_number: Option, - ) -> Result, ConsensusError> { + ) -> Result { let mut overseer = self.overseer.clone(); let subchain_head = if cfg!(feature = "disputes") { @@ -337,13 +337,14 @@ where match best { // No viable leaves containing the block. - None => return Ok(Some(target_hash)), + None => return Ok(target_hash), Some(best) => best, } } else { - match best_leaf { - None => return Ok(Some(target_hash)), - Some(best_leaf) => best_leaf, + if best_leaf == target_hash { + return Ok(target_hash) + } else { + best_leaf } }; @@ -362,7 +363,7 @@ where "`finality_target` max number is less than target number", ); } - return Ok(Some(target_hash)) + return Ok(target_hash) } // find the current number. let subchain_header = self.block_header(subchain_head)?; @@ -423,7 +424,7 @@ where subchain_number, "Mismatch of anticipated block descriptions and block number difference.", ); - return Ok(Some(target_hash)) + return Ok(target_hash) } // 3. Constrain according to disputes: let (tx, rx) = oneshot::channel(); @@ -458,7 +459,7 @@ where if safe_target <= target_number { // Minimal vote needs to be on the target number. - Ok(Some(target_hash)) + Ok(target_hash) } else { // Otherwise we're looking for a descendant. let initial_leaf_header = self.block_header(initial_leaf)?; @@ -469,10 +470,10 @@ where ) .map_err(|e| ConsensusError::ChainLookup(format!("{:?}", e)))?; - Ok(Some(forced_target)) + Ok(forced_target) } } else { - Ok(Some(subchain_head)) + Ok(subchain_head) } } } From e721a5aaafb4c3bba11a51b28d16ed8a67f19504 Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 29 Sep 2021 16:24:56 +0200 Subject: [PATCH 43/52] remove `AllSubsystems` and `AllSubsystemsGen` types (#3874) * introduce the OverseerConnector, use it * introduce is_relay_chain to RelayChainSelection * Update node/service/src/lib.rs Co-authored-by: Andronik Ordian * avoid the deferred setting of `is_relay_chain` in `RelayChainSelection` * positive assertion is not mandated, only the negative one, to avoid a stall * cleanup: overseer residue * spellcheck * fixin * groundwork to obsolete Overseer::new and AllSubsystemsGen proc-macro * Now all malus & tests can be ported to the builder pattern. Obsoletes `Overseer::new`, `AllSubsystemsGen` derive macro, `AllSubsystems`. * spellcheck * adjust tests, minor fixes * remove derive macro AllSubsystemsGen * add forgotten file dummy.rs * remove residue * good news everyone! * spellcheck * address review comments * fixup imports * make it conditional * fixup docs * reduce import * chore: fmt * chore: fmt * chore: spellcheck / nlprules * fixup malus variant-a * fmt * fix * fixins * pfmt * fixins * chore: fmt * remove expanded overseer generation * tracing version * Update node/network/statement-distribution/src/lib.rs Co-authored-by: Robert Habermeier * use future::ready instead * silence warning * chore: fmt Co-authored-by: Andronik Ordian Co-authored-by: Robert Habermeier --- Cargo.lock | 11 - Cargo.toml | 1 - cli/src/lib.rs | 2 +- node/core/pvf/src/artifacts.rs | 4 +- node/malus/src/variant-a.rs | 25 +- .../src/requester/session_cache.rs | 2 +- .../src/futures_undead.rs | 2 +- .../network/dispute-distribution/src/error.rs | 2 +- .../statement-distribution/src/error.rs | 2 +- .../network/statement-distribution/src/lib.rs | 2 +- node/overseer/Cargo.toml | 1 - node/overseer/all-subsystems-gen/Cargo.toml | 17 - node/overseer/all-subsystems-gen/src/lib.rs | 222 -------- .../tests/ui/err-01-enum.rs | 13 - .../tests/ui/err-01-enum.stderr | 5 - .../tests/ui/err-01-generic-used-twice.rs | 16 - .../tests/ui/err-01-generic-used-twice.stderr | 14 - .../tests/ui/err-01-no-generic.rs | 17 - .../tests/ui/err-01-no-generic.stderr | 14 - .../tests/ui/err-01-no-generics.stderr | 14 - .../tests/ui/ok-01-w-generics.rs | 17 - node/overseer/examples/minimal-example.rs | 22 +- .../overseer-gen/proc-macro/Cargo.toml | 6 + .../proc-macro/src/impl_builder.rs | 136 ++++- .../proc-macro/src/impl_channels_out.rs | 2 - .../proc-macro/src/impl_overseer.rs | 12 +- .../overseer-gen/proc-macro/src/lib.rs | 23 + node/overseer/src/dummy.rs | 146 +++++- node/overseer/src/lib.rs | 482 ++++++------------ node/overseer/src/subsystems.rs | 344 ------------- node/overseer/src/tests.rs | 182 +++---- node/primitives/src/lib.rs | 2 +- node/service/src/lib.rs | 12 +- node/service/src/overseer.rs | 170 +----- node/subsystem-test-helpers/src/lib.rs | 23 +- node/subsystem-types/src/messages.rs | 2 +- runtime/common/src/crowdloan.rs | 2 +- runtime/common/src/purchase.rs | 2 +- runtime/common/src/traits.rs | 2 +- runtime/parachains/src/hrmp.rs | 2 +- xcm/pallet-xcm/src/lib.rs | 4 +- xcm/src/v1/multilocation.rs | 4 +- 42 files changed, 597 insertions(+), 1386 deletions(-) delete mode 100644 node/overseer/all-subsystems-gen/Cargo.toml delete mode 100644 node/overseer/all-subsystems-gen/src/lib.rs delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-enum.rs delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-enum.stderr delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.rs delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.rs delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.stderr delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/err-01-no-generics.stderr delete mode 100644 node/overseer/all-subsystems-gen/tests/ui/ok-01-w-generics.rs delete mode 100644 node/overseer/src/subsystems.rs diff --git a/Cargo.lock b/Cargo.lock index 604d32212558..1ab8bf51797e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6553,7 +6553,6 @@ dependencies = [ "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-types", - "polkadot-overseer-all-subsystems-gen", "polkadot-overseer-gen", "polkadot-primitives", "sc-client-api", @@ -6562,16 +6561,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "polkadot-overseer-all-subsystems-gen" -version = "0.9.9" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "trybuild", -] - [[package]] name = "polkadot-overseer-gen" version = "0.9.9" diff --git a/Cargo.toml b/Cargo.toml index df4c213640a2..bfee75c8b5eb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -73,7 +73,6 @@ members = [ "node/overseer", "node/overseer/overseer-gen", "node/overseer/overseer-gen/proc-macro", - "node/overseer/all-subsystems-gen", "node/malus", "node/primitives", "node/service", diff --git a/cli/src/lib.rs b/cli/src/lib.rs index b7b45ed66a56..c07722d97540 100644 --- a/cli/src/lib.rs +++ b/cli/src/lib.rs @@ -29,7 +29,7 @@ pub use service::RuntimeApiCollection; pub use service::{self, Block, CoreApi, IdentifyVariant, ProvideRuntimeApi, TFullClient}; #[cfg(feature = "malus")] -pub use service::create_default_subsystems; +pub use service::overseer::prepared_overseer_builder; #[cfg(feature = "cli")] pub use cli::*; diff --git a/node/core/pvf/src/artifacts.rs b/node/core/pvf/src/artifacts.rs index 1a3429f7ab11..dfe08afe1a70 100644 --- a/node/core/pvf/src/artifacts.rs +++ b/node/core/pvf/src/artifacts.rs @@ -150,7 +150,7 @@ impl Artifacts { /// Inform the table about the artifact with the given ID. The state will be set to "preparing". /// - /// This function must be used only for brand new artifacts and should never be used for + /// This function must be used only for brand-new artifacts and should never be used for /// replacing existing ones. pub fn insert_preparing(&mut self, artifact_id: ArtifactId) { // See the precondition. @@ -159,7 +159,7 @@ impl Artifacts { /// 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 + /// 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(&mut self, artifact_id: ArtifactId, last_time_needed: SystemTime) { diff --git a/node/malus/src/variant-a.rs b/node/malus/src/variant-a.rs index 8abdf75198b3..ed395a9d884e 100644 --- a/node/malus/src/variant-a.rs +++ b/node/malus/src/variant-a.rs @@ -24,10 +24,10 @@ use color_eyre::eyre; use polkadot_cli::{ - create_default_subsystems, + prepared_overseer_builder, service::{ - AuthorityDiscoveryApi, AuxStore, BabeApi, Block, Error, HeaderBackend, Overseer, - OverseerGen, OverseerGenArgs, ParachainHost, ProvideRuntimeApi, SpawnNamed, + AuthorityDiscoveryApi, AuxStore, BabeApi, Block, Error, HeaderBackend, OverseerGen, + OverseerGenArgs, ParachainHost, ProvideRuntimeApi, SpawnNamed, }, Cli, }; @@ -37,7 +37,7 @@ use polkadot_cli::{ use polkadot_node_core_candidate_validation::CandidateValidationSubsystem; use polkadot_node_subsystem::{ messages::{AllMessages, CandidateValidationMessage}, - overseer::{self, OverseerConnector, OverseerHandle}, + overseer::{self, Overseer, OverseerConnector, OverseerHandle}, FromOverseer, }; @@ -94,15 +94,10 @@ impl OverseerGen for BehaveMaleficient { RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, Spawner: 'static + SpawnNamed + Clone + Unpin, { - let spawner = args.spawner.clone(); - let leaves = args.leaves.clone(); - let runtime_client = args.runtime_client.clone(); - let registry = args.registry.clone(); let candidate_validation_config = args.candidate_validation_config.clone(); - // modify the subsystem(s) as needed: - let all_subsystems = create_default_subsystems(args)?.replace_candidate_validation( - // create the filtered subsystem - |orig: CandidateValidationSubsystem| { + + prepared_overseer_builder(args)? + .replace_candidate_validation(|orig: CandidateValidationSubsystem| { InterceptedSubsystem::new( CandidateValidationSubsystem::with_config( candidate_validation_config, @@ -111,10 +106,8 @@ impl OverseerGen for BehaveMaleficient { ), Skippy::default(), ) - }, - ); - - Overseer::new(leaves, all_subsystems, registry, runtime_client, spawner, connector) + }) + .build_with_connector(connector) .map_err(|e| e.into()) } } diff --git a/node/network/availability-distribution/src/requester/session_cache.rs b/node/network/availability-distribution/src/requester/session_cache.rs index 25b53d25aaa7..5b87d1dcf9ce 100644 --- a/node/network/availability-distribution/src/requester/session_cache.rs +++ b/node/network/availability-distribution/src/requester/session_cache.rs @@ -56,7 +56,7 @@ pub struct SessionInfo { /// validators. pub validator_groups: Vec>, - /// Information about ourself: + /// Information about ourselves: pub our_index: ValidatorIndex, /// Remember to which group we belong, so we won't start fetching chunks for candidates with diff --git a/node/network/availability-recovery/src/futures_undead.rs b/node/network/availability-recovery/src/futures_undead.rs index 9715916590a6..550f41a9b3cf 100644 --- a/node/network/availability-recovery/src/futures_undead.rs +++ b/node/network/availability-recovery/src/futures_undead.rs @@ -18,7 +18,7 @@ //! futures will still get polled, but will not count towards length. So length will only count //! futures, which are still considered live. //! -//! Usecase: If futures take longer than we would like them too, we maybe able to request the data +//! Usecase: If futures take longer than we would like them too, we may be able to request the data //! from somewhere else as well. We don't really want to cancel the old future, because maybe it //! was almost done, thus we would have wasted time with our impatience. By simply making them //! not count towards length, we can make sure to have enough "live" requests ongoing, while at the diff --git a/node/network/dispute-distribution/src/error.rs b/node/network/dispute-distribution/src/error.rs index 7b7d7a64238f..00ac06310e8d 100644 --- a/node/network/dispute-distribution/src/error.rs +++ b/node/network/dispute-distribution/src/error.rs @@ -29,7 +29,7 @@ use crate::{sender, LOG_TARGET}; pub enum Error { /// Fatal errors of dispute distribution. Fatal(Fatal), - /// Non fatal errors of dispute distribution. + /// Non-fatal errors of dispute distribution. NonFatal(NonFatal), } diff --git a/node/network/statement-distribution/src/error.rs b/node/network/statement-distribution/src/error.rs index 4eb28eedc0ed..819440e6f29c 100644 --- a/node/network/statement-distribution/src/error.rs +++ b/node/network/statement-distribution/src/error.rs @@ -39,7 +39,7 @@ pub type FatalResult = std::result::Result; pub enum Error { /// Fatal errors of dispute distribution. Fatal(Fatal), - /// Non fatal errors of dispute distribution. + /// Non-fatal errors of dispute distribution. NonFatal(NonFatal), } diff --git a/node/network/statement-distribution/src/lib.rs b/node/network/statement-distribution/src/lib.rs index ffe54342a13b..e2c08c8216bc 100644 --- a/node/network/statement-distribution/src/lib.rs +++ b/node/network/statement-distribution/src/lib.rs @@ -105,7 +105,7 @@ const MAX_LARGE_STATEMENTS_PER_SENDER: usize = 20; /// The statement distribution subsystem. pub struct StatementDistribution { - /// Pointer to a keystore, which is required for determining this nodes validator index. + /// Pointer to a keystore, which is required for determining this node's validator index. keystore: SyncCryptoStorePtr, /// Receiver for incoming large statement requests. req_receiver: Option>, diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index cb80ed35d0d0..5c5906ff1160 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -16,7 +16,6 @@ polkadot-node-subsystem-types = { path = "../subsystem-types" } polkadot-node-metrics = { path = "../metrics" } polkadot-primitives = { path = "../../primitives" } polkadot-overseer-gen = { path = "./overseer-gen" } -polkadot-overseer-all-subsystems-gen = { path = "./all-subsystems-gen" } tracing = "0.1.28" lru = "0.6" parity-util-mem = { version = ">= 0.10.1", default-features = false } diff --git a/node/overseer/all-subsystems-gen/Cargo.toml b/node/overseer/all-subsystems-gen/Cargo.toml deleted file mode 100644 index 6c4e7f00eebe..000000000000 --- a/node/overseer/all-subsystems-gen/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "polkadot-overseer-all-subsystems-gen" -version = "0.9.9" -authors = ["Parity Technologies "] -edition = "2018" -description = "Small proc macro to create mocking level iface type helpers" - -[lib] -proc-macro = true - -[dependencies] -syn = { version = "1.0.77", features = ["full", "extra-traits"] } -quote = "1.0.9" -proc-macro2 = "1.0.24" - -[dev-dependencies] -trybuild = "1.0.45" diff --git a/node/overseer/all-subsystems-gen/src/lib.rs b/node/overseer/all-subsystems-gen/src/lib.rs deleted file mode 100644 index e524985f4543..000000000000 --- a/node/overseer/all-subsystems-gen/src/lib.rs +++ /dev/null @@ -1,222 +0,0 @@ -// Copyright 2021 Parity Technologies (UK) Ltd. -// This file is part of Polkadot. - -// Polkadot is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// Polkadot is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with Polkadot. If not, see . - -use std::collections::HashSet; - -use proc_macro2::TokenStream; -use quote::quote; - -use syn::{parse2, Error, GenericParam, Ident, Result, Type}; - -#[proc_macro_derive(AllSubsystemsGen)] -pub fn subsystems_gen(item: proc_macro::TokenStream) -> proc_macro::TokenStream { - let item: TokenStream = item.into(); - impl_subsystems_gen(item).unwrap_or_else(|err| err.to_compile_error()).into() -} - -fn impl_subsystems_gen(item: TokenStream) -> Result { - let span = proc_macro2::Span::call_site(); - let ds = parse2::(item.clone())?; - - match ds.fields { - syn::Fields::Named(named) => { - #[derive(Clone)] - struct NameTyTup { - field: Ident, - ty: Type, - } - let mut orig_generics = ds.generics; - // remove default types - orig_generics.params = orig_generics - .params - .into_iter() - .map(|mut generic| { - match generic { - GenericParam::Type(ref mut param) => { - param.eq_token = None; - param.default = None; - }, - _ => {}, - } - generic - }) - .collect(); - - // prepare a hashmap of generic type to member that uses it - let generic_types = orig_generics - .params - .iter() - .filter_map(|generic| { - if let GenericParam::Type(param) = generic { - Some(param.ident.clone()) - } else { - None - } - }) - .collect::>(); - - let strukt_ty = ds.ident; - - if generic_types.is_empty() { - return Err(Error::new( - strukt_ty.span(), - "struct must have at least one generic parameter.", - )) - } - - // collect all fields that exist, and all fields that are replaceable - let mut replacable_items = Vec::::with_capacity(64); - let mut all_fields = replacable_items.clone(); - - let mut duplicate_generic_detection = HashSet::::with_capacity(64); - - for field in named.named { - let field_ident = field - .ident - .clone() - .ok_or_else(|| Error::new(span, "Member field must have a name."))?; - let ty = field.ty.clone(); - let ntt = NameTyTup { field: field_ident, ty }; - - replacable_items.push(ntt.clone()); - - // assure every generic is used exactly once - let ty_ident = match field.ty { - Type::Path(path) => path.path.get_ident().cloned().ok_or_else(|| { - Error::new( - proc_macro2::Span::call_site(), - "Expected an identifier, but got a path.", - ) - }), - _ => return Err(Error::new(proc_macro2::Span::call_site(), "Must be path.")), - }?; - - if generic_types.contains(&ty_ident) { - if let Some(previous) = duplicate_generic_detection.replace(ty_ident) { - return Err(Error::new(previous.span(), "Generic type parameters may only be used for exactly one field, but is used more than once.")); - } - } - - all_fields.push(ntt); - } - - let msg = "Generated by #[derive(AllSubsystemsGen)] derive proc-macro."; - let mut additive = TokenStream::new(); - - // generate an impl of `fn replace_#name` - for NameTyTup { field: replacable_item, ty: replacable_item_ty } in replacable_items { - let keeper = &all_fields - .iter() - .filter(|ntt| ntt.field != replacable_item) - .map(|ntt| ntt.field.clone()) - .collect::>(); - let strukt_ty = strukt_ty.clone(); - let fname = Ident::new(&format!("replace_{}", replacable_item), span); - // adjust the generics such that the appropriate member type is replaced - let mut modified_generics = orig_generics.clone(); - modified_generics.params = modified_generics - .params - .into_iter() - .map(|mut generic| { - match generic { - GenericParam::Type(ref mut param) => { - param.eq_token = None; - param.default = None; - if match &replacable_item_ty { - Type::Path(path) => path - .path - .get_ident() - .filter(|&ident| ident == ¶m.ident) - .is_some(), - _ => false, - } { - param.ident = Ident::new("NEW", span); - } - }, - _ => {}, - } - generic - }) - .collect(); - - additive.extend(quote! { - impl #orig_generics #strukt_ty #orig_generics { - #[doc = #msg] - pub fn #fname < NEW, F > (self, gen_replacement_fn: F) -> #strukt_ty #modified_generics - where - F: FnOnce(#replacable_item_ty) -> NEW, - { - let Self { - // To be replaced field: - #replacable_item, - // Fields to keep: - #( - #keeper, - )* - } = self; - - // Some cases require that parts of the original are copied - // over, since they include a one time initialization. - let replacement = gen_replacement_fn(#replacable_item); - - #strukt_ty :: #modified_generics { - #replacable_item: replacement, - #( - #keeper, - )* - } - } - } - }); - } - - Ok(additive) - }, - syn::Fields::Unit => - Err(Error::new(span, "Must be a struct with named fields. Not an unit struct.")), - syn::Fields::Unnamed(_) => Err(Error::new( - span, - "Must be a struct with named fields. Not an unnamed fields struct.", - )), - } -} - -#[cfg(test)] -mod tests { - use super::*; - - #[test] - fn basic() { - let item = quote! { - pub struct AllSubsystems { - pub a: A, - pub beee: B, - pub dj: CD, - } - }; - - let output = impl_subsystems_gen(item).expect("Simple example always works. qed"); - println!("//generated:"); - println!("{}", output); - } - - #[test] - fn ui() { - let t = trybuild::TestCases::new(); - t.compile_fail("tests/ui/err-*.rs"); - t.pass("tests/ui/ok-*.rs"); - } -} diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.rs b/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.rs deleted file mode 100644 index ffcbecd0b3f4..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.rs +++ /dev/null @@ -1,13 +0,0 @@ -#![allow(dead_code)] - -use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; - -#[derive(Clone, AllSubsystemsGen)] -enum AllSubsystems { - A(A), - B(B), -} - -fn main() { - let all = AllSubsystems::::A(0u8); -} diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.stderr b/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.stderr deleted file mode 100644 index 5f61df1057cb..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-enum.stderr +++ /dev/null @@ -1,5 +0,0 @@ -error: expected `struct` - --> $DIR/err-01-enum.rs:6:1 - | -6 | enum AllSubsystems { - | ^^^^ diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.rs b/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.rs deleted file mode 100644 index 7c26eedf875f..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.rs +++ /dev/null @@ -1,16 +0,0 @@ -#![allow(dead_code)] - -use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; -#[derive(Clone, AllSubsystemsGen)] -struct AllSubsystems { - a: X, - b: X, -} - -fn main() { - let all = AllSubsystems:: { - a: 0_u16, - b: 1_u16, - }; - let _all = all.replace_a(|_| 77u8); -} diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr b/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr deleted file mode 100644 index d92ef3ebcb61..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-generic-used-twice.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: Generic type parameters may only be used for exactly one field, but is used more than once. - --> $DIR/err-01-generic-used-twice.rs:6:5 - | -6 | a: X, - | ^ - -error[E0599]: no method named `replace_a` found for struct `AllSubsystems` in the current scope - --> $DIR/err-01-generic-used-twice.rs:15:17 - | -5 | struct AllSubsystems { - | ----------------------- method `replace_a` not found for this -... -15 | let _all = all.replace_a(|_| 77u8); - | ^^^^^^^^^ method not found in `AllSubsystems` diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.rs b/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.rs deleted file mode 100644 index d95e0ad3182d..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![allow(dead_code)] - -use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; - -#[derive(Clone, AllSubsystemsGen)] -struct AllSubsystems { - a: f32, - b: u16, -} - -fn main() { - let all = AllSubsystems { - a: 0_f32, - b: 1_u16, - }; - let _all = all.replace_a(|_| 77u8); -} diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.stderr b/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.stderr deleted file mode 100644 index 1bbb7a5d51ba..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generic.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: struct must have at least one generic parameter. - --> $DIR/err-01-no-generic.rs:6:8 - | -6 | struct AllSubsystems { - | ^^^^^^^^^^^^^ - -error[E0599]: no method named `replace_a` found for struct `AllSubsystems` in the current scope - --> $DIR/err-01-no-generic.rs:16:17 - | -6 | struct AllSubsystems { - | -------------------- method `replace_a` not found for this -... -16 | let _all = all.replace_a(|_| 77u8); - | ^^^^^^^^^ method not found in `AllSubsystems` diff --git a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generics.stderr b/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generics.stderr deleted file mode 100644 index 5ca7ec6c2385..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/err-01-no-generics.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: Generic type parameters may only be used once have at least one generic parameter. - --> $DIR/err-01-no-generics.rs:7:5 - | -7 | a: X, - | ^ - -error[E0599]: no method named `replace_a` found for struct `AllSubsystems` in the current scope - --> $DIR/err-01-no-generics.rs:16:17 - | -6 | struct AllSubsystems { - | ----------------------- method `replace_a` not found for this -... -16 | let _all = all.replace_a(|_| 77u8); - | ^^^^^^^^^ method not found in `AllSubsystems` diff --git a/node/overseer/all-subsystems-gen/tests/ui/ok-01-w-generics.rs b/node/overseer/all-subsystems-gen/tests/ui/ok-01-w-generics.rs deleted file mode 100644 index 879cb6770fa8..000000000000 --- a/node/overseer/all-subsystems-gen/tests/ui/ok-01-w-generics.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![allow(dead_code)] - -use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; - -#[derive(Clone, AllSubsystemsGen)] -struct AllSubsystems { - a: A, - b: B, -} - -fn main() { - let all = AllSubsystems:: { - a: 0u8, - b: 1u16, - }; - let _all: AllSubsystems<_,_> = all.replace_a::(|_| 777_777u32); -} diff --git a/node/overseer/examples/minimal-example.rs b/node/overseer/examples/minimal-example.rs index 0c4a3bdc6ae6..0ff8201594fb 100644 --- a/node/overseer/examples/minimal-example.rs +++ b/node/overseer/examples/minimal-example.rs @@ -28,9 +28,9 @@ use polkadot_node_subsystem_types::messages::{ }; use polkadot_overseer::{ self as overseer, + dummy::dummy_overseer_builder, gen::{FromOverseer, SpawnedSubsystem}, - AllMessages, AllSubsystems, HeadSupportsParachains, Overseer, OverseerConnector, - OverseerSignal, SubsystemError, + AllMessages, HeadSupportsParachains, OverseerSignal, SubsystemError, }; use polkadot_primitives::v1::Hash; @@ -170,19 +170,13 @@ fn main() { Delay::new(Duration::from_secs(1)).await; }); - let all_subsystems = AllSubsystems::<()>::dummy() + let (overseer, _handle) = dummy_overseer_builder(spawner, AlwaysSupportsParachains, None) + .unwrap() .replace_candidate_validation(|_| Subsystem2) - .replace_candidate_backing(|orig| orig); - - let (overseer, _handle) = Overseer::new( - vec![], - all_subsystems, - None, - AlwaysSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + .replace_candidate_backing(|orig| orig) + .build() + .unwrap(); + let overseer_fut = overseer.run().fuse(); let timer_stream = timer_stream; diff --git a/node/overseer/overseer-gen/proc-macro/Cargo.toml b/node/overseer/overseer-gen/proc-macro/Cargo.toml index 47af610cd0ca..9600fbb39149 100644 --- a/node/overseer/overseer-gen/proc-macro/Cargo.toml +++ b/node/overseer/overseer-gen/proc-macro/Cargo.toml @@ -19,3 +19,9 @@ proc-macro-crate = "1.1.0" [dev-dependencies] assert_matches = "1.5.0" + +[features] +default = [] +# write the expanded version to a `overlord-expansion.rs` +# in the `cwd` +expansion = [] diff --git a/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs b/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs index 4714a1f3d495..94074ceb93f8 100644 --- a/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs +++ b/node/overseer/overseer-gen/proc-macro/src/impl_builder.rs @@ -19,6 +19,39 @@ use syn::Ident; use super::*; +/// Returns all combinations for a single replacement: +/// 1. generic args with `NEW` in place +/// 2. subsystem type to be replaced +/// 3. the subsystem name to be replaced by a new type and value +/// 4. all other subsystems that are supposed to be kept +fn derive_replacable_generic_lists( + info: &OverseerInfo, +) -> Vec<(TokenStream, Ident, Ident, Vec)> { + // subsystem generic types + let builder_generic_ty = info.builder_generic_types(); + + let to_be_replaced_name = info.subsystem_names_without_wip(); + let baggage_generic_ty = &info.baggage_generic_types(); + + builder_generic_ty + .iter() + .enumerate() + .map(|(idx, to_be_replaced_ty)| { + let mut to_keep_name = to_be_replaced_name.clone(); + let to_be_replaced_name: Ident = to_keep_name.remove(idx); + + let mut builder_generic_ty = builder_generic_ty.clone(); + builder_generic_ty[idx] = format_ident!("NEW"); + + let generics_ts = quote! { + + }; + + (generics_ts, to_be_replaced_ty.clone(), to_be_replaced_name, to_keep_name) + }) + .collect::>() +} + /// Implement a builder pattern for the `Overseer`-type, /// which acts as the gateway to constructing the overseer. /// @@ -35,6 +68,12 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { .iter() .map(|subsystem_name| format_ident!("{}_with", subsystem_name)) .collect::>(); + let subsystem_name_replace_with = &info + .subsystem_names_without_wip() + .iter() + .map(|subsystem_name| format_ident!("replace_{}", subsystem_name)) + .collect::>(); + let builder_generic_ty = &info.builder_generic_types(); let channel_name = &info.channel_names_without_wip(""); @@ -50,6 +89,8 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { let baggage_name = &info.baggage_names(); let baggage_ty = &info.baggage_types(); + let subsystem_ctx_name = format_ident!("{}SubsystemContext", overseer_name); + let error_ty = &info.extern_error_ty; let support_crate = info.support_crate_name(); @@ -155,7 +196,7 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { /// Convenience alias. type SubsystemInitFn = Box ::std::result::Result >; - /// Init kind of a field of the overseer. + /// Initialization type to be used for a field of the overseer. enum FieldInitMethod { /// Defer initialization to a point where the `handle` is available. Fn(SubsystemInitFn), @@ -242,13 +283,13 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { )* /// Complete the construction and create the overseer type. - pub fn build(mut self) -> ::std::result::Result<(#overseer_name #generics, #handle), #error_ty> { + pub fn build(self) -> ::std::result::Result<(#overseer_name #generics, #handle), #error_ty> { let connector = #connector ::default(); self.build_with_connector(connector) } /// Complete the construction and create the overseer type based on an existing `connector`. - pub fn build_with_connector(mut self, connector: #connector) -> ::std::result::Result<(#overseer_name #generics, #handle), #error_ty> + pub fn build_with_connector(self, connector: #connector) -> ::std::result::Result<(#overseer_name #generics, #handle), #error_ty> { let #connector { handle: events_tx, @@ -321,7 +362,6 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { #channel_name_tx, signal_tx, unbounded_meter, - channels_out.clone(), ctx, #subsystem_name, &mut running_subsystems, @@ -330,9 +370,9 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { #( let #baggage_name = self. #baggage_name .expect( - &format!("Baggage variable `{1}` of `{0}` ", - stringify!(#overseer_name), - stringify!( #baggage_name ) + &format!("Baggage variable `{0}` of `{1}` must be set by the user!", + stringify!(#baggage_name), + stringify!(#overseer_name) ) ); )* @@ -359,6 +399,83 @@ pub(crate) fn impl_builder(info: &OverseerInfo) -> proc_macro2::TokenStream { } } }; + + let mut acc = TokenStream::new(); + + for ( + ( + ( + ref modified_generics, + ref to_be_replaced_ty, + ref to_be_replaced_name, + ref to_keep_name, + ), + subsystem_name_replace_with, + ), + consumes, + ) in derive_replacable_generic_lists(info) + .into_iter() + .zip(subsystem_name_replace_with.iter()) + .zip(consumes.iter()) + { + let replace1 = quote! { + /// Replace a subsystem by another implementation for the + /// consumable message type. + pub fn #subsystem_name_replace_with < NEW, F > + (self, gen_replacement_fn: F) -> #builder #modified_generics + where + #to_be_replaced_ty: 'static, + F: 'static + FnOnce(#to_be_replaced_ty) -> NEW, + NEW: #support_crate ::Subsystem<#subsystem_ctx_name< #consumes >, #error_ty>, + { + + let Self { + #to_be_replaced_name, + #( + #to_keep_name, + )* + #( + #baggage_name, + )* + spawner, + } = self; + + // Some cases require that parts of the original are copied + // over, since they include a one time initialization. + let replacement: FieldInitMethod = match #to_be_replaced_name { + FieldInitMethod::Fn(fx) => FieldInitMethod::Fn( + Box::new(move |handle: #handle| { + let orig = fx(handle)?; + Ok(gen_replacement_fn(orig)) + }) + ), + FieldInitMethod::Value(val) => FieldInitMethod::Value(gen_replacement_fn(val)), + FieldInitMethod::Uninitialized => panic!("Must have a value before it can be replaced. qed"), + }; + + #builder :: #modified_generics { + #to_be_replaced_name: replacement, + #( + #to_keep_name, + )* + #( + #baggage_name, + )* + spawner, + } + } + }; + acc.extend(replace1); + } + + ts.extend(quote! { + impl #builder_generics #builder #builder_generics + #builder_where_clause + { + #acc + } + }); + ts.extend(impl_task_kind(info)); ts } @@ -369,9 +486,6 @@ pub(crate) fn impl_task_kind(info: &OverseerInfo) -> proc_macro2::TokenStream { let support_crate = info.support_crate_name(); let ts = quote! { - - use #support_crate ::FutureExt as _; - /// Task kind to launch. pub trait TaskKind { /// Spawn a task, it depends on the implementer if this is blocking or not. @@ -401,8 +515,6 @@ pub(crate) fn impl_task_kind(info: &OverseerInfo) -> proc_macro2::TokenStream { signal_tx: #support_crate ::metered::MeteredSender< #signal >, // meter for the unbounded channel unbounded_meter: #support_crate ::metered::Meter, - // connection to the subsystems - channels_out: ChannelsOut, ctx: Ctx, s: SubSys, futures: &mut #support_crate ::FuturesUnordered >>, diff --git a/node/overseer/overseer-gen/proc-macro/src/impl_channels_out.rs b/node/overseer/overseer-gen/proc-macro/src/impl_channels_out.rs index f2d6e88b360b..08744e6c520d 100644 --- a/node/overseer/overseer-gen/proc-macro/src/impl_channels_out.rs +++ b/node/overseer/overseer-gen/proc-macro/src/impl_channels_out.rs @@ -94,8 +94,6 @@ pub(crate) fn impl_channels_out_struct(info: &OverseerInfo) -> Result = match message { #( #message_wrapper :: #consumes_variant (inner) => { diff --git a/node/overseer/overseer-gen/proc-macro/src/impl_overseer.rs b/node/overseer/overseer-gen/proc-macro/src/impl_overseer.rs index cddd0534c6ea..54b207eb1960 100644 --- a/node/overseer/overseer-gen/proc-macro/src/impl_overseer.rs +++ b/node/overseer/overseer-gen/proc-macro/src/impl_overseer.rs @@ -56,8 +56,6 @@ pub(crate) fn impl_overseer_struct(info: &OverseerInfo) -> proc_macro2::TokenStr syn::LitStr::new(overseer_name.to_string().to_lowercase().as_str(), overseer_name.span()); let ts = quote! { - const STOP_DELAY: ::std::time::Duration = ::std::time::Duration::from_secs(1); - /// Capacity of a bounded message channel between overseer and subsystem /// but also for bounded channels between two subsystems. const CHANNEL_CAPACITY: usize = #message_channel_capacity; @@ -116,10 +114,9 @@ pub(crate) fn impl_overseer_struct(info: &OverseerInfo) -> proc_macro2::TokenStr loop { select! { - _ = self.running_subsystems.next() => { - if self.running_subsystems.is_empty() { - break; - } + _ = self.running_subsystems.next() => + if self.running_subsystems.is_empty() { + break; }, _ = timeout_fut => break, complete => break, @@ -187,9 +184,6 @@ pub(crate) fn impl_overseen_subsystem(info: &OverseerInfo) -> proc_macro2::Token let support_crate = info.support_crate_name(); let ts = quote::quote! { - - use #support_crate ::futures::SinkExt as _; - /// A subsystem that the overseer oversees. /// /// Ties together the [`Subsystem`] itself and it's running instance diff --git a/node/overseer/overseer-gen/proc-macro/src/lib.rs b/node/overseer/overseer-gen/proc-macro/src/lib.rs index b967acfe8b65..1a0634b29720 100644 --- a/node/overseer/overseer-gen/proc-macro/src/lib.rs +++ b/node/overseer/overseer-gen/proc-macro/src/lib.rs @@ -98,5 +98,28 @@ pub(crate) fn impl_overseer_gen( additive.extend(impl_message_wrapper_enum(&info)?); additive.extend(impl_dispatch(&info)); + #[cfg(feature = "expansion")] + { + use std::io::Write; + + let cwd = std::env::current_dir().unwrap(); + let path: std::path::PathBuf = cwd.join("overlord-expansion.rs"); + let mut f = std::fs::OpenOptions::new() + .write(true) + .create(true) + .truncate(true) + .open(&path) + .expect("File exists. qed"); + f.write_all( + &mut format!("// {:?} \n{}", std::time::SystemTime::now(), additive).as_bytes(), + ) + .expect("Got permissions to write to file. qed"); + std::process::Command::new("rustfmt") + .arg("--edition=2018") + .arg(&path) + .current_dir(cwd) + .spawn() + .expect("Running rustfmt works. qed"); + } Ok(additive) } diff --git a/node/overseer/src/dummy.rs b/node/overseer/src/dummy.rs index c3d3d4fcf3c8..09b594867fc0 100644 --- a/node/overseer/src/dummy.rs +++ b/node/overseer/src/dummy.rs @@ -14,8 +14,13 @@ // You should have received a copy of the GNU General Public License // along with Polkadot. If not, see . -use crate::{AllMessages, OverseerSignal}; -use polkadot_node_subsystem_types::errors::SubsystemError; +use crate::{ + prometheus::Registry, AllMessages, HeadSupportsParachains, MetricsTrait, Overseer, + OverseerBuilder, OverseerMetrics, OverseerSignal, OverseerSubsystemContext, SpawnNamed, + KNOWN_LEAVES_CACHE_SIZE, +}; +use lru::LruCache; +use polkadot_node_subsystem_types::{errors::SubsystemError, messages::*}; use polkadot_overseer_gen::{FromOverseer, SpawnedSubsystem, Subsystem, SubsystemContext}; /// A dummy subsystem that implements [`Subsystem`] for all @@ -52,3 +57,140 @@ where SpawnedSubsystem { name: "dummy-subsystem", future } } } + +/// Create an overseer with all subsystem being `Sub`. +/// +/// Preferred way of initializing a dummy overseer for subsystem tests. +pub fn dummy_overseer_builder<'a, Spawner, SupportsParachains>( + spawner: Spawner, + supports_parachains: SupportsParachains, + registry: Option<&'a Registry>, +) -> Result< + OverseerBuilder< + Spawner, + SupportsParachains, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + DummySubsystem, + >, + SubsystemError, +> +where + Spawner: SpawnNamed + Send + Sync + 'static, + SupportsParachains: HeadSupportsParachains, +{ + one_for_all_overseer_builder(spawner, supports_parachains, DummySubsystem, registry) +} + +/// Create an overseer with all subsystem being `Sub`. +pub fn one_for_all_overseer_builder<'a, Spawner, SupportsParachains, Sub>( + spawner: Spawner, + supports_parachains: SupportsParachains, + subsystem: Sub, + registry: Option<&'a Registry>, +) -> Result< + OverseerBuilder< + Spawner, + SupportsParachains, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + Sub, + >, + SubsystemError, +> +where + Spawner: SpawnNamed + Send + Sync + 'static, + SupportsParachains: HeadSupportsParachains, + Sub: Clone + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError> + + Subsystem, SubsystemError>, +{ + let metrics = ::register(registry)?; + + let builder = Overseer::builder() + .availability_distribution(subsystem.clone()) + .availability_recovery(subsystem.clone()) + .availability_store(subsystem.clone()) + .bitfield_distribution(subsystem.clone()) + .bitfield_signing(subsystem.clone()) + .candidate_backing(subsystem.clone()) + .candidate_validation(subsystem.clone()) + .chain_api(subsystem.clone()) + .collation_generation(subsystem.clone()) + .collator_protocol(subsystem.clone()) + .network_bridge(subsystem.clone()) + .provisioner(subsystem.clone()) + .runtime_api(subsystem.clone()) + .statement_distribution(subsystem.clone()) + .approval_distribution(subsystem.clone()) + .approval_voting(subsystem.clone()) + .gossip_support(subsystem.clone()) + .dispute_coordinator(subsystem.clone()) + .dispute_participation(subsystem.clone()) + .dispute_distribution(subsystem.clone()) + .chain_selection(subsystem) + .activation_external_listeners(Default::default()) + .span_per_active_leaf(Default::default()) + .active_leaves(Default::default()) + .known_leaves(LruCache::new(KNOWN_LEAVES_CACHE_SIZE)) + .leaves(Default::default()) + .spawner(spawner) + .metrics(metrics) + .supports_parachains(supports_parachains); + Ok(builder) +} diff --git a/node/overseer/src/lib.rs b/node/overseer/src/lib.rs index 90c958c7a5e0..331bf6378dda 100644 --- a/node/overseer/src/lib.rs +++ b/node/overseer/src/lib.rs @@ -62,7 +62,6 @@ use std::{ collections::{hash_map, HashMap}, fmt::{self, Debug}, - iter::FromIterator, pin::Pin, sync::Arc, time::Duration, @@ -90,17 +89,13 @@ pub use polkadot_node_subsystem_types::{ jaeger, ActivatedLeaf, ActiveLeavesUpdate, LeafStatus, OverseerSignal, }; -/// Test helper supplements. +pub mod metrics; +pub use self::metrics::Metrics as OverseerMetrics; + +/// A dummy subsystem, mostly useful for placeholders and tests. pub mod dummy; pub use self::dummy::DummySubsystem; -// TODO legacy, to be deleted, left for easier integration -// TODO https://github.com/paritytech/polkadot/issues/3427 -mod subsystems; -pub use self::subsystems::AllSubsystems; - -pub mod metrics; - pub use polkadot_node_metrics::{ metrics::{prometheus, Metrics as MetricsTrait}, Metronome, @@ -292,7 +287,119 @@ pub async fn forward_events>(client: Arc

, mut hand } } -/// The `Overseer` itself. +/// Create a new instance of the [`Overseer`] with a fixed set of [`Subsystem`]s. +/// +/// This returns the overseer along with an [`OverseerHandle`] which can +/// be used to send messages from external parts of the codebase. +/// +/// The [`OverseerHandle`] returned from this function is connected to +/// the returned [`Overseer`]. +/// +/// ```text +/// +------------------------------------+ +/// | Overseer | +/// +------------------------------------+ +/// / | | \ +/// ................. subsystems................................... +/// . +-----------+ +-----------+ +----------+ +---------+ . +/// . | | | | | | | | . +/// . +-----------+ +-----------+ +----------+ +---------+ . +/// ............................................................... +/// | +/// probably `spawn` +/// a `job` +/// | +/// V +/// +-----------+ +/// | | +/// +-----------+ +/// +/// ``` +/// +/// [`Subsystem`]: trait.Subsystem.html +/// +/// # Example +/// +/// The [`Subsystems`] may be any type as long as they implement an expected interface. +/// Here, we create a mock validation subsystem and a few dummy ones and start the `Overseer` with them. +/// For the sake of simplicity the termination of the example is done with a timeout. +/// ``` +/// # use std::time::Duration; +/// # use futures::{executor, pin_mut, select, FutureExt}; +/// # use futures_timer::Delay; +/// # use polkadot_primitives::v1::Hash; +/// # use polkadot_overseer::{ +/// # self as overseer, +/// # OverseerSignal, +/// # SubsystemSender as _, +/// # AllMessages, +/// # HeadSupportsParachains, +/// # Overseer, +/// # SubsystemError, +/// # gen::{ +/// # SubsystemContext, +/// # FromOverseer, +/// # SpawnedSubsystem, +/// # }, +/// # }; +/// # use polkadot_node_subsystem_types::messages::{ +/// # CandidateValidationMessage, CandidateBackingMessage, +/// # NetworkBridgeMessage, +/// # }; +/// +/// struct ValidationSubsystem; +/// +/// impl overseer::Subsystem for ValidationSubsystem +/// where +/// Ctx: overseer::SubsystemContext< +/// Message=CandidateValidationMessage, +/// AllMessages=AllMessages, +/// Signal=OverseerSignal, +/// Error=SubsystemError, +/// >, +/// { +/// fn start( +/// self, +/// mut ctx: Ctx, +/// ) -> SpawnedSubsystem { +/// SpawnedSubsystem { +/// name: "validation-subsystem", +/// future: Box::pin(async move { +/// loop { +/// Delay::new(Duration::from_secs(1)).await; +/// } +/// }), +/// } +/// } +/// } +/// +/// # fn main() { executor::block_on(async move { +/// +/// struct AlwaysSupportsParachains; +/// impl HeadSupportsParachains for AlwaysSupportsParachains { +/// fn head_supports_parachains(&self, _head: &Hash) -> bool { true } +/// } +/// let spawner = sp_core::testing::TaskExecutor::new(); +/// let (overseer, _handle) = dummy_overseer_builder(spawner, AlwaysSupportsParachains, None) +/// .unwrap() +/// .replace_candidate_validation(|_| ValidationSubsystem) +/// .build() +/// .unwrap(); +/// +/// let timer = Delay::new(Duration::from_millis(50)).fuse(); +/// +/// let overseer_fut = overseer.run().fuse(); +/// pin_mut!(timer); +/// pin_mut!(overseer_fut); +/// +/// select! { +/// _ = overseer_fut => (), +/// _ = timer => (), +/// } +/// # +/// # }); +/// # } +/// ``` #[overlord( gen=AllMessages, event=Event, @@ -385,321 +492,67 @@ pub struct Overseer { pub known_leaves: LruCache, /// Various Prometheus metrics. - pub metrics: crate::metrics::Metrics, + pub metrics: OverseerMetrics, } -impl Overseer +/// Spawn the metrics metronome task. +pub fn spawn_metronome_metrics( + overseer: &mut Overseer, + metronome_metrics: OverseerMetrics, +) -> Result<(), SubsystemError> where - SupportsParachains: HeadSupportsParachains, S: SpawnNamed, + SupportsParachains: HeadSupportsParachains, { - /// Create a new instance of the [`Overseer`] with a fixed set of [`Subsystem`]s. - /// - /// This returns the overseer along with an [`OverseerHandle`] which can - /// be used to send messages from external parts of the codebase. - /// - /// The [`OverseerHandle`] returned from this function is connected to - /// the returned [`Overseer`]. - /// - /// ```text - /// +------------------------------------+ - /// | Overseer | - /// +------------------------------------+ - /// / | | \ - /// ................. subsystems................................... - /// . +-----------+ +-----------+ +----------+ +---------+ . - /// . | | | | | | | | . - /// . +-----------+ +-----------+ +----------+ +---------+ . - /// ............................................................... - /// | - /// probably `spawn` - /// a `job` - /// | - /// V - /// +-----------+ - /// | | - /// +-----------+ - /// - /// ``` - /// - /// [`Subsystem`]: trait.Subsystem.html - /// - /// # Example - /// - /// The [`Subsystems`] may be any type as long as they implement an expected interface. - /// Here, we create a mock validation subsystem and a few dummy ones and start the `Overseer` with them. - /// For the sake of simplicity the termination of the example is done with a timeout. - /// ``` - /// # use std::time::Duration; - /// # use futures::{executor, pin_mut, select, FutureExt}; - /// # use futures_timer::Delay; - /// # use polkadot_primitives::v1::Hash; - /// # use polkadot_overseer::{ - /// # self as overseer, - /// # Overseer, - /// # OverseerSignal, - /// # OverseerConnector, - /// # SubsystemSender as _, - /// # AllMessages, - /// # AllSubsystems, - /// # HeadSupportsParachains, - /// # SubsystemError, - /// # gen::{ - /// # SubsystemContext, - /// # FromOverseer, - /// # SpawnedSubsystem, - /// # }, - /// # }; - /// # use polkadot_node_subsystem_types::messages::{ - /// # CandidateValidationMessage, CandidateBackingMessage, - /// # NetworkBridgeMessage, - /// # }; - /// - /// struct ValidationSubsystem; - /// - /// impl overseer::Subsystem for ValidationSubsystem - /// where - /// Ctx: overseer::SubsystemContext< - /// Message=CandidateValidationMessage, - /// AllMessages=AllMessages, - /// Signal=OverseerSignal, - /// Error=SubsystemError, - /// >, - /// { - /// fn start( - /// self, - /// mut ctx: Ctx, - /// ) -> SpawnedSubsystem { - /// SpawnedSubsystem { - /// name: "validation-subsystem", - /// future: Box::pin(async move { - /// loop { - /// Delay::new(Duration::from_secs(1)).await; - /// } - /// }), - /// } - /// } - /// } - /// - /// # fn main() { executor::block_on(async move { - /// - /// struct AlwaysSupportsParachains; - /// impl HeadSupportsParachains for AlwaysSupportsParachains { - /// fn head_supports_parachains(&self, _head: &Hash) -> bool { true } - /// } - /// let spawner = sp_core::testing::TaskExecutor::new(); - /// let all_subsystems = AllSubsystems::<()>::dummy() - /// .replace_candidate_validation(|_| ValidationSubsystem); - /// let (overseer, _handle) = Overseer::new( - /// vec![], - /// all_subsystems, - /// None, - /// AlwaysSupportsParachains, - /// spawner, - /// OverseerConnector::default(), - /// ).unwrap(); - /// - /// let timer = Delay::new(Duration::from_millis(50)).fuse(); - /// - /// let overseer_fut = overseer.run().fuse(); - /// pin_mut!(timer); - /// pin_mut!(overseer_fut); - /// - /// select! { - /// _ = overseer_fut => (), - /// _ = timer => (), - /// } - /// # - /// # }); - /// # } - /// ``` - pub fn new< - CV, - CB, - SD, - AD, - AR, - BS, - BD, - P, - RA, - AS, - NB, - CA, - CG, - CP, - ApD, - ApV, - GS, - DC, - DP, - DD, - CS, - >( - leaves: impl IntoIterator, - all_subsystems: AllSubsystems< - CV, - CB, - SD, - AD, - AR, - BS, - BD, - P, - RA, - AS, - NB, - CA, - CG, - CP, - ApD, - ApV, - GS, - DC, - DP, - DD, - CS, - >, - prometheus_registry: Option<&prometheus::Registry>, - supports_parachains: SupportsParachains, - s: S, - connector: OverseerConnector, - ) -> SubsystemResult<(Self, OverseerHandle)> - where - CV: Subsystem, SubsystemError> + Send, - CB: Subsystem, SubsystemError> + Send, - SD: Subsystem, SubsystemError> - + Send, - AD: Subsystem, SubsystemError> - + Send, - AR: Subsystem, SubsystemError> + Send, - BS: Subsystem, SubsystemError> + Send, - BD: Subsystem, SubsystemError> + Send, - P: Subsystem, SubsystemError> + Send, - RA: Subsystem, SubsystemError> + Send, - AS: Subsystem, SubsystemError> + Send, - NB: Subsystem, SubsystemError> + Send, - CA: Subsystem, SubsystemError> + Send, - CG: Subsystem, SubsystemError> + Send, - CP: Subsystem, SubsystemError> + Send, - ApD: - Subsystem, SubsystemError> + Send, - ApV: Subsystem, SubsystemError> + Send, - GS: Subsystem, SubsystemError> + Send, - DC: Subsystem, SubsystemError> + Send, - DP: Subsystem, SubsystemError> + Send, - DD: Subsystem, SubsystemError> + Send, - CS: Subsystem, SubsystemError> + Send, - S: SpawnNamed, - { - let metrics = ::register(prometheus_registry)?; - - let (mut overseer, handle) = Self::builder() - .candidate_validation(all_subsystems.candidate_validation) - .candidate_backing(all_subsystems.candidate_backing) - .statement_distribution(all_subsystems.statement_distribution) - .availability_distribution(all_subsystems.availability_distribution) - .availability_recovery(all_subsystems.availability_recovery) - .bitfield_signing(all_subsystems.bitfield_signing) - .bitfield_distribution(all_subsystems.bitfield_distribution) - .provisioner(all_subsystems.provisioner) - .runtime_api(all_subsystems.runtime_api) - .availability_store(all_subsystems.availability_store) - .network_bridge(all_subsystems.network_bridge) - .chain_api(all_subsystems.chain_api) - .collation_generation(all_subsystems.collation_generation) - .collator_protocol(all_subsystems.collator_protocol) - .approval_distribution(all_subsystems.approval_distribution) - .approval_voting(all_subsystems.approval_voting) - .gossip_support(all_subsystems.gossip_support) - .dispute_coordinator(all_subsystems.dispute_coordinator) - .dispute_participation(all_subsystems.dispute_participation) - .dispute_distribution(all_subsystems.dispute_distribution) - .chain_selection(all_subsystems.chain_selection) - .leaves(Vec::from_iter( - leaves - .into_iter() - .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), - )) - .known_leaves(LruCache::new(KNOWN_LEAVES_CACHE_SIZE)) - .active_leaves(Default::default()) - .span_per_active_leaf(Default::default()) - .activation_external_listeners(Default::default()) - .supports_parachains(supports_parachains) - .metrics(metrics.clone()) - .spawner(s) - .build_with_connector(connector)?; - - // spawn the metrics metronome task - { - struct ExtractNameAndMeters; - - impl<'a, T: 'a> MapSubsystem<&'a OverseenSubsystem> for ExtractNameAndMeters { - type Output = Option<(&'static str, SubsystemMeters)>; - - fn map_subsystem(&self, subsystem: &'a OverseenSubsystem) -> Self::Output { - subsystem - .instance - .as_ref() - .map(|instance| (instance.name, instance.meters.clone())) - } - } - let subsystem_meters = overseer.map_subsystems(ExtractNameAndMeters); + struct ExtractNameAndMeters; - let memory_stats = match MemoryAllocationTracker::new() { - Ok(memory_stats) => Some(memory_stats), - Err(error) => { - tracing::debug!( - target: LOG_TARGET, - "Failed to initialize memory allocation tracker: {:?}", - error - ); + impl<'a, T: 'a> MapSubsystem<&'a OverseenSubsystem> for ExtractNameAndMeters { + type Output = Option<(&'static str, SubsystemMeters)>; - None - }, - }; - - let metronome_metrics = metrics.clone(); - let metronome = - Metronome::new(std::time::Duration::from_millis(950)).for_each(move |_| { - if let Some(ref memory_stats) = memory_stats { - match memory_stats.snapshot() { - Ok(memory_stats_snapshot) => { - tracing::trace!( - target: LOG_TARGET, - "memory_stats: {:?}", - &memory_stats_snapshot - ); - metronome_metrics.memory_stats_snapshot(memory_stats_snapshot); - }, - - Err(e) => tracing::debug!( - target: LOG_TARGET, - "Failed to obtain memory stats: {:?}", - e - ), - } - } + fn map_subsystem(&self, subsystem: &'a OverseenSubsystem) -> Self::Output { + subsystem + .instance + .as_ref() + .map(|instance| (instance.name, instance.meters.clone())) + } + } + let subsystem_meters = overseer.map_subsystems(ExtractNameAndMeters); - // We combine the amount of messages from subsystems to the overseer - // as well as the amount of messages from external sources to the overseer - // into one `to_overseer` value. - metronome_metrics.channel_fill_level_snapshot( - subsystem_meters - .iter() - .cloned() - .filter_map(|x| x) - .map(|(name, ref meters)| (name, meters.read())), - ); + let memory_stats = + MemoryAllocationTracker::new().expect("Jemalloc is the default allocator. qed"); - async move { () } - }); - overseer.spawner().spawn("metrics_metronome", Box::pin(metronome)); + let metronome = Metronome::new(std::time::Duration::from_millis(950)).for_each(move |_| { + match memory_stats.snapshot() { + Ok(memory_stats_snapshot) => { + tracing::trace!(target: LOG_TARGET, "memory_stats: {:?}", &memory_stats_snapshot); + metronome_metrics.memory_stats_snapshot(memory_stats_snapshot); + }, + + Err(e) => tracing::debug!(target: LOG_TARGET, "Failed to obtain memory stats: {:?}", e), } - Ok((overseer, handle)) - } + // We combine the amount of messages from subsystems to the overseer + // as well as the amount of messages from external sources to the overseer + // into one `to_overseer` value. + metronome_metrics.channel_fill_level_snapshot( + subsystem_meters + .iter() + .cloned() + .filter_map(|x| x) + .map(|(name, ref meters)| (name, meters.read())), + ); + + futures::future::ready(()) + }); + overseer.spawner().spawn("metrics_metronome", Box::pin(metronome)); + Ok(()) +} +impl Overseer +where + SupportsParachains: HeadSupportsParachains, + S: SpawnNamed, +{ /// Stop the overseer. async fn stop(mut self) { let _ = self.wait_terminate(OverseerSignal::Conclude, Duration::from_secs(1_u64)).await; @@ -707,6 +560,9 @@ where /// Run the `Overseer`. pub async fn run(mut self) -> SubsystemResult<()> { + let metrics = self.metrics.clone(); + spawn_metronome_metrics(&mut self, metrics)?; + // Notify about active leaves on startup before starting the loop for (hash, number) in std::mem::take(&mut self.leaves) { let _ = self.active_leaves.insert(hash, number); diff --git a/node/overseer/src/subsystems.rs b/node/overseer/src/subsystems.rs deleted file mode 100644 index 695d368dc16c..000000000000 --- a/node/overseer/src/subsystems.rs +++ /dev/null @@ -1,344 +0,0 @@ -// Copyright 2020 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 . - -//! Legacy way of defining subsystems. -//! -//! In the future, everything should be set up using the generated -//! overseer builder pattern instead. - -use crate::dummy::DummySubsystem; -use polkadot_overseer_all_subsystems_gen::AllSubsystemsGen; -use polkadot_overseer_gen::MapSubsystem; - -/// This struct is passed as an argument to create a new instance of an [`Overseer`]. -/// -/// As any entity that satisfies the interface may act as a [`Subsystem`] this allows -/// mocking in the test code: -/// -/// Each [`Subsystem`] is supposed to implement some interface that is generic over -/// message type that is specific to this [`Subsystem`]. At the moment not all -/// subsystems are implemented and the rest can be mocked with the [`DummySubsystem`]. -#[derive(Debug, Clone, AllSubsystemsGen)] -pub struct AllSubsystems< - CV = (), - CB = (), - SD = (), - AD = (), - AR = (), - BS = (), - BD = (), - P = (), - RA = (), - AS = (), - NB = (), - CA = (), - CG = (), - CP = (), - ApD = (), - ApV = (), - GS = (), - DC = (), - DP = (), - DD = (), - CS = (), -> { - /// A candidate validation subsystem. - pub candidate_validation: CV, - /// A candidate backing subsystem. - pub candidate_backing: CB, - /// A statement distribution subsystem. - pub statement_distribution: SD, - /// An availability distribution subsystem. - pub availability_distribution: AD, - /// An availability recovery subsystem. - pub availability_recovery: AR, - /// A bitfield signing subsystem. - pub bitfield_signing: BS, - /// A bitfield distribution subsystem. - pub bitfield_distribution: BD, - /// A provisioner subsystem. - pub provisioner: P, - /// A runtime API subsystem. - pub runtime_api: RA, - /// An availability store subsystem. - pub availability_store: AS, - /// A network bridge subsystem. - pub network_bridge: NB, - /// A Chain API subsystem. - pub chain_api: CA, - /// A Collation Generation subsystem. - pub collation_generation: CG, - /// A Collator Protocol subsystem. - pub collator_protocol: CP, - /// An Approval Distribution subsystem. - pub approval_distribution: ApD, - /// An Approval Voting subsystem. - pub approval_voting: ApV, - /// A Connection Request Issuer subsystem. - pub gossip_support: GS, - /// A Dispute Coordinator subsystem. - pub dispute_coordinator: DC, - /// A Dispute Participation subsystem. - pub dispute_participation: DP, - /// A Dispute Distribution subsystem. - pub dispute_distribution: DD, - /// A Chain Selection subsystem. - pub chain_selection: CS, -} - -impl - AllSubsystems -{ - /// Create a new instance of [`AllSubsystems`]. - /// - /// Each subsystem is set to [`DummySystem`]. - /// - ///# Note - /// - /// Because of a bug in rustc it is required that when calling this function, - /// you provide a "random" type for the first generic parameter: - /// - /// ``` - /// polkadot_overseer::AllSubsystems::<()>::dummy(); - /// ``` - pub fn dummy() -> AllSubsystems< - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - DummySubsystem, - > { - AllSubsystems { - candidate_validation: DummySubsystem, - candidate_backing: DummySubsystem, - statement_distribution: DummySubsystem, - availability_distribution: DummySubsystem, - availability_recovery: DummySubsystem, - bitfield_signing: DummySubsystem, - bitfield_distribution: DummySubsystem, - provisioner: DummySubsystem, - runtime_api: DummySubsystem, - availability_store: DummySubsystem, - network_bridge: DummySubsystem, - chain_api: DummySubsystem, - collation_generation: DummySubsystem, - collator_protocol: DummySubsystem, - approval_distribution: DummySubsystem, - approval_voting: DummySubsystem, - gossip_support: DummySubsystem, - dispute_coordinator: DummySubsystem, - dispute_participation: DummySubsystem, - dispute_distribution: DummySubsystem, - chain_selection: DummySubsystem, - } - } - - /// Reference every individual subsystem. - pub fn as_ref( - &self, - ) -> AllSubsystems< - &'_ CV, - &'_ CB, - &'_ SD, - &'_ AD, - &'_ AR, - &'_ BS, - &'_ BD, - &'_ P, - &'_ RA, - &'_ AS, - &'_ NB, - &'_ CA, - &'_ CG, - &'_ CP, - &'_ ApD, - &'_ ApV, - &'_ GS, - &'_ DC, - &'_ DP, - &'_ DD, - &'_ CS, - > { - AllSubsystems { - candidate_validation: &self.candidate_validation, - candidate_backing: &self.candidate_backing, - statement_distribution: &self.statement_distribution, - availability_distribution: &self.availability_distribution, - availability_recovery: &self.availability_recovery, - bitfield_signing: &self.bitfield_signing, - bitfield_distribution: &self.bitfield_distribution, - provisioner: &self.provisioner, - runtime_api: &self.runtime_api, - availability_store: &self.availability_store, - network_bridge: &self.network_bridge, - chain_api: &self.chain_api, - collation_generation: &self.collation_generation, - collator_protocol: &self.collator_protocol, - approval_distribution: &self.approval_distribution, - approval_voting: &self.approval_voting, - gossip_support: &self.gossip_support, - dispute_coordinator: &self.dispute_coordinator, - dispute_participation: &self.dispute_participation, - dispute_distribution: &self.dispute_distribution, - chain_selection: &self.chain_selection, - } - } - - /// Map each subsystem. - pub fn map_subsystems( - self, - mapper: Mapper, - ) -> AllSubsystems< - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - >::Output, - > - where - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem

, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem, - Mapper: MapSubsystem

, - Mapper: MapSubsystem, - { - AllSubsystems { - candidate_validation: >::map_subsystem( - &mapper, - self.candidate_validation, - ), - candidate_backing: >::map_subsystem( - &mapper, - self.candidate_backing, - ), - statement_distribution: >::map_subsystem( - &mapper, - self.statement_distribution, - ), - availability_distribution: >::map_subsystem( - &mapper, - self.availability_distribution, - ), - availability_recovery: >::map_subsystem( - &mapper, - self.availability_recovery, - ), - bitfield_signing: >::map_subsystem( - &mapper, - self.bitfield_signing, - ), - bitfield_distribution: >::map_subsystem( - &mapper, - self.bitfield_distribution, - ), - provisioner: >::map_subsystem(&mapper, self.provisioner), - runtime_api: >::map_subsystem(&mapper, self.runtime_api), - availability_store: >::map_subsystem( - &mapper, - self.availability_store, - ), - network_bridge: >::map_subsystem( - &mapper, - self.network_bridge, - ), - chain_api: >::map_subsystem(&mapper, self.chain_api), - collation_generation: >::map_subsystem( - &mapper, - self.collation_generation, - ), - collator_protocol: >::map_subsystem( - &mapper, - self.collator_protocol, - ), - approval_distribution: >::map_subsystem( - &mapper, - self.approval_distribution, - ), - approval_voting: >::map_subsystem( - &mapper, - self.approval_voting, - ), - gossip_support: >::map_subsystem( - &mapper, - self.gossip_support, - ), - dispute_coordinator: >::map_subsystem( - &mapper, - self.dispute_coordinator, - ), - dispute_participation: >::map_subsystem( - &mapper, - self.dispute_participation, - ), - dispute_distribution: >::map_subsystem( - &mapper, - self.dispute_distribution, - ), - chain_selection: >::map_subsystem( - &mapper, - self.chain_selection, - ), - } - } -} diff --git a/node/overseer/src/tests.rs b/node/overseer/src/tests.rs index e8edab17679e..2ab2e01afe96 100644 --- a/node/overseer/src/tests.rs +++ b/node/overseer/src/tests.rs @@ -32,7 +32,12 @@ use polkadot_primitives::v1::{ ValidatorIndex, }; -use crate::{self as overseer, gen::Delay, HeadSupportsParachains, Overseer, OverseerConnector}; +use crate::{ + self as overseer, + dummy::{dummy_overseer_builder, one_for_all_overseer_builder}, + gen::Delay, + HeadSupportsParachains, +}; use metered_channel as metered; use assert_matches::assert_matches; @@ -40,6 +45,15 @@ use sp_core::crypto::Pair as _; use super::*; +fn block_info_to_pair(blocks: impl IntoIterator) -> Vec<(Hash, BlockNumber)> { + use std::iter::FromIterator; + Vec::from_iter( + blocks + .into_iter() + .map(|BlockInfo { hash, parent_hash: _, number }| (hash, number)), + ) +} + type SpawnedSubsystem = crate::gen::SpawnedSubsystem; struct TestSubsystem1(metered::MeteredSender); @@ -159,20 +173,12 @@ fn overseer_works() { let mut s1_rx = s1_rx.fuse(); let mut s2_rx = s2_rx.fuse(); - - let all_subsystems = AllSubsystems::<()>::dummy() + let (overseer, handle) = dummy_overseer_builder(spawner, MockSupportsParachains, None) + .unwrap() .replace_candidate_validation(move |_| TestSubsystem1(s1_tx)) - .replace_candidate_backing(move |_| TestSubsystem2(s2_tx)); - - let (overseer, handle) = Overseer::new( - vec![], - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + .replace_candidate_backing(move |_| TestSubsystem2(s2_tx)) + .build() + .unwrap(); let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); @@ -226,17 +232,14 @@ fn overseer_metrics_work() { let third_block = BlockInfo { hash: third_block_hash, parent_hash: second_block_hash, number: 3 }; - let all_subsystems = AllSubsystems::<()>::dummy(); let registry = prometheus::Registry::new(); - let (overseer, handle) = Overseer::new( - vec![first_block], - all_subsystems, - Some(®istry), - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + let (overseer, handle) = + dummy_overseer_builder(spawner, MockSupportsParachains, Some(®istry)) + .unwrap() + .leaves(block_info_to_pair(vec![first_block])) + .build() + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); @@ -264,13 +267,20 @@ fn overseer_metrics_work() { fn extract_metrics(registry: &prometheus::Registry) -> HashMap<&'static str, u64> { let gather = registry.gather(); - let gather = &gather[2..]; - assert_eq!(gather[0].get_name(), "parachain_activated_heads_total"); - assert_eq!(gather[1].get_name(), "parachain_deactivated_heads_total"); - assert_eq!(gather[2].get_name(), "parachain_messages_relayed_total"); - let activated = gather[0].get_metric()[0].get_counter().get_value() as u64; - let deactivated = gather[1].get_metric()[0].get_counter().get_value() as u64; - let relayed = gather[2].get_metric()[0].get_counter().get_value() as u64; + assert!(!gather.is_empty(), "Gathered metrics are not empty. qed"); + let extract = |name: &str| -> u64 { + gather + .iter() + .find(|&mf| dbg!(mf.get_name()) == dbg!(name)) + .expect(&format!("Must contain `{}` metric", name)) + .get_metric()[0] + .get_counter() + .get_value() as u64 + }; + + let activated = extract("parachain_activated_heads_total"); + let deactivated = extract("parachain_deactivated_heads_total"); + let relayed = extract("parachain_messages_relayed_total"); let mut result = HashMap::new(); result.insert("activated", activated); result.insert("deactivated", deactivated); @@ -286,17 +296,11 @@ fn overseer_ends_on_subsystem_exit() { let spawner = sp_core::testing::TaskExecutor::new(); executor::block_on(async move { - let all_subsystems = - AllSubsystems::<()>::dummy().replace_candidate_backing(|_| ReturnOnStart); - let (overseer, _handle) = Overseer::new( - vec![], - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + let (overseer, _handle) = dummy_overseer_builder(spawner, MockSupportsParachains, None) + .unwrap() + .replace_candidate_backing(|_| ReturnOnStart) + .build() + .unwrap(); overseer.run().await.unwrap(); }) @@ -394,18 +398,14 @@ fn overseer_start_stop_works() { let (tx_5, mut rx_5) = metered::channel(64); let (tx_6, mut rx_6) = metered::channel(64); - let all_subsystems = AllSubsystems::<()>::dummy() + + let (overseer, handle) = dummy_overseer_builder(spawner, MockSupportsParachains, None) + .unwrap() .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) - .replace_candidate_backing(move |_| TestSubsystem6(tx_6)); - let (overseer, handle) = Overseer::new( - vec![first_block], - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + .replace_candidate_backing(move |_| TestSubsystem6(tx_6)) + .leaves(block_info_to_pair(vec![first_block])) + .build() + .unwrap(); let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); @@ -496,20 +496,15 @@ fn overseer_finalize_works() { let (tx_5, mut rx_5) = metered::channel(64); let (tx_6, mut rx_6) = metered::channel(64); - let all_subsystems = AllSubsystems::<()>::dummy() - .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) - .replace_candidate_backing(move |_| TestSubsystem6(tx_6)); - // start with two forks of different height. - let (overseer, handle) = Overseer::new( - vec![first_block, second_block], - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + + let (overseer, handle) = dummy_overseer_builder(spawner, MockSupportsParachains, None) + .unwrap() + .replace_candidate_validation(move |_| TestSubsystem5(tx_5)) + .replace_candidate_backing(move |_| TestSubsystem6(tx_6)) + .leaves(block_info_to_pair(vec![first_block, second_block])) + .build() + .unwrap(); let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); @@ -592,18 +587,12 @@ fn do_not_send_empty_leaves_update_on_block_finalization() { let (tx_5, mut rx_5) = metered::channel(64); - let all_subsystems = - AllSubsystems::<()>::dummy().replace_candidate_backing(move |_| TestSubsystem6(tx_5)); - - let (overseer, handle) = Overseer::new( - Vec::new(), - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); + let (overseer, handle) = dummy_overseer_builder(spawner, MockSupportsParachains, None) + .unwrap() + .replace_candidate_backing(move |_| TestSubsystem6(tx_5)) + .build() + .unwrap(); + let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); @@ -854,39 +843,12 @@ fn overseer_all_subsystems_receive_signals_and_messages() { msgs_received.clone(), ); - let all_subsystems = AllSubsystems { - candidate_validation: subsystem.clone(), - candidate_backing: subsystem.clone(), - collation_generation: subsystem.clone(), - collator_protocol: subsystem.clone(), - statement_distribution: subsystem.clone(), - availability_distribution: subsystem.clone(), - availability_recovery: subsystem.clone(), - bitfield_signing: subsystem.clone(), - bitfield_distribution: subsystem.clone(), - provisioner: subsystem.clone(), - runtime_api: subsystem.clone(), - availability_store: subsystem.clone(), - network_bridge: subsystem.clone(), - chain_api: subsystem.clone(), - approval_distribution: subsystem.clone(), - approval_voting: subsystem.clone(), - gossip_support: subsystem.clone(), - dispute_coordinator: subsystem.clone(), - dispute_participation: subsystem.clone(), - dispute_distribution: subsystem.clone(), - chain_selection: subsystem.clone(), - }; + let (overseer, handle) = + one_for_all_overseer_builder(spawner, MockSupportsParachains, subsystem, None) + .unwrap() + .build() + .unwrap(); - let (overseer, handle) = Overseer::new( - vec![], - all_subsystems, - None, - MockSupportsParachains, - spawner, - OverseerConnector::default(), - ) - .unwrap(); let mut handle = Handle::new(handle); let overseer_fut = overseer.run().fuse(); diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 8d00e8b0cb39..7544dd8d7214 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -224,7 +224,7 @@ pub struct Collation { pub hrmp_watermark: BlockNumber, } -/// Signal that is being returned back when a collation was seconded by a validator. +/// Signal that is being returned when a collation was seconded by a validator. #[derive(Debug)] pub struct CollationSecondedSignal { /// The hash of the relay chain block that was used as context to sign [`Self::statement`]. diff --git a/node/service/src/lib.rs b/node/service/src/lib.rs index d4c8cdc16a7c..a1005f284686 100644 --- a/node/service/src/lib.rs +++ b/node/service/src/lib.rs @@ -24,12 +24,10 @@ mod parachains_db; mod relay_chain_selection; #[cfg(feature = "full-node")] -mod overseer; +pub mod overseer; #[cfg(feature = "full-node")] -pub use self::overseer::{ - create_default_subsystems, OverseerGen, OverseerGenArgs, RealOverseerGen, -}; +pub use self::overseer::{OverseerGen, OverseerGenArgs, RealOverseerGen}; #[cfg(all(test, feature = "disputes"))] mod tests; @@ -56,6 +54,7 @@ pub use sp_core::traits::SpawnNamed; pub use { polkadot_overseer::{Handle, Overseer, OverseerConnector, OverseerHandle}, polkadot_primitives::v1::ParachainHost, + relay_chain_selection::SelectRelayChain, sc_client_api::AuxStore, sp_authority_discovery::AuthorityDiscoveryApi, sp_blockchain::HeaderBackend, @@ -736,14 +735,13 @@ where is_relay_chain && (role.is_authority() || is_collator.is_collator()); - use relay_chain_selection::SelectRelayChain; - let select_chain = SelectRelayChain::new( basics.backend.clone(), overseer_handle.clone(), requires_overseer_for_chain_sel, polkadot_node_subsystem_util::metrics::Metrics::register(prometheus_registry.as_ref())?, ); + let service::PartialComponents::<_, _, SelectRelayChain<_>, _, _, _> { client, backend, @@ -1292,6 +1290,7 @@ where Ok((task_manager, rpc_handlers)) } +#[cfg(feature = "full-node")] macro_rules! chain_ops { ($config:expr, $jaeger_agent:expr, $telemetry_worker_handle:expr; $scope:ident, $executor:ident, $variant:ident) => {{ let telemetry_worker_handle = $telemetry_worker_handle; @@ -1354,7 +1353,6 @@ pub fn new_chain_ops( { return chain_ops!(config, jaeger_agent, telemetry_worker_handle; polkadot_runtime, PolkadotExecutorDispatch, Polkadot) } - #[cfg(not(feature = "polkadot-native"))] Err(Error::NoRuntime) } diff --git a/node/service/src/overseer.rs b/node/service/src/overseer.rs index 6cdc8eaf242e..4651626d46b5 100644 --- a/node/service/src/overseer.rs +++ b/node/service/src/overseer.rs @@ -24,10 +24,13 @@ use polkadot_node_core_chain_selection::Config as ChainSelectionConfig; use polkadot_node_core_dispute_coordinator::Config as DisputeCoordinatorConfig; use polkadot_node_network_protocol::request_response::{v1 as request_v1, IncomingRequestReceiver}; #[cfg(any(feature = "malus", test))] -pub use polkadot_overseer::dummy::DummySubsystem; pub use polkadot_overseer::{ - metrics::Metrics, AllSubsystems, BlockInfo, HeadSupportsParachains, MetricsTrait, Overseer, - OverseerBuilder, OverseerConnector, OverseerHandle, + dummy::{dummy_overseer_builder, DummySubsystem}, + HeadSupportsParachains, +}; +use polkadot_overseer::{ + metrics::Metrics as OverseerMetrics, BlockInfo, MetricsTrait, Overseer, OverseerBuilder, + OverseerConnector, OverseerHandle, }; use polkadot_primitives::v1::ParachainHost; @@ -106,165 +109,6 @@ where pub dispute_coordinator_config: DisputeCoordinatorConfig, } -/// Create a default, unaltered set of subsystems. -/// -/// A convenience for usage with malus, to avoid -/// repetitive code across multiple behavior strain implementations. -pub fn create_default_subsystems<'a, Spawner, RuntimeClient>( - OverseerGenArgs { - keystore, - runtime_client, - parachains_db, - network_service, - authority_discovery_service, - pov_req_receiver, - chunk_req_receiver, - collation_req_receiver, - available_data_req_receiver, - statement_req_receiver, - dispute_req_receiver, - registry, - spawner, - is_collator, - approval_voting_config, - availability_config, - candidate_validation_config, - chain_selection_config, - dispute_coordinator_config, - .. - }: OverseerGenArgs<'a, Spawner, RuntimeClient>, -) -> Result< - AllSubsystems< - CandidateValidationSubsystem, - CandidateBackingSubsystem, - StatementDistributionSubsystem, - AvailabilityDistributionSubsystem, - AvailabilityRecoverySubsystem, - BitfieldSigningSubsystem, - BitfieldDistributionSubsystem, - ProvisionerSubsystem, - RuntimeApiSubsystem, - AvailabilityStoreSubsystem, - NetworkBridgeSubsystem< - Arc>, - AuthorityDiscoveryService, - >, - ChainApiSubsystem, - CollationGenerationSubsystem, - CollatorProtocolSubsystem, - ApprovalDistributionSubsystem, - ApprovalVotingSubsystem, - GossipSupportSubsystem, - DisputeCoordinatorSubsystem, - DisputeParticipationSubsystem, - DisputeDistributionSubsystem, - ChainSelectionSubsystem, - >, - Error, -> -where - RuntimeClient: 'static + ProvideRuntimeApi + HeaderBackend + AuxStore, - RuntimeClient::Api: ParachainHost + BabeApi + AuthorityDiscoveryApi, - Spawner: 'static + SpawnNamed + Clone + Unpin, -{ - use polkadot_node_subsystem_util::metrics::Metrics; - - let all_subsystems = AllSubsystems { - availability_distribution: AvailabilityDistributionSubsystem::new( - keystore.clone(), - IncomingRequestReceivers { pov_req_receiver, chunk_req_receiver }, - Metrics::register(registry)?, - ), - availability_recovery: AvailabilityRecoverySubsystem::with_chunks_only( - available_data_req_receiver, - Metrics::register(registry)?, - ), - availability_store: AvailabilityStoreSubsystem::new( - parachains_db.clone(), - availability_config, - Metrics::register(registry)?, - ), - bitfield_distribution: BitfieldDistributionSubsystem::new(Metrics::register(registry)?), - bitfield_signing: BitfieldSigningSubsystem::new( - spawner.clone(), - keystore.clone(), - Metrics::register(registry)?, - ), - candidate_backing: CandidateBackingSubsystem::new( - spawner.clone(), - keystore.clone(), - Metrics::register(registry)?, - ), - candidate_validation: CandidateValidationSubsystem::with_config( - candidate_validation_config, - Metrics::register(registry)?, // candidate-validation metrics - Metrics::register(registry)?, // validation host metrics - ), - chain_api: ChainApiSubsystem::new(runtime_client.clone(), Metrics::register(registry)?), - collation_generation: CollationGenerationSubsystem::new(Metrics::register(registry)?), - collator_protocol: { - let side = match is_collator { - IsCollator::Yes(collator_pair) => ProtocolSide::Collator( - network_service.local_peer_id().clone(), - collator_pair, - collation_req_receiver, - Metrics::register(registry)?, - ), - IsCollator::No => ProtocolSide::Validator { - keystore: keystore.clone(), - eviction_policy: Default::default(), - metrics: Metrics::register(registry)?, - }, - }; - CollatorProtocolSubsystem::new(side) - }, - network_bridge: NetworkBridgeSubsystem::new( - network_service.clone(), - authority_discovery_service.clone(), - Box::new(network_service.clone()), - Metrics::register(registry)?, - ), - provisioner: ProvisionerSubsystem::new(spawner.clone(), (), Metrics::register(registry)?), - runtime_api: RuntimeApiSubsystem::new( - runtime_client.clone(), - Metrics::register(registry)?, - spawner.clone(), - ), - statement_distribution: StatementDistributionSubsystem::new( - keystore.clone(), - statement_req_receiver, - Metrics::register(registry)?, - ), - approval_distribution: ApprovalDistributionSubsystem::new(Metrics::register(registry)?), - approval_voting: ApprovalVotingSubsystem::with_config( - approval_voting_config, - parachains_db.clone(), - keystore.clone(), - Box::new(network_service.clone()), - Metrics::register(registry)?, - ), - gossip_support: GossipSupportSubsystem::new( - keystore.clone(), - authority_discovery_service.clone(), - ), - dispute_coordinator: DisputeCoordinatorSubsystem::new( - parachains_db.clone(), - dispute_coordinator_config, - keystore.clone(), - Metrics::register(registry)?, - ), - dispute_participation: DisputeParticipationSubsystem::new(), - dispute_distribution: DisputeDistributionSubsystem::new( - keystore.clone(), - dispute_req_receiver, - authority_discovery_service.clone(), - Metrics::register(registry)?, - ), - chain_selection: ChainSelectionSubsystem::new(chain_selection_config, parachains_db), - }; - Ok(all_subsystems) -} - /// Obtain a prepared `OverseerBuilder`, that is initialized /// with all default values. pub fn prepared_overseer_builder<'a, Spawner, RuntimeClient>( @@ -329,7 +173,7 @@ where use polkadot_node_subsystem_util::metrics::Metrics; use std::iter::FromIterator; - let metrics = ::register(registry)?; + let metrics = ::register(registry)?; let builder = Overseer::builder() .availability_distribution(AvailabilityDistributionSubsystem::new( diff --git a/node/subsystem-test-helpers/src/lib.rs b/node/subsystem-test-helpers/src/lib.rs index 0ac52ee82346..0d155dc1384e 100644 --- a/node/subsystem-test-helpers/src/lib.rs +++ b/node/subsystem-test-helpers/src/lib.rs @@ -372,9 +372,7 @@ mod tests { use super::*; use futures::executor::block_on; use polkadot_node_subsystem::messages::CollatorProtocolMessage; - use polkadot_overseer::{ - AllSubsystems, Handle, HeadSupportsParachains, Overseer, OverseerConnector, - }; + use polkadot_overseer::{dummy::dummy_overseer_builder, Handle, HeadSupportsParachains}; use polkadot_primitives::v1::Hash; struct AlwaysSupportsParachains; @@ -388,17 +386,14 @@ mod tests { fn forward_subsystem_works() { let spawner = sp_core::testing::TaskExecutor::new(); let (tx, rx) = mpsc::channel(2); - let all_subsystems = - AllSubsystems::<()>::dummy().replace_collator_protocol(|_| ForwardSubsystem(tx)); - let (overseer, handle) = Overseer::new( - Vec::new(), - all_subsystems, - None, - AlwaysSupportsParachains, - spawner.clone(), - OverseerConnector::default(), - ) - .unwrap(); + let (overseer, handle) = + dummy_overseer_builder(spawner.clone(), AlwaysSupportsParachains, None) + .unwrap() + .replace_collator_protocol(|_| ForwardSubsystem(tx)) + .leaves(vec![]) + .build() + .unwrap(); + let mut handle = Handle::new(handle); spawner.spawn("overseer", overseer.run().then(|_| async { () }).boxed()); diff --git a/node/subsystem-types/src/messages.rs b/node/subsystem-types/src/messages.rs index 3822591c0fa9..9afdbc0fcad3 100644 --- a/node/subsystem-types/src/messages.rs +++ b/node/subsystem-types/src/messages.rs @@ -523,7 +523,7 @@ pub enum ChainApiMessage { /// Get the cumulative weight of the given block, by hash. /// If the block or weight is unknown, this returns `None`. /// - /// Note: this the weight within the low-level fork-choice rule, + /// Note: this is the weight within the low-level fork-choice rule, /// not the high-level one implemented in the chain-selection subsystem. /// /// Weight is used for comparing blocks in a fork-choice rule. diff --git a/runtime/common/src/crowdloan.rs b/runtime/common/src/crowdloan.rs index e6a9a2f1e4b4..c45f9750f631 100644 --- a/runtime/common/src/crowdloan.rs +++ b/runtime/common/src/crowdloan.rs @@ -275,7 +275,7 @@ pub mod pallet { FirstPeriodTooFarInFuture, /// Last lease period must be greater than first lease period. LastPeriodBeforeFirstPeriod, - /// The last lease period cannot be more then 3 periods after the first period. + /// The last lease period cannot be more than 3 periods after the first period. LastPeriodTooFarInFuture, /// The campaign ends before the current block number. The end must be in the future. CannotEndInPast, diff --git a/runtime/common/src/purchase.rs b/runtime/common/src/purchase.rs index 5f86bf4226d5..42a545730c94 100644 --- a/runtime/common/src/purchase.rs +++ b/runtime/common/src/purchase.rs @@ -34,7 +34,7 @@ use sp_std::prelude::*; type BalanceOf = <::Currency as Currency<::AccountId>>::Balance; -/// The kind of a statement an account needs to make for a claim to be valid. +/// The kind of statement an account needs to make for a claim to be valid. #[derive(Encode, Decode, Clone, Copy, Eq, PartialEq, RuntimeDebug, TypeInfo)] pub enum AccountValidity { /// Account is not valid. diff --git a/runtime/common/src/traits.rs b/runtime/common/src/traits.rs index eb5e0eda517b..938fefd963c0 100644 --- a/runtime/common/src/traits.rs +++ b/runtime/common/src/traits.rs @@ -127,7 +127,7 @@ pub trait Leaser { ) -> Result<(), LeaseError>; /// Return the amount of balance currently held in reserve on `leaser`'s account for leasing `para`. This won't - /// go down outside of a lease period. + /// go down outside a lease period. fn deposit_held( para: ParaId, leaser: &Self::AccountId, diff --git a/runtime/parachains/src/hrmp.rs b/runtime/parachains/src/hrmp.rs index 373bb3d662dc..7e489ba73cf0 100644 --- a/runtime/parachains/src/hrmp.rs +++ b/runtime/parachains/src/hrmp.rs @@ -387,7 +387,7 @@ pub mod pallet { /// parameters. /// /// - `proposed_max_capacity` - specifies how many messages can be in the channel at once. - /// - `proposed_max_message_size` - specifies the maximum size of any of the messages. + /// - `proposed_max_message_size` - specifies the maximum size of the messages. /// /// These numbers are a subject to the relay-chain configuration limits. /// diff --git a/xcm/pallet-xcm/src/lib.rs b/xcm/pallet-xcm/src/lib.rs index 972e3f926829..b222c73a9c69 100644 --- a/xcm/pallet-xcm/src/lib.rs +++ b/xcm/pallet-xcm/src/lib.rs @@ -79,7 +79,7 @@ pub mod pallet { /// The overarching event type. type Event: From> + IsType<::Event>; - /// Required origin for sending XCM messages. If successful, the it resolves to `MultiLocation` + /// Required origin for sending XCM messages. If successful, it resolves to `MultiLocation` /// which exists as an interior location within this chain's XCM context. type SendXcmOrigin: EnsureOrigin<::Origin, Success = MultiLocation>; @@ -328,7 +328,7 @@ pub mod pallet { #[pallet::storage] pub(super) type SafeXcmVersion = StorageValue<_, XcmVersion, OptionQuery>; - /// Latest versions that we know various locations support. + /// The Latest versions that we know various locations support. #[pallet::storage] pub(super) type SupportedVersion = StorageDoubleMap< _, diff --git a/xcm/src/v1/multilocation.rs b/xcm/src/v1/multilocation.rs index 9c472553a37c..a8f1872bf042 100644 --- a/xcm/src/v1/multilocation.rs +++ b/xcm/src/v1/multilocation.rs @@ -99,7 +99,7 @@ impl MultiLocation { MultiLocation { parents, interior: Junctions::Here } } - /// Whether or not the `MultiLocation` has no parents and has a `Here` interior. + /// Whether the `MultiLocation` has no parents and has a `Here` interior. pub const fn is_here(&self) -> bool { self.parents == 0 && self.interior.len() == 0 } @@ -119,7 +119,7 @@ impl MultiLocation { self.parents } - /// Returns boolean indicating whether or not `self` contains only the specified amount of + /// Returns boolean indicating whether `self` contains only the specified amount of /// parents and no interior junctions. pub const fn contains_parents_only(&self, count: u8) -> bool { matches!(self.interior, Junctions::Here) && self.parents == count From 71a721eb9e634d2706cc4671c4fbd028c31814ea Mon Sep 17 00:00:00 2001 From: Bernhard Schuster Date: Wed, 29 Sep 2021 18:06:20 +0200 Subject: [PATCH 44/52] feat: measured oneshots (#3902) * overseer: remove mut in connector * monitored oneshots * fmt * remove debug log * Update node/metered-channel/src/oneshot.rs Co-authored-by: Andronik Ordian * Update node/metered-channel/src/oneshot.rs Co-authored-by: Andronik Ordian * avoid two Arcs * add expects * alt impl * rework the measured oneshots * address review comments, use `Measurable` where possible * chore/tracing: move `PrettyAuthorities` construction out of tracing macros Co-authored-by: Andronik Ordian --- Cargo.lock | 14 +- node/metered-channel/Cargo.toml | 6 + node/metered-channel/src/lib.rs | 1 + node/metered-channel/src/oneshot.rs | 418 +++++++++++++++++++++++ node/network/gossip-support/src/lib.rs | 3 +- node/network/gossip-support/src/tests.rs | 3 +- 6 files changed, 439 insertions(+), 6 deletions(-) create mode 100644 node/metered-channel/src/oneshot.rs diff --git a/Cargo.lock b/Cargo.lock index 1ab8bf51797e..538a9e3f9cef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4120,9 +4120,14 @@ dependencies = [ name = "metered-channel" version = "0.9.9" dependencies = [ + "assert_matches", "derive_more", + "env_logger 0.9.0", "futures 0.3.17", "futures-timer 3.0.2", + "log", + "thiserror", + "tracing", ] [[package]] @@ -10563,18 +10568,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.26" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93119e4feac1cbe6c798c34d3a53ea0026b0b1de6a120deef895137c0529bfe2" +checksum = "602eca064b2d83369e2b2f34b09c70b605402801927c65c11071ac911d299b88" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.26" +version = "1.0.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "060d69a0afe7796bf42e9e2ff91f5ee691fb15c53d38b4b62a9a53eb23164745" +checksum = "bad553cc2c78e8de258400763a647e80e6d1b31ee237275d756f6836d204494c" dependencies = [ "proc-macro2", "quote", @@ -10791,6 +10796,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "84f96e095c0c82419687c20ddf5cb3eadb61f4e1405923c9dc8e53a1adacbda8" dependencies = [ "cfg-if 1.0.0", + "log", "pin-project-lite 0.2.4", "tracing-attributes", "tracing-core", diff --git a/node/metered-channel/Cargo.toml b/node/metered-channel/Cargo.toml index 2741d95b9a68..53695c30923c 100644 --- a/node/metered-channel/Cargo.toml +++ b/node/metered-channel/Cargo.toml @@ -9,6 +9,12 @@ description = "Channels with attached Meters" futures = "0.3.17" futures-timer = "3.0.2" derive_more = "0.99" +tracing = "0.1.28" +thiserror = "1.0.29" [dev-dependencies] futures = { version = "0.3.17", features = ["thread-pool"] } +assert_matches = "1.5" +env_logger = "0.9" +log = "0.4" +tracing = { version = "0.1.28", features = ["log"] } diff --git a/node/metered-channel/src/lib.rs b/node/metered-channel/src/lib.rs index 4fe1bcd22526..9646cbaee901 100644 --- a/node/metered-channel/src/lib.rs +++ b/node/metered-channel/src/lib.rs @@ -24,6 +24,7 @@ use std::sync::{ use derive_more::{Add, Display}; mod bounded; +pub mod oneshot; mod unbounded; pub use self::{bounded::*, unbounded::*}; diff --git a/node/metered-channel/src/oneshot.rs b/node/metered-channel/src/oneshot.rs new file mode 100644 index 000000000000..bf1a52682462 --- /dev/null +++ b/node/metered-channel/src/oneshot.rs @@ -0,0 +1,418 @@ +// Copyright 2021 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 . + +//! Metered variant of oneshot channels to be able to extract delays caused by delayed responses. + +use std::{ + ops::Deref, + pin::Pin, + task::{Context, Poll}, + time::{Duration, Instant}, +}; + +use futures::{ + channel::oneshot::{self, Canceled, Cancellation}, + future::{Fuse, FusedFuture}, + prelude::*, +}; +use futures_timer::Delay; + +/// Provides the reason for termination. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[repr(u8)] +pub enum Reason { + Completion = 1, + Cancellation = 2, + HardTimeout = 3, +} + +/// Obtained measurements by the `Receiver` side of the `MeteredOneshot`. +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct Measurements { + /// Duration between first poll and polling termination. + first_poll_till_end: Duration, + /// Duration starting with creation until polling termination. + creation_till_end: Duration, + /// Reason for resolving the future. + reason: Reason, +} + +impl Measurements { + /// Obtain the duration of a finished or canceled + /// `oneshot` channel. + pub fn duration_since_first_poll(&self) -> &Duration { + &self.first_poll_till_end + } + + /// Obtain the duration of a finished or canceled + /// `oneshot` channel. + pub fn duration_since_creation(&self) -> &Duration { + &self.creation_till_end + } + + /// Obtain the reason to the channel termination. + pub fn reason(&self) -> &Reason { + &self.reason + } +} + +/// Create a new pair of `OneshotMetered{Sender,Receiver}`. +pub fn channel( + name: &'static str, + soft_timeout: Duration, + hard_timeout: Duration, +) -> (MeteredSender, MeteredReceiver) { + let (tx, rx) = oneshot::channel(); + + ( + MeteredSender { name, inner: tx }, + MeteredReceiver { + name, + inner: rx, + soft_timeout, + hard_timeout, + soft_timeout_fut: None, + hard_timeout_fut: None, + first_poll_timestamp: None, + creation_timestamp: Instant::now(), + }, + ) +} + +#[allow(missing_docs)] +#[derive(thiserror::Error, Debug)] +pub enum Error { + #[error("Oneshot was cancelled.")] + Canceled(#[source] Canceled, Measurements), + #[error("Oneshot did not receive a response within {}", Duration::as_secs_f64(.0))] + HardTimeout(Duration, Measurements), +} + +impl Measurable for Error { + fn measurements(&self) -> Measurements { + match self { + Self::Canceled(_, measurements) => measurements.clone(), + Self::HardTimeout(_, measurements) => measurements.clone(), + } + } +} + +/// Oneshot sender, created by [`channel`]. +#[derive(Debug)] +pub struct MeteredSender { + name: &'static str, + inner: oneshot::Sender<(Instant, T)>, +} + +impl MeteredSender { + /// Send a value. + pub fn send(self, t: T) -> Result<(), T> { + let Self { inner, name: _ } = self; + inner.send((Instant::now(), t)).map_err(|(_, t)| t) + } + + /// Poll if the thing is already cancelled. + pub fn poll_canceled(&mut self, ctx: &mut Context<'_>) -> Poll<()> { + self.inner.poll_canceled(ctx) + } + + /// Access the cancellation object. + pub fn cancellation(&mut self) -> Cancellation<'_, (Instant, T)> { + self.inner.cancellation() + } + + /// Check the cancellation state. + pub fn is_canceled(&self) -> bool { + self.inner.is_canceled() + } + + /// Verify if the `receiver` is connected to the `sender` [`Self`]. + pub fn is_connected_to(&self, receiver: &MeteredReceiver) -> bool { + self.inner.is_connected_to(&receiver.inner) + } +} + +/// Oneshot receiver, created by [`channel`]. +#[derive(Debug)] +pub struct MeteredReceiver { + name: &'static str, + inner: oneshot::Receiver<(Instant, T)>, + /// Soft timeout, on expire a warning is printed. + soft_timeout_fut: Option>, + soft_timeout: Duration, + /// Hard timeout, terminating the sender. + hard_timeout_fut: Option, + hard_timeout: Duration, + /// The first time the receiver was polled. + first_poll_timestamp: Option, + creation_timestamp: Instant, +} + +impl MeteredReceiver { + pub fn close(&mut self) { + self.inner.close() + } + + /// Attempts to receive a message outside of the context of a task. + /// + /// A return value of `None` must be considered immediately stale (out of + /// date) unless [`close`](MeteredReceiver::close) has been called first. + /// + /// Returns an error if the sender was dropped. + pub fn try_recv(&mut self) -> Result>, Error> { + match self.inner.try_recv() { + Ok(Some((when, value))) => { + let measurements = self.create_measurement(when, Reason::Completion); + Ok(Some(OutputWithMeasurements { value, measurements })) + }, + Err(e) => { + let measurements = self.create_measurement( + self.first_poll_timestamp.unwrap_or_else(|| Instant::now()), + Reason::Cancellation, + ); + Err(Error::Canceled(e, measurements)) + }, + Ok(None) => Ok(None), + } + } + + /// Helper to create a measurement. + /// + /// `start` determines the first possible time where poll can resolve with `Ready`. + fn create_measurement(&self, start: Instant, reason: Reason) -> Measurements { + let end = Instant::now(); + Measurements { + // negative values are ok, if `send` was called before we poll for the first time. + first_poll_till_end: end - start, + creation_till_end: end - self.creation_timestamp, + reason, + } + } +} + +impl FusedFuture for MeteredReceiver { + fn is_terminated(&self) -> bool { + self.inner.is_terminated() + } +} + +impl Future for MeteredReceiver { + type Output = Result, Error>; + + fn poll( + mut self: Pin<&mut Self>, + ctx: &mut Context<'_>, + ) -> Poll, Error>> { + let first_poll_timestamp = + self.first_poll_timestamp.get_or_insert_with(|| Instant::now()).clone(); + + let soft_timeout = self.soft_timeout.clone(); + let soft_timeout = self + .soft_timeout_fut + .get_or_insert_with(move || Delay::new(soft_timeout).fuse()); + + if Pin::new(soft_timeout).poll(ctx).is_ready() { + tracing::warn!("Oneshot `{name}` exceeded the soft threshold", name = &self.name); + } + + let hard_timeout = self.hard_timeout.clone(); + let hard_timeout = + self.hard_timeout_fut.get_or_insert_with(move || Delay::new(hard_timeout)); + + if Pin::new(hard_timeout).poll(ctx).is_ready() { + let measurements = self.create_measurement(first_poll_timestamp, Reason::HardTimeout); + return Poll::Ready(Err(Error::HardTimeout(self.hard_timeout.clone(), measurements))) + } + + match Pin::new(&mut self.inner).poll(ctx) { + Poll::Pending => Poll::Pending, + Poll::Ready(Err(e)) => { + let measurements = + self.create_measurement(first_poll_timestamp, Reason::Cancellation); + Poll::Ready(Err(Error::Canceled(e, measurements))) + }, + Poll::Ready(Ok((ref sent_at_timestamp, value))) => { + let measurements = + self.create_measurement(sent_at_timestamp.clone(), Reason::Completion); + Poll::Ready(Ok(OutputWithMeasurements:: { value, measurements })) + }, + } + } +} + +/// A dummy trait that allows implementing `measurements` for `Result<_,_>`. +pub trait Measurable { + /// Obtain a set of measurements represented by the `Measurements` type. + fn measurements(&self) -> Measurements; +} + +impl Measurable for Result, Error> { + fn measurements(&self) -> Measurements { + match self { + Err(err) => err.measurements(), + Ok(val) => val.measurements(), + } + } +} + +/// A wrapping type for the actual type `T` that is sent with the +/// oneshot yet allow to attach `Measurements` to it. +/// +/// Implements `AsRef` besides others for easier access to the inner, +/// wrapped type. +#[derive(Clone, Debug)] +pub struct OutputWithMeasurements { + value: T, + measurements: Measurements, +} + +impl Measurable for OutputWithMeasurements { + fn measurements(&self) -> Measurements { + self.measurements.clone() + } +} + +impl OutputWithMeasurements { + /// Converts the wrapper type into it's inner value. + /// + /// `trait Into` cannot be implemented due to conflicts. + pub fn into(self) -> T { + self.value + } +} + +impl AsRef for OutputWithMeasurements { + fn as_ref(&self) -> &T { + &self.value + } +} + +impl Deref for OutputWithMeasurements { + type Target = T; + + fn deref(&self) -> &Self::Target { + &self.value + } +} + +#[cfg(test)] +mod tests { + use assert_matches::assert_matches; + use futures::{executor::ThreadPool, task::SpawnExt}; + + use super::*; + + #[derive(Clone, PartialEq, Eq, Debug)] + struct DummyItem { + vals: [u8; 256], + } + + impl Default for DummyItem { + fn default() -> Self { + Self { vals: [0u8; 256] } + } + } + + fn test_launch(name: &'static str, gen_sender_test: S, gen_receiver_test: R) + where + S: Fn(MeteredSender) -> FS, + R: Fn(MeteredReceiver) -> FR, + FS: Future + Send + 'static, + FR: Future + Send + 'static, + { + let _ = env_logger::builder().is_test(true).filter_level(LevelFilter::Trace).try_init(); + + let pool = ThreadPool::new().unwrap(); + let (tx, rx) = channel(name, Duration::from_secs(1), Duration::from_secs(3)); + futures::executor::block_on(async move { + let handle_receiver = pool.spawn_with_handle(gen_receiver_test(rx)).unwrap(); + let handle_sender = pool.spawn_with_handle(gen_sender_test(tx)).unwrap(); + futures::future::select( + futures::future::join(handle_sender, handle_receiver), + Delay::new(Duration::from_secs(5)), + ) + .await; + }); + } + + use log::LevelFilter; + + #[test] + fn easy() { + test_launch( + "easy", + |tx| async move { + tx.send(DummyItem::default()).unwrap(); + }, + |rx| async move { + let x = rx.await.unwrap(); + let measurements = x.measurements(); + assert_eq!(x.as_ref(), &DummyItem::default()); + dbg!(measurements); + }, + ); + } + + #[test] + fn cancel_by_drop() { + test_launch( + "cancel_by_drop", + |tx| async move { + Delay::new(Duration::from_secs(2)).await; + drop(tx); + }, + |rx| async move { + let result = rx.await; + assert_matches!(result, Err(Error::Canceled(_, _))); + dbg!(result.measurements()); + }, + ); + } + + #[test] + fn starve_till_hard_timeout() { + test_launch( + "starve_till_timeout", + |tx| async move { + Delay::new(Duration::from_secs(4)).await; + let _ = tx.send(DummyItem::default()); + }, + |rx| async move { + let result = rx.await; + assert_matches!(&result, e @ &Err(Error::HardTimeout(_, _)) => { + println!("{:?}", e); + }); + dbg!(result.measurements()); + }, + ); + } + + #[test] + fn starve_till_soft_timeout_then_food() { + test_launch( + "starve_till_soft_timeout_then_food", + |tx| async move { + Delay::new(Duration::from_secs(2)).await; + let _ = tx.send(DummyItem::default()); + }, + |rx| async move { + let result = rx.await; + assert_matches!(result, Ok(_)); + dbg!(result.measurements()); + }, + ); + } +} diff --git a/node/network/gossip-support/src/lib.rs b/node/network/gossip-support/src/lib.rs index 65af6cb12756..97be38933802 100644 --- a/node/network/gossip-support/src/lib.rs +++ b/node/network/gossip-support/src/lib.rs @@ -340,12 +340,13 @@ where "Connectivity seems low, we are only connected to {}% of available validators (see debug logs for details)", connected_ratio ); } + let pretty = PrettyAuthorities(unconnected_authorities); tracing::debug!( target: LOG_TARGET, ?connected_ratio, ?absolute_connected, ?absolute_resolved, - unconnected_authorities = %PrettyAuthorities(unconnected_authorities), + unconnected_authorities = %pretty, "Connectivity Report" ); } diff --git a/node/network/gossip-support/src/tests.rs b/node/network/gossip-support/src/tests.rs index fc25b137d3c7..1220f1a5461f 100644 --- a/node/network/gossip-support/src/tests.rs +++ b/node/network/gossip-support/src/tests.rs @@ -340,9 +340,10 @@ fn test_log_output() { m.insert(bob, addrs); m }; + let pretty = PrettyAuthorities(unconnected_authorities.iter()); tracing::debug!( target: LOG_TARGET, - unconnected_authorities = %PrettyAuthorities(unconnected_authorities.iter()), + unconnected_authorities = %pretty, "Connectivity Report" ); } From d33794f1e3a55de301a662323c6626bb1e3446b9 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 29 Sep 2021 20:58:04 +0200 Subject: [PATCH 45/52] paras_inherent: reject only candidates with concluded disputes (#3969) * paras_inherent: reject only candidates with concluded disputes * remove unused Error variant --- runtime/parachains/src/disputes.rs | 23 +++++++++++------------ runtime/parachains/src/paras_inherent.rs | 10 +++++----- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/runtime/parachains/src/disputes.rs b/runtime/parachains/src/disputes.rs index aa7acee6d27d..b63305efb27a 100644 --- a/runtime/parachains/src/disputes.rs +++ b/runtime/parachains/src/disputes.rs @@ -129,9 +129,8 @@ pub trait DisputesHandler { included_in: BlockNumber, ); - /// Whether the given candidate could be invalid, i.e. there is an ongoing - /// or concluded dispute with supermajority-against. - fn could_be_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool; + /// Whether the given candidate concluded invalid in a dispute with supermajority. + fn concluded_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool; /// Called by the initializer to initialize the configuration module. fn initializer_initialize(now: BlockNumber) -> Weight; @@ -165,7 +164,7 @@ impl DisputesHandler for () { ) { } - fn could_be_invalid(_session: SessionIndex, _candidate_hash: CandidateHash) -> bool { + fn concluded_invalid(_session: SessionIndex, _candidate_hash: CandidateHash) -> bool { false } @@ -201,8 +200,8 @@ impl DisputesHandler for pallet::Pallet { pallet::Pallet::::note_included(session, candidate_hash, included_in) } - fn could_be_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool { - pallet::Pallet::::could_be_invalid(session, candidate_hash) + fn concluded_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool { + pallet::Pallet::::concluded_invalid(session, candidate_hash) } fn initializer_initialize(now: T::BlockNumber) -> Weight { @@ -1114,10 +1113,10 @@ impl Pallet { } } - pub(crate) fn could_be_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool { + pub(crate) fn concluded_invalid(session: SessionIndex, candidate_hash: CandidateHash) -> bool { >::get(&session, &candidate_hash).map_or(false, |dispute| { - // A dispute that is ongoing or has concluded with supermajority-against. - dispute.concluded_at.is_none() || has_supermajority_against(&dispute) + // A dispute that has concluded with supermajority-against. + has_supermajority_against(&dispute) }) } @@ -2207,9 +2206,9 @@ mod tests { ] ); - assert_eq!(Pallet::::could_be_invalid(3, candidate_hash.clone()), false); // It has 5 votes for - assert_eq!(Pallet::::could_be_invalid(4, candidate_hash.clone()), true); - assert_eq!(Pallet::::could_be_invalid(5, candidate_hash.clone()), true); + assert!(!Pallet::::concluded_invalid(3, candidate_hash.clone())); + assert!(!Pallet::::concluded_invalid(4, candidate_hash.clone())); + assert!(Pallet::::concluded_invalid(5, candidate_hash.clone())); // Ensure inclusion removes spam slots assert_eq!(SpamSlots::::get(4), Some(vec![0, 0, 1, 1, 0, 0, 0])); diff --git a/runtime/parachains/src/paras_inherent.rs b/runtime/parachains/src/paras_inherent.rs index a972dbfaa3d8..9ac8e0141542 100644 --- a/runtime/parachains/src/paras_inherent.rs +++ b/runtime/parachains/src/paras_inherent.rs @@ -66,8 +66,8 @@ pub mod pallet { /// The hash of the submitted parent header doesn't correspond to the saved block hash of /// the parent. InvalidParentHeader, - /// Potentially invalid candidate. - CandidateCouldBeInvalid, + /// Disputed candidate that was concluded invalid. + CandidateConcludedInvalid, } /// Whether the paras inherent was included within this block. @@ -238,14 +238,14 @@ pub mod pallet { let backed_candidates = limit_backed_candidates::(backed_candidates); let backed_candidates_len = backed_candidates.len() as Weight; - // Refuse to back any candidates that are disputed or invalid. + // Refuse to back any candidates that were disputed and are concluded invalid. for candidate in &backed_candidates { ensure!( - !T::DisputesHandler::could_be_invalid( + !T::DisputesHandler::concluded_invalid( current_session, candidate.candidate.hash(), ), - Error::::CandidateCouldBeInvalid, + Error::::CandidateConcludedInvalid, ); } From 1f0d9cc017c996765702434b2ddf3f9cc6abd28a Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 29 Sep 2021 21:24:12 +0200 Subject: [PATCH 46/52] revert +1 change to be on the safer side (#3972) --- node/primitives/src/lib.rs | 3 +-- node/subsystem-util/src/rolling_session_window.rs | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/node/primitives/src/lib.rs b/node/primitives/src/lib.rs index 7544dd8d7214..6e8490b67b91 100644 --- a/node/primitives/src/lib.rs +++ b/node/primitives/src/lib.rs @@ -69,8 +69,7 @@ pub const POV_BOMB_LIMIT: usize = (MAX_POV_SIZE * 4u32) as usize; /// On Polkadot this is 1 day, and on Kusama it's 6 hours. /// /// Number of sessions we want to consider in disputes. -/// + 1 for the child's session. -pub const DISPUTE_WINDOW: SessionIndex = 6 + 1; +pub const DISPUTE_WINDOW: SessionIndex = 6; /// The cumulative weight of a block in a fork-choice rule. pub type BlockWeight = u32; diff --git a/node/subsystem-util/src/rolling_session_window.rs b/node/subsystem-util/src/rolling_session_window.rs index 1c73ff58c718..fc2957b7ea23 100644 --- a/node/subsystem-util/src/rolling_session_window.rs +++ b/node/subsystem-util/src/rolling_session_window.rs @@ -289,7 +289,7 @@ mod tests { use polkadot_primitives::v1::Header; use sp_core::testing::TaskExecutor; - const TEST_WINDOW_SIZE: SessionIndex = 6 + 1; + const TEST_WINDOW_SIZE: SessionIndex = 6; fn dummy_session_info(index: SessionIndex) -> SessionInfo { SessionInfo { From cfc31ee245be6f85fe65f93575e2093ad778f0c2 Mon Sep 17 00:00:00 2001 From: Robert Habermeier Date: Wed, 29 Sep 2021 22:33:16 +0200 Subject: [PATCH 47/52] Drop availability only for candidates that lose disputes (#3973) * guide: updates for disputes changes * paras_inherent: drop availability only for candidates that lose disputes * spellcheck * Update runtime/parachains/src/paras_inherent.rs Co-authored-by: Andronik Ordian Co-authored-by: Andronik Ordian --- .../src/runtime/disputes.md | 2 +- .../src/runtime/parainherent.md | 6 +++--- runtime/parachains/src/paras_inherent.rs | 19 +++++++++++-------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/roadmap/implementers-guide/src/runtime/disputes.md b/roadmap/implementers-guide/src/runtime/disputes.md index 4fb70eb93d03..9ccf3a3923f8 100644 --- a/roadmap/implementers-guide/src/runtime/disputes.md +++ b/roadmap/implementers-guide/src/runtime/disputes.md @@ -101,7 +101,7 @@ Frozen: Option, 1. If there is a dispute under `(Sessionindex, CandidateHash)` with fewer than `byzantine_threshold + 1` participating validators, decrease `SpamSlots` by 1 for each validator in the `DisputeState`. 1. If there is a dispute under `(SessionIndex, CandidateHash)` that has concluded against the candidate, invoke `revert_and_freeze` with the stored block number. -* `could_be_invalid(SessionIndex, CandidateHash) -> bool`: Returns whether a candidate has a live dispute ongoing or a dispute which has already concluded in the negative. +* `concluded_invalid(SessionIndex, CandidateHash) -> bool`: Returns whether a candidate has already concluded a dispute in the negative. * `is_frozen()`: Load the value of `Frozen` from storage. Return true if `Some` and false if `None`. diff --git a/roadmap/implementers-guide/src/runtime/parainherent.md b/roadmap/implementers-guide/src/runtime/parainherent.md index ed4d6fe7d90b..cb5bb45d8d81 100644 --- a/roadmap/implementers-guide/src/runtime/parainherent.md +++ b/roadmap/implementers-guide/src/runtime/parainherent.md @@ -1,4 +1,4 @@ -# ParaInherent +# `ParaInherent` This module is responsible for providing all data given to the runtime by the block author to the various parachains modules. The entry-point is mandatory, in that it must be invoked exactly once within every block, and it is also "inherent", in that it is provided with no origin by the block author. The data within it carries its own authentication; i.e. the data takes the form of signed statements by validators. If any of the steps within fails, the entry-point is considered as having failed and the block will be invalid. @@ -26,7 +26,7 @@ Included: Option<()>, 1. Hash the parent header and make sure that it corresponds to the block hash of the parent (tracked by the `frame_system` FRAME module), 1. Invoke `Disputes::provide_multi_dispute_data`. 1. If `Disputes::is_frozen`, return and set `Included` to `Some(())`. - 1. If there are any created disputes from the current session, invoke `Inclusion::collect_disputed` with the disputed candidates. Annotate each returned core with `FreedReason::Concluded`. + 1. If there are any concluded disputes from the current session, invoke `Inclusion::collect_disputed` with the disputed candidates. Annotate each returned core with `FreedReason::Concluded`. 1. The `Bitfields` are first forwarded to the `Inclusion::process_bitfields` routine, returning a set of freed cores. Provide the number of availability cores (`Scheduler::availability_cores().len()`) as the expected number of bits and a `Scheduler::core_para` as a core-lookup to the `process_bitfields` routine. Annotate each of these freed cores with `FreedReason::Concluded`. 1. For each freed candidate from the `Inclusion::process_bitfields` call, invoke `Disputes::note_included(current_session, candidate)`. 1. If `Scheduler::availability_timeout_predicate` is `Some`, invoke `Inclusion::collect_pending` using it and annotate each of those freed cores with `FreedReason::TimedOut`. @@ -34,7 +34,7 @@ Included: Option<()>, 1. Invoke `Scheduler::clear` 1. Invoke `Scheduler::schedule(freed_cores, System::current_block())` 1. Extract `parent_storage_root` from the parent header, - 1. If `Disputes::could_be_invalid(current_session, candidate)` is true for any of the `backed_candidates`, fail. + 1. If `Disputes::concluded_invalid(current_session, candidate)` is true for any of the `backed_candidates`, fail. 1. Invoke the `Inclusion::process_candidates` routine with the parameters `(parent_storage_root, backed_candidates, Scheduler::scheduled(), Scheduler::group_validators)`. 1. Call `Scheduler::occupied` using the return value of the `Inclusion::process_candidates` call above, first sorting the list of assigned core indices. 1. Call the `Ump::process_pending_upward_messages` routine to execute all messages in upward dispatch queues. diff --git a/runtime/parachains/src/paras_inherent.rs b/runtime/parachains/src/paras_inherent.rs index 9ac8e0141542..ea480ad7c96a 100644 --- a/runtime/parachains/src/paras_inherent.rs +++ b/runtime/parachains/src/paras_inherent.rs @@ -174,24 +174,27 @@ pub mod pallet { // Handle disputes logic. let current_session = >::session_index(); let freed_disputed: Vec<(_, FreedReason)> = { - let fresh_disputes = T::DisputesHandler::provide_multi_dispute_data(disputes)?; + let new_current_dispute_sets: Vec<_> = disputes + .iter() + .filter(|s| s.session == current_session) + .map(|s| (s.session, s.candidate_hash)) + .collect(); + + let _ = T::DisputesHandler::provide_multi_dispute_data(disputes)?; if T::DisputesHandler::is_frozen() { // The relay chain we are currently on is invalid. Proceed no further on parachains. Included::::set(Some(())); return Ok(Some(MINIMAL_INCLUSION_INHERENT_WEIGHT).into()) } - let any_current_session_disputes = - fresh_disputes.iter().any(|(s, _)| s == ¤t_session); - - if any_current_session_disputes { - let current_session_disputes: Vec<_> = fresh_disputes + if !new_current_dispute_sets.is_empty() { + let concluded_invalid_disputes: Vec<_> = new_current_dispute_sets .iter() - .filter(|(s, _)| s == ¤t_session) + .filter(|(s, c)| T::DisputesHandler::concluded_invalid(*s, *c)) .map(|(_, c)| *c) .collect(); - >::collect_disputed(current_session_disputes) + >::collect_disputed(concluded_invalid_disputes) .into_iter() .map(|core| (core, FreedReason::Concluded)) .collect() From 239c65096c34282b0fa3323b3d5d9bf68beb0cc9 Mon Sep 17 00:00:00 2001 From: Andronik Ordian Date: Wed, 29 Sep 2021 23:23:04 +0200 Subject: [PATCH 48/52] fix disputes tests (#3974) --- node/service/src/tests.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/node/service/src/tests.rs b/node/service/src/tests.rs index 7dc5fe19ecbd..22eeeacb051b 100644 --- a/node/service/src/tests.rs +++ b/node/service/src/tests.rs @@ -88,10 +88,10 @@ fn test_harness>( let target_hash = case_vars.target_block.clone(); let selection_process = async move { let best = select_relay_chain - .finality_target_with_fallback(target_hash, Some(target_hash), None) + .finality_target_with_longest_chain(target_hash, target_hash, None) .await .unwrap(); - finality_target_tx.send(best).unwrap(); + finality_target_tx.send(Some(best)).unwrap(); () }; From cc24fb87b702db6510d08c689e442b6be384d798 Mon Sep 17 00:00:00 2001 From: Keith Yeung Date: Wed, 29 Sep 2021 16:24:49 -0700 Subject: [PATCH 49/52] Make most XCM APIs accept an Into where MultiLocation is accepted (#3627) * Change send_xcm MultiLocation argument to be generic * Change pallet_xcm::send_xcm MultiLocation and Junctions argument to be generic * Change convert_origin MultiLocation argument to be generic * Change OnResponse MultiLocation arguments to be generic * Change UniversalWeigher MultiLocation argumente to be generic * Change ExecuteXcm MultiLocation argument to be generic * Remove usages of into for the MultiLocation argument in execute_xcm * Make use of generic MultiLocation arguments in rustdocs * Cargo fmt * Remove unused import in tests * Resolve conflicts * cargo fmt * Appease spellcheck * impl Into in more places --- runtime/common/src/xcm_sender.rs | 3 +- runtime/parachains/src/ump.rs | 7 ++- runtime/test-runtime/src/xcm_config.rs | 2 +- xcm/pallet-xcm/src/lib.rs | 46 +++++++++++------ xcm/pallet-xcm/src/mock.rs | 7 +-- xcm/src/v1/multilocation.rs | 12 ++--- xcm/src/v1/traits.rs | 32 +++++++----- xcm/src/v2/traits.rs | 33 +++++++----- xcm/xcm-builder/src/mock.rs | 8 +-- xcm/xcm-builder/src/origin_conversion.rs | 60 ++++++++++++++++------ xcm/xcm-builder/src/tests.rs | 29 ++++------- xcm/xcm-builder/tests/mock/mod.rs | 4 +- xcm/xcm-executor/src/lib.rs | 6 ++- xcm/xcm-executor/src/traits/conversion.rs | 25 +++++---- xcm/xcm-executor/src/traits/weight.rs | 2 +- xcm/xcm-simulator/example/src/lib.rs | 10 ++-- xcm/xcm-simulator/example/src/parachain.rs | 4 +- xcm/xcm-simulator/src/lib.rs | 6 ++- 18 files changed, 179 insertions(+), 117 deletions(-) diff --git a/runtime/common/src/xcm_sender.rs b/runtime/common/src/xcm_sender.rs index af1f783cfa9a..2d75edfd4571 100644 --- a/runtime/common/src/xcm_sender.rs +++ b/runtime/common/src/xcm_sender.rs @@ -27,7 +27,8 @@ pub struct ChildParachainRouter(PhantomData<(T, W)>); impl SendXcm for ChildParachainRouter { - fn send_xcm(dest: MultiLocation, msg: Xcm<()>) -> SendResult { + fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { + let dest = dest.into(); match dest { MultiLocation { parents: 0, interior: X1(Parachain(id)) } => { // Downward message passing. diff --git a/runtime/parachains/src/ump.rs b/runtime/parachains/src/ump.rs index a4f046024802..b7a1c9f508fd 100644 --- a/runtime/parachains/src/ump.rs +++ b/runtime/parachains/src/ump.rs @@ -91,7 +91,7 @@ impl, C: Config> UmpSink for XcmSi ) -> Result { use parity_scale_codec::DecodeLimit; use xcm::{ - latest::{Error as XcmError, Junction, MultiLocation, Xcm}, + latest::{Error as XcmError, Junction, Xcm}, VersionedXcm, }; @@ -111,9 +111,8 @@ impl, C: Config> UmpSink for XcmSi Ok(0) }, Ok(Ok(xcm_message)) => { - let xcm_junction: Junction = Junction::Parachain(origin.into()); - let xcm_location: MultiLocation = xcm_junction.into(); - let outcome = XcmExecutor::execute_xcm(xcm_location, xcm_message, max_weight); + let xcm_junction = Junction::Parachain(origin.into()); + let outcome = XcmExecutor::execute_xcm(xcm_junction, xcm_message, max_weight); match outcome { Outcome::Error(XcmError::WeightLimitReached(required)) => Err((id, required)), outcome => { diff --git a/runtime/test-runtime/src/xcm_config.rs b/runtime/test-runtime/src/xcm_config.rs index 2b22989ea93d..3a3c762c6b03 100644 --- a/runtime/test-runtime/src/xcm_config.rs +++ b/runtime/test-runtime/src/xcm_config.rs @@ -36,7 +36,7 @@ pub type LocalOriginToLocation = ( pub struct DoNothingRouter; impl SendXcm for DoNothingRouter { - fn send_xcm(_dest: MultiLocation, _msg: Xcm<()>) -> SendResult { + fn send_xcm(_dest: impl Into, _msg: Xcm<()>) -> SendResult { Ok(()) } } diff --git a/xcm/pallet-xcm/src/lib.rs b/xcm/pallet-xcm/src/lib.rs index b222c73a9c69..d89b306f085b 100644 --- a/xcm/pallet-xcm/src/lib.rs +++ b/xcm/pallet-xcm/src/lib.rs @@ -426,7 +426,7 @@ pub mod pallet { weight_used += T::DbWeight::get().read + T::DbWeight::get().write; q.sort_by_key(|i| i.1); while let Some((versioned_dest, _)) = q.pop() { - if let Ok(dest) = versioned_dest.try_into() { + if let Ok(dest) = MultiLocation::try_from(versioned_dest) { if Self::request_version_notify(dest).is_ok() { // TODO: correct weights. weight_used += T::DbWeight::get().read + T::DbWeight::get().write; @@ -458,7 +458,7 @@ pub mod pallet { message: Box>, ) -> DispatchResult { let origin_location = T::SendXcmOrigin::ensure_origin(origin)?; - let interior = + let interior: Junctions = origin_location.clone().try_into().map_err(|_| Error::::InvalidOrigin)?; let dest = MultiLocation::try_from(*dest).map_err(|()| Error::::BadVersion)?; let message: Xcm<()> = (*message).try_into().map_err(|()| Error::::BadVersion)?; @@ -688,7 +688,8 @@ pub mod pallet { location: Box, ) -> DispatchResult { ensure_root(origin)?; - let location = (*location).try_into().map_err(|()| Error::::BadLocation)?; + let location: MultiLocation = + (*location).try_into().map_err(|()| Error::::BadLocation)?; Self::request_version_notify(location).map_err(|e| { match e { XcmError::InvalidLocation => Error::::AlreadySubscribed, @@ -710,7 +711,8 @@ pub mod pallet { location: Box, ) -> DispatchResult { ensure_root(origin)?; - let location = (*location).try_into().map_err(|()| Error::::BadLocation)?; + let location: MultiLocation = + (*location).try_into().map_err(|()| Error::::BadLocation)?; Self::unrequest_version_notify(location).map_err(|e| { match e { XcmError::InvalidLocation => Error::::NoSubscription, @@ -867,7 +869,8 @@ pub mod pallet { } /// Request that `dest` informs us of its version. - pub fn request_version_notify(dest: MultiLocation) -> XcmResult { + pub fn request_version_notify(dest: impl Into) -> XcmResult { + let dest = dest.into(); let versioned_dest = VersionedMultiLocation::from(dest.clone()); let already = VersionNotifiers::::contains_key(XCM_VERSION, &versioned_dest); ensure!(!already, XcmError::InvalidLocation); @@ -887,7 +890,8 @@ pub mod pallet { } /// Request that `dest` ceases informing us of its version. - pub fn unrequest_version_notify(dest: MultiLocation) -> XcmResult { + pub fn unrequest_version_notify(dest: impl Into) -> XcmResult { + let dest = dest.into(); let versioned_dest = LatestVersionedMultiLocation(&dest); let query_id = VersionNotifiers::::take(XCM_VERSION, versioned_dest) .ok_or(XcmError::InvalidLocation)?; @@ -899,10 +903,12 @@ pub mod pallet { /// Relay an XCM `message` from a given `interior` location in this context to a given `dest` /// location. A null `dest` is not handled. pub fn send_xcm( - interior: Junctions, - dest: MultiLocation, + interior: impl Into, + dest: impl Into, mut message: Xcm<()>, ) -> Result<(), SendError> { + let interior = interior.into(); + let dest = dest.into(); if interior != Junctions::Here { message.0.insert(0, DescendOrigin(interior)) }; @@ -916,7 +922,7 @@ pub mod pallet { } fn do_new_query( - responder: MultiLocation, + responder: impl Into, maybe_notify: Option<(u8, u8)>, timeout: T::BlockNumber, ) -> u64 { @@ -925,7 +931,11 @@ pub mod pallet { q.saturating_inc(); Queries::::insert( r, - QueryStatus::Pending { responder: responder.into(), maybe_notify, timeout }, + QueryStatus::Pending { + responder: responder.into().into(), + maybe_notify, + timeout, + }, ); r }) @@ -945,9 +955,10 @@ pub mod pallet { /// value. pub fn report_outcome( message: &mut Xcm<()>, - responder: MultiLocation, + responder: impl Into, timeout: T::BlockNumber, ) -> Result { + let responder = responder.into(); let dest = T::LocationInverter::invert_location(&responder) .map_err(|()| XcmError::MultiLocationNotInvertible)?; let query_id = Self::new_query(responder, timeout); @@ -978,10 +989,11 @@ pub mod pallet { /// may be put in the overweight queue and need to be manually executed. pub fn report_outcome_notify( message: &mut Xcm<()>, - responder: MultiLocation, + responder: impl Into, notify: impl Into<::Call>, timeout: T::BlockNumber, ) -> Result<(), XcmError> { + let responder = responder.into(); let dest = T::LocationInverter::invert_location(&responder) .map_err(|()| XcmError::MultiLocationNotInvertible)?; let notify: ::Call = notify.into(); @@ -993,14 +1005,14 @@ pub mod pallet { } /// Attempt to create a new query ID and register it as a query that is yet to respond. - pub fn new_query(responder: MultiLocation, timeout: T::BlockNumber) -> u64 { + pub fn new_query(responder: impl Into, timeout: T::BlockNumber) -> u64 { Self::do_new_query(responder, None, timeout) } /// Attempt to create a new query ID and register it as a query that is yet to respond, and /// which will call a dispatchable when a response happens. pub fn new_notify_query( - responder: MultiLocation, + responder: impl Into, notify: impl Into<::Call>, timeout: T::BlockNumber, ) -> u64 { @@ -1368,7 +1380,11 @@ where /// this crate's `Origin::Xcm` value. pub struct XcmPassthrough(PhantomData); impl> ConvertOrigin for XcmPassthrough { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + let origin = origin.into(); match kind { OriginKind::Xcm => Ok(crate::Origin::Xcm(origin).into()), _ => Err(origin), diff --git a/xcm/pallet-xcm/src/mock.rs b/xcm/pallet-xcm/src/mock.rs index d6ccbd4abfc9..7c5a835b7851 100644 --- a/xcm/pallet-xcm/src/mock.rs +++ b/xcm/pallet-xcm/src/mock.rs @@ -147,15 +147,16 @@ pub(crate) fn take_sent_xcm() -> Vec<(MultiLocation, Xcm<()>)> { /// Sender that never returns error, always sends pub struct TestSendXcm; impl SendXcm for TestSendXcm { - fn send_xcm(dest: MultiLocation, msg: Xcm<()>) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest, msg))); + fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { + SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); Ok(()) } } /// Sender that returns error if `X8` junction and stops routing pub struct TestSendXcmErrX8; impl SendXcm for TestSendXcmErrX8 { - fn send_xcm(dest: MultiLocation, msg: Xcm<()>) -> SendResult { + fn send_xcm(dest: impl Into, msg: Xcm<()>) -> SendResult { + let dest = dest.into(); if dest.len() == 8 { Err(SendError::Transport("Destination location full")) } else { diff --git a/xcm/src/v1/multilocation.rs b/xcm/src/v1/multilocation.rs index a8f1872bf042..9931ba4a6137 100644 --- a/xcm/src/v1/multilocation.rs +++ b/xcm/src/v1/multilocation.rs @@ -338,8 +338,8 @@ impl From for MultiLocation { #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct ParentThen(Junctions); impl From for MultiLocation { - fn from(x: ParentThen) -> Self { - MultiLocation { parents: 1, interior: x.0 } + fn from(ParentThen(interior): ParentThen) -> Self { + MultiLocation { parents: 1, interior } } } @@ -347,8 +347,8 @@ impl From for MultiLocation { #[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct Ancestor(u8); impl From for MultiLocation { - fn from(x: Ancestor) -> Self { - MultiLocation { parents: x.0, interior: Junctions::Here } + fn from(Ancestor(parents): Ancestor) -> Self { + MultiLocation { parents, interior: Junctions::Here } } } @@ -356,8 +356,8 @@ impl From for MultiLocation { #[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)] pub struct AncestorThen(u8, Junctions); impl From for MultiLocation { - fn from(x: AncestorThen) -> Self { - MultiLocation { parents: x.0, interior: x.1 } + fn from(AncestorThen(parents, interior): AncestorThen) -> Self { + MultiLocation { parents, interior } } } diff --git a/xcm/src/v1/traits.rs b/xcm/src/v1/traits.rs index 445ab25d4c7f..d95d9e1eb84a 100644 --- a/xcm/src/v1/traits.rs +++ b/xcm/src/v1/traits.rs @@ -146,7 +146,12 @@ pub trait ExecuteXcm { /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. The weight limit is /// a basic hard-limit and the implementation may place further restrictions or requirements on weight and /// other aspects. - fn execute_xcm(origin: MultiLocation, message: Xcm, weight_limit: Weight) -> Outcome { + fn execute_xcm( + origin: impl Into, + message: Xcm, + weight_limit: Weight, + ) -> Outcome { + let origin = origin.into(); log::debug!( target: "xcm::execute_xcm", "origin: {:?}, message: {:?}, weight_limit: {:?}", @@ -162,7 +167,7 @@ pub trait ExecuteXcm { /// Some amount of `weight_credit` may be provided which, depending on the implementation, may allow /// execution without associated payment. fn execute_xcm_in_credit( - origin: MultiLocation, + origin: impl Into, message: Xcm, weight_limit: Weight, weight_credit: Weight, @@ -171,7 +176,7 @@ pub trait ExecuteXcm { impl ExecuteXcm for () { fn execute_xcm_in_credit( - _origin: MultiLocation, + _origin: impl Into, _message: Xcm, _weight_limit: Weight, _weight_credit: Weight, @@ -195,15 +200,16 @@ impl ExecuteXcm for () { /// /// A sender that only passes the message through and does nothing. /// struct Sender1; /// impl SendXcm for Sender1 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { -/// return Err(Error::CannotReachDestination(destination, message)) +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { +/// return Err(Error::CannotReachDestination(destination.into(), message)) /// } /// } /// /// /// A sender that accepts a message that has an X2 junction, otherwise stops the routing. /// struct Sender2; /// impl SendXcm for Sender2 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { +/// let destination = destination.into(); /// if matches!(destination.interior(), Junctions::X2(j1, j2)) /// && destination.parent_count() == 0 /// { @@ -217,7 +223,8 @@ impl ExecuteXcm for () { /// /// A sender that accepts a message from an X1 parent junction, passing through otherwise. /// struct Sender3; /// impl SendXcm for Sender3 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { +/// let destination = destination.into(); /// if matches!(destination.interior(), Junctions::Here) /// && destination.parent_count() == 1 /// { @@ -232,17 +239,16 @@ impl ExecuteXcm for () { /// # fn main() { /// let call: Vec = ().encode(); /// let message = Xcm::Transact { origin_type: OriginKind::Superuser, require_weight_at_most: 0, call: call.into() }; -/// let destination: MultiLocation = Parent.into(); /// /// assert!( /// // Sender2 will block this. -/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) +/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) /// .is_err() /// ); /// /// assert!( /// // Sender3 will catch this. -/// <(Sender1, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) +/// <(Sender1, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) /// .is_ok() /// ); /// # } @@ -253,12 +259,12 @@ pub trait SendXcm { /// If it is not a destination which can be reached with this type but possibly could by others, then it *MUST* /// return `CannotReachDestination`. Any other error will cause the tuple implementation to exit early without /// trying other type fields. - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result; + fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result; } #[impl_trait_for_tuples::impl_for_tuples(30)] impl SendXcm for Tuple { - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> Result { + fn send_xcm(destination: impl Into, message: Xcm<()>) -> Result { for_tuples!( #( // we shadow `destination` and `message` in each expansion for the next one. let (destination, message) = match Tuple::send_xcm(destination, message) { @@ -266,6 +272,6 @@ impl SendXcm for Tuple { o @ _ => return o, }; )* ); - Err(Error::CannotReachDestination(destination, message)) + Err(Error::CannotReachDestination(destination.into(), message)) } } diff --git a/xcm/src/v2/traits.rs b/xcm/src/v2/traits.rs index a28137b00052..d2d994124d38 100644 --- a/xcm/src/v2/traits.rs +++ b/xcm/src/v2/traits.rs @@ -167,7 +167,12 @@ pub trait ExecuteXcm { /// Execute some XCM `message` from `origin` using no more than `weight_limit` weight. The weight limit is /// a basic hard-limit and the implementation may place further restrictions or requirements on weight and /// other aspects. - fn execute_xcm(origin: MultiLocation, message: Xcm, weight_limit: Weight) -> Outcome { + fn execute_xcm( + origin: impl Into, + message: Xcm, + weight_limit: Weight, + ) -> Outcome { + let origin = origin.into(); log::debug!( target: "xcm::execute_xcm", "origin: {:?}, message: {:?}, weight_limit: {:?}", @@ -183,7 +188,7 @@ pub trait ExecuteXcm { /// Some amount of `weight_credit` may be provided which, depending on the implementation, may allow /// execution without associated payment. fn execute_xcm_in_credit( - origin: MultiLocation, + origin: impl Into, message: Xcm, weight_limit: Weight, weight_credit: Weight, @@ -192,7 +197,7 @@ pub trait ExecuteXcm { impl ExecuteXcm for () { fn execute_xcm_in_credit( - _origin: MultiLocation, + _origin: impl Into, _message: Xcm, _weight_limit: Weight, _weight_credit: Weight, @@ -241,16 +246,16 @@ pub type SendResult = result::Result<(), SendError>; /// /// A sender that only passes the message through and does nothing. /// struct Sender1; /// impl SendXcm for Sender1 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> SendResult { -/// return Err(SendError::CannotReachDestination(destination, message)) +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult { +/// return Err(SendError::CannotReachDestination(destination.into(), message)) /// } /// } /// /// /// A sender that accepts a message that has an X2 junction, otherwise stops the routing. /// struct Sender2; /// impl SendXcm for Sender2 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> SendResult { -/// if let MultiLocation { parents: 0, interior: X2(j1, j2) } = destination { +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult { +/// if let MultiLocation { parents: 0, interior: X2(j1, j2) } = destination.into() { /// Ok(()) /// } else { /// Err(SendError::Unroutable) @@ -261,7 +266,8 @@ pub type SendResult = result::Result<(), SendError>; /// /// A sender that accepts a message from a parent, passing through otherwise. /// struct Sender3; /// impl SendXcm for Sender3 { -/// fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> SendResult { +/// fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult { +/// let destination = destination.into(); /// match destination { /// MultiLocation { parents: 1, interior: Here } => Ok(()), /// _ => Err(SendError::CannotReachDestination(destination, message)), @@ -277,17 +283,16 @@ pub type SendResult = result::Result<(), SendError>; /// require_weight_at_most: 0, /// call: call.into(), /// }]); -/// let destination = MultiLocation::parent(); /// /// assert!( /// // Sender2 will block this. -/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) +/// <(Sender1, Sender2, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) /// .is_err() /// ); /// /// assert!( /// // Sender3 will catch this. -/// <(Sender1, Sender3) as SendXcm>::send_xcm(destination.clone(), message.clone()) +/// <(Sender1, Sender3) as SendXcm>::send_xcm(Parent, message.clone()) /// .is_ok() /// ); /// # } @@ -298,12 +303,12 @@ pub trait SendXcm { /// If it is not a destination which can be reached with this type but possibly could by others, then it *MUST* /// return `CannotReachDestination`. Any other error will cause the tuple implementation to exit early without /// trying other type fields. - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> SendResult; + fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult; } #[impl_trait_for_tuples::impl_for_tuples(30)] impl SendXcm for Tuple { - fn send_xcm(destination: MultiLocation, message: Xcm<()>) -> SendResult { + fn send_xcm(destination: impl Into, message: Xcm<()>) -> SendResult { for_tuples!( #( // we shadow `destination` and `message` in each expansion for the next one. let (destination, message) = match Tuple::send_xcm(destination, message) { @@ -311,7 +316,7 @@ impl SendXcm for Tuple { o @ _ => return o, }; )* ); - Err(SendError::CannotReachDestination(destination, message)) + Err(SendError::CannotReachDestination(destination.into(), message)) } } diff --git a/xcm/xcm-builder/src/mock.rs b/xcm/xcm-builder/src/mock.rs index 67a2cd8c9aec..4efc02b7e191 100644 --- a/xcm/xcm-builder/src/mock.rs +++ b/xcm/xcm-builder/src/mock.rs @@ -109,8 +109,8 @@ pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm)> { } pub struct TestSendXcm; impl SendXcm for TestSendXcm { - fn send_xcm(dest: MultiLocation, msg: opaque::Xcm) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest, msg))); + fn send_xcm(dest: impl Into, msg: opaque::Xcm) -> SendResult { + SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); Ok(()) } } @@ -164,11 +164,11 @@ pub fn to_account(l: MultiLocation) -> Result { pub struct TestOriginConverter; impl ConvertOrigin for TestOriginConverter { fn convert_origin( - origin: MultiLocation, + origin: impl Into, kind: OriginKind, ) -> Result { use OriginKind::*; - match (kind, origin) { + match (kind, origin.into()) { (Superuser, _) => Ok(TestOrigin::Root), (SovereignAccount, l) => Ok(TestOrigin::Signed(to_account(l)?)), (Native, MultiLocation { parents: 0, interior: X1(Parachain(id)) }) => diff --git a/xcm/xcm-builder/src/origin_conversion.rs b/xcm/xcm-builder/src/origin_conversion.rs index b1800de2c6c8..9f33347e378d 100644 --- a/xcm/xcm-builder/src/origin_conversion.rs +++ b/xcm/xcm-builder/src/origin_conversion.rs @@ -32,7 +32,11 @@ impl, Origin: Origi where Origin::AccountId: Clone, { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + let origin = origin.into(); if let OriginKind::SovereignAccount = kind { let location = LocationConverter::convert(origin)?; Ok(Origin::signed(location).into()) @@ -44,7 +48,11 @@ where pub struct ParentAsSuperuser(PhantomData); impl ConvertOrigin for ParentAsSuperuser { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + let origin = origin.into(); if kind == OriginKind::Superuser && origin.contains_parents_only(1) { Ok(Origin::root()) } else { @@ -57,8 +65,11 @@ pub struct ChildSystemParachainAsSuperuser(PhantomData<(ParaId, impl, Origin: OriginTrait> ConvertOrigin for ChildSystemParachainAsSuperuser { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Superuser, MultiLocation { parents: 0, interior: X1(Junction::Parachain(id)) }, @@ -72,8 +83,11 @@ pub struct SiblingSystemParachainAsSuperuser(PhantomData<(ParaId impl, Origin: OriginTrait> ConvertOrigin for SiblingSystemParachainAsSuperuser { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Superuser, MultiLocation { parents: 1, interior: X1(Junction::Parachain(id)) }, @@ -87,8 +101,11 @@ pub struct ChildParachainAsNative(PhantomData<(Parachai impl, Origin: From> ConvertOrigin for ChildParachainAsNative { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Native, MultiLocation { parents: 0, interior: X1(Junction::Parachain(id)) }, @@ -104,8 +121,11 @@ pub struct SiblingParachainAsNative( impl, Origin: From> ConvertOrigin for SiblingParachainAsNative { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Native, MultiLocation { parents: 1, interior: X1(Junction::Parachain(id)) }, @@ -120,7 +140,11 @@ pub struct RelayChainAsNative(PhantomData<(RelayOrigin, Ori impl, Origin> ConvertOrigin for RelayChainAsNative { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + let origin = origin.into(); if kind == OriginKind::Native && origin.contains_parents_only(1) { Ok(RelayOrigin::get()) } else { @@ -135,8 +159,11 @@ impl, Origin: OriginTrait> ConvertOrigin where Origin::AccountId: From<[u8; 32]>, { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Native, MultiLocation { parents: 0, interior: X1(Junction::AccountId32 { id, network }) }, @@ -153,8 +180,11 @@ impl, Origin: OriginTrait> ConvertOrigin where Origin::AccountId: From<[u8; 20]>, { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { - match (kind, origin) { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { + match (kind, origin.into()) { ( OriginKind::Native, MultiLocation { parents: 0, interior: X1(Junction::AccountKey20 { key, network }) }, diff --git a/xcm/xcm-builder/src/tests.rs b/xcm/xcm-builder/src/tests.rs index 746d9cbb6ce7..e3e5e24ca1b0 100644 --- a/xcm/xcm-builder/src/tests.rs +++ b/xcm/xcm-builder/src/tests.rs @@ -150,7 +150,6 @@ fn paying_reserve_deposit_should_work() { add_reserve(Parent.into(), (Parent, WildFungible).into()); WeightPrice::set((Parent.into(), 1_000_000_000_000)); - let origin = Parent.into(); let fees = (Parent, 30).into(); let message = Xcm(vec![ ReserveAssetDeposited((Parent, 100).into()), @@ -158,7 +157,7 @@ fn paying_reserve_deposit_should_work() { DepositAsset { assets: All.into(), max_assets: 1, beneficiary: Here.into() }, ]); let weight_limit = 50; - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Complete(30)); assert_eq!(assets(3000), vec![(Parent, 70).into()]); } @@ -171,7 +170,7 @@ fn transfer_should_work() { add_asset(1001, (Here, 1000)); // They want to transfer 100 of them to their sibling parachain #2 let r = XcmExecutor::::execute_xcm( - Parachain(1).into(), + Parachain(1), Xcm(vec![TransferAsset { assets: (Here, 100).into(), beneficiary: X1(AccountIndex64 { index: 3, network: Any }).into(), @@ -434,7 +433,7 @@ fn reserve_transfer_should_work() { // They want to transfer 100 of our native asset from sovereign account of parachain #1 into #2 // and let them know to hand it to account #3. let r = XcmExecutor::::execute_xcm( - Parachain(1).into(), + Parachain(1), Xcm(vec![TransferReserveAsset { assets: (Here, 100).into(), dest: Parachain(2).into(), @@ -482,8 +481,7 @@ fn simple_version_subscriptions_should_work() { let r = XcmExecutor::::execute_xcm(origin, message.clone(), weight_limit); assert_eq!(r, Outcome::Error(XcmError::Barrier)); - let origin = Parent.into(); - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Complete(10)); assert_eq!(SubscriptionRequests::get(), vec![(Parent.into(), Some((42, 5000)))]); @@ -536,8 +534,7 @@ fn simple_version_unsubscriptions_should_work() { let r = XcmExecutor::::execute_xcm(origin, message.clone(), weight_limit); assert_eq!(r, Outcome::Error(XcmError::Barrier)); - let origin = Parent.into(); - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Complete(10)); assert_eq!(SubscriptionRequests::get(), vec![(Parent.into(), None)]); @@ -580,14 +577,13 @@ fn version_unsubscription_instruction_should_work() { fn transacting_should_work() { AllowUnpaidFrom::set(vec![Parent.into()]); - let origin = Parent.into(); let message = Xcm::(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: 50, call: TestCall::Any(50, None).encode().into(), }]); let weight_limit = 60; - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Complete(60)); } @@ -595,14 +591,13 @@ fn transacting_should_work() { fn transacting_should_respect_max_weight_requirement() { AllowUnpaidFrom::set(vec![Parent.into()]); - let origin = Parent.into(); let message = Xcm::(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: 40, call: TestCall::Any(50, None).encode().into(), }]); let weight_limit = 60; - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Incomplete(50, XcmError::TooMuchWeightRequired)); } @@ -610,14 +605,13 @@ fn transacting_should_respect_max_weight_requirement() { fn transacting_should_refund_weight() { AllowUnpaidFrom::set(vec![Parent.into()]); - let origin = Parent.into(); let message = Xcm::(vec![Transact { origin_type: OriginKind::Native, require_weight_at_most: 50, call: TestCall::Any(50, Some(30)).encode().into(), }]); let weight_limit = 60; - let r = XcmExecutor::::execute_xcm(origin, message, weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message, weight_limit); assert_eq!(r, Outcome::Complete(40)); } @@ -651,9 +645,8 @@ fn paid_transacting_should_refund_payment_for_unused_weight() { #[test] fn prepaid_result_of_query_should_get_free_execution() { let query_id = 33; - let origin: MultiLocation = Parent.into(); // We put this in manually here, but normally this would be done at the point of crafting the message. - expect_response(query_id, origin.clone()); + expect_response(query_id, Parent.into()); let the_response = Response::Assets((Parent, 100).into()); let message = Xcm::(vec![QueryResponse { @@ -664,12 +657,12 @@ fn prepaid_result_of_query_should_get_free_execution() { let weight_limit = 10; // First time the response gets through since we're expecting it... - let r = XcmExecutor::::execute_xcm(origin.clone(), message.clone(), weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message.clone(), weight_limit); assert_eq!(r, Outcome::Complete(10)); assert_eq!(response(query_id).unwrap(), the_response); // Second time it doesn't, since we're not. - let r = XcmExecutor::::execute_xcm(origin.clone(), message.clone(), weight_limit); + let r = XcmExecutor::::execute_xcm(Parent, message.clone(), weight_limit); assert_eq!(r, Outcome::Error(XcmError::Barrier)); } diff --git a/xcm/xcm-builder/tests/mock/mod.rs b/xcm/xcm-builder/tests/mock/mod.rs index bcdac942a30a..1f0a5942045c 100644 --- a/xcm/xcm-builder/tests/mock/mod.rs +++ b/xcm/xcm-builder/tests/mock/mod.rs @@ -47,8 +47,8 @@ pub fn sent_xcm() -> Vec<(MultiLocation, opaque::Xcm)> { } pub struct TestSendXcm; impl SendXcm for TestSendXcm { - fn send_xcm(dest: MultiLocation, msg: opaque::Xcm) -> SendResult { - SENT_XCM.with(|q| q.borrow_mut().push((dest, msg))); + fn send_xcm(dest: impl Into, msg: opaque::Xcm) -> SendResult { + SENT_XCM.with(|q| q.borrow_mut().push((dest.into(), msg))); Ok(()) } } diff --git a/xcm/xcm-executor/src/lib.rs b/xcm/xcm-executor/src/lib.rs index 6e4611b14eac..f46963f6fbcd 100644 --- a/xcm/xcm-executor/src/lib.rs +++ b/xcm/xcm-executor/src/lib.rs @@ -67,11 +67,12 @@ pub const MAX_RECURSION_LIMIT: u32 = 8; impl ExecuteXcm for XcmExecutor { fn execute_xcm_in_credit( - origin: MultiLocation, + origin: impl Into, mut message: Xcm, weight_limit: Weight, mut weight_credit: Weight, ) -> Outcome { + let origin = origin.into(); log::trace!( target: "xcm::execute_xcm_in_credit", "origin: {:?}, message: {:?}, weight_limit: {:?}, weight_credit: {:?}", @@ -149,7 +150,8 @@ impl From for frame_benchmarking::BenchmarkError { } impl XcmExecutor { - pub fn new(origin: MultiLocation) -> Self { + pub fn new(origin: impl Into) -> Self { + let origin = origin.into(); Self { holding: Assets::new(), origin: Some(origin.clone()), diff --git a/xcm/xcm-executor/src/traits/conversion.rs b/xcm/xcm-executor/src/traits/conversion.rs index 7d2a2f50ba75..dbfb2d6a5fad 100644 --- a/xcm/xcm-executor/src/traits/conversion.rs +++ b/xcm/xcm-executor/src/traits/conversion.rs @@ -144,9 +144,9 @@ impl Convert, T> for Decoded { /// // A convertor that will bump the para id and pass it to the next one. /// struct BumpParaId; /// impl ConvertOrigin for BumpParaId { -/// fn convert_origin(origin: MultiLocation, _: OriginKind) -> Result { -/// match origin.interior() { -/// Junctions::X1(Junction::Parachain(id)) if origin.parent_count() == 0 => { +/// fn convert_origin(origin: impl Into, _: OriginKind) -> Result { +/// match origin.into() { +/// MultiLocation { parents: 0, interior: Junctions::X1(Junction::Parachain(id)) } => { /// Err(Junctions::X1(Junction::Parachain(id + 1)).into()) /// } /// _ => unreachable!() @@ -156,12 +156,12 @@ impl Convert, T> for Decoded { /// /// struct AcceptPara7; /// impl ConvertOrigin for AcceptPara7 { -/// fn convert_origin(origin: MultiLocation, _: OriginKind) -> Result { -/// match origin.interior() { -/// Junctions::X1(Junction::Parachain(id)) if id == &7 && origin.parent_count() == 0 => { +/// fn convert_origin(origin: impl Into, _: OriginKind) -> Result { +/// match origin.into() { +/// MultiLocation { parents: 0, interior: Junctions::X1(Junction::Parachain(id)) } if id == 7 => { /// Ok(7) /// } -/// _ => Err(origin) +/// o => Err(o) /// } /// } /// } @@ -175,18 +175,25 @@ impl Convert, T> for Decoded { /// ``` pub trait ConvertOrigin { /// Attempt to convert `origin` to the generic `Origin` whilst consuming it. - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result; + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result; } #[impl_trait_for_tuples::impl_for_tuples(30)] impl ConvertOrigin for Tuple { - fn convert_origin(origin: MultiLocation, kind: OriginKind) -> Result { + fn convert_origin( + origin: impl Into, + kind: OriginKind, + ) -> Result { for_tuples!( #( let origin = match Tuple::convert_origin(origin, kind) { Err(o) => o, r => return r }; )* ); + let origin = origin.into(); log::trace!( target: "xcm::convert_origin", "could not convert: origin: {:?}, kind: {:?}", diff --git a/xcm/xcm-executor/src/traits/weight.rs b/xcm/xcm-executor/src/traits/weight.rs index 5d3af4f4c141..d3da75e0c29e 100644 --- a/xcm/xcm-executor/src/traits/weight.rs +++ b/xcm/xcm-executor/src/traits/weight.rs @@ -34,7 +34,7 @@ pub trait WeightBounds { /// message. pub trait UniversalWeigher { /// Get the upper limit of weight required for `dest` to execute `message`. - fn weigh(dest: MultiLocation, message: Xcm<()>) -> Result; + fn weigh(dest: impl Into, message: Xcm<()>) -> Result; } /// Charge for weight in order to execute XCM. diff --git a/xcm/xcm-simulator/example/src/lib.rs b/xcm/xcm-simulator/example/src/lib.rs index 1f6d2934a673..2707c69c7f42 100644 --- a/xcm/xcm-simulator/example/src/lib.rs +++ b/xcm/xcm-simulator/example/src/lib.rs @@ -125,7 +125,7 @@ mod tests { Relay::execute_with(|| { assert_ok!(RelayChainPalletXcm::send_xcm( Here, - Parachain(1).into(), + Parachain(1), Xcm(vec![Transact { origin_type: OriginKind::SovereignAccount, require_weight_at_most: INITIAL_BALANCE as u64, @@ -152,7 +152,7 @@ mod tests { ParaA::execute_with(|| { assert_ok!(ParachainPalletXcm::send_xcm( Here, - Parent.into(), + Parent, Xcm(vec![Transact { origin_type: OriginKind::SovereignAccount, require_weight_at_most: INITIAL_BALANCE as u64, @@ -180,7 +180,7 @@ mod tests { ParaA::execute_with(|| { assert_ok!(ParachainPalletXcm::send_xcm( Here, - MultiLocation::new(1, X1(Parachain(2))), + (Parent, Parachain(2)), Xcm(vec![Transact { origin_type: OriginKind::SovereignAccount, require_weight_at_most: INITIAL_BALANCE as u64, @@ -247,7 +247,7 @@ mod tests { }, ]); // Send withdraw and deposit - assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent.into(), message.clone())); + assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone())); }); Relay::execute_with(|| { @@ -289,7 +289,7 @@ mod tests { }, ]); // Send withdraw and deposit with query holding - assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent.into(), message.clone(),)); + assert_ok!(ParachainPalletXcm::send_xcm(Here, Parent, message.clone(),)); }); // Check that transfer was executed diff --git a/xcm/xcm-simulator/example/src/parachain.rs b/xcm/xcm-simulator/example/src/parachain.rs index 0d2c74f8ba7c..8d68b498ca21 100644 --- a/xcm/xcm-simulator/example/src/parachain.rs +++ b/xcm/xcm-simulator/example/src/parachain.rs @@ -219,7 +219,7 @@ pub mod mock_msg_queue { let hash = Encode::using_encoded(&xcm, T::Hashing::hash); let (result, event) = match Xcm::::try_from(xcm) { Ok(xcm) => { - let location = MultiLocation::new(1, X1(Parachain(sender.into()))); + let location = (1, Parachain(sender.into())); match T::XcmExecutor::execute_xcm(location, xcm, max_weight) { Outcome::Error(e) => (Err(e.clone()), Event::Fail(Some(hash), e)), Outcome::Complete(w) => (Ok(w), Event::Success(Some(hash))), @@ -275,7 +275,7 @@ pub mod mock_msg_queue { Self::deposit_event(Event::UnsupportedVersion(id)); }, Ok(Ok(x)) => { - let outcome = T::XcmExecutor::execute_xcm(Parent.into(), x.clone(), limit); + let outcome = T::XcmExecutor::execute_xcm(Parent, x.clone(), limit); >::append(x); Self::deposit_event(Event::ExecutedDownward(id, outcome)); }, diff --git a/xcm/xcm-simulator/src/lib.rs b/xcm/xcm-simulator/src/lib.rs index f932fc50deb8..5e563e153dba 100644 --- a/xcm/xcm-simulator/src/lib.rs +++ b/xcm/xcm-simulator/src/lib.rs @@ -296,9 +296,10 @@ macro_rules! decl_test_network { pub struct ParachainXcmRouter($crate::PhantomData); impl> $crate::SendXcm for ParachainXcmRouter { - fn send_xcm(destination: $crate::MultiLocation, message: $crate::Xcm<()>) -> $crate::SendResult { + fn send_xcm(destination: impl Into<$crate::MultiLocation>, message: $crate::Xcm<()>) -> $crate::SendResult { use $crate::{UmpSink, XcmpMessageHandlerT}; + let destination = destination.into(); match destination.interior() { $crate::Junctions::Here if destination.parent_count() == 1 => { $crate::PARA_MESSAGE_BUS.with( @@ -320,9 +321,10 @@ macro_rules! decl_test_network { /// XCM router for relay chain. pub struct RelayChainXcmRouter; impl $crate::SendXcm for RelayChainXcmRouter { - fn send_xcm(destination: $crate::MultiLocation, message: $crate::Xcm<()>) -> $crate::SendResult { + fn send_xcm(destination: impl Into<$crate::MultiLocation>, message: $crate::Xcm<()>) -> $crate::SendResult { use $crate::DmpMessageHandlerT; + let destination = destination.into(); match destination.interior() { $( $crate::X1($crate::Parachain(id)) if *id == $para_id && destination.parent_count() == 0 => { From 80ae3d8f21a1248310fe9429cb4b7e530dbd0cc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Thu, 30 Sep 2021 14:16:42 +0200 Subject: [PATCH 50/52] Fix master compilation (#3977) --- xcm/pallet-xcm-benchmarks/src/mock.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xcm/pallet-xcm-benchmarks/src/mock.rs b/xcm/pallet-xcm-benchmarks/src/mock.rs index 2b1cb31f1580..d59cf3387268 100644 --- a/xcm/pallet-xcm-benchmarks/src/mock.rs +++ b/xcm/pallet-xcm-benchmarks/src/mock.rs @@ -21,7 +21,7 @@ use xcm_executor::traits::FilterAssetLocation; // An xcm sender/receiver akin to > /dev/null pub struct DevNull; impl xcm::opaque::latest::SendXcm for DevNull { - fn send_xcm(_: MultiLocation, _: Xcm<()>) -> SendResult { + fn send_xcm(_: impl Into, _: Xcm<()>) -> SendResult { Ok(()) } } From 52998509b07c28386aab30db7f217a108a1d7a5e Mon Sep 17 00:00:00 2001 From: Martin Pugh Date: Thu, 30 Sep 2021 14:44:19 +0200 Subject: [PATCH 51/52] Bump version, tx_version and spec_version in prep for v0.9.11 (#3970) * bump version and spec_version * bump transaction version * Bump of the default value in CI * bump tx version for westend and kusama Co-authored-by: Wilfried Kopp --- .../extrinsic-ordering-check-from-bin.yml | 2 +- Cargo.lock | 144 +++++++++--------- Cargo.toml | 2 +- cli/Cargo.toml | 2 +- core-primitives/Cargo.toml | 2 +- erasure-coding/Cargo.toml | 2 +- erasure-coding/fuzzer/Cargo.toml | 2 +- node/client/Cargo.toml | 2 +- node/collation-generation/Cargo.toml | 2 +- node/core/approval-voting/Cargo.toml | 2 +- node/core/av-store/Cargo.toml | 2 +- node/core/backing/Cargo.toml | 2 +- node/core/bitfield-signing/Cargo.toml | 2 +- node/core/candidate-validation/Cargo.toml | 2 +- node/core/chain-api/Cargo.toml | 2 +- node/core/chain-selection/Cargo.toml | 2 +- node/core/dispute-coordinator/Cargo.toml | 2 +- node/core/dispute-participation/Cargo.toml | 2 +- node/core/parachains-inherent/Cargo.toml | 2 +- node/core/provisioner/Cargo.toml | 2 +- node/core/pvf/Cargo.toml | 2 +- node/core/runtime-api/Cargo.toml | 2 +- node/jaeger/Cargo.toml | 2 +- node/malus/Cargo.toml | 2 +- node/metered-channel/Cargo.toml | 2 +- node/metrics/Cargo.toml | 2 +- node/network/approval-distribution/Cargo.toml | 2 +- .../availability-distribution/Cargo.toml | 2 +- node/network/availability-recovery/Cargo.toml | 2 +- node/network/bitfield-distribution/Cargo.toml | 2 +- node/network/bridge/Cargo.toml | 2 +- node/network/collator-protocol/Cargo.toml | 2 +- node/network/dispute-distribution/Cargo.toml | 2 +- node/network/gossip-support/Cargo.toml | 2 +- node/network/protocol/Cargo.toml | 2 +- .../network/statement-distribution/Cargo.toml | 2 +- node/overseer/Cargo.toml | 2 +- node/overseer/overseer-gen/Cargo.toml | 2 +- .../overseer-gen/proc-macro/Cargo.toml | 2 +- node/primitives/Cargo.toml | 2 +- node/service/Cargo.toml | 2 +- node/subsystem-test-helpers/Cargo.toml | 2 +- node/subsystem-types/Cargo.toml | 2 +- node/subsystem-util/Cargo.toml | 2 +- node/subsystem/Cargo.toml | 2 +- node/test/client/Cargo.toml | 2 +- node/test/polkadot-simnet/common/Cargo.toml | 2 +- node/test/polkadot-simnet/node/Cargo.toml | 2 +- node/test/polkadot-simnet/test/Cargo.toml | 2 +- node/test/service/Cargo.toml | 2 +- parachain/Cargo.toml | 2 +- parachain/test-parachains/Cargo.toml | 2 +- parachain/test-parachains/adder/Cargo.toml | 2 +- .../test-parachains/adder/collator/Cargo.toml | 2 +- parachain/test-parachains/halt/Cargo.toml | 2 +- primitives/Cargo.toml | 2 +- rpc/Cargo.toml | 2 +- runtime/common/Cargo.toml | 2 +- runtime/common/slot_range_helper/Cargo.toml | 2 +- runtime/kusama/Cargo.toml | 2 +- runtime/kusama/src/lib.rs | 4 +- runtime/parachains/Cargo.toml | 2 +- runtime/polkadot/Cargo.toml | 2 +- runtime/polkadot/src/lib.rs | 4 +- runtime/rococo/Cargo.toml | 2 +- runtime/test-runtime/Cargo.toml | 2 +- runtime/westend/Cargo.toml | 2 +- runtime/westend/src/lib.rs | 4 +- statement-table/Cargo.toml | 2 +- utils/remote-ext-tests/bags-list/Cargo.toml | 2 +- utils/staking-miner/Cargo.toml | 2 +- xcm/Cargo.toml | 2 +- xcm/pallet-xcm/Cargo.toml | 2 +- xcm/xcm-builder/Cargo.toml | 2 +- xcm/xcm-executor/Cargo.toml | 2 +- xcm/xcm-executor/integration-tests/Cargo.toml | 2 +- xcm/xcm-simulator/Cargo.toml | 2 +- xcm/xcm-simulator/example/Cargo.toml | 2 +- 78 files changed, 152 insertions(+), 152 deletions(-) diff --git a/.github/workflows/extrinsic-ordering-check-from-bin.yml b/.github/workflows/extrinsic-ordering-check-from-bin.yml index fa70a3071c4a..0d2ffc6f2b18 100644 --- a/.github/workflows/extrinsic-ordering-check-from-bin.yml +++ b/.github/workflows/extrinsic-ordering-check-from-bin.yml @@ -10,7 +10,7 @@ on: required: true binary_url: description: A url to a Linux binary for the node containing the runtime to test - default: https://releases.parity.io/polkadot/x86_64-debian:stretch/v0.9.9-rc1/polkadot + default: https://releases.parity.io/polkadot/x86_64-debian:stretch/v0.9.10/polkadot required: true chain: description: The name of the chain under test. Usually, you would pass a local chain diff --git a/Cargo.lock b/Cargo.lock index 538a9e3f9cef..f612e699ab9a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3125,7 +3125,7 @@ dependencies = [ [[package]] name = "kusama-runtime" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bitvec 0.20.1", @@ -4118,7 +4118,7 @@ dependencies = [ [[package]] name = "metered-channel" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "derive_more", @@ -5410,7 +5410,7 @@ dependencies = [ [[package]] name = "pallet-xcm" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-support", "frame-system", @@ -5808,7 +5808,7 @@ checksum = "989d43012e2ca1c4a02507c67282691a0a3207f9dc67cec596b43fe925b3d325" [[package]] name = "polkadot" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_cmd", "color-eyre", @@ -5820,7 +5820,7 @@ dependencies = [ [[package]] name = "polkadot-approval-distribution" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "env_logger 0.9.0", @@ -5840,7 +5840,7 @@ dependencies = [ [[package]] name = "polkadot-availability-bitfield-distribution" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "bitvec 0.20.1", @@ -5861,7 +5861,7 @@ dependencies = [ [[package]] name = "polkadot-availability-distribution" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "derive_more", @@ -5888,7 +5888,7 @@ dependencies = [ [[package]] name = "polkadot-availability-recovery" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "env_logger 0.9.0", @@ -5915,7 +5915,7 @@ dependencies = [ [[package]] name = "polkadot-cli" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-benchmarking-cli", "futures 0.3.17", @@ -5934,7 +5934,7 @@ dependencies = [ [[package]] name = "polkadot-client" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "frame-benchmarking", @@ -5966,7 +5966,7 @@ dependencies = [ [[package]] name = "polkadot-collator-protocol" -version = "0.9.9" +version = "0.9.11" dependencies = [ "always-assert", "assert_matches", @@ -5993,7 +5993,7 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "0.9.9" +version = "0.9.11" dependencies = [ "parity-scale-codec", "parity-util-mem", @@ -6005,7 +6005,7 @@ dependencies = [ [[package]] name = "polkadot-dispute-distribution" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6034,7 +6034,7 @@ dependencies = [ [[package]] name = "polkadot-erasure-coding" -version = "0.9.9" +version = "0.9.11" dependencies = [ "parity-scale-codec", "polkadot-node-primitives", @@ -6047,7 +6047,7 @@ dependencies = [ [[package]] name = "polkadot-gossip-support" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6073,7 +6073,7 @@ dependencies = [ [[package]] name = "polkadot-network-bridge" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6096,7 +6096,7 @@ dependencies = [ [[package]] name = "polkadot-node-collation-generation" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "parity-scale-codec", @@ -6114,7 +6114,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-approval-voting" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "bitvec 0.20.1", @@ -6150,7 +6150,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-av-store" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "bitvec 0.20.1", @@ -6177,7 +6177,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-backing" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "bitvec 0.20.1", @@ -6201,7 +6201,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-bitfield-signing" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "polkadot-node-subsystem", @@ -6216,7 +6216,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-candidate-validation" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6237,7 +6237,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-api" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "maplit", @@ -6256,7 +6256,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-chain-selection" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "futures 0.3.17", @@ -6277,7 +6277,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "bitvec 0.20.1", @@ -6301,7 +6301,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-dispute-participation" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "futures 0.3.17", @@ -6317,7 +6317,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-parachains-inherent" -version = "0.9.9" +version = "0.9.11" dependencies = [ "async-trait", "futures 0.3.17", @@ -6333,7 +6333,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-provisioner" -version = "0.9.9" +version = "0.9.11" dependencies = [ "bitvec 0.20.1", "futures 0.3.17", @@ -6350,7 +6350,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-pvf" -version = "0.9.9" +version = "0.9.11" dependencies = [ "always-assert", "assert_matches", @@ -6384,7 +6384,7 @@ dependencies = [ [[package]] name = "polkadot-node-core-runtime-api" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "memory-lru", @@ -6403,7 +6403,7 @@ dependencies = [ [[package]] name = "polkadot-node-jaeger" -version = "0.9.9" +version = "0.9.11" dependencies = [ "async-std", "lazy_static", @@ -6420,7 +6420,7 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -6430,7 +6430,7 @@ dependencies = [ [[package]] name = "polkadot-node-network-protocol" -version = "0.9.9" +version = "0.9.11" dependencies = [ "async-trait", "derive_more", @@ -6447,7 +6447,7 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "0.9.9" +version = "0.9.11" dependencies = [ "bounded-vec", "futures 0.3.17", @@ -6469,7 +6469,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem" -version = "0.9.9" +version = "0.9.11" dependencies = [ "polkadot-node-jaeger", "polkadot-node-subsystem-types", @@ -6478,7 +6478,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.9" +version = "0.9.11" dependencies = [ "async-trait", "futures 0.3.17", @@ -6496,7 +6496,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-types" -version = "0.9.9" +version = "0.9.11" dependencies = [ "derive_more", "futures 0.3.17", @@ -6514,7 +6514,7 @@ dependencies = [ [[package]] name = "polkadot-node-subsystem-util" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6544,7 +6544,7 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "femme", @@ -6568,7 +6568,7 @@ dependencies = [ [[package]] name = "polkadot-overseer-gen" -version = "0.9.9" +version = "0.9.11" dependencies = [ "async-trait", "futures 0.3.17", @@ -6585,7 +6585,7 @@ dependencies = [ [[package]] name = "polkadot-overseer-gen-proc-macro" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "proc-macro-crate 1.1.0", @@ -6596,7 +6596,7 @@ dependencies = [ [[package]] name = "polkadot-parachain" -version = "0.9.9" +version = "0.9.11" dependencies = [ "derive_more", "frame-support", @@ -6612,7 +6612,7 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "0.9.9" +version = "0.9.11" dependencies = [ "bitvec 0.20.1", "frame-system", @@ -6641,7 +6641,7 @@ dependencies = [ [[package]] name = "polkadot-rpc" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-gadget", "beefy-gadget-rpc", @@ -6671,7 +6671,7 @@ dependencies = [ [[package]] name = "polkadot-runtime" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bitvec 0.20.1", @@ -6753,7 +6753,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bitvec 0.20.1", @@ -6803,7 +6803,7 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "0.9.9" +version = "0.9.11" dependencies = [ "bitflags", "bitvec 0.20.1", @@ -6846,7 +6846,7 @@ dependencies = [ [[package]] name = "polkadot-service" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -6948,7 +6948,7 @@ dependencies = [ [[package]] name = "polkadot-simnet" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-benchmarking", "frame-support", @@ -6980,14 +6980,14 @@ dependencies = [ [[package]] name = "polkadot-simnet-node" -version = "0.9.9" +version = "0.9.11" dependencies = [ "polkadot-simnet", ] [[package]] name = "polkadot-simnet-test" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-system", "pallet-balances", @@ -7001,7 +7001,7 @@ dependencies = [ [[package]] name = "polkadot-statement-distribution" -version = "0.9.9" +version = "0.9.11" dependencies = [ "arrayvec 0.5.2", "assert_matches", @@ -7030,7 +7030,7 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "0.9.9" +version = "0.9.11" dependencies = [ "parity-scale-codec", "polkadot-primitives", @@ -7039,7 +7039,7 @@ dependencies = [ [[package]] name = "polkadot-test-client" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "parity-scale-codec", @@ -7065,7 +7065,7 @@ dependencies = [ [[package]] name = "polkadot-test-malus" -version = "0.9.9" +version = "0.9.11" dependencies = [ "assert_matches", "async-trait", @@ -7084,7 +7084,7 @@ dependencies = [ [[package]] name = "polkadot-test-runtime" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bitvec 0.20.1", @@ -7149,7 +7149,7 @@ dependencies = [ [[package]] name = "polkadot-test-service" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-benchmarking", "frame-system", @@ -7770,7 +7770,7 @@ dependencies = [ [[package]] name = "remote-ext-tests-bags-list" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-election-provider-support", "frame-support", @@ -7870,7 +7870,7 @@ dependencies = [ [[package]] name = "rococo-runtime" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bp-messages", @@ -9332,7 +9332,7 @@ dependencies = [ [[package]] name = "slot-range-helper" -version = "0.9.9" +version = "0.9.11" dependencies = [ "enumn", "parity-scale-codec", @@ -10096,7 +10096,7 @@ checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8" [[package]] name = "staking-miner" -version = "0.9.9" +version = "0.9.11" dependencies = [ "env_logger 0.9.0", "frame-election-provider-support", @@ -10457,7 +10457,7 @@ dependencies = [ [[package]] name = "test-parachain-adder" -version = "0.9.9" +version = "0.9.11" dependencies = [ "dlmalloc", "parity-scale-codec", @@ -10470,7 +10470,7 @@ dependencies = [ [[package]] name = "test-parachain-adder-collator" -version = "0.9.9" +version = "0.9.11" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -10496,14 +10496,14 @@ dependencies = [ [[package]] name = "test-parachain-halt" -version = "0.9.9" +version = "0.9.11" dependencies = [ "substrate-wasm-builder", ] [[package]] name = "test-parachains" -version = "0.9.9" +version = "0.9.11" dependencies = [ "parity-scale-codec", "sp-core", @@ -11579,7 +11579,7 @@ dependencies = [ [[package]] name = "westend-runtime" -version = "0.9.9" +version = "0.9.11" dependencies = [ "beefy-primitives", "bitvec 0.20.1", @@ -11761,7 +11761,7 @@ dependencies = [ [[package]] name = "xcm" -version = "0.9.9" +version = "0.9.11" dependencies = [ "derivative", "impl-trait-for-tuples", @@ -11773,7 +11773,7 @@ dependencies = [ [[package]] name = "xcm-builder" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-support", "frame-system", @@ -11796,7 +11796,7 @@ dependencies = [ [[package]] name = "xcm-executor" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-benchmarking", "frame-support", @@ -11813,7 +11813,7 @@ dependencies = [ [[package]] name = "xcm-executor-integration-tests" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-support", "frame-system", @@ -11842,7 +11842,7 @@ dependencies = [ [[package]] name = "xcm-simulator" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-support", "parity-scale-codec", @@ -11858,7 +11858,7 @@ dependencies = [ [[package]] name = "xcm-simulator-example" -version = "0.9.9" +version = "0.9.11" dependencies = [ "frame-support", "frame-system", diff --git a/Cargo.toml b/Cargo.toml index bfee75c8b5eb..114d7ab2e986 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ path = "src/main.rs" name = "polkadot" description = "Implementation of a https://polkadot.network node in Rust based on the Substrate framework." license = "GPL-3.0-only" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" readme = "README.md" diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 371c8b285dde..d52b547a9b3f 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-cli" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Polkadot Relay-chain Client Node" edition = "2018" diff --git a/core-primitives/Cargo.toml b/core-primitives/Cargo.toml index a0a43e440252..e3c1a5e8d478 100644 --- a/core-primitives/Cargo.toml +++ b/core-primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-core-primitives" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/erasure-coding/Cargo.toml b/erasure-coding/Cargo.toml index 6bf1e6acb03e..2cf311f022eb 100644 --- a/erasure-coding/Cargo.toml +++ b/erasure-coding/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-erasure-coding" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/erasure-coding/fuzzer/Cargo.toml b/erasure-coding/fuzzer/Cargo.toml index f1bc4fb047ab..cf2e512e861e 100644 --- a/erasure-coding/fuzzer/Cargo.toml +++ b/erasure-coding/fuzzer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "erasure_coding_fuzzer" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/client/Cargo.toml b/node/client/Cargo.toml index e2fcecf48843..077429838c38 100644 --- a/node/client/Cargo.toml +++ b/node/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-client" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/collation-generation/Cargo.toml b/node/collation-generation/Cargo.toml index 41da8df3691a..9ff9621fcbf8 100644 --- a/node/collation-generation/Cargo.toml +++ b/node/collation-generation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-collation-generation" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/approval-voting/Cargo.toml b/node/core/approval-voting/Cargo.toml index 374e37c05a27..2b12c4279210 100644 --- a/node/core/approval-voting/Cargo.toml +++ b/node/core/approval-voting/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-approval-voting" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/av-store/Cargo.toml b/node/core/av-store/Cargo.toml index 20df7ace4271..ebd6529d85c5 100644 --- a/node/core/av-store/Cargo.toml +++ b/node/core/av-store/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-av-store" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/backing/Cargo.toml b/node/core/backing/Cargo.toml index 72b88b2ae4fd..83a665da943f 100644 --- a/node/core/backing/Cargo.toml +++ b/node/core/backing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-backing" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/bitfield-signing/Cargo.toml b/node/core/bitfield-signing/Cargo.toml index 01b37b827f1b..eae0881d2da3 100644 --- a/node/core/bitfield-signing/Cargo.toml +++ b/node/core/bitfield-signing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-bitfield-signing" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/candidate-validation/Cargo.toml b/node/core/candidate-validation/Cargo.toml index 50fae0d22b88..334166bbfb2a 100644 --- a/node/core/candidate-validation/Cargo.toml +++ b/node/core/candidate-validation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-candidate-validation" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/chain-api/Cargo.toml b/node/core/chain-api/Cargo.toml index a72612f1bd17..ffea3a4e559a 100644 --- a/node/core/chain-api/Cargo.toml +++ b/node/core/chain-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-chain-api" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/chain-selection/Cargo.toml b/node/core/chain-selection/Cargo.toml index 798b4cb372c6..64a84cdf29be 100644 --- a/node/core/chain-selection/Cargo.toml +++ b/node/core/chain-selection/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "polkadot-node-core-chain-selection" description = "Chain Selection Subsystem" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/dispute-coordinator/Cargo.toml b/node/core/dispute-coordinator/Cargo.toml index 45c12ff2ad76..0cb6bcc2bf3f 100644 --- a/node/core/dispute-coordinator/Cargo.toml +++ b/node/core/dispute-coordinator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-dispute-coordinator" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/dispute-participation/Cargo.toml b/node/core/dispute-participation/Cargo.toml index 34617ade2350..5b1843d02b9c 100644 --- a/node/core/dispute-participation/Cargo.toml +++ b/node/core/dispute-participation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-dispute-participation" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/parachains-inherent/Cargo.toml b/node/core/parachains-inherent/Cargo.toml index 487fbd6d2547..4a40d3f1e383 100644 --- a/node/core/parachains-inherent/Cargo.toml +++ b/node/core/parachains-inherent/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-parachains-inherent" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/provisioner/Cargo.toml b/node/core/provisioner/Cargo.toml index ae0f9ea99904..a5313e348226 100644 --- a/node/core/provisioner/Cargo.toml +++ b/node/core/provisioner/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-provisioner" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/pvf/Cargo.toml b/node/core/pvf/Cargo.toml index 6710924bb114..23ee5fab4308 100644 --- a/node/core/pvf/Cargo.toml +++ b/node/core/pvf/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-pvf" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/core/runtime-api/Cargo.toml b/node/core/runtime-api/Cargo.toml index fa7c8d47cb1b..ed730f70d492 100644 --- a/node/core/runtime-api/Cargo.toml +++ b/node/core/runtime-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-core-runtime-api" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/jaeger/Cargo.toml b/node/jaeger/Cargo.toml index 736b3c3e5237..308a76d494f8 100644 --- a/node/jaeger/Cargo.toml +++ b/node/jaeger/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-jaeger" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Polkadot Jaeger primitives" diff --git a/node/malus/Cargo.toml b/node/malus/Cargo.toml index 8bb9b6d6a3a9..94ab2d33ac5b 100644 --- a/node/malus/Cargo.toml +++ b/node/malus/Cargo.toml @@ -10,7 +10,7 @@ path = "src/variant-a.rs" name = "polkadot-test-malus" description = "Misbehaving nodes for local testnets, system and Simnet tests." license = "GPL-3.0-only" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" readme = "README.md" diff --git a/node/metered-channel/Cargo.toml b/node/metered-channel/Cargo.toml index 53695c30923c..dfbea6ba9586 100644 --- a/node/metered-channel/Cargo.toml +++ b/node/metered-channel/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "metered-channel" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Channels with attached Meters" diff --git a/node/metrics/Cargo.toml b/node/metrics/Cargo.toml index 2146b6525c0d..d12a290c17a1 100644 --- a/node/metrics/Cargo.toml +++ b/node/metrics/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-metrics" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Subsystem traits and message definitions" diff --git a/node/network/approval-distribution/Cargo.toml b/node/network/approval-distribution/Cargo.toml index e47b5d460396..cf3c71faf2cf 100644 --- a/node/network/approval-distribution/Cargo.toml +++ b/node/network/approval-distribution/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-approval-distribution" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/availability-distribution/Cargo.toml b/node/network/availability-distribution/Cargo.toml index 4dd6d7ad6568..1f7d89c5ddb3 100644 --- a/node/network/availability-distribution/Cargo.toml +++ b/node/network/availability-distribution/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-availability-distribution" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/availability-recovery/Cargo.toml b/node/network/availability-recovery/Cargo.toml index 435670eb4765..d23d29a8dd29 100644 --- a/node/network/availability-recovery/Cargo.toml +++ b/node/network/availability-recovery/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-availability-recovery" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/bitfield-distribution/Cargo.toml b/node/network/bitfield-distribution/Cargo.toml index 5b35c7534c29..5b951bd8e030 100644 --- a/node/network/bitfield-distribution/Cargo.toml +++ b/node/network/bitfield-distribution/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-availability-bitfield-distribution" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/bridge/Cargo.toml b/node/network/bridge/Cargo.toml index 3f4a01e9b236..7758fd7148c7 100644 --- a/node/network/bridge/Cargo.toml +++ b/node/network/bridge/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-network-bridge" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/collator-protocol/Cargo.toml b/node/network/collator-protocol/Cargo.toml index 799231b0b427..295a296911db 100644 --- a/node/network/collator-protocol/Cargo.toml +++ b/node/network/collator-protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-collator-protocol" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/dispute-distribution/Cargo.toml b/node/network/dispute-distribution/Cargo.toml index eff85629f422..11443b069a71 100644 --- a/node/network/dispute-distribution/Cargo.toml +++ b/node/network/dispute-distribution/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-dispute-distribution" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/gossip-support/Cargo.toml b/node/network/gossip-support/Cargo.toml index 398f5532125d..71df67b3fa9f 100644 --- a/node/network/gossip-support/Cargo.toml +++ b/node/network/gossip-support/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-gossip-support" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/network/protocol/Cargo.toml b/node/network/protocol/Cargo.toml index 78d5cbca6353..9046c232fca4 100644 --- a/node/network/protocol/Cargo.toml +++ b/node/network/protocol/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-network-protocol" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Primitives types for the Node-side" diff --git a/node/network/statement-distribution/Cargo.toml b/node/network/statement-distribution/Cargo.toml index 8e6893805c07..5573363956f7 100644 --- a/node/network/statement-distribution/Cargo.toml +++ b/node/network/statement-distribution/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-statement-distribution" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Statement Distribution Subsystem" edition = "2018" diff --git a/node/overseer/Cargo.toml b/node/overseer/Cargo.toml index 5c5906ff1160..5345fb031811 100644 --- a/node/overseer/Cargo.toml +++ b/node/overseer/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-overseer" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/overseer/overseer-gen/Cargo.toml b/node/overseer/overseer-gen/Cargo.toml index 90c96672b1b3..dfa1d8a508f4 100644 --- a/node/overseer/overseer-gen/Cargo.toml +++ b/node/overseer/overseer-gen/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-overseer-gen" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Generate an overseer including builder pattern and message wrapper from a single struct." diff --git a/node/overseer/overseer-gen/proc-macro/Cargo.toml b/node/overseer/overseer-gen/proc-macro/Cargo.toml index 9600fbb39149..aa972b0e6a56 100644 --- a/node/overseer/overseer-gen/proc-macro/Cargo.toml +++ b/node/overseer/overseer-gen/proc-macro/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-overseer-gen-proc-macro" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Generate an overseer including builder pattern and message wrapper from a single annotated struct definition." diff --git a/node/primitives/Cargo.toml b/node/primitives/Cargo.toml index 3dc1b13da68f..4a6d9abb6880 100644 --- a/node/primitives/Cargo.toml +++ b/node/primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-primitives" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Primitives types for the Node-side" diff --git a/node/service/Cargo.toml b/node/service/Cargo.toml index 2dd75f42614e..4b2162fa29ee 100644 --- a/node/service/Cargo.toml +++ b/node/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-service" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/subsystem-test-helpers/Cargo.toml b/node/subsystem-test-helpers/Cargo.toml index f6b82257c346..e17ce65a763f 100644 --- a/node/subsystem-test-helpers/Cargo.toml +++ b/node/subsystem-test-helpers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-subsystem-test-helpers" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Subsystem traits and message definitions" diff --git a/node/subsystem-types/Cargo.toml b/node/subsystem-types/Cargo.toml index fb7a1088820b..0fa9a96f1a43 100644 --- a/node/subsystem-types/Cargo.toml +++ b/node/subsystem-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-subsystem-types" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Subsystem traits and message definitions" diff --git a/node/subsystem-util/Cargo.toml b/node/subsystem-util/Cargo.toml index 3b8db4170c9b..8fb43e7946f7 100644 --- a/node/subsystem-util/Cargo.toml +++ b/node/subsystem-util/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-subsystem-util" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Subsystem traits and message definitions" diff --git a/node/subsystem/Cargo.toml b/node/subsystem/Cargo.toml index 19a8ea469db6..5f6f1f2ca4a7 100644 --- a/node/subsystem/Cargo.toml +++ b/node/subsystem/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-node-subsystem" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" description = "Subsystem traits and message definitions and the generated overseer" diff --git a/node/test/client/Cargo.toml b/node/test/client/Cargo.toml index 1ab03b74192c..b6aa140fece6 100644 --- a/node/test/client/Cargo.toml +++ b/node/test/client/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-client" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/polkadot-simnet/common/Cargo.toml b/node/test/polkadot-simnet/common/Cargo.toml index 232413df67d7..70a788e33640 100644 --- a/node/test/polkadot-simnet/common/Cargo.toml +++ b/node/test/polkadot-simnet/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-simnet" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/polkadot-simnet/node/Cargo.toml b/node/test/polkadot-simnet/node/Cargo.toml index 0bb23500a466..6cf6ed9990c6 100644 --- a/node/test/polkadot-simnet/node/Cargo.toml +++ b/node/test/polkadot-simnet/node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-simnet-node" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/polkadot-simnet/test/Cargo.toml b/node/test/polkadot-simnet/test/Cargo.toml index d73b1c990c63..18b41010f6ac 100644 --- a/node/test/polkadot-simnet/test/Cargo.toml +++ b/node/test/polkadot-simnet/test/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-simnet-test" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/node/test/service/Cargo.toml b/node/test/service/Cargo.toml index 972d5a5b0ca3..97b885f9dc49 100644 --- a/node/test/service/Cargo.toml +++ b/node/test/service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-service" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/parachain/Cargo.toml b/parachain/Cargo.toml index 97ce76d38f0f..5a09573f7926 100644 --- a/parachain/Cargo.toml +++ b/parachain/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-parachain" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Types and utilities for creating and working with parachains" edition = "2018" diff --git a/parachain/test-parachains/Cargo.toml b/parachain/test-parachains/Cargo.toml index 4290e5b1d460..cf2f4415628d 100644 --- a/parachain/test-parachains/Cargo.toml +++ b/parachain/test-parachains/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachains" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Integration tests using the test-parachains" edition = "2018" diff --git a/parachain/test-parachains/adder/Cargo.toml b/parachain/test-parachains/adder/Cargo.toml index 2ed5fd3f9d9c..fbc6bc24613d 100644 --- a/parachain/test-parachains/adder/Cargo.toml +++ b/parachain/test-parachains/adder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachain-adder" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Test parachain which adds to a number as its state transition" edition = "2018" diff --git a/parachain/test-parachains/adder/collator/Cargo.toml b/parachain/test-parachains/adder/collator/Cargo.toml index 52a59506b529..4315051ff9a9 100644 --- a/parachain/test-parachains/adder/collator/Cargo.toml +++ b/parachain/test-parachains/adder/collator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachain-adder-collator" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Collator for the adder test parachain" edition = "2018" diff --git a/parachain/test-parachains/halt/Cargo.toml b/parachain/test-parachains/halt/Cargo.toml index c191cce20d06..dd9a087928cf 100644 --- a/parachain/test-parachains/halt/Cargo.toml +++ b/parachain/test-parachains/halt/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "test-parachain-halt" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Test parachain which executes forever" edition = "2018" diff --git a/primitives/Cargo.toml b/primitives/Cargo.toml index eee6f8431de2..4aa5d00a3a7c 100644 --- a/primitives/Cargo.toml +++ b/primitives/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-primitives" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/rpc/Cargo.toml b/rpc/Cargo.toml index bb360e80d101..a6a49f333562 100644 --- a/rpc/Cargo.toml +++ b/rpc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-rpc" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml index 46f91f5b80c0..48ba8d36055e 100644 --- a/runtime/common/Cargo.toml +++ b/runtime/common/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-runtime-common" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/common/slot_range_helper/Cargo.toml b/runtime/common/slot_range_helper/Cargo.toml index ec9158f75f9c..aec6b69355fe 100644 --- a/runtime/common/slot_range_helper/Cargo.toml +++ b/runtime/common/slot_range_helper/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "slot-range-helper" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/kusama/Cargo.toml b/runtime/kusama/Cargo.toml index 75f84c25bd18..1e04a113bdfa 100644 --- a/runtime/kusama/Cargo.toml +++ b/runtime/kusama/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kusama-runtime" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/kusama/src/lib.rs b/runtime/kusama/src/lib.rs index fbe3d45f93f5..ad97e499e958 100644 --- a/runtime/kusama/src/lib.rs +++ b/runtime/kusama/src/lib.rs @@ -118,13 +118,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("kusama"), impl_name: create_runtime_str!("parity-kusama"), authoring_version: 2, - spec_version: 9100, + spec_version: 9110, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: version::create_apis_vec![[]], - transaction_version: 5, + transaction_version: 7, }; /// The BABE epoch configuration at genesis. diff --git a/runtime/parachains/Cargo.toml b/runtime/parachains/Cargo.toml index 3fcf3d59513d..c281269b8682 100644 --- a/runtime/parachains/Cargo.toml +++ b/runtime/parachains/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-runtime-parachains" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/runtime/polkadot/Cargo.toml b/runtime/polkadot/Cargo.toml index 728bbdf9b4b8..07558ef8881d 100644 --- a/runtime/polkadot/Cargo.toml +++ b/runtime/polkadot/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-runtime" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/polkadot/src/lib.rs b/runtime/polkadot/src/lib.rs index 62f0a8287b2a..3addbf6932d7 100644 --- a/runtime/polkadot/src/lib.rs +++ b/runtime/polkadot/src/lib.rs @@ -105,13 +105,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("polkadot"), impl_name: create_runtime_str!("parity-polkadot"), authoring_version: 0, - spec_version: 9100, + spec_version: 9110, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: version::create_apis_vec![[]], - transaction_version: 7, + transaction_version: 8, }; /// The BABE epoch configuration at genesis. diff --git a/runtime/rococo/Cargo.toml b/runtime/rococo/Cargo.toml index 1d347e2035c3..294cb062a225 100644 --- a/runtime/rococo/Cargo.toml +++ b/runtime/rococo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rococo-runtime" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/test-runtime/Cargo.toml b/runtime/test-runtime/Cargo.toml index 497bc6a6b1d5..c621fbd3ca12 100644 --- a/runtime/test-runtime/Cargo.toml +++ b/runtime/test-runtime/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-test-runtime" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/westend/Cargo.toml b/runtime/westend/Cargo.toml index a968f281101c..356ecefc5d5c 100644 --- a/runtime/westend/Cargo.toml +++ b/runtime/westend/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "westend-runtime" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" build = "build.rs" diff --git a/runtime/westend/src/lib.rs b/runtime/westend/src/lib.rs index fb72eb5f5693..41c9d98e4076 100644 --- a/runtime/westend/src/lib.rs +++ b/runtime/westend/src/lib.rs @@ -116,13 +116,13 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { spec_name: create_runtime_str!("westend"), impl_name: create_runtime_str!("parity-westend"), authoring_version: 2, - spec_version: 9100, + spec_version: 9110, impl_version: 0, #[cfg(not(feature = "disable-runtime-api"))] apis: RUNTIME_API_VERSIONS, #[cfg(feature = "disable-runtime-api")] apis: version::create_apis_vec![[]], - transaction_version: 5, + transaction_version: 7, }; /// The BABE epoch configuration at genesis. diff --git a/statement-table/Cargo.toml b/statement-table/Cargo.toml index 58c8a261489b..b6ae92a22c5b 100644 --- a/statement-table/Cargo.toml +++ b/statement-table/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "polkadot-statement-table" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/utils/remote-ext-tests/bags-list/Cargo.toml b/utils/remote-ext-tests/bags-list/Cargo.toml index 7201215e78cd..6f97eabcf823 100644 --- a/utils/remote-ext-tests/bags-list/Cargo.toml +++ b/utils/remote-ext-tests/bags-list/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "remote-ext-tests-bags-list" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/utils/staking-miner/Cargo.toml b/utils/staking-miner/Cargo.toml index 21ab164470be..296240a705d3 100644 --- a/utils/staking-miner/Cargo.toml +++ b/utils/staking-miner/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "staking-miner" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] edition = "2018" diff --git a/xcm/Cargo.toml b/xcm/Cargo.toml index e70607f4dc49..6c4c319170d0 100644 --- a/xcm/Cargo.toml +++ b/xcm/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xcm" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "The basic XCM datastructures." edition = "2018" diff --git a/xcm/pallet-xcm/Cargo.toml b/xcm/pallet-xcm/Cargo.toml index 96c6e3d42a31..a9ff97ddc088 100644 --- a/xcm/pallet-xcm/Cargo.toml +++ b/xcm/pallet-xcm/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Parity Technologies "] edition = "2018" name = "pallet-xcm" -version = "0.9.9" +version = "0.9.11" [dependencies] codec = { package = "parity-scale-codec", version = "2.0.0", default-features = false, features = ["derive"] } diff --git a/xcm/xcm-builder/Cargo.toml b/xcm/xcm-builder/Cargo.toml index 8e3d713f4386..08f37b515ca7 100644 --- a/xcm/xcm-builder/Cargo.toml +++ b/xcm/xcm-builder/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Parity Technologies "] edition = "2018" name = "xcm-builder" description = "Tools & types for building with XCM and its executor." -version = "0.9.9" +version = "0.9.11" [dependencies] parity-scale-codec = { version = "2.3.1", default-features = false, features = ["derive"] } diff --git a/xcm/xcm-executor/Cargo.toml b/xcm/xcm-executor/Cargo.toml index 08aaddbeaab3..ab2184c81d1d 100644 --- a/xcm/xcm-executor/Cargo.toml +++ b/xcm/xcm-executor/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Parity Technologies "] edition = "2018" name = "xcm-executor" description = "An abstract and configurable XCM message executor." -version = "0.9.9" +version = "0.9.11" [dependencies] impl-trait-for-tuples = "0.2.0" diff --git a/xcm/xcm-executor/integration-tests/Cargo.toml b/xcm/xcm-executor/integration-tests/Cargo.toml index 7f80eaa366df..5602a1f178e7 100644 --- a/xcm/xcm-executor/integration-tests/Cargo.toml +++ b/xcm/xcm-executor/integration-tests/Cargo.toml @@ -3,7 +3,7 @@ authors = ["Parity Technologies "] edition = "2018" name = "xcm-executor-integration-tests" description = "Integration tests for the XCM Executor" -version = "0.9.9" +version = "0.9.11" [dependencies] frame-support = { git = "https://github.com/paritytech/substrate", branch = "master", default-features = false } diff --git a/xcm/xcm-simulator/Cargo.toml b/xcm/xcm-simulator/Cargo.toml index c0219386b823..abfa5560fc0c 100644 --- a/xcm/xcm-simulator/Cargo.toml +++ b/xcm/xcm-simulator/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xcm-simulator" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Test kit to simulate cross-chain message passing and XCM execution" edition = "2018" diff --git a/xcm/xcm-simulator/example/Cargo.toml b/xcm/xcm-simulator/example/Cargo.toml index b4a8cc93e537..17ce84caabcd 100644 --- a/xcm/xcm-simulator/example/Cargo.toml +++ b/xcm/xcm-simulator/example/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "xcm-simulator-example" -version = "0.9.9" +version = "0.9.11" authors = ["Parity Technologies "] description = "Examples of xcm-simulator usage." edition = "2018" From ac28a7841e5f02c40f198b54221d5b6ee12de0b8 Mon Sep 17 00:00:00 2001 From: zjb0807 Date: Thu, 30 Sep 2021 22:08:46 +0800 Subject: [PATCH 52/52] Companion for substrate PR#9890 (#3961) * add on_initialize_base_with_launch_period * trigger GitHub actions * cargo update -p sp-io Co-authored-by: Shawn Tabrizi --- Cargo.lock | 345 ++++++++++-------- .../kusama/src/weights/pallet_democracy.rs | 7 + .../polkadot/src/weights/pallet_democracy.rs | 7 + 3 files changed, 198 insertions(+), 161 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f612e699ab9a..2c37343a4c21 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -461,7 +461,7 @@ dependencies = [ [[package]] name = "beefy-gadget" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "beefy-primitives", "fnv", @@ -489,7 +489,7 @@ dependencies = [ [[package]] name = "beefy-gadget-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "beefy-gadget", "beefy-primitives", @@ -509,12 +509,12 @@ dependencies = [ [[package]] name = "beefy-merkle-tree" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" [[package]] name = "beefy-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -1918,7 +1918,7 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "fork-tree" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", ] @@ -1936,7 +1936,7 @@ dependencies = [ [[package]] name = "frame-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -1956,7 +1956,7 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "Inflector", "chrono", @@ -1982,7 +1982,7 @@ dependencies = [ [[package]] name = "frame-election-provider-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -1996,7 +1996,7 @@ dependencies = [ [[package]] name = "frame-executive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -2024,7 +2024,7 @@ dependencies = [ [[package]] name = "frame-support" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "bitflags", "frame-metadata", @@ -2051,7 +2051,7 @@ dependencies = [ [[package]] name = "frame-support-procedural" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "Inflector", "frame-support-procedural-tools", @@ -2063,7 +2063,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 1.1.0", @@ -2075,7 +2075,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro2", "quote", @@ -2085,7 +2085,7 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-support-test-pallet", @@ -2108,7 +2108,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -2119,7 +2119,7 @@ dependencies = [ [[package]] name = "frame-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "log", @@ -2136,7 +2136,7 @@ dependencies = [ [[package]] name = "frame-system-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -2151,7 +2151,7 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "sp-api", @@ -2160,7 +2160,7 @@ dependencies = [ [[package]] name = "frame-try-runtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "sp-api", @@ -2373,7 +2373,7 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generate-bags" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "chrono", "frame-election-provider-support", @@ -4595,7 +4595,7 @@ checksum = "13370dae44474229701bb69b90b4f4dca6404cb0357a2d50d635f1171dc3aa7b" [[package]] name = "pallet-assets" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4609,7 +4609,7 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -4625,7 +4625,7 @@ dependencies = [ [[package]] name = "pallet-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -4640,7 +4640,7 @@ dependencies = [ [[package]] name = "pallet-babe" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4664,7 +4664,7 @@ dependencies = [ [[package]] name = "pallet-bags-list" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4684,7 +4684,7 @@ dependencies = [ [[package]] name = "pallet-balances" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4699,7 +4699,7 @@ dependencies = [ [[package]] name = "pallet-beefy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "beefy-primitives", "frame-support", @@ -4715,7 +4715,7 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "beefy-merkle-tree", "beefy-primitives", @@ -4740,7 +4740,7 @@ dependencies = [ [[package]] name = "pallet-bounties" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4825,7 +4825,7 @@ dependencies = [ [[package]] name = "pallet-collective" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4842,7 +4842,7 @@ dependencies = [ [[package]] name = "pallet-democracy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4858,7 +4858,7 @@ dependencies = [ [[package]] name = "pallet-election-provider-multi-phase" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -4882,7 +4882,7 @@ dependencies = [ [[package]] name = "pallet-elections-phragmen" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4900,7 +4900,7 @@ dependencies = [ [[package]] name = "pallet-gilt" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4915,7 +4915,7 @@ dependencies = [ [[package]] name = "pallet-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4938,7 +4938,7 @@ dependencies = [ [[package]] name = "pallet-identity" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "enumflags2", "frame-benchmarking", @@ -4954,7 +4954,7 @@ dependencies = [ [[package]] name = "pallet-im-online" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4974,7 +4974,7 @@ dependencies = [ [[package]] name = "pallet-indices" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -4991,7 +4991,7 @@ dependencies = [ [[package]] name = "pallet-membership" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5008,7 +5008,7 @@ dependencies = [ [[package]] name = "pallet-mmr" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "ckb-merkle-mountain-range", "frame-benchmarking", @@ -5026,7 +5026,7 @@ dependencies = [ [[package]] name = "pallet-mmr-primitives" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5042,7 +5042,7 @@ dependencies = [ [[package]] name = "pallet-mmr-rpc" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5059,7 +5059,7 @@ dependencies = [ [[package]] name = "pallet-multisig" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5074,7 +5074,7 @@ dependencies = [ [[package]] name = "pallet-nicks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5088,7 +5088,7 @@ dependencies = [ [[package]] name = "pallet-offences" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5105,7 +5105,7 @@ dependencies = [ [[package]] name = "pallet-offences-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5128,7 +5128,7 @@ dependencies = [ [[package]] name = "pallet-proxy" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5143,7 +5143,7 @@ dependencies = [ [[package]] name = "pallet-recovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5157,7 +5157,7 @@ dependencies = [ [[package]] name = "pallet-scheduler" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5173,7 +5173,7 @@ dependencies = [ [[package]] name = "pallet-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5194,7 +5194,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5210,7 +5210,7 @@ dependencies = [ [[package]] name = "pallet-society" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5224,7 +5224,7 @@ dependencies = [ [[package]] name = "pallet-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-curve" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -5258,7 +5258,7 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "sp-arithmetic", @@ -5267,7 +5267,7 @@ dependencies = [ [[package]] name = "pallet-sudo" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5281,7 +5281,7 @@ dependencies = [ [[package]] name = "pallet-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5299,7 +5299,7 @@ dependencies = [ [[package]] name = "pallet-tips" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5318,7 +5318,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-support", "frame-system", @@ -5335,7 +5335,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -5352,7 +5352,7 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -5363,7 +5363,7 @@ dependencies = [ [[package]] name = "pallet-treasury" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5380,7 +5380,7 @@ dependencies = [ [[package]] name = "pallet-utility" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -5396,7 +5396,7 @@ dependencies = [ [[package]] name = "pallet-vesting" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-benchmarking", "frame-support", @@ -7793,7 +7793,7 @@ dependencies = [ [[package]] name = "remote-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "env_logger 0.9.0", "jsonrpsee-proc-macros", @@ -8056,7 +8056,7 @@ dependencies = [ [[package]] name = "sc-allocator" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "sp-core", @@ -8067,7 +8067,7 @@ dependencies = [ [[package]] name = "sc-authority-discovery" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "derive_more", @@ -8094,7 +8094,7 @@ dependencies = [ [[package]] name = "sc-basic-authorship" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8117,7 +8117,7 @@ dependencies = [ [[package]] name = "sc-block-builder" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "sc-client-api", @@ -8133,7 +8133,7 @@ dependencies = [ [[package]] name = "sc-chain-spec" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -8149,7 +8149,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8160,7 +8160,7 @@ dependencies = [ [[package]] name = "sc-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "chrono", "fdlimit", @@ -8198,7 +8198,7 @@ dependencies = [ [[package]] name = "sc-client-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "fnv", "futures 0.3.17", @@ -8226,7 +8226,7 @@ dependencies = [ [[package]] name = "sc-client-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "hash-db", "kvdb", @@ -8251,7 +8251,7 @@ dependencies = [ [[package]] name = "sc-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "futures 0.3.17", @@ -8275,7 +8275,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "derive_more", @@ -8318,7 +8318,7 @@ dependencies = [ [[package]] name = "sc-consensus-babe-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "derive_more", "futures 0.3.17", @@ -8342,7 +8342,7 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "fork-tree", "parity-scale-codec", @@ -8355,7 +8355,7 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "assert_matches", "async-trait", @@ -8389,7 +8389,7 @@ dependencies = [ [[package]] name = "sc-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "futures 0.3.17", @@ -8415,7 +8415,7 @@ dependencies = [ [[package]] name = "sc-consensus-uncles" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "sc-client-api", "sp-authorship", @@ -8426,7 +8426,7 @@ dependencies = [ [[package]] name = "sc-executor" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "lazy_static", "libsecp256k1 0.6.0", @@ -8452,7 +8452,7 @@ dependencies = [ [[package]] name = "sc-executor-common" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "derive_more", "environmental", @@ -8470,7 +8470,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmi" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "parity-scale-codec", @@ -8486,7 +8486,7 @@ dependencies = [ [[package]] name = "sc-executor-wasmtime" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "cfg-if 1.0.0", "libc", @@ -8504,7 +8504,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "derive_more", @@ -8541,7 +8541,7 @@ dependencies = [ [[package]] name = "sc-finality-grandpa-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "derive_more", "finality-grandpa", @@ -8565,7 +8565,7 @@ dependencies = [ [[package]] name = "sc-informant" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "ansi_term 0.12.1", "futures 0.3.17", @@ -8582,7 +8582,7 @@ dependencies = [ [[package]] name = "sc-keystore" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "derive_more", @@ -8597,7 +8597,7 @@ dependencies = [ [[package]] name = "sc-light" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "hash-db", "parity-scale-codec", @@ -8615,7 +8615,7 @@ dependencies = [ [[package]] name = "sc-network" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-std", "async-trait", @@ -8666,7 +8666,7 @@ dependencies = [ [[package]] name = "sc-network-gossip" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -8682,7 +8682,7 @@ dependencies = [ [[package]] name = "sc-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "bytes 1.0.1", "fnv", @@ -8709,7 +8709,7 @@ dependencies = [ [[package]] name = "sc-peerset" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "libp2p", @@ -8722,7 +8722,7 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -8731,7 +8731,7 @@ dependencies = [ [[package]] name = "sc-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "hash-db", @@ -8762,7 +8762,7 @@ dependencies = [ [[package]] name = "sc-rpc-api" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8787,7 +8787,7 @@ dependencies = [ [[package]] name = "sc-rpc-server" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "jsonrpc-core", @@ -8804,7 +8804,7 @@ dependencies = [ [[package]] name = "sc-service" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "directories", @@ -8869,7 +8869,7 @@ dependencies = [ [[package]] name = "sc-state-db" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "parity-scale-codec", @@ -8883,7 +8883,7 @@ dependencies = [ [[package]] name = "sc-sync-state-rpc" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "jsonrpc-core", "jsonrpc-core-client", @@ -8905,7 +8905,7 @@ dependencies = [ [[package]] name = "sc-telemetry" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "chrono", "futures 0.3.17", @@ -8923,7 +8923,7 @@ dependencies = [ [[package]] name = "sc-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "ansi_term 0.12.1", "atty", @@ -8952,7 +8952,7 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -8963,7 +8963,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "intervalier", @@ -8990,7 +8990,7 @@ dependencies = [ [[package]] name = "sc-transaction-pool-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "derive_more", "futures 0.3.17", @@ -9004,7 +9004,7 @@ dependencies = [ [[package]] name = "sc-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "futures-timer 3.0.2", @@ -9078,6 +9078,26 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +[[package]] +name = "scroll" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda28d4b4830b807a8b43f7b0e6b5df875311b3e7621d84577188c175b6ec1ec" +dependencies = [ + "scroll_derive", +] + +[[package]] +name = "scroll_derive" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaaae8f38bb311444cfb7f1979af0bc9240d95795f75f9ceddf6a59b79ceffa0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sct" version = "0.6.0" @@ -9436,7 +9456,7 @@ dependencies = [ [[package]] name = "sp-api" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "hash-db", "log", @@ -9453,7 +9473,7 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "blake2-rfc", "proc-macro-crate 1.1.0", @@ -9465,7 +9485,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9478,7 +9498,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "integer-sqrt", "num-traits", @@ -9493,7 +9513,7 @@ dependencies = [ [[package]] name = "sp-authority-discovery" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9506,7 +9526,7 @@ dependencies = [ [[package]] name = "sp-authorship" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "parity-scale-codec", @@ -9518,7 +9538,7 @@ dependencies = [ [[package]] name = "sp-block-builder" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "sp-api", @@ -9530,7 +9550,7 @@ dependencies = [ [[package]] name = "sp-blockchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "log", @@ -9548,7 +9568,7 @@ dependencies = [ [[package]] name = "sp-consensus" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "futures 0.3.17", @@ -9567,7 +9587,7 @@ dependencies = [ [[package]] name = "sp-consensus-babe" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "merlin", @@ -9590,7 +9610,7 @@ dependencies = [ [[package]] name = "sp-consensus-slots" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9601,7 +9621,7 @@ dependencies = [ [[package]] name = "sp-consensus-vrf" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "schnorrkel", @@ -9613,7 +9633,7 @@ dependencies = [ [[package]] name = "sp-core" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "base58", "blake2-rfc", @@ -9658,7 +9678,7 @@ dependencies = [ [[package]] name = "sp-database" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "kvdb", "parking_lot 0.11.1", @@ -9667,7 +9687,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro2", "quote", @@ -9677,7 +9697,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "environmental", "parity-scale-codec", @@ -9688,7 +9708,7 @@ dependencies = [ [[package]] name = "sp-finality-grandpa" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "finality-grandpa", "log", @@ -9706,7 +9726,7 @@ dependencies = [ [[package]] name = "sp-inherents" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -9720,7 +9740,7 @@ dependencies = [ [[package]] name = "sp-io" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "hash-db", @@ -9744,7 +9764,7 @@ dependencies = [ [[package]] name = "sp-keyring" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "lazy_static", "sp-core", @@ -9755,7 +9775,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "derive_more", @@ -9772,7 +9792,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "zstd", ] @@ -9780,7 +9800,7 @@ dependencies = [ [[package]] name = "sp-npos-elections" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9795,7 +9815,7 @@ dependencies = [ [[package]] name = "sp-npos-elections-solution-type" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -9806,7 +9826,7 @@ dependencies = [ [[package]] name = "sp-offchain" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "sp-api", "sp-core", @@ -9816,7 +9836,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "backtrace", ] @@ -9824,7 +9844,7 @@ dependencies = [ [[package]] name = "sp-rpc" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "rustc-hash", "serde", @@ -9834,7 +9854,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "either", "hash256-std-hasher", @@ -9856,7 +9876,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -9873,7 +9893,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "Inflector", "proc-macro-crate 1.1.0", @@ -9885,7 +9905,7 @@ dependencies = [ [[package]] name = "sp-serializer" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "serde", "serde_json", @@ -9894,7 +9914,7 @@ dependencies = [ [[package]] name = "sp-session" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9908,7 +9928,7 @@ dependencies = [ [[package]] name = "sp-staking" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "scale-info", @@ -9919,7 +9939,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "hash-db", "log", @@ -9942,12 +9962,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" [[package]] name = "sp-storage" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "impl-serde", "parity-scale-codec", @@ -9960,7 +9980,7 @@ dependencies = [ [[package]] name = "sp-tasks" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "log", "sp-core", @@ -9973,7 +9993,7 @@ dependencies = [ [[package]] name = "sp-timestamp" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "futures-timer 3.0.2", @@ -9989,7 +10009,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "erased-serde", "log", @@ -10007,7 +10027,7 @@ dependencies = [ [[package]] name = "sp-transaction-pool" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "sp-api", "sp-runtime", @@ -10016,7 +10036,7 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "log", @@ -10032,7 +10052,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "hash-db", "memory-db", @@ -10047,7 +10067,7 @@ dependencies = [ [[package]] name = "sp-version" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "impl-serde", "parity-scale-codec", @@ -10063,7 +10083,7 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "parity-scale-codec", "proc-macro2", @@ -10074,7 +10094,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -10270,7 +10290,7 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "3.0.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "platforms", ] @@ -10278,7 +10298,7 @@ dependencies = [ [[package]] name = "substrate-frame-rpc-system" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-system-rpc-runtime-api", "futures 0.3.17", @@ -10300,7 +10320,7 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-std", "derive_more", @@ -10314,7 +10334,7 @@ dependencies = [ [[package]] name = "substrate-test-client" version = "2.0.1" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "async-trait", "futures 0.3.17", @@ -10341,7 +10361,7 @@ dependencies = [ [[package]] name = "substrate-test-utils" version = "4.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "futures 0.3.17", "substrate-test-utils-derive", @@ -10351,7 +10371,7 @@ dependencies = [ [[package]] name = "substrate-test-utils-derive" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "proc-macro-crate 1.1.0", "proc-macro2", @@ -10362,7 +10382,7 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" version = "5.0.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "ansi_term 0.12.1", "build-helper", @@ -10515,7 +10535,7 @@ dependencies = [ [[package]] name = "test-runner" version = "0.9.0" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "frame-system", "futures 0.3.17", @@ -10955,7 +10975,7 @@ checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "try-runtime-cli" version = "0.10.0-dev" -source = "git+https://github.com/paritytech/substrate?branch=master#4ecbb1f724801d142d1c0cd30ac30f4a62dca364" +source = "git+https://github.com/paritytech/substrate?branch=master#e6b015062e60cc713ed5b0158d8c540c231852dc" dependencies = [ "jsonrpsee-ws-client", "log", @@ -11507,8 +11527,11 @@ checksum = "21486cfb5255c2069666c1f116f9e949d4e35c9a494f11112fa407879e42198d" dependencies = [ "anyhow", "cfg-if 1.0.0", + "gimli", "lazy_static", "libc", + "object", + "scroll", "serde", "target-lexicon", "wasmtime-environ", diff --git a/runtime/kusama/src/weights/pallet_democracy.rs b/runtime/kusama/src/weights/pallet_democracy.rs index f6a4991a3fbb..4063e31905c2 100644 --- a/runtime/kusama/src/weights/pallet_democracy.rs +++ b/runtime/kusama/src/weights/pallet_democracy.rs @@ -129,6 +129,13 @@ impl pallet_democracy::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) } + fn on_initialize_base_with_launch_period(r: u32) -> Weight { + (7_295_000 as Weight) + // Standard Error: 4_000 + .saturating_add((5_093_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) + } fn delegate(r: u32) -> Weight { (54_128_000 as Weight) // Standard Error: 5_000 diff --git a/runtime/polkadot/src/weights/pallet_democracy.rs b/runtime/polkadot/src/weights/pallet_democracy.rs index 868ff527ec1d..f5af1c433b95 100644 --- a/runtime/polkadot/src/weights/pallet_democracy.rs +++ b/runtime/polkadot/src/weights/pallet_democracy.rs @@ -129,6 +129,13 @@ impl pallet_democracy::WeightInfo for WeightInfo { .saturating_add(T::DbWeight::get().reads(5 as Weight)) .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) } + fn on_initialize_base_with_launch_period(r: u32) -> Weight { + (7_728_000 as Weight) + // Standard Error: 4_000 + .saturating_add((5_099_000 as Weight).saturating_mul(r as Weight)) + .saturating_add(T::DbWeight::get().reads(5 as Weight)) + .saturating_add(T::DbWeight::get().reads((1 as Weight).saturating_mul(r as Weight))) + } fn delegate(r: u32) -> Weight { (53_667_000 as Weight) // Standard Error: 4_000